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

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

QQ登錄

只需一步,快速開始

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

藍(lán)牙遙控智能車制作 單片機(jī)+SG90舵機(jī)掃描 附源程序

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
     遙控車是基于STC89C52RC單片機(jī)開發(fā),車體組成有底盤,直流電機(jī)33GB-520-18.7,L298N電機(jī)驅(qū)動(dòng)模塊,LM2596降壓模塊,12V DC電源,HC-05藍(lán)牙模塊。其中HC-05藍(lán)牙模塊與單片機(jī)是串口通信所以要注意連線,STC89C52RC中P3^0,P3^1為串口引腳,具體連線如下示意圖:


本次制作目的是:通過(guò)手機(jī)藍(lán)牙調(diào)試器發(fā)送信號(hào)控制車輛的前進(jìn),后退,原地左轉(zhuǎn),原地右轉(zhuǎn),單獨(dú)左轉(zhuǎn),單獨(dú)右轉(zhuǎn),舵機(jī)掃描以及尋跡模式的切換(在這里聲明一下,本次代碼的尋跡模式切換模式還不太完善,未達(dá)到理想效果,電子發(fā)燒友們可以多多指點(diǎn)。在下學(xué)藝不精,在接下來(lái)的解說(shuō)中如有錯(cuò)誤望大佬糾正。)手機(jī)采用藍(lán)牙調(diào)試器,需要自己進(jìn)行按鍵編輯以及字符發(fā)送。

程序編譯好后即可燒錄,對(duì)手機(jī)上的藍(lán)牙調(diào)試器進(jìn)行相應(yīng)字符編輯即可進(jìn)行操作。對(duì)于想基于此程序繼續(xù)開發(fā)的朋友們,如果加入更多功能函數(shù)時(shí)操作未響應(yīng),建議你們逐條加入排除問(wèn)題。
謝謝大家的認(rèn)真閱讀,有更好的邏輯可以留言。



