久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 47111|回復(fù): 39
打印 上一主題 下一主題
收起左側(cè)

51單片機(jī)避障小車制作資料與問題解決(附源碼)

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:237538 發(fā)表于 2017-12-5 10:30 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
避障小車程序?qū)崿F(xiàn)功能:
1.藍(lán)牙控制,重力感應(yīng),通過串口通訊實現(xiàn)手機(jī)和藍(lán)牙之間的連接控制用到hc-06模塊
2.循跡壁障,遇見障礙能夠及時躲避,通過舵機(jī)帶動hc-sr04超聲波模塊的左右轉(zhuǎn)動來測量前左右的障礙
3.跟蹤,可以追蹤一個物體,物進(jìn)車進(jìn),物退車退
4.走黑線,不同顏色的物體對光的反射不同
4.pwm速度快慢調(diào)速,通過pwm調(diào)節(jié)l298n產(chǎn)生脈寬調(diào)制
5.開燈,通過手機(jī)控制單片機(jī)的io口輸出高低電頻實現(xiàn)
6.喇叭,高低電頻產(chǎn)生震蕩
********************************************************************************/
/********************************************************************************
避障小車出現(xiàn)的問題:
1.主要是定時器優(yōu)先級別問題,解決辦法調(diào)節(jié)定時器優(yōu)先級別,第一次掌握了定時器二的用法,這是52特有的
2.切記,定時器0不能和定時器1互換,因為定時器1優(yōu)先級沒有0高,互換會導(dǎo)致超聲波測距模塊接受不到數(shù)據(jù)
3.出現(xiàn)模塊從諜,的問題,解決辦法用標(biāo)記把可能出問題模塊一個一個標(biāo)記;最后發(fā)現(xiàn)原來是延時函數(shù)名字相同
4.字符串不能直接比較需要用if(strcmp(字符串,字符串2)==0)如果一樣就返回一個0,如果一比二大就返回
一個正數(shù)否則返回負(fù)數(shù)記住需要包含#include<string.h>頭文件
5.舵機(jī)不能兩個地方同時出現(xiàn)歸中,剛開始以為是定時器優(yōu)先級別的問題,打開定時器1串口通訊就會制動打開
所以我在串口函數(shù)里設(shè)了點亮led燈來測試串口中斷是否自己打開,然后我先是注釋ET1發(fā)現(xiàn)程序正常,
后面又注釋掉中斷3發(fā)現(xiàn)程序正常,說明不是定時器設(shè)置問題, 注釋掉中斷三里的內(nèi)容發(fā)現(xiàn)也正常說明不是中斷引起的
然后注釋掉舵機(jī)pwm調(diào)速,發(fā)現(xiàn)也正常說明不是小車檔位pwm的問題最后注釋掉小車快慢pwm調(diào)速,發(fā)現(xiàn)舵機(jī)函數(shù)有問題
然后注釋掉舵機(jī)pwm調(diào)速里的eles發(fā)現(xiàn)不正常,之后嘗試了改pwm輸出口的名字以及io口發(fā)現(xiàn)都沒用,最后拔掉舵機(jī)信號線
發(fā)現(xiàn)有用,說明舵機(jī)初始化有問題,最后把初始化里的歸中14,該成0,發(fā)現(xiàn)能正常運作,最后把初始化該成14,注釋掉
超聲波次主函數(shù)的歸中發(fā)現(xiàn)能正常運作,說明兩個歸中只能要一個。
結(jié)論;一點要細(xì)致認(rèn)真,勤于思考,碰到問題要迎難而上因為編程本來就是個改錯的過程別碰到問題就想著
問別人,因為自己的程序只有自己最了解,寫代碼一定要規(guī)范,免得到時后亂起來連自己都看不懂。
11月13日,吳才成

下面是制作的避障小車的實物圖:


51單片機(jī)避障小車源程序如下:
  1. #include<AT89X52.H>        
  2. #include<string.h>                        //字符串比較頭文件
  3. #include <intrins.h>                                //nop的頭文件
  4. #define Left_moto_go {P3_1=1,P3_2=0,P3_3=1,P3_4=0;}         //左邊兩個電機(jī)向前走
  5. #define Left_moto_back {P3_1=0,P3_2=1,P3_3=0,P3_4=1;}         //左邊兩個電機(jī)向后轉(zhuǎn)
  6. #define Left_moto_Stop {P3_1=0,P3_2=0,P3_3=0,P3_4=0;}         //左邊兩個電機(jī)停轉(zhuǎn)
  7. #define Right_moto_go {P1_4=1,P1_5=0,P1_6=1,P1_7=0  ;}         //右邊兩個電機(jī)向前走
  8. #define Right_moto_back {P1_4=0,P1_5=1,P1_6=0,P1_7=1;}         //右邊兩個電機(jī)向前走
  9. #define Right_moto_Stop {P1_4=0,P1_5=0,P1_6=0,P1_7=0;}         //右邊兩個電機(jī)停轉(zhuǎn) */
  10. /***************************************************************/
  11. //藍(lán)牙的設(shè)置
  12. /*****************************************************************/
  13. void zxddc ();   //轉(zhuǎn)向燈 后退 剎車指示燈
  14. void zxdzz ();         //轉(zhuǎn)向燈左轉(zhuǎn)
  15. void zxdyz ();          //轉(zhuǎn)向燈右轉(zhuǎn)
  16. void zxdgd ();         //轉(zhuǎn)向燈關(guān)燈
  17. sbit LEDHZ = P3^5;                                        //轉(zhuǎn)向燈左邊
  18. sbit LEDHY = P3^6;                                        //轉(zhuǎn)向燈右邊
  19. sbit LED1 = P1^0 ;                                        //左方向燈
  20. sbit LED2 = P1^1 ;                                        //右方向燈
  21. sbit  fmq = P1^2 ;                                        //喇叭,蜂鳴器
  22. int pwmjishu = 0 ;                                        //pwm調(diào)速
  23. int pushjishu = 0 ;                                    //pwm調(diào)速
  24. sbit ena1 = P2^7;
  25. sbit enb1 = P2^6;                                          //l298npwm調(diào)速引腳
  26. sbit ena2 = P2^5;
  27. sbit enb2 =        P2^4;
  28. unsigned char data table[4]={ 0,0,0,};//用來裝串口發(fā)送過來的字符串,不包括0
  29. /***************************************************************/
  30. //超聲波的設(shè)置
  31. /*********************************************************/
  32. #define CSBPWM P2_2                         //接舵機(jī)信號端輸入PWM信號調(diào)節(jié)速度
  33. #define ECHO P2_0                                 //超聲波接口定義
  34. #define TRIG P2_1                                 //超聲波接口定義
  35. unsigned char disdat[4]={ 0,0,0,0,};
  36. unsigned char pwm_val_left = 0;//變量定義
  37. unsigned char push_val_left =0;//14;//舵機(jī)歸中,產(chǎn)生約,1.5MS 信號
  38. unsigned long S=0;
  39. unsigned long S1=0;
  40. unsigned long S2=0;
  41. unsigned long S3=0;
  42. unsigned long S4=0;
  43. unsigned int time=0;                         //時間變量
  44. unsigned int timer=0;                         //延時基準(zhǔn)變量
  45. unsigned char timer1=0;                 //掃描時間變量


  46. void qianj(void)                //前進(jìn)
  47. {
  48.         Left_moto_go ;                         //左電機(jī)往前走
  49.         Right_moto_go ;                         //右電機(jī)往前走
  50. }
  51. /************************************************************************/
  52. //全速后退
  53. void hout(void)                                 //后退
  54. {
  55.         Left_moto_back ;                 //左電機(jī)往前走
  56.         Right_moto_back ;                 //右電機(jī)往前走
  57.         zxddc ();                                //后退指示燈
  58. }
  59. /*********************        ***************************************************/
  60. //左轉(zhuǎn)                                                  //左轉(zhuǎn)
  61. void zuoz(void)
  62. {
  63.         Left_moto_back ;                 //左電機(jī)往前走
  64.         Right_moto_go ;                 //右電機(jī)往前走
  65.         zxdzz ();                                //左轉(zhuǎn)指示燈
  66. }
  67. /************************************************************************/
  68. //右轉(zhuǎn)
  69. void youz(void)                                  //右轉(zhuǎn)
  70. {
  71.         Left_moto_go ;                         //左電機(jī)往前走
  72.         Right_moto_back ;                 //右電機(jī)往前走
  73.         zxdyz ();                                //右轉(zhuǎn)指示燈
  74. }
  75. /************************************************************************/
  76. //STOP
  77. void tingz(void)                           //停止
  78. {                                                  
  79.         Left_moto_Stop ;                 //左電機(jī)停走
  80.         Right_moto_Stop ;                 //右電機(jī)停走
  81.         zxdgd ();                                //車子停止指示燈關(guān)閉
  82. }
  83. /************************************************************************/
  84. /************************************************************************/
  85.   void delay1(unsigned int k) //延時函數(shù)
  86. {
  87.         unsigned int x,y;
  88.         for(x=0;x<k;x++)
  89.         for(y=0;y<2000;y++);
  90. }
  91. /******************************//*******************************************/
  92.          void delay_50us(unsigned int z)        //延時函數(shù)
  93. {
  94.         unsigned int x,y;
  95.         
  96.         for(x=z;x>0;x--)
  97.                 for(y=110;y>0;y--);
  98.         
  99. }        

  100. /*************************************************/

  101. void StartModule() //啟動測距信號
  102. {
  103.         TRIG=1; //給10us以上的高電頻
  104.         _nop_(); //_nop_()一個機(jī)器周期,1us
  105.         _nop_();
  106.         _nop_();
  107.         _nop_();
  108.         _nop_();
  109.         _nop_();
  110.         _nop_();
  111.         _nop_();
  112.         _nop_();
  113.         _nop_();
  114.         _nop_();
  115.         _nop_();
  116.         _nop_();
  117.         _nop_();
  118.         _nop_();
  119.         _nop_();
  120.         _nop_();
  121.         _nop_();
  122.         _nop_();
  123.         _nop_();
  124.         _nop_();
  125.         TRIG=0;
  126. }
  127. /***************************************************/
  128. /**************************************************/
  129. void Conut(void) //計算距離
  130. {
  131.                 while(!ECHO); //當(dāng)RX為零時等待
  132.                 TR0=1; //開啟計數(shù)
  133.                 while(ECHO); //當(dāng)RX為1計數(shù)并等待
  134.                 TR0=0; //關(guān)閉計數(shù)
  135.                 time=TH0*256+TL0; //讀取脈寬長度
  136.                 TH0=0;
  137.                 TL0=0;
  138.                 S=(time*1.7)/100; //算出來是CM

  139. }


  140. void COMM( void )         //方向計算
  141. {


  142.         push_val_left=5; //舵機(jī)向左轉(zhuǎn)90度
  143.         timer=0;
  144.         while(timer<=4000); //延時400MS讓舵機(jī)轉(zhuǎn)到其位置
  145.         StartModule(); //啟動超聲波測距
  146.         Conut(); //計算距離
  147.         S2=S;
  148.         
  149.         push_val_left=23; //舵機(jī)向右轉(zhuǎn)90度
  150.         timer=0;
  151.         while(timer<=4000); //延時400MS讓舵機(jī)轉(zhuǎn)到其位置
  152.         StartModule(); //啟動超聲波測距
  153.         Conut(); //計算距離
  154.         S4=S;
  155.         push_val_left=14; //舵機(jī)歸中
  156.         timer=0;
  157.         while(timer<=4000); //延時400MS讓舵機(jī)轉(zhuǎn)到其位置
  158.         StartModule(); //啟動超聲波測距
  159.         Conut(); //計算距離
  160.         S1=S;
  161.         if((S2<20)||(S4<20)) //只要左右各有距離小于20CM小車后退
  162.         {
  163.                 hout(); //后退
  164.                 timer=0;
  165.                 while(timer<=4000);
  166.         }

  167.         if(S2>S4)
  168.         {
  169.                 youz(); //車的左邊比車的右邊距離小 右轉(zhuǎn)
  170.                 timer=0;
  171.                 while(timer<=4000);
  172.         }
  173.         else
  174.         {
  175.                         zuoz(); //車的左邊比車的右邊距離大 左轉(zhuǎn)
  176.                         timer=0;
  177.                 while(timer<=4000);
  178.         }
  179. }

  180. /**********************************************************************************
  181. 舵機(jī)pwm調(diào)速,和小車換擋調(diào)速共用一個定時器
  182. ***********************************************************************************/
  183. void pwm_Servomoto()
  184. {
  185.         
  186.         if(pwm_val_left<=push_val_left)
  187.         CSBPWM=1;
  188.         else
  189.         CSBPWM=0;
  190.         if(pwm_val_left>=200)
  191.         pwm_val_left=0;         

  192. }


  193. /************************************************************/
  194. void Delay(unsigned int i)
  195. {
  196.         char j;
  197.         for(i; i > 0; i--)
  198.                 for(j = 200; j > 0; j--);
  199. }
  200. /*****************************************************************/
  201. void fangx()         //方向函數(shù)
  202. {
  203.                 if(strcmp(table,"ONA")==0)      qianj();//前進(jìn)

  204.                 else if(strcmp(table,"ONB")==0) hout();//后退

  205.                 else if(strcmp(table,"ONC")==0)  zuoz();//左轉(zhuǎn)
  206.                
  207.                 else if(strcmp(table,"OND")==0)  youz ();//右轉(zhuǎn)

  208.                 else tingz();//停止
  209.                                        

  210.         //         if((a[0]=='O')&&(a[1]='N')&&(a[2]=='A')&&(a[3]==0)) qianj();
  211.                 /*if(a=="ONA")qianj();//前進(jìn) 總結(jié)字符串不能用==比較需要調(diào)用內(nèi)部庫函數(shù)

  212.                 else if(a=="ONB") hout();//后退

  213.                 else if(a=="ONC") zuoz();//左轉(zhuǎn)
  214.                
  215.                 else if(a=="OND") youz();//右轉(zhuǎn)
  216.    
  217.                 else tingz();//停止        */        
  218. }               
  219. /*****************************************************************************/
  220. void dangwei()           //檔位函數(shù)
  221. {
  222.         if (strcmp(table,"ON1") ==0 )
  223.                 pushjishu=0;
  224.         if (strcmp(table,"ON2") ==0 )                         //判斷是否按下按鍵
  225.                 {
  226.                         //pushjishu=pushjishu+10;
  227.                         pushjishu+=10;                                        //x+=y;相當(dāng)與x=x+y;這樣使程序更精煉
  228.                   while (strcmp(table,"ON2") ==0 ); //當(dāng)按鍵按下的時候進(jìn)入while循環(huán)執(zhí)行分號空語句,
  229.                                                                                           //當(dāng)按鍵是釋放跳出while循環(huán),很好的使按鍵按下一次執(zhí)行一次,不會跑飛
  230.                 }
  231.         if (strcmp(table,"ON3") ==0 )
  232.                 {
  233.                         //pushjishu=pushjishu-10;
  234.                    pushjishu-=10;
  235.                         while (strcmp(table,"ON3") ==0 );
  236.                 }
  237.   /*         if (strcmp(table,"ON4") ==0 )
  238.                 pushjishu=105;
  239.         /*if(strcmp(table,"ON5")==0)
  240.                 pushjishu=160;
  241.         if(strcmp(table,"ON6")==0)
  242.                 pushjishu=200;        */
  243. }
  244. /**************************************************************************/
  245. void zxddc ()   //轉(zhuǎn)向燈 后退 剎車指示燈 。函數(shù)需要在前面聲明,因為電機(jī)函數(shù)定義在此函數(shù)前面,在電機(jī)函數(shù)調(diào)用此函數(shù)會出現(xiàn)錯誤
  246. {
  247.         LEDHZ = 0;
  248.         LEDHY = 0;
  249. }
  250. void zxdzz ()         //轉(zhuǎn)向燈左轉(zhuǎn)
  251. {
  252.         LEDHZ = 0;
  253.         LEDHY = 1;
  254. }
  255. void zxdyz ()          //轉(zhuǎn)向燈右轉(zhuǎn)
  256. {
  257.         LEDHZ = 1;
  258.         LEDHY = 0;
  259. }
  260. void zxdgd ()         //轉(zhuǎn)向燈關(guān)燈
  261. {

  262.         LEDHZ = 1;
  263.         LEDHY = 1;
  264. }
  265. /***************************************************************************/
  266. void kaideng()        //開前大燈燈函數(shù)
  267. {                                                                                
  268.         if ( strcmp(table,"ON7") == 0 )        //開燈
  269.     {
  270.                 LED1=0;
  271.                 LED2=0;
  272.         }
  273.          if ( strcmp(table,"ON8") == 0 )//關(guān)燈
  274.     {
  275.                 LED1=1;
  276.                 LED2=1;
  277.         }
  278. }
  279. /*************************************************************************/
  280. void laba()
  281. {
  282.         if(strcmp(table,"ON9")==0)
  283.         {
  284.                 fmq = 1;           //給高電平
  285.                 Delay(5);           //延時
  286.                 fmq = 0;           //給低電平
  287.                 Delay(5);        
  288.         }
  289. }
  290. /**********************************************************/
  291. void pwm(void)//小車快慢pwm調(diào)速,是通過l298n完成的
  292. {

  293. if(pwmjishu<=pushjishu)        
  294.         {
  295.                 ena1 = 0;
  296.                 enb1 = 0;
  297.                 ena2 = 0;
  298.                 enb2 = 0;    //l298n,實現(xiàn)pwm調(diào)速,當(dāng)給高電頻的時候io引腳有效,給低電平時無效
  299.         }        
  300.         else
  301.         {
  302.                 ena1 = 1 ;
  303.                 enb1 = 1 ;
  304.                 ena2 = 1 ;
  305.                 enb2 = 1 ;     
  306.         }

  307. if(pwmjishu >= 200)
  308.         pwmjishu = 0;

  309. }
  310. /*******************************************************************************
  311. 超聲波魔術(shù)手程序
  312. *******************************************************************************/
  313. void moss ()
  314. {
  315.         Delay (100);
  316.         push_val_left=14; //舵機(jī)歸中
  317.         while(1) /*無限循環(huán)*/
  318.         {         
  319.             dangwei();//檔位        
  320.                 if(strcmp(table,"ON6")==0)        //判斷按鍵 是否按下如果按下就退出csbmian函數(shù),return結(jié)束函數(shù)
  321.                         return;        
  322.                 if(timer>=1000) //100MS檢測啟動檢測一次
  323.                 {
  324.                         timer=0;
  325.                         StartModule(); //啟動檢測
  326.                         Conut(); //計算距離
  327.                         if(S<10) //距離小于20CM
  328.                                 hout(); //小車停止
  329.                         if(20>S&&S>10) //距離小于20CM
  330.                                 tingz();
  331.                         if(30>S&&S>20) //距離大于,30CM往前走
  332.                                 qianj();
  333.                         else
  334.                          if(S>35)
  335.                                 tingz();
  336.                 }        
  337.         }
  338. }
  339. /****************************************
  340. 超聲波壁障主函數(shù)
  341. /***************************************************************/

  342. /*        delay_50us(500);
  343.         TMOD=0X11;
  344.         TH1=(65536-100)/256; //100US定時
  345.         TL1=(65536-100)%256;
  346.         TH0=0;
  347.         TL0=0;
  348.         TR1= 1;
  349.         ET1= 1;
  350.         ET0= 1;
  351.         EA = 1; */        
  352. void csbmian ()
  353. {

  354.         timer=0;
  355.     push_val_left=14; /*舵機(jī)歸中,在初始化的時候歸要不在這歸中,如果兩個地方貴在程序就會出現(xiàn)毛病                                                兩個地方
  356.                                                 同時歸中串口中斷無緣無辜的會打開,導(dǎo)致車子不能串口通訊, */
  357.         delay1(50);
  358.         while(1) //無限循環(huán)//
  359.         {         
  360.                    dangwei();//檔位               
  361.                    kaideng();  //開燈函數(shù)
  362.                    laba();         //鳴笛函數(shù)
  363.          
  364.                     if(strcmp(table,"ON6")==0)        //判斷按鍵 是否按下如果按下就退出csbmian函數(shù),return結(jié)束函數(shù)
  365.                                         return;
  366.         
  367.                         if(timer>=1000) //100MS檢測啟動檢測一次
  368.                         {
  369.                                 timer=0;
  370.                                 StartModule(); //啟動檢測
  371.                                 Conut(); //計算距離
  372.                                 if(S<45) //距離小于20CM
  373.                                 {
  374.                                         hout();
  375.                                         hout();         //剎車
  376.                                         hout();
  377.                                         tingz(); //小車停止
  378.                                         COMM(); //方向函數(shù)
  379.                                 }
  380.                                 else
  381.                                         if(S>45) //距離大于,30CM往前走
  382.                                         qianj();
  383.                         }
  384.         }
  385. }
  386.    
  387. /**********************************************************/
  388. void main()
  389. {         
  390.           T2CON=0x30; //設(shè)置定時器二為串口波特率模式
  391.           SCON=0x50;  //設(shè)置串口方式為1
  392.           RCAP2H=0xff;
  393.           RCAP2L=0xdc; //定時器二自動裝初值16位
  394.           TH2=0xff;
  395.           TL2=0xdc;                //定時器二
  396.           TR2=1;                    //啟動定時器2
  397.           ES=1;                           //打開串口中斷
  398.           PS=1;                           //串口優(yōu)先級設(shè)置為最高

  399.           TMOD=0X11;         //打開定時器0和定時器1,工作做方式一
  400.           TH1=(65536-100)/256; //100US定時
  401.           TL1=(65536-100)%256;
  402.           ET1=1 ;                         //打開定時器一中斷
  403.           TR1=1 ;                         //啟動定時器一
  404.           TH0=0;                   //定時器0初始化
  405.           TL0=0;                   //切記定時器0不能和定時器一互換,因為定時器0優(yōu)先級比1高,如果換了以后就不能接收超聲波了
  406.       ET0=1;                 //打開定時器0中斷
  407.           EA=1;                          //打開總中斷        
  408.                               
  409.                            

  410.                                     
  411. /*  T2CON=0x30;
  412.           SCON=0x50;  //設(shè)置串口方式為1
  413.           RCAP2H=0xff;
  414.           RCAP2L=0xdc;
  415.           TH2=0xff;
  416.           TL2=0xdc;
  417.           TMOD=0X11;         //打開定時器0和定時器1,工作做方式一
  418.           TH1=(65536-100)/256; //100US定時
  419.           TL1=(65536-100)%256;
  420.           TH0=0;                   //定時器0初始化
  421.           TL0=0;
  422.           ET1=1 ;
  423.           ET0= 1;                 //打開定時器0中斷
  424.           TR2=1;
  425.           ES=1;
  426.           PS=1;        
  427.           EA=1;

  428. /*******************************************/
  429. /*        TMOD=0X11;
  430.         TH1=(65536-100)/256; //100US定時
  431.         TL1=(65536-100)%256;
  432.         TH0=0;
  433.         TL0=0;
  434.         TR1= 1;
  435.         ET1= 1;
  436.         ET0= 1;
  437.           EA=1;                                //總開關(guān)
  438. /******************************************/
  439.    //單獨藍(lán)牙的串口設(shè)置
  440. /******************************************/
  441.         /*TMOD=0x21;//定時器1工作方式2,8位自動重裝  
  442.         TH0=(65536-100)/256; //100US定時
  443.         TL0=(65536-100)%256;
  444.     TH1=0xFd; //11.0592M晶振,9600波特率 
  445.     TL1=0xFd;
  446.         PS=1;
  447.         ET0=1 ;
  448.         TR0=1 ;
  449.         TR1=1 ;//打開定時器1
  450.     SM0=0 ;//串口方式1 SM0 SM1 01 允許接收  
  451.     SM1=1 ;//SMOD=0 16分頻
  452.     REN=1 ;
  453.         ES=1 ;//打開串口中斷   
  454.     EA=1;//開總中斷  */
  455.     //以上跟串口通信初始化有關(guān)

  456.         while(1)
  457.         {
  458.           dangwei();//檔位               
  459.           fangx();    //方向函數(shù)
  460.           kaideng();  //開燈函數(shù)
  461.           laba();         //鳴笛函數(shù)

  462.           if(strcmp(table,"ON5")==0)//判斷是否按下第五個按鍵,按下則啟動超聲波模式
  463.            csbmian ();          //超聲波模塊的主函數(shù)
  464.           if(strcmp(table,"ON4")==0)//判斷是否按下第四個按鍵,按下則啟動超聲波魔術(shù)手
  465.            moss ();          //超聲波魔術(shù)手模塊的主函數(shù)
  466.          }
  467. }
  468. /***************************************************/
  469. ///*TIMER1中斷服務(wù)子函數(shù)產(chǎn)生PWM信號*/
  470. void pwmdins()interrupt 3           //定時器一,優(yōu)先級別最低
  471. {

  472.         TH1=(65536-100)/256;                                         //100US定時
  473.         TL1=(65536-100)%256;  
  474.         pwmjishu++;                                                           // 小車快慢的pwm調(diào)速
  475.         pwm();                                                                    //小車快慢的pwm函數(shù)
  476.         timer++;                                                 //超聲波的基準(zhǔn) 定時器100US為準(zhǔn)。在這個基礎(chǔ)上延時
  477.         pwm_val_left++;                                         //舵機(jī)的pwm調(diào)速基準(zhǔn)時間
  478.         pwm_Servomoto();                                 //舵機(jī)pwm調(diào)速函數(shù)

  479. }
  480. /***************************************************/
  481. ///*TIMER0中斷服務(wù)子函數(shù)產(chǎn)生PWM信號*/
  482. void timer0()interrupt 1                 //因為串口優(yōu)先級別變最高所以定時器0位第二高
  483. {

  484. }
  485. /***************************************************/

  486.    void serial() interrupt 4      //中斷子函數(shù)          //ps=1;使之優(yōu)先級最高
  487. {
  488.         int i;
  489.         ES=0;                                   //關(guān)閉串口中斷,其實不關(guān)也沒影響
  490.         table[i++]=SBUF;           //數(shù)組下標(biāo)加一,把字符串變成字符字單個取出存入數(shù)組,使之成為一元素
  491.         if(i==3)                           //字符串有三個字符,不包括標(biāo)志位0
  492.         i=0;                                  //使之清零以便下次從收
  493.         RI=0;                                  //串口標(biāo)志位硬件制一,手動清零
  494.         ES=1;                                  //打開串口                        
  495. …………
  496. …………
  497. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復(fù)制代碼

原理圖: 無
仿真: 無
代碼:
寶馬自動駕駛.zip (53.9 KB, 下載次數(shù): 509)


評分

參與人數(shù) 1黑幣 +100 收起 理由
admin + 100 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏25 分享淘帖 頂9 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:1 發(fā)表于 2017-12-5 14:20 | 只看該作者
好資料,51黑有你更精彩!!!
回復(fù)

使用道具 舉報

板凳
ID:171111 發(fā)表于 2018-5-1 22:10 | 只看該作者
謝謝樓主    資料真好
回復(fù)

使用道具 舉報

地板
ID:322672 發(fā)表于 2018-5-5 12:12 | 只看該作者
手動點贊
回復(fù)

使用道具 舉報

5#
ID:77866 發(fā)表于 2018-5-8 16:59 | 只看該作者
謝謝樓主,提供資料,解決了急需問題
回復(fù)

使用道具 舉報

6#
ID:269454 發(fā)表于 2018-7-20 17:11 | 只看該作者
能不能發(fā)下電路圖
回復(fù)

使用道具 舉報

7#
ID:376635 發(fā)表于 2018-7-21 15:26 | 只看該作者
資料挺不錯的,感謝
回復(fù)

使用道具 舉報

8#
ID:393768 發(fā)表于 2018-9-4 22:36 | 只看該作者
厲害哦
回復(fù)

使用道具 舉報

9#
ID:394168 發(fā)表于 2018-9-6 01:50 | 只看該作者
下載了沒搞明白怎么弄
回復(fù)

使用道具 舉報

10#
ID:400222 發(fā)表于 2018-9-19 20:09 來自手機(jī) | 只看該作者
有沒有制作小車的材料清單
回復(fù)

使用道具 舉報

11#
ID:406979 發(fā)表于 2018-10-9 13:22 | 只看該作者
謝謝樓主好東西
回復(fù)

使用道具 舉報

12#
ID:409750 發(fā)表于 2018-10-15 09:36 來自手機(jī) | 只看該作者
能不能發(fā)下電路圖
回復(fù)

使用道具 舉報

13#
ID:405273 發(fā)表于 2018-10-17 11:31 | 只看該作者
我從論壇下載的資料為啥打不開啊
keil4 keil3都打不開啊

回復(fù)

使用道具 舉報

14#
ID:405273 發(fā)表于 2018-10-17 14:26 | 只看該作者
已解決 謝謝 文件夾名字的問題
回復(fù)

使用道具 舉報

15#
ID:413969 發(fā)表于 2018-10-23 12:54 | 只看該作者
不錯 學(xué)習(xí)學(xué)習(xí)
回復(fù)

使用道具 舉報

16#
ID:430125 發(fā)表于 2018-11-20 19:41 | 只看該作者
感謝樓主,來學(xué)習(xí)了
回復(fù)

使用道具 舉報

17#
ID:434555 發(fā)表于 2018-11-27 21:34 | 只看該作者
資料真好
回復(fù)

使用道具 舉報

18#
ID:436792 發(fā)表于 2018-11-30 20:31 | 只看該作者
人才,好資料,謝謝樓主分享
回復(fù)

使用道具 舉報

19#
ID:436792 發(fā)表于 2018-11-30 20:49 | 只看該作者
好資料
回復(fù)

使用道具 舉報

20#
ID:443011 發(fā)表于 2018-12-10 09:06 | 只看該作者
贊一個
回復(fù)

使用道具 舉報

21#
ID:483314 發(fā)表于 2019-3-2 17:07 | 只看該作者
可以的對我?guī)椭艽?/td>
回復(fù)

