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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

藍牙遙控智能車制作 單片機+SG90舵機掃描 附源程序

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


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

程序編譯好后即可燒錄,對手機上的藍牙調試器進行相應字符編輯即可進行操作。對于想基于此程序繼續開發的朋友們,如果加入更多功能函數時操作未響應,建議你們逐條加入排除問題。
謝謝大家的認真閱讀,有更好的邏輯可以留言。



將硬件設備搭建完成后,我們即將開始軟件的編程:
話不多說,單片機代碼走起!!!哈哈
  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;//電機1定義引腳
  8. sbit motor3=P1^3;
  9. sbit motor4=P1^4;//電機2定義引腳
  10. sbit PWM1=P2^0;//SG90信號定義引腳


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

  15. void Init();  //在這里一定要注意在main()函數后的子函數要進行聲明,不聲明雖然不會報錯但有可能會忽略子函數導致一些功能不能實現
  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)                          //延遲函數
  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()   //    主函數
  60. {
  61. Init();         //     串口初始化函數調用
  62. while (1)
  63. {
  64.   if (RI==1)   //    判斷是否有數據
  65.   {
  66.    RI = 0;     // 置0
  67.    Com = SBUF;    // 暫時存放接收的數據
  68.    Cont();             // 調用數據處理函數
  69.   }
  70. }
  71. }
  72. void Init()    //串口初始化
  73. {
  74. ES=0;                     //中斷關閉
  75. SCON = 0x50;         //   串行控制寄存器   01010000串口工作方式1并允許中斷接收數據
  76. TMOD = 0x20;        //    定時器/計[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]數器1設置為工作方式
  77. TH1=TL1=0xFD;     //   設置波特率9600=110592*1000000/12/(0x100-0xfd)/32   本次實驗晶振(11.0592)
  78. PCON &= 0x7f;       //    波特率不倍增
  79. TR1 = 1;         //   開啟定時器1
  80. TI=0;             //   發送中斷位
  81. RI=0;             //   接收中斷位
  82. ES=1;            //   開啟串口中斷
  83. motor1=0;
  84. motor2=0;     //   電機初始化
  85. motor3=0;
  86. motor4=0;
  87. }
  88.    
  89. void Send(uc a)   //單字節數據發送
  90. {
  91. TI=0;             // TI是串口接收標志位
  92. SBUF=a;         //SBUF---即串口數據緩沖寄存器   將數據存入
  93. while (TI==0) ;//等待發送結束
  94. TI=0;             //清零
  95. }
  96. void qianjin()   //前進功能函數
  97. {
  98.       motor1=1;
  99.       motor2=0;
  100.       motor3=1;
  101.       motor4=0;
  102. }
  103. void zuozhuan()   //原地左轉功能函數
  104. {
  105.       motor1=0;
  106.       motor2=1;
  107.       motor3=1;
  108.       motor4=0;
  109. }
  110. void youzhuan()  //原地右轉功能函數
  111. {
  112.       motor1=1;
  113.       motor2=0;
  114.       motor3=0;
  115.       motor4=1;
  116. }
  117. void houtui()  //后退功能函數
  118. {
  119.       motor1=0;
  120.       motor2=1;
  121.       motor3=0;
  122.       motor4=1;
  123. }
  124. void ZUO()  // 單獨左轉功能函數
  125. {
  126.       motor1=0;
  127.       motor2=0;
  128.       motor3=1;
  129.       motor4=0;
  130. }
  131. void YOU()  // 單獨右轉功能函數
  132. {
  133.       motor1=1;
  134.       motor2=0;
  135.       motor3=0;
  136.       motor4=0;
  137. }
  138. void xunji()  //尋跡模式切換 功能函數
  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舵機0度函數  若需要可以解禁此功能
  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()                                                    //舵機45度旋轉函數
  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()                                              //舵機90度旋轉函數
  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()                                              //舵機135度旋轉函數
  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()                                              //舵機180度旋轉函數,有需要可解禁此功能
  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()            // 數據處理函數
  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. }
復制代碼



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

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

板凳
ID:693716 發表于 2020-2-28 00:12 | 只看該作者
非常樓主感謝分享,正在學習如何控制電機相關的知識,參考下
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美国产大片 | 91视频.| 求个av网址| 超碰在线观看97 | 国产高清精品一区二区三区 | 九九热精品视频 | 亚洲精品久久久久久一区二区 | 国产精品一区二区免费 | 羞羞的视频网站 | 成人不卡视频 | 国产精品99久久久久久宅男 | 黄色国产大片 | 婷婷丁香综合网 | 亚洲电影免费 | 亚洲狠狠爱 | 日本不卡免费新一二三区 | 亚洲aⅴ精品| 爱爱视频在线观看 | www.精品一区 | 九九热在线视频 | 日韩二区三区 | 亚洲精选一区二区 | 中国一级大毛片 | 免费毛片在线 | 久草中文在线观看 | 真人毛片 | 精品一二三区在线观看 | 一二三在线视频 | 午夜精品视频在线观看 | 亚洲97| 免费成人在线网站 | 激情91 | 精品一区二区三区四区在线 | 中文无吗| 91pron在线 | 久久精品视频在线观看 | 欧美 日韩 国产 成人 | 日韩久久久久久久久久久 | 欧美一级欧美一级在线播放 | 在线看免费 | h视频在线播放 |