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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 14737|回復: 18
打印 上一主題 下一主題
收起左側

基于51單片機的簡單智能小車,實現HC-05藍牙控制+避障+尋跡等功能

  [復制鏈接]
跳轉到指定樓層
樓主
分享一下我的作品。下面是制作出來的實物圖:


單片機源程序如下:
  1. #include<reg52.h>
  2. typedef unsigned char u8;        //宏定義無符號字符型         8位
  3. typedef unsigned int  u16;        //宏定義無符號整形                16位
  4. sbit PWM1 = P2^6;          //左電機高電平
  5. sbit PWM2 = P2^5;          //右電機高電平
  6. sbit IN1 = P2^4;
  7. sbit IN2 = P2^3;          //左電機
  8. sbit IN3 = P2^2;
  9. sbit IN4 = P2^1;          //右電機
  10. sbit S1 = P1^1;                  //左紅外避障模塊
  11. sbit S2 = P1^2;                  //右紅外避障模塊
  12. sbit S3 = P1^3;                  //左紅外尋跡模塊
  13. sbit S4 = P1^4;                  //右紅外尋跡模塊
  14. sbit K1 = P3^2;                  //功能轉換按鍵
  15. u8 connt;                          //調速周期
  16. u8 PWM_NO;                          //高電平時間
  17. u8 COM = 0;                          //功能控制位
  18. u8 t=0;                                  //判斷串口中斷是否執行


  19. void time(void)                                          //定時計時器初始化函數
  20. {
  21.     TMOD = 0x01;                                  //中斷方式1
  22.     TH0 = 0xfe;
  23.     TL0 = 0x0c;                                          //0.5ms
  24.     EA = 1;                                                  //打開總中斷
  25.     ET0 = 1;                                          //打開計時器中斷
  26.     TR0 = 1;                                          //啟動計時器
  27. }

  28. void InitUART(void)                 //串口中斷初始化函數
  29. {
  30.     SCON=0x50;                        //設置為工作方式1
  31.         TMOD=0x20;                        //設置計數器工作方式2
  32.         PCON=0x00;                        //波特率加倍
  33.         TH1=0xfd;                                //計數器初始值設置,注意波特率是9600的
  34.         TL1=0xfd;
  35.         ES=1;                                                //打開接收中斷
  36.         EA=1;                                                //打開總中斷
  37.         TR1=1;                                        //打開計數器
  38. }

  39. void delay( u16 k )                   //延時大約1ms
  40. {
  41.     u16 i,j;
  42.         for(i=k;i>0;i--)
  43.         for(j=120;j>0;j--);
  44. }

  45. void SC()                                //剎車
  46. {
  47.     IN1 = 0;   
  48.         IN2 = 0;
  49.         IN3 = 0;
  50.         IN4 = 0;
  51. }
  52. void QJ()                                //前進
  53. {
  54.     IN1 = 1;   
  55.         IN2 = 0;
  56.         IN3 = 1;
  57.         IN4 = 0;
  58. }
  59. void HT()                                //后退
  60. {
  61.     IN1 = 0;   
  62.         IN2 = 1;
  63.         IN3 = 0;
  64.         IN4 = 1;
  65. }
  66. void ZZ1()                                //左大轉
  67. {
  68.     IN1 = 0;   
  69.         IN2 = 1;
  70.         IN3 = 1;
  71.         IN4 = 0;
  72. }
  73. void ZZ2()                                //左小轉
  74. {
  75.     IN1 = 0;   
  76.         IN2 = 0;
  77.         IN3 = 1;
  78.         IN4 = 0;
  79. }
  80. void YZ1()                                //右大轉
  81. {
  82.     IN1 = 1;   
  83.         IN2 = 0;
  84.         IN3 = 0;
  85.         IN4 = 1;
  86. }
  87. void YZ2()                                //右小轉
  88. {
  89.     IN1 = 1;   
  90.         IN2 = 0;
  91.         IN3 = 0;
  92.         IN4 = 0;
  93. }
  94. void HY()                                //后右轉
  95. {
  96.     IN1 = 0;   
  97.         IN2 = 0;
  98.         IN3 = 0;
  99.         IN4 = 1;
  100. }
  101. void lin1()                                //紅外避障程序
  102. {
  103.     if( S1 && S2 )                //兩探頭不反應,小車前進
  104.     {
  105.             
  106.         QJ();
  107.                
  108.     }
  109.     if( !S1 && S2 )                //左探頭反應,小車右轉
  110.     {            
  111.             SC();
  112.             delay(100);
  113.             HT();
  114.             delay(400);
  115.             YZ1();
  116.             delay(550);
  117.             SC();
  118.             delay(100);
  119.                
  120.     }
  121.     if( S1 && !S2 )                //右探頭反應,小車左轉
  122.     {            
  123.          SC();
  124.          delay(100);
  125.          HT();
  126.          delay(400);
  127.          ZZ1();
  128.          delay(550);
  129.          SC();
  130.          delay(100);
  131.                
  132.     }
  133.     if( !S1 && !S2 )                //兩探頭反應,小車后退,右轉
  134.     {            
  135.           SC();
  136.           delay(100);
  137.           HT();
  138.           delay(400);
  139.           HY();
  140.           delay(550);
  141.                
  142.     }
  143. }

  144. void lin2()                                           //尋跡功能程序
  145. {
  146.     if( !S3 && !S4 )                //兩探頭反應,小車前進
  147.     {            
  148.          QJ();
  149.          delay(150);
  150.          SC();
  151.          delay(90);
  152.                
  153.     }
  154.     if( S1 && S2 )                //兩探頭反應,小車停止
  155.     {          
  156.         SC();
  157.                
  158.     }
  159.     if( S3 && !S4 )                //左探頭不反應,小車右轉
  160.     {            
  161.           SC();
  162.           delay(90);
  163.           YZ2();
  164.           delay(120);
  165.                
  166.     }
  167.     if( !S3 && S4 )                //右探頭不反應,小車左轉
  168.     {          
  169.            SC();
  170.            delay(90);
  171.            ZZ2();
  172.            delay(90);
  173.                
  174.     }   
  175. }

  176. void lin3()                                                                   //物塊追蹤功能程序
  177. {
  178.     if( S1 && S2 )                //兩探頭不反應,小車停止
  179.     {            
  180.           SC();
  181.                
  182.     }
  183.     if( !S1 && !S2 )                //兩探頭反應,小車前進
  184.     {            
  185.            QJ();
  186.                
  187.     }
  188.     if( !S1 && S2 )                //右探頭不反應,小車左轉
  189.     {            
  190.            ZZ1();
  191.                
  192.     }
  193.     if( S1 && !S2 )                //左探頭不反應,小車右轉
  194.     {            
  195.            YZ1();
  196.                
  197.     }   
  198. }
  199. void lin4()                                                                  //魔術手功能程序
  200. {
  201.      if( S1 && S2 )                //兩探頭不反應,小車前進
  202.      {            
  203.            QJ();
  204.      }
  205.                
  206.      if( !S1 && !S2 )                //兩探頭反應,小車后退
  207.      {            
  208.             HT();
  209.                
  210.      }
  211.      if( !S1 && S2 )                //左探頭反應,小車后退
  212.      {            
  213.             HT();
  214.                
  215.      }
  216.      if( S1 && !S2 )                //右探頭反應,小車后退
  217.      {            
  218.             HT();
  219.                
  220.      }
  221. }

  222. void konzi()                  //控制位
  223. {
  224.     if( K1 == 0 )
  225.     {
  226.         delay(10);
  227.         if( K1 == 0 )
  228.         {
  229.             COM++;                         
  230.         }
  231.         while( !K1 );
  232.     }
  233.     if( COM == 5)
  234.     {
  235.         COM = 0;
  236.                 t=0;
  237.     }
  238.     if( COM == 0 )
  239.     {
  240.         PWM_NO = 14;
  241.     }
  242.     else
  243.     PWM_NO = 15;   
  244. }

  245. void main ()                                   //主函數
  246. {
  247.     time();                                                     //計時器初始化
  248.     InitUART();                                                 //串口初始化
  249.     connt = 20;                                                 //PWM的一個周期
  250.     PWM_NO = 14;                                         //調速,數值越大速度越慢
  251.     IN1 = 0;
  252.     IN2 = 0;
  253.     IN3 = 0;
  254.     IN4 = 0;                                                 //待機
  255.     while(1)
  256.     {
  257.             konzi();
  258.         switch(COM)                                           //功能選擇區
  259.             {
  260.                 case 0: lin1();break;                //避障
  261.                 case 1: lin2();break;                //尋跡
  262.                 case 2: lin3();break;                //物體跟隨
  263.                 case 3: lin4();break;                //魔術手
  264.                     case 4: t=1;SC();while(1);break;  //跳轉到藍牙控制
  265.             }                                                                               
  266.     }
  267. }

  268. void Timer0Interrupt(void) interrupt 1                                 //計時器中斷函數
  269. {
  270.     u8 non;
  271.     TH0 = 0xfe;
  272.     TL0 = 0x0c;
  273.     non++;
  274.     if( non == PWM_NO )
  275.     {
  276.              PWM1 = 1;
  277.          PWM2 = 1;
  278.     }
  279.     if( non == connt )
  280.     {
  281.              non = 0;
  282.          if( PWM_NO != 0)
  283.         {
  284.              PWM1 = 0;
  285.              PWM2 = 0;
  286.         }
  287. ……………………

  288. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼

所有資料51hei提供下載:
小車.rar (1.77 KB, 下載次數: 585)


評分

參與人數 2黑幣 +55 收起 理由
你! + 5 絕世好帖!
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏17 分享淘帖 頂2 踩
回復

使用道具 舉報

沙發
ID:311135 發表于 2018-4-22 17:02 | 只看該作者
謝謝樓主的分享
回復

使用道具 舉報

板凳
ID:321800 發表于 2018-5-4 08:42 | 只看該作者
謝謝樓主分享,在做畢設
回復

使用道具 舉報

地板
ID:391828 發表于 2018-9-3 17:25 | 只看該作者
魔術手方案代碼設計的比較巧妙
回復

使用道具 舉報

5#
ID:398851 發表于 2018-9-17 09:32 | 只看該作者
謝謝分享
回復

使用道具 舉報

6#
ID:418963 發表于 2018-11-1 10:22 | 只看該作者
謝謝分享,真的很棒
回復

使用道具 舉報

7#
ID:437935 發表于 2018-12-10 20:34 | 只看該作者
謝謝分享
回復

使用道具 舉報

8#
ID:494420 發表于 2019-3-20 08:50 | 只看該作者
樓主可否私發一下,我這新號沒幣。。。。。!1041371533@qq.com     萬分感謝!!
回復

使用道具 舉報

9#
ID:496392 發表于 2019-3-22 23:32 | 只看該作者
樓主可否私發一下,我這新號沒幣。。。。。!2658376041@qq.com     萬分感謝!!!
回復

使用道具 舉報

10#
ID:496786 發表于 2019-3-23 16:22 | 只看該作者
你! 發表于 2018-4-22 17:02
謝謝樓主的分享

感謝樓主分享
回復

使用道具 舉報

11#
ID:502154 發表于 2019-4-1 09:18 | 只看該作者
這個資料可以的,贊一個
回復

使用道具 舉報

12#
ID:505599 發表于 2019-4-11 14:39 | 只看該作者
代碼寫的真好,看了2遍
回復

使用道具 舉報

13#
ID:352943 發表于 2019-6-13 17:50 | 只看該作者
感謝分享,一直想找的程序
回復

使用道具 舉報

14#
ID:685149 發表于 2020-3-14 15:53 | 只看該作者
可以可以  感謝分享
回復

使用道具 舉報

15#
ID:709719 發表于 2020-4-12 20:37 | 只看該作者
樓主 牛b啊
回復

使用道具 舉報

16#
ID:876226 發表于 2021-2-10 10:22 | 只看該作者
樓主能幫忙接下疑惑嗎?sbit K1 = P3^2;                  //功能轉換按鍵這一部分是做聲嗎的?
回復

使用道具 舉報

17#
ID:846082 發表于 2021-3-6 11:40 | 只看該作者
謝謝分享,最近正好在找這些東西!
回復

使用道具 舉報

18#
ID:889199 發表于 2021-3-7 13:21 | 只看該作者
頂起! 謝謝樓主的分享
回復

使用道具 舉報

19#
ID:1002478 發表于 2022-1-18 17:18 | 只看該作者
你好,有電路圖嗎
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美午夜精品久久久久免费视 | 99成人免费视频 | 亚洲区一区二区 | 久久噜噜噜精品国产亚洲综合 | 久久精彩视频 | 欧美日韩不卡在线 | 成人午夜免费福利视频 | 亚洲精品久久久久久一区二区 | 狠狠操婷婷 | 日日操夜夜操视频 | 成人午夜免费在线视频 | 久久久久久久电影 | 国产一区在线免费观看视频 | 成人不卡视频 | 97免费视频在线观看 | 国产精品96久久久久久 | 久久福利网站 | 午夜天堂精品久久久久 | 欧美一区二区激情三区 | 狠狠操av | 91在线视频网址 | 91原创视频 | a级免费视频 | 日韩成人国产 | 国产精品免费视频一区 | 日韩在线| 欧美国产激情 | 五月网婷婷 | 国产日韩精品一区 | 中文字幕不卡 | 午夜电影网 | 亚洲人成网站777色婷婷 | 国产精品揄拍一区二区久久国内亚洲精 | 亚洲精品乱码久久久久久按摩观 | 亚洲精品免费在线 | 草草草久久久 | 欧美综合在线视频 | 国产精品伦一区二区三级视频 | 一级高清免费毛片 | 国产成人精品久久久 | 一区二区三区精品视频 |