欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標(biāo)題: 51單片機(jī)掃地機(jī)器人程序有問題 [打印本頁]

作者: 小兔吃棗拼乎哩    時間: 2018-10-24 23:13
標(biāo)題: 51單片機(jī)掃地機(jī)器人程序有問題
請求大佬幫忙看一下程序 程序廢真的整不出來
我想的是這個小車可以直接用藍(lán)牙遙控(用手機(jī)app操控)著走動 也可以按一下app上一個按鍵(參考程序的case5)可以自動清掃 加了驅(qū)動 最小系統(tǒng) 避障模塊 就是程序整不了了 希望大佬們幫忙看一下 代碼沒有寫完 如下:
  1. #include<reg52.h>
  2. typedef unsigned int uint;
  3. typedef unsigned char uchar;

  4. sbit ZA1A=P1^0;
  5. sbit ZA1B=P1^1;
  6. sbit ZB1A=P1^2;
  7. sbit ZB1B=P1^3;
  8. sbit YA1A=P1^4;
  9. sbit YA1B=P1^5;
  10. sbit YB1A=P1^6;
  11. sbit YB1B=P1^7;
  12. sbit Trig = P3^2 ;
  13. sbit Echo = P3^3 ;



  14. uchar rev=0; //藍(lán)牙接收緩存值
  15. bit rok=0;        //接收標(biāo)志
  16. /********************************************************************
  17. * 名稱 :qianjin()
  18. * 功能 : 電機(jī)1、2啟動,都是前進(jìn),整車表現(xiàn)為前進(jìn)。
  19. * 輸入 : 無
  20. * 輸出 : 無                                                                       
  21. ***********************************************************************/
  22. void qianjin(){
  23.      ZA1A=0;
  24.          ZA1B=1;
  25.          ZB1A=0;
  26.      ZB1B=1;
  27.      YA1A=0;
  28.      YA1B=1;
  29.      YB1A=0;
  30.      YB1B=1;
  31. }
  32. void houtui(){
  33.          ZA1A=1;
  34.          ZA1B=0;
  35.          ZB1A=1;
  36.      ZB1B=0;
  37.      YA1A=1;
  38.      YA1B=0;
  39.      YB1A=1;
  40.      YB1B=0;
  41. }
  42. void zuozhuan(){
  43.          ZA1A=1;
  44.          ZA1B=0;
  45.          ZB1A=1;
  46.      ZB1B=0;
  47.      YA1A=0;
  48.      YA1B=1;
  49.      YB1A=0;
  50.      YB1B=1;
  51. }
  52. void youzhuan(){
  53.          ZA1A=0;
  54.          ZA1B=1;
  55.          ZB1A=0;
  56.      ZB1B=1;
  57.      YA1A=1;
  58.      YA1B=0;
  59.      YB1A=1;
  60.      YB1B=0;
  61. }

  62. void tingche(){
  63.             ZA1A=0;
  64.          ZA1B=0;
  65.          ZB1A=0;
  66.      ZB1B=0;
  67.      YA1A=0;
  68.      YA1B=0;
  69.      YB1A=0;
  70.      YB1B=0;
  71. }

  72. void chaoshengbo ()
  73. {
  74.     TR0=0;           //定時器開關(guān)
  75.         TH0=0;
  76.         TL0=0;

  77.     Trig=0;
  78.            Echo=0;
  79.         Trig=1;
  80.         DelayUs2x(20);
  81.         Trig=0;
  82.         while(Echo==0); //等待Echo回波引腳變高電平
  83.         TR0=1;           //定時器0開關(guān)打開
  84.         while(Echo); //等待
  85.         time=TH0*256+TL0; //*256是16位計數(shù)器的高8位和低八位之分.恢復(fù)成16位數(shù)的時候要*256。讀取脈寬長度
  86.         S=time*0.0172;  //(厘米)*0.0172,根據(jù)超聲的聲速,單片機(jī)的頻率,得出來的一個系數(shù).
  87.         if(S>400)S=400;
  88.   }

  89. void bizhang()                                                //避障功能
  90. {  
  91.       
  92.            if(S<=10)                  //距離小于15CM
  93.                    {
  94.                        tingche();          //小車停止
  95.                                            zuozhuan();
  96.                                            delay(1000);
  97.                                            chaoshengbo();
  98.                                            szuo=s;
  99.                                            youzhuan(2000);
  100.                                            chaoshengbo();
  101.                                            syou=s;
  102.                                            zuozhuan(1000);
  103.                                            if(szuo>=syou){
  104.                                               zuozhuan();
  105.                                                   delay(2000);
  106.                                                   else if(szuo<syou){
  107.                                                          youzhuan();
  108.                                                                  delay(2000);
  109.                                                   }
  110.                                            }
  111.                    }
  112.                    else if(S>15)                  //距離大于,30CM往前走
  113.                    qianjin();
  114.                           
  115.            }                     

  116. void suiyuanqingsao(){
  117. qianjin();
  118. }


  119. }

  120. void COMM( void ) //到達(dá)某一位置后左右前后測距判斷應(yīng)該怎么走
  121. {
  122. chaoshengbo();//超聲波測距如果還可以直行則直行,不能直行的話判斷應(yīng)該左轉(zhuǎn)還是右轉(zhuǎn)
  123. {if(s>5){
  124. qianjin();
  125. delay(500);
  126. zuoyouzhuanceju();
  127. }
  128. else if(){
  129. tingche();
  130. zuoyouzhaunceju();
  131. }
  132. }
  133. void zuoyouzhuanceju()
  134. {tingche();
  135. zuozhuan();
  136. delay(1000);//需要計算時間
  137. chaoshengbo(); //啟動超聲波測距
  138. S2=S;
  139. youzhuan();//小車向右轉(zhuǎn)180度
  140. delay(2000);
  141. chaoshengbo(); //啟動超聲波測距
  142. S4=S;
  143. zuozhuan();//測完距離后讓小車回到原前進(jìn)方向
  144. delay(1000);
  145. chaoshengbo() //啟動超聲波測距
  146. S1=S;
  147. if((S2<15)||(S4<15)) //只要左右各有距離小于15CM小車后退
  148. {
  149. houtui(); //后退
  150. }

  151. if(S2>S4)
  152. {
  153. youzhuan(); //車的左邊比車的右邊距離小 右轉(zhuǎn)
  154. delay(1000);
  155. }
  156. else
  157. {
  158. zuozhuan(); //車的左邊比車的右邊距離大 左轉(zhuǎn)
  159. delay(1000);
  160. }
  161. }

  162. /********************************************************************
  163. * 名稱 : Com_Init()
  164. * 功能 : 串口初始化,晶振11.0592,波特率9600,使串口中斷
  165. * 輸入 : 無
  166. * 輸出 : 無
  167. ***********************************************************************/
  168. void Com_Init(void)
  169. {
  170.         TMOD = 0x20;
  171.         PCON = 0x00;
  172.         SCON = 0x50; //0101 000設(shè)置串行口控制寄存器sm0,sm1為01,即為工作方式1
  173.         TH1 = 0xFd; //設(shè)置波特率 9600
  174.         TL1 = 0xFd;
  175.         TR1 = 1; //啟動定時器1
  176.         ES = 1; //開串口中斷
  177.         EA = 1; //開總中斷
  178. }

  179. void gongneng()
  180. {
  181.   switch(rev)
  182.                 {
  183.                         case '0': tingche(); break;
  184.                         case '1': qianjin(); break;
  185.                         case '2': houtui(); break;
  186.                         case '3': zuozhuan(); break;
  187.                         case '4': youzhuan(); break;
  188.             case ’5’:suiyuanqingsao();break;
  189.                         default:break;
  190.                 }
  191.   rok=0;
  192. }

  193. void main()
  194. {
  195.     Com_Init();//初始化                                                                                       
  196.     while(1)//循環(huán)結(jié)構(gòu),選擇函數(shù)控制小車的狀態(tài)
  197.         {
  198.           if(rok)gongneng();
  199.         }
  200. }
  201. /********************************************************************
  202. * 名稱 : Com_Int()
  203. * 功能 : 串口中斷子函數(shù)
  204. * 輸入 : 無
  205. * 輸出 : 無
  206. ***********************************************************************/
  207. void Com_Int(void) interrupt 4
  208. {
  209.         ES = 0;
  210.         if(RI) //當(dāng)硬件接收到一個數(shù)據(jù)時,RI會置位
  211.                 {
  212.                 rev=SBUF;
  213.                 RI = 0;//取消本次中斷申請,方便進(jìn)入下一次
  214.                 rok=1;
  215.                 }
  216.         ES = 1;               
  217. }
復(fù)制代碼




作者: 星試試    時間: 2019-5-26 18:52
你好   請問你這個硬件設(shè)計里有幾個電機(jī)啊




歡迎光臨 (http://m.raoushi.com/bbs/) Powered by Discuz! X3.1