使用道具 舉報

22#
ID:482489 發(fā)表于 2019-3-16 18:54 | 只看該作者

資料真好
回復(fù)

使用道具 舉報

23#
ID:495816 發(fā)表于 2019-3-21 23:26 | 只看該作者
不錯,學(xué)習(xí)學(xué)習(xí)
回復(fù)

使用道具 舉報

24#
ID:511444 發(fā)表于 2019-4-13 19:44 | 只看該作者
感謝樓主分享
回復(fù)

使用道具 舉報

25#
ID:300463 發(fā)表于 2019-4-16 15:49 | 只看該作者
剛好在調(diào)試小車  謝謝了
回復(fù)

使用道具 舉報

26#
ID:431514 發(fā)表于 2019-4-29 07:45 | 只看該作者
有沒有制作小車的材料清單
回復(fù)

使用道具 舉報

27#
ID:414113 發(fā)表于 2019-4-29 16:18 | 只看該作者
感謝樓主分享,慢慢學(xué)習(xí)中
回復(fù)

使用道具 舉報

28#
ID:431514 發(fā)表于 2019-5-2 09:04 | 只看該作者
下載了沒搞明白怎么弄
回復(fù)

使用道具 舉報

29#
ID:538080 發(fā)表于 2019-5-18 08:30 | 只看該作者
這個可以呀
回復(fù)

