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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

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

基于51單片機(jī)超聲波避障+藍(lán)牙遙控智能小車

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
超聲波避障+藍(lán)牙遙控智能小車


單片機(jī)源程序如下:
  1. #include<reg52.h>
  2. #include <intrins.h>
  3. typedef unsigned char u8;
  4. typedef unsigned int  u16;
  5. typedef unsigned long  u32;
  6. sbit Sevro_moto_pwm = P2^6;           //接舵機(jī)信號(hào)端輸入PWM信號(hào)調(diào)節(jié)速度
  7. sbit  ECHO= P1^1;                                   //超聲波接口定義           
  8. sbit  TRIG= P1^0;                                   //超聲波接口定義
  9. sbit PWM1 = P2^5;          //左電機(jī)高電平
  10. sbit PWM2 = P2^4;          //右電機(jī)高電平
  11. sbit IN1 = P2^3;
  12. sbit IN2 = P2^2;          //左電機(jī)
  13. sbit IN3 = P2^1;
  14. sbit IN4 = P2^0;          //右電機(jī)
  15. sbit A1 = P1^4;                  //左紅外避障模塊
  16. sbit A2 = P2^7;                  //右紅外避障模塊
  17. //sbit A3 = P1^2;                  //左紅外尋跡模塊
  18. //sbit A4 = P1^3;                  //右紅外尋跡模塊
  19. sbit K1 = P3^2;                  //功能轉(zhuǎn)換按鍵
  20. sbit K2 = P3^3;                  //加速鍵
  21. sbit K3 = P3^4;          //減速鍵
  22. u8 connt;                          //調(diào)速周期
  23. u8 PWM_NO;                          //高電平時(shí)間
  24. u8 a=0,c=0;                          //標(biāo)志位
  25. u8 COM;
  26. u8 pwm_val_left  = 0;//變量定義
  27. u8 push_val_left ;//舵機(jī)歸中,產(chǎn)生約,1.5MS 信號(hào)
  28. u32 S=0;                        //距離變量定義
  29. u32 S1=0;
  30. u32 S2=0;
  31. u32 S3=0;
  32. u32 S4=0;
  33. u16 time=0;                    //時(shí)間變量
  34. u16 timer=0;                        //延時(shí)基準(zhǔn)變量
  35. u8 non=0,t=0;
  36. u8 pon=3;                                //數(shù)碼管顯示
  37. u8 code smgduan[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
  38.                                         0x7f,0x6f};//顯示0~9的值
  39.                                        
  40. /************************************************************************/
  41.                  void delay(u16 k)          //延時(shí)函數(shù)
  42. {   
  43.      u16 x,y;
  44.            for(x=0;x<k;x++)
  45.              for(y=0;y<2000;y++);
  46. }
  47. void delay1(u16 j)          //延時(shí)函數(shù)
  48. {   
  49.      u16 x,y;
  50.            for(x=0;x<j;x++)
  51.              for(y=0;y<120;y++);
  52. }
  53. /************************************************************************/
  54. void Display(void)                                  //掃描數(shù)碼管
  55. {
  56.          P0=smgduan[pon];
  57.          if(K2==0)                                           // 加速
  58.          {
  59.              delay1(10);
  60.                  if(K2==0)
  61.                  {
  62.                      pon++;
  63.                          PWM_NO--;
  64.                  }
  65.                  while(!K2);                           //松鍵檢測(cè)
  66.          }
  67.          if(K3==0)                                           //減速
  68.          {
  69.              delay1(10);
  70.                  if(K3==0)
  71.                  {
  72.                      pon--;
  73.                          PWM_NO++;
  74.                  }
  75.                  while(!K3);
  76.          }
  77. }
  78. void SC()                                //剎車
  79. {
  80.     IN1 = 0;   
  81.          IN2 = 0;
  82.         IN3 = 0;
  83.         IN4 = 0;
  84. }
  85. void QJ()                                //前進(jìn)
  86. {
  87.     IN1 = 1;   
  88.          IN2 = 0;
  89.         IN3 = 1;
  90.         IN4 = 0;
  91. }
  92. void HT()                                //后退
  93. {
  94.     IN1 = 0;   
  95.          IN2 = 1;
  96.         IN3 = 0;
  97.         IN4 = 1;
  98. }
  99. void ZZ1()                                //左大轉(zhuǎn)
  100. {
  101.     IN1 = 0;   
  102.          IN2 = 1;
  103.         IN3 = 1;
  104.         IN4 = 0;
  105. }

  106. void YZ1()                                //右大轉(zhuǎn)
  107. {
  108.     IN1 = 1;   
  109.          IN2 = 0;
  110.         IN3 = 0;
  111.         IN4 = 1;
  112. }

  113. /************************************************************************/
  114.      void  StartModule()                       //啟動(dòng)測(cè)距信號(hào)
  115.    {         
  116.           TRIG=1;                                       
  117.           _nop_();
  118.           _nop_();
  119.           _nop_();
  120.           _nop_();
  121.           _nop_();
  122.           _nop_();
  123.           _nop_();
  124.           _nop_();
  125.           _nop_();
  126.           _nop_();
  127.           _nop_();
  128.           _nop_();
  129.           _nop_();
  130.           _nop_();
  131.           _nop_();
  132.           _nop_();
  133.           _nop_();
  134.           _nop_();
  135.           _nop_();
  136.           _nop_();
  137.           _nop_();
  138.           TRIG=0;
  139.          
  140.    }

  141. void InitUART(void)                 //串口中斷初始化函數(shù)
  142. {
  143.     SCON=0x50;                        //設(shè)置為工作方式1
  144.         TMOD=0x20;                        //設(shè)置計(jì)數(shù)器工作方式2
  145.         PCON=0x00;                        //波特率不加倍
  146.         TH1=0xfd;                                //計(jì)數(shù)器初始值設(shè)置,注意波特率是9600的
  147.         TL1=0xfd;
  148.         ES=1;                                                //打開接收中斷
  149.         EA=1;                                                //打開總中斷
  150.         TR1=1;                                        //打開計(jì)數(shù)器
  151.         
  152. }
  153. /***************************************************/
  154.           void Conut(void)                   //計(jì)算距離
  155.         {
  156.           while(!ECHO);                       //當(dāng)RX為零時(shí)等待
  157.           TR1=1;                               //開啟計(jì)數(shù)
  158.           while(ECHO);                           //當(dāng)RX為1計(jì)數(shù)并等待
  159.           TR1=0;                                   //關(guān)閉計(jì)數(shù)
  160.           time=TH1*256+TL1;                   //讀取脈寬長(zhǎng)度
  161.           TH1=0;
  162.           TL1=0;
  163.           S=(time*1.7)/100;        //算出來是CM
  164.          
  165.         }

  166. /************************************************************************/
  167. void  COMM( void )                       
  168.   {
  169.                
  170.                   push_val_left=23;          //舵機(jī)向左轉(zhuǎn)90度
  171.                   timer=0;
  172.                   while(timer<=4000); //延時(shí)400MS讓舵機(jī)轉(zhuǎn)到其位置                 4000
  173.                   StartModule();          //啟動(dòng)超聲波測(cè)距
  174.           Conut();                           //計(jì)算距離
  175.                   S2=S;  
  176.   
  177.                   push_val_left=5;          //舵機(jī)向右轉(zhuǎn)90度
  178.                   timer=0;
  179.                   while(timer<=4000); //延時(shí)400MS讓舵機(jī)轉(zhuǎn)到其位置
  180.                   StartModule();          //啟動(dòng)超聲波測(cè)距
  181.           Conut();                          //計(jì)算距離
  182.                   S4=S;         
  183.         

  184.                   push_val_left=14;          //舵機(jī)歸中
  185.                   timer=0;
  186.                   while(timer<=4000); //延時(shí)400MS讓舵機(jī)轉(zhuǎn)到其位置

  187.                   StartModule();          //啟動(dòng)超聲波測(cè)距
  188.           Conut();                          //計(jì)算距離
  189.                   S1=S;         

  190.           if((S2<20)||(S4<20)||(S1<20)) //只要左右各有距離小于,20CM小車后退
  191.                   {
  192.                   HT();                   //后退
  193.                   timer=0;
  194.                   while(timer<=4000);
  195.                   }
  196.                   if((S2<20)&&(S4<20)&&(S1<20)) //只要左右各有距離小于,20CM小車后退
  197.                   {
  198.                   HT();                   //后退
  199.                   timer=0;
  200.                   while(timer<=4000);
  201.                   }
  202.                   
  203.                   if(S2>S4)                 
  204.                      {
  205.                                 ZZ1();          //車的左邊比車的右邊距離小        右轉(zhuǎn)        
  206.                         timer=0;
  207.                         while(timer<=4000);
  208.                      }                                      
  209.                        else
  210.                      {
  211.                        YZ1();                //車的左邊比車的右邊距離大        左轉(zhuǎn)
  212.                        timer=0;
  213.                        while(timer<=4000);
  214.                      }
  215.                
  216.                                              

  217. }

  218. /************************************************************************/
  219. /*                    PWM調(diào)制舵機(jī)轉(zhuǎn)速                                   */
  220. /************************************************************************/
  221. /*                    舵機(jī)調(diào)速                                        */
  222. /*調(diào)節(jié)push_val_left的值改變電機(jī)轉(zhuǎn)速,占空比            */
  223. void pwm_Servomoto(void)
  224. {  

  225.     if(pwm_val_left <= push_val_left)
  226.                Sevro_moto_pwm=1;
  227.         else
  228.                Sevro_moto_pwm=0;
  229.         if(pwm_val_left>=100)
  230.         pwm_val_left=0;

  231. }
  232. void minm()                                  //按鈕控制功能轉(zhuǎn)換
  233. {
  234.      COM=0;
  235.          if(K1==0)
  236.          {
  237.              delay1(10);
  238.                  if(K1==0)
  239.                  {
  240.                      COM++;
  241.                  }
  242.                  while(!K1);   
  243.          }
  244.          if(COM==4)
  245.          COM=0;

  246. }

  247. /***************************************************/
  248. ///*TIMER1中斷服務(wù)子函數(shù)產(chǎn)生PWM信號(hào)*/
  249. void time0()interrupt 1   
  250. {        
  251.      
  252.      TH0=(65536-100)/256;          //100US定時(shí)
  253.          TL0=(65536-100)%256;
  254.          timer++;                                  //定時(shí)器100US為準(zhǔn)。在這個(gè)基礎(chǔ)上延時(shí)
  255.          pwm_val_left++;
  256.          pwm_Servomoto();

  257.          t++;
  258.          if(t==5)                                                 //PWM調(diào)制左右電機(jī)速度   
  259.          {
  260.              t=0;
  261.                  non++;
  262.          }
  263.          if( non == PWM_NO )                                 
  264.     {
  265.              PWM1 = 1;
  266.          PWM2 = 1;
  267.     }
  268.     if( non == connt )
  269.     {
  270.              non = 0;
  271.          if( PWM_NO != 0)
  272.         {
  273.              PWM1 = 0;
  274.              PWM2 = 0;
  275.         }
  276.     }
  277. }

  278. void lin()                                                //避障功能
  279. {  
  280.       if(timer>=1000)          //100MS檢測(cè)啟動(dòng)檢測(cè)一次         1000
  281.            {
  282.                timer=0;
  283.                    StartModule(); //啟動(dòng)檢測(cè)
  284.            Conut();                  //計(jì)算距離
  285.            if(S<=25)                  //距離小于30CM
  286.                    {
  287.                        SC();          //小車停止
  288.                        COMM();                   //方向函數(shù)
  289.                    }
  290.                    else
  291.                    if(S>25)                  //距離大于,30CM往前走
  292.                    QJ();
  293.                    if(!A1)
  294.                    {
  295.                        SC();
  296.                            delay1(20);
  297.                            HT();
  298.                            delay1(300);
  299.                            SC();
  300.                            COMM();
  301.                    }
  302.                    if(!A2)
  303.                    {
  304.                        SC();
  305.                            delay1(20);
  306.                            HT();
  307.                            delay1(300);
  308.                            SC();
  309.                            COMM();
  310.                    }                  
  311.            }                                             
  312.          
  313. }
  314. /***************************************************/
  315. ///*TIMER0中斷服務(wù)子函數(shù)產(chǎn)生PWM信號(hào)*/
  316.          void timer0()interrupt 3  
  317. {        
  318.            
  319. }

  320. /***************************************************/
  321. void UARTInterrupt(void) interrupt 4                         //串口中斷函數(shù)
  322. {   
  323.     unsigned char com;
  324.     if(a==1)                                                                //判斷能否執(zhí)行
  325.         {
  326.         if(RI==1)        
  327.             com = SBUF;                   //暫存接收到的數(shù)據(jù)
  328.             RI=0;
  329.         }
  330.         P0=smgduan[pon];
  331.          switch(com)                                                 //接收到字符并要執(zhí)行的功能
  332.         {
  333.             case 0: QJ();break;
  334.             case 1: SC();break;
  335.             case 2: ZZ1();break;
  336.             case 3: YZ1();break;
  337.                 case 4: HT();break;
  338.                 case 5:        pon++;PWM_NO--;break;
  339. ……………………

  340. …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼

Keil代碼下載:
超聲波避障 藍(lán)牙遙控智能小車.rar (40.42 KB, 下載次數(shù): 567)




評(píng)分

參與人數(shù) 4黑幣 +86 收起 理由
kevin666999 + 30 共享資料的黑幣獎(jiǎng)勵(lì)!
白科技 + 1 共享資料的黑幣獎(jiǎng)勵(lì)!
ZERO666 + 5 很給力!
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

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

使用道具 舉報(bào)

來自 2#
ID:611378 發(fā)表于 2019-9-14 13:43 | 只看該作者
本帖最后由 1015056212 于 2019-9-14 16:33 編輯

不能跑啊燒錄進(jìn)之后 我不知道我哪里除了問題。。。。。。。。。。
回復(fù)

使用道具 舉報(bào)

來自 3#
ID:611378 發(fā)表于 2019-9-14 14:49 | 只看該作者
組裝好了 程序燒錄進(jìn)去 就能跑了嗎 對(duì)不
回復(fù)

使用道具 舉報(bào)

來自 4#
ID:611378 發(fā)表于 2019-9-14 14:57 | 只看該作者
大哥你好 我在做智能小車的時(shí)候 用你的超聲波避障加藍(lán)牙控制程序,燒錄進(jìn)去之后,小車沒有反應(yīng),有對(duì)應(yīng)的app藍(lán)牙軟件,就是在用app的時(shí)候 按下app對(duì)應(yīng)上下左右箭頭 沒有反應(yīng) 只有在板子上 有一個(gè)D2的小燈 按一次手機(jī)按鈕,就會(huì)閃爍一次,這是什么情況啊 求教
回復(fù)

使用道具 舉報(bào)

來自 5#
ID:529002 發(fā)表于 2019-11-2 00:38 來自手機(jī) | 只看該作者
1015056212 發(fā)表于 2019-9-14 13:43
不能跑啊燒錄進(jìn)之后 我不知道我哪里除了問題。。。。。。。。。。

我的也是沒反應(yīng)
回復(fù)

使用道具 舉報(bào)

6#
ID:312541 發(fā)表于 2018-7-4 22:06 | 只看該作者
你這個(gè)是從藍(lán)牙上控制小車進(jìn)入超聲波功能的   不會(huì)的超聲波功能死循環(huán)嗎
回復(fù)

使用道具 舉報(bào)

7#
ID:367059 發(fā)表于 2018-7-8 16:36 | 只看該作者
請(qǐng)問藍(lán)牙型號(hào)是什么?我想買來做一下
回復(fù)

使用道具 舉報(bào)

8#
ID:391877 發(fā)表于 2018-10-24 23:26 | 只看該作者
代碼下完了打不開嚶嚶嚶
回復(fù)

使用道具 舉報(bào)

9#
ID:186936 發(fā)表于 2018-10-29 13:21 | 只看該作者
非常贊,值得學(xué)習(xí)
回復(fù)

使用道具 舉報(bào)

10#
ID:429166 發(fā)表于 2018-11-19 13:40 | 只看該作者
值得學(xué)習(xí)
回復(fù)

使用道具 舉報(bào)

11#
ID:524034 發(fā)表于 2019-4-28 22:07 | 只看該作者
這個(gè)也太棒了吧
回復(fù)

使用道具 舉報(bào)

12#
ID:524891 發(fā)表于 2019-5-3 07:06 來自手機(jī) | 只看該作者
Rx是什么
回復(fù)

使用道具 舉報(bào)

13#
ID:542004 發(fā)表于 2019-5-19 13:01 | 只看該作者
厲害了
回復(fù)

使用道具 舉報(bào)

14#
ID:542159 發(fā)表于 2019-5-19 16:22 | 只看該作者
厲害啊!!!!
回復(fù)

使用道具 舉報(bào)

15#
ID:403027 發(fā)表于 2019-5-21 17:06 | 只看該作者
牛逼!!!!樓主!!!
回復(fù)

使用道具 舉報(bào)

16#
ID:611378 發(fā)表于 2019-9-14 13:20 | 只看該作者
需要源程序啊啊啊啊啊
回復(fù)

使用道具 舉報(bào)

17#
ID:451441 發(fā)表于 2019-9-15 11:01 | 只看該作者
LZ好優(yōu)秀啊
回復(fù)

使用道具 舉報(bào)

18#
ID:328687 發(fā)表于 2019-9-18 09:55 | 只看該作者
參考一下,感謝LZ
回復(fù)

使用道具 舉報(bào)

19#
ID:16087 發(fā)表于 2019-11-2 15:31 | 只看該作者
學(xué)習(xí)一下啊,很不錯(cuò)的啊
回復(fù)

使用道具 舉報(bào)

20#
ID:634994 發(fā)表于 2019-11-3 21:02 | 只看該作者
這個(gè)很高端,感謝樓主
回復(fù)

使用道具 舉報(bào)

21#
ID:484726 發(fā)表于 2019-11-25 15:41 | 只看該作者
膜拜大佬,真厲害!
回復(fù)

使用道具 舉報(bào)

22#
ID:702493 發(fā)表于 2020-3-5 15:08 | 只看該作者
除了舵機(jī)能動(dòng),藍(lán)牙控制不了小車的移動(dòng)啊
回復(fù)

使用道具 舉報(bào)

23#
ID:698914 發(fā)表于 2020-3-19 16:28 | 只看該作者
這個(gè)是超聲波避障嗎?為什么有紅外線模塊呢?求指教
回復(fù)

使用道具 舉報(bào)

24#
ID:853008 發(fā)表于 2020-12-6 12:24 | 只看該作者
可以
回復(fù)

使用道具 舉報(bào)

25#
ID:831064 發(fā)表于 2021-1-14 11:31 | 只看該作者
非常好!完美
回復(fù)

使用道具 舉報(bào)

26#
ID:876226 發(fā)表于 2021-2-14 17:40 | 只看該作者
能發(fā)表一份圖片嗎?
回復(fù)

使用道具 舉報(bào)

27#
ID:876226 發(fā)表于 2021-2-18 16:48 | 只看該作者
樓主能共享一下實(shí)物圖嗎?
回復(fù)

使用道具 舉報(bào)

28#
ID:1020620 發(fā)表于 2022-4-22 18:01 | 只看該作者
誰能根據(jù)作者的程序畫一個(gè)原理圖嗎?
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 视频在线观看一区二区 | 久久久一| 国产三级一区二区 | 青青青伊人 | 精品视频一区二区三区 | 亚洲精品国产偷自在线观看 | 午夜电影一区二区 | 国产在线麻豆精品入口 | 91精品入口蜜桃 | 香蕉久久久久久 | 日韩在线中文字幕 | 欧美伊人久久久久久久久影院 | 亚洲精品久久久久久国产精华液 | 亚洲精品国产精品国自产在线 | 亚洲性视频 | 中文成人在线 | 91国内精品久久 | 国产成人99久久亚洲综合精品 | 日本亚洲一区 | 国产成人一区二区 | 日一区二区 | 日韩视频二区 | 国产国产精品久久久久 | 亚洲成av人片在线观看无码 | a天堂在线 | 久草在线在线精品观看 | 国产福利网站 | 亚洲精品一区二区在线观看 | 亚洲啊v | 亚洲一区久久 | 亚洲精品一区二区三区中文字幕 | www.色综合 | 亚洲一区欧美 | www.久久| 国产成人久久精品一区二区三区 | 国产99久久久国产精品 | 午夜视频在线观看网站 | 午夜激情小视频 | 欧美成人精品在线观看 | 亚洲精品一区久久久久久 | 国产成人在线视频播放 |