將硬件設(shè)備搭建完成后,我們即將開始軟件的編程:
話不多說(shuō),單片機(jī)代碼走起!!!哈哈
  1. #include <reg52.h>   //頭文件
  2. #include <intrins.h>
  3. sbit blackorwhite1=P2^5;//黑白傳感器定義引腳
  4. sbit blackorwhite2=P2^6;
  5. sbit blackorwhite3=P2^7;
  6. sbit motor1=P1^0;
  7. sbit motor2=P1^1;//電機(jī)1定義引腳
  8. sbit motor3=P1^3;
  9. sbit motor4=P1^4;//電機(jī)2定義引腳
  10. sbit PWM1=P2^0;//SG90信號(hào)定義引腳


  11. typedef unsigned char uc;
  12. typedef unsigned int ui;    //復(fù)雜名稱函數(shù)的替代
  13. uc Com;
  14. int i;

  15. void Init();  //在這里一定要注意在main()函數(shù)后的子函數(shù)要進(jìn)行聲明,不聲明雖然不會(huì)報(bào)錯(cuò)但有可能會(huì)忽略子函數(shù)導(dǎo)致一些功能不能實(shí)現(xiàn)
  16. void Send(uc a);
  17. void Cont();  
  18. void qianjin();
  19. void houtui();
  20. void youzhuan();
  21. void zuozhuan();
  22. void xunji();
  23. //void L2_0();  
  24. void L2_45();
  25. void L2_90();
  26. void L2_135();
  27. //void L2_180();
  28. void delay(int t);
  29. void delayx1ms(int x);
  30. void delay1ms();
  31. void delay500us();
  32. void ZUO();
  33. void YOU();

  34. void delay(int t)                          //延遲函數(shù)
  35. {
  36.         int a,b;
  37.         for(a=0;a<t;a++)
  38.                 for(b=0;b<120;b++);
  39. }
  40. void delayx1ms(int x)
  41. {
  42.         unsigned char a,b;
  43.         for(x;x>0;x--)
  44.                 for(b=102;b>0;b--)
  45.                         for(a=3;a>0;a--);
  46. }
  47. void delay1ms()
  48. {
  49.         unsigned char a,b;
  50.         for(b=102;b>0;b--)
  51.                 for(a=3;a>0;a--);
  52. }
  53. void delay500us()
  54. {
  55.         unsigned char a,b;
  56.         for(b=1;b>0;b--)
  57.                 for(a=227;a>0;a--);
  58. }

  59. void main()   //    主函數(shù)
  60. {
  61. Init();         //     串口初始化函數(shù)調(diào)用
  62. while (1)
  63. {
  64.   if (RI==1)   //    判斷是否有數(shù)據(jù)
  65.   {
  66.    RI = 0;     // 置0
  67.    Com = SBUF;    // 暫時(shí)存放接收的數(shù)據(jù)
  68.    Cont();             // 調(diào)用數(shù)據(jù)處理函數(shù)
  69.   }
  70. }
  71. }
  72. void Init()    //串口初始化
  73. {
  74. ES=0;                     //中斷關(guān)閉
  75. SCON = 0x50;         //   串行控制寄存器   01010000串口工作方式1并允許中斷接收數(shù)據(jù)
  76. TMOD = 0x20;        //    定時(shí)器/計(jì)[color=rgb(34, 34, 34)][backcolor=rgb(248, 248, 248)][font=PingFang SC,Arial,\5FAE軟雅黑,\5B8B體,simsun,sans-serif][size=0.48] [/font][/backcolor][/color]數(shù)器1設(shè)置為工作方式
  77. TH1=TL1=0xFD;     //   設(shè)置波特率9600=110592*1000000/12/(0x100-0xfd)/32   本次實(shí)驗(yàn)晶振(11.0592)
  78. PCON &= 0x7f;       //    波特率不倍增
  79. TR1 = 1;         //   開啟定時(shí)器1
  80. TI=0;             //   發(fā)送中斷位
  81. RI=0;             //   接收中斷位
  82. ES=1;            //   開啟串口中斷
  83. motor1=0;
  84. motor2=0;     //   電機(jī)初始化
  85. motor3=0;
  86. motor4=0;
  87. }
  88.    
  89. void Send(uc a)   //單字節(jié)數(shù)據(jù)發(fā)送
  90. {
  91. TI=0;             // TI是串口接收標(biāo)志位
  92. SBUF=a;         //SBUF---即串口數(shù)據(jù)緩沖寄存器   將數(shù)據(jù)存入
  93. while (TI==0) ;//等待發(fā)送結(jié)束
  94. TI=0;             //清零
  95. }
  96. void qianjin()   //前進(jìn)功能函數(shù)
  97. {
  98.       motor1=1;
  99.       motor2=0;
  100.       motor3=1;
  101.       motor4=0;
  102. }
  103. void zuozhuan()   //原地左轉(zhuǎn)功能函數(shù)
  104. {
  105.       motor1=0;
  106.       motor2=1;
  107.       motor3=1;
  108.       motor4=0;
  109. }
  110. void youzhuan()  //原地右轉(zhuǎn)功能函數(shù)
  111. {
  112.       motor1=1;
  113.       motor2=0;
  114.       motor3=0;
  115.       motor4=1;
  116. }
  117. void houtui()  //后退功能函數(shù)
  118. {
  119.       motor1=0;
  120.       motor2=1;
  121.       motor3=0;
  122.       motor4=1;
  123. }
  124. void ZUO()  // 單獨(dú)左轉(zhuǎn)功能函數(shù)
  125. {
  126.       motor1=0;
  127.       motor2=0;
  128.       motor3=1;
  129.       motor4=0;
  130. }
  131. void YOU()  // 單獨(dú)右轉(zhuǎn)功能函數(shù)
  132. {
  133.       motor1=1;
  134.       motor2=0;
  135.       motor3=0;
  136.       motor4=0;
  137. }
  138. void xunji()  //尋跡模式切換 功能函數(shù)
  139. {
  140. // while(1)
  141. {
  142.    if((blackorwhite1==1)&& (blackorwhite2==0)&&(blackorwhite3==1))
  143.   qianjin();
  144.   else if ((blackorwhite1==0&&blackorwhite2==0&&blackorwhite3==1)||(blackorwhite1==0&&blackorwhite2==1&&blackorwhite3==1))
  145.   zuozhuan();
  146.    else if((blackorwhite1==1&&blackorwhite2==1&&blackorwhite3==0)||(blackorwhite1==1&&blackorwhite2==0&&blackorwhite3==0))
  147.   youzhuan();
  148.   else if ((blackorwhite1==0)&&(blackorwhite2==0)&&(blackorwhite3==0))
  149.    qianjin();
  150.   else
  151.   houtui();
  152.                              
  153. }
  154. }
  155. //void L2_0()                                                  SG90舵機(jī)0度函數(shù)  若需要可以解禁此功能
  156. /{
  157. //        int i,j;
  158. //        for(j=0;j<43;j++)
  159. //        {
  160. //                PWM1=1;
  161. //                delay500us();
  162. //       //      delay1ms();
  163. //                PWM1=0;
  164. //                for(i=0;i<19;i++)
  165. //                delay1ms();
  166. //                delay500us();
  167. //                PWM1=0;
  168. //                for(i=0;i<20;i++)
  169. //                delay1ms();
  170. //        }
  171. //}
  172. void L2_45()                                                    //舵機(jī)45度旋轉(zhuǎn)函數(shù)
  173. {
  174.         int i,j;
  175.         for(j=0;j<43;j++)
  176.         {
  177.                 PWM1=1;
  178.         //     delay500us();
  179.                 delay1ms();
  180.                 PWM1=0;
  181.                 for(i=0;i<20;i++)
  182.                 delay1ms();
  183.         //     delay500us();
  184.                 PWM1=0;
  185.                 for(i=0;i<21;i++)
  186.                 delay1ms();
  187.         }
  188. }
  189. void L2_90()                                              //舵機(jī)90度旋轉(zhuǎn)函數(shù)
  190. {
  191.         int i,j;
  192.         for(j=0;j<43;j++)
  193.    {
  194.                 PWM1=1;
  195.                 delay1ms();
  196.                 delay500us();
  197.                 PWM1=0;
  198.                 for(i=0;i<18;i++)
  199.                 delay1ms();
  200.                 delay500us();
  201.                 PWM1=0;
  202.                 for(i=0;i<20;i++)
  203.                 delay1ms();
  204.          }
  205. }
  206. void L2_135()                                              //舵機(jī)135度旋轉(zhuǎn)函數(shù)
  207. {
  208.         int i,j;
  209.         for(j=0;j<43;j++)
  210.    {
  211.                 PWM1=1;
  212.                 delay1ms();
  213.                 delay1ms();
  214.        //      delay500us();
  215.                 PWM1=0;
  216.                 for(i=0;i<18;i++)
  217.                 delay1ms();
  218.            //  delay500us();
  219.                 PWM1=0;
  220.                 for(i=0;i<20;i++)
  221.                 delay1ms();
  222.          }
  223. }
  224. //void L2_180()                                              //舵機(jī)180度旋轉(zhuǎn)函數(shù),有需要可解禁此功能
  225. //{
  226. //        int i,j;
  227. //        for(j=0;j<43;j++)
  228. //   {
  229. //                PWM1=1;
  230. //                delay1ms();
  231. //                delay1ms();
  232. //                delay500us();
  233. //                PWM1=0;
  234. //                for(i=0;i<17;i++)
  235. //                delay1ms();
  236. //                delay500us();
  237. //                PWM1=0;
  238. //                for(i=0;i<20;i++)
  239. //                delay1ms();
  240. //         }
  241. //}



  242. void Cont()            // 數(shù)據(jù)處理函數(shù)
  243. {
  244. switch(Com)
  245. {
  246.   case '5':
  247.             motor1=0;
  248.             motor2=0;
  249.             motor3=0;
  250.             motor4=0;
  251.             Send(Com);
  252.   break;
  253.   case '2':
  254.             qianjin();
  255.             Send(Com);
  256.   break;
  257.   case '4':
  258.             zuozhuan();
  259.             Send(Com);
  260.   break;
  261.   case '6':
  262.             youzhuan();
  263.             Send(Com);
  264.   break;
  265.   case '8':
  266.             houtui();
  267.             Send(Com);
  268.   break;
  269.   case '1':
  270.             xunji();
  271.             Send(Com);
  272.   break;
  273.   case '9':
  274.             L2_45();
  275.             delay(30);
  276.             L2_90();
  277.             delay(30);
  278.             L2_135();
  279.             delay(30);
  280.             L2_45();
  281.             delay(30);
  282.             L2_90();
  283.             delay(30);
  284.             L2_135();
  285.             delay(30);
  286.             L2_90();      
  287.             Send(Com);
  288.   break;
  289.   case 'F':
  290.             YOU();
  291.             Send(Com);
  292.   break;
  293.   case 'E':
  294.             ZUO();
  295.             Send(Com);
  296.   break;
  297.   default:
  298.    
  299.             motor1=0;
  300.             motor2=0;
  301.             motor3=0;
  302.             motor4=0;
  303.             Send(Com);
  304.   }
  305. }
復(fù)制代碼



以上程序打包下載:
藍(lán)牙.zip (20.86 KB, 下載次數(shù): 38)

評(píng)分

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

查看全部評(píng)分

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

使用道具 舉報(bào)

沙發(fā)
ID:699230 發(fā)表于 2020-2-27 18:25 | 只看該作者
好資料,51黑有你更精彩!!! 接線圖有嗎?
回復(fù)

使用道具 舉報(bào)

板凳
ID:693716 發(fā)表于 2020-2-28 00:12 | 只看該作者
非常樓主感謝分享,正在學(xué)習(xí)如何控制電機(jī)相關(guān)的知識(shí),參考下
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 国产资源在线观看 | 天天天久久久 | 欧美视频一级 | 另类在线 | 欧美在线日韩 | 日韩视频在线一区 | 免费在线观看av片 | 精品自拍视频 | 日韩一区二区三区在线看 | 精品国产一区二区在线 | 国产精品成人一区 | 日本一二三区电影 | 亚洲成人精品 | 亚洲免费网站 | 隔壁老王国产在线精品 | 日韩欧美一区在线 | 日韩精品在线一区 | 久久黄色网 | 日韩一区二区三区在线观看视频 | 欧美精品久久一区 | 天天色天天 | 国产精品区二区三区日本 | 日韩精品一区二区不卡 | 成人国产网站 | 日日干夜夜操天天操 | 天天干亚洲 | 中国一级大黄大片 | 久久1区| 国产一级片网站 | 欧美激情精品久久久久久 | 一区二区三区中文字幕 | 天天艹逼网 | 一级视频黄色 | 国产精品女人久久久 | 日本不卡一区 | 日本高清在线一区 | 日韩欧美不卡 | 丝袜久久| 午夜久久久 | www.99热.com | 天天拍天天插 |