使用道具 舉報

30#
ID:704712 發(fā)表于 2020-3-9 17:26 | 只看該作者
沒有原理圖呢
回復(fù)

使用道具 舉報

31#
ID:707535 發(fā)表于 2020-3-14 13:42 | 只看該作者
求元件庫和封裝庫
回復(fù)

使用道具 舉報

32#
ID:702493 發(fā)表于 2020-3-14 15:29 | 只看該作者
樓主,我最近也在玩這個,遇到點問題。
程序沒有有關(guān)超聲波的內(nèi)容,只是一個直走的命令,但HC-SR04超聲波模塊連在單片機(jī)上,小車不走。
拔掉echo端口,小車直走。
檢查超聲波模塊,超聲波模塊完好,收發(fā)端未接反。
這什么原因啊?求解答。
網(wǎng)上實在是找不到資料,都卡半個月了,以上問題你也遇到過嗎?
回復(fù)

使用道具 舉報

33#
ID:712292 發(fā)表于 2020-3-20 15:17 | 只看該作者
謝謝大神~
回復(fù)

使用道具 舉報

34#
ID:713570 發(fā)表于 2020-3-23 16:53 來自手機(jī) | 只看該作者
樓主有沒有電路圖
回復(fù)

使用道具 舉報

35#
ID:713570 發(fā)表于 2020-3-23 16:54 來自手機(jī) | 只看該作者
ghdok 發(fā)表于 2019-4-16 15:49
剛好在調(diào)試小車  謝謝了

有沒有電路圖,求電路圖
回復(fù)

使用道具 舉報

36#
ID:712292 發(fā)表于 2020-4-25 22:31 | 只看該作者
感謝樓主分享,謝謝大師
回復(fù)

使用道具 舉報

37#
ID:695362 發(fā)表于 2020-4-30 11:03 | 只看該作者
謝謝樓主分享
回復(fù)

使用道具 舉報

38#
ID:608763 發(fā)表于 2020-6-2 15:06 | 只看該作者
手動點贊
回復(fù)

使用道具 舉報

39#
ID:1107666 發(fā)表于 2024-1-13 01:51 | 只看該作者
感謝樓主,正好在看51避障
回復(fù)

使用道具 舉報

40#
ID:211360 發(fā)表于 2024-1-20 11:52 | 只看該作者
非常感謝!希望能有更全面的資料
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 亚洲成人一区二区 | 国产欧美在线 | 久久久久久www | 免费毛片在线 | 欧美精品在线观看 | 亚洲图片一区二区三区 | 久久精品国产一区二区三区不卡 | 亚洲性免费| 视频一区二区在线观看 | 91中文字幕在线 | 日日干日日射 | 成年人国产在线观看 | 精品一区二区久久久久久久网站 | 99色视频| 国产精品美女久久久久aⅴ国产馆 | 国产欧美一区二区久久性色99 | 日韩高清一区 | 亚洲成人免费视频在线观看 | 欧美激情综合 | 九九久久精品 | 中文在线播放 | 成人精品一区二区三区 | 99热精品在线观看 | www.99精品 | 国产成人在线一区二区 | 夜夜骑天天干 | 五月天国产视频 | 一区欧美 | 久久精品一区二区 | 国产欧美在线观看 | 精国产品一区二区三区四季综 | 一区二区三区韩国 | www.99热这里只有精品 | 欧美精品在线视频 | 午夜视频在线观看网站 | 成人影 | 国产乱码精品一区二区三区中文 | 国产精品九九 | 日日日干干干 | 国产免费国产 | 久久伊人一区二区 |