找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

基于51單片機(jī)的無線遙控小車設(shè)計(jì)[附發(fā)射接收程序]

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:256970 發(fā)表于 2019-5-5 00:11 | 只看該作者 回帖獎勵 |倒序?yàn)g覽 |閱讀模式
基于51單片機(jī)的無線遙控小車設(shè)計(jì)
(附發(fā)射接收程序)
關(guān)于遙控小車,網(wǎng)上的資料很多,有藍(lán)牙的、有WIFI的、有紅外的、還有單片機(jī)+PT2262/PT2272編解碼芯片的等等,動不動就上演智能小車的節(jié)奏,什么避障、什么循跡,講半天云里霧里的,還不知道真正的遙控在哪里。如果只是需要小車進(jìn)行簡單的前后左右停止操作,需要那么麻煩嗎?1.藍(lán)牙版的需要手機(jī)APP和藍(lán)牙接收模塊(一般十幾元,加運(yùn)費(fèi)的話也得二十了),另外遙控范圍有限,一般在10米以內(nèi);2.WIFI版的,難到小車只在有網(wǎng)的地方跑嗎?況且WIFI接收模塊也不便宜吧;3.紅外版的,遙控器只能對著小車遙控,又不是電視機(jī)(擱那一直不動),用紅外遙控器的,不知道怎么想的;4.還有單片機(jī)+PT2262/PT2272編解碼芯片的,這個讓我不能理解的是既然已經(jīng)有單片機(jī)了,還要編解碼芯片做什么呢?好了,話不多說,現(xiàn)在給大家來一款51單片機(jī)版(不需要編解碼芯片)的無線遙控小車設(shè)計(jì),電路原理圖及實(shí)物照片如下圖:


另外需要說明的是,發(fā)射接收模塊需要自己各接上17cm長的導(dǎo)線作為天線,小車電源的話用一節(jié)可充電的鋰電池就好,容量最好大一點(diǎn),小車跑的時間就能長一些,或者把以前不用的手機(jī)上的鋰電池拆下來接上也可以!遙控器電源采用2節(jié)3V(2032的)鈕扣電池就可以了。


以下是遙控小車程序代碼:
  1. /***************************************************************/
  2. /*【基于51單片機(jī)的無線遙控小車設(shè)計(jì)】
  3. /***************************************************************/
  4. /*發(fā)射部分*/
  5. #include"STC15F104E.H"
  6. #define uchar unsigned char
  7. sbit K0=P3^5;//S4,停止
  8. sbit K1=P3^4;//S5,前進(jìn)
  9. sbit K2=P3^1;//S2,后退
  10. sbit K3=P3^2;//S1,左轉(zhuǎn)
  11. sbit K4=P3^0;//S3,右轉(zhuǎn)
  12. sbit TX=P3^3;

  13. void delay_315()
  14. {
  15.         uchar i,j;
  16.         for(i=0;i<10;i++)
  17.                 for(j=0;j<110;j++);
  18. }

  19. void main()
  20. {
  21.         uchar i;
  22.         bit dong=0;                       
  23.         TMOD=0X01;                        //開定時器0中斷
  24.         TH0=(65536-100)/256;
  25.         TL0=(65536-100)%256;
  26.         EA=1;
  27.         ET0=1;
  28.         TR0=1;
  29.         EX0=1;
  30.         IT0=1;

  31.         TX=0;
  32.         while(1)                                                 
  33.         {
  34.                 if(K0==0)                //發(fā)送指令0
  35.                 {
  36.                         delay_315();
  37.                         while(K0==0){ v0();v0();v0();m=0;while(m<40);}
  38.                         }               
  39.                                                                                                                                                                                                                                     
  40.                 if(K1==0)                //發(fā)送指令1
  41.                 {
  42.                         delay_315();
  43.                         while(K1==0){ v0();v0();v1();m=0;while(m<40);}
  44.                         }                                                       
  45.                                                                                                                                                                
  46.                 if(K2==0)
  47.                 {
  48.                         delay_315();
  49.                         while(K2==0){ v0();v1();v0();m=0;while(m<40);}
  50.                 dong=1;                       
  51.                 }

  52.                 if(K3==0)
  53.                 {
  54.                         delay_315();
  55.                         while(K3==0){ v0();v1();v1();m=0;while(m<40);}
  56.                 dong=1;       
  57.                 }

  58.                 if(K4==0)
  59.                 {
  60.                         delay_315();
  61.                         while(K4==0){ v1();v0();v0();m=0;while(m<40);}
  62.                 dong=1;       
  63.                 }


  64.                 if(dong==1)
  65.                 {
  66.                         dong=0;
  67.                         for(i=0;i<5;i++)
  68.                         { v0();v0();v0();m=0;while(m<40);
  69.                         delay_315(); }
  70.                
  71.                  }

  72.         }

  73. }
  74. /*
  75. void EXINT_0() interrupt 0
  76. {
  77.                 delay_315();
  78.                 if(K7==0)                //發(fā)送指令1
  79.                 {

  80.                 delay_315();
  81.                 while(K7==0){v3();v2();v0();v0();v1();m=0;while(m<40);}
  82.                 delay_315();
  83.        
  84.         //                dong=1;         
  85.                 }
  86. }
  87. */
  88. void timer0() interrupt 1
  89. {
  90.         TH0=(65536-100)/256;
  91.         TL0=(65536-100)%256;
  92.         m++;
  93.         TF0=0;
  94. }





  95. /***************************************************************/
  96. /*【基于51單片機(jī)的無線遙控小車設(shè)計(jì)】
  97. /***************************************************************/
  98. /*接收部分*/
  99. #include"STC15F104E.H"
  100. #define uchar unsigned char
  101. sbit RX=P3^3;        //定義接收腳

  102. sbit LED=P3^5;        //定義繼電器端

  103. sbit IN1=P3^0;        //電機(jī)驅(qū)動L
  104. sbit IN2=P3^1;        //電機(jī)驅(qū)動L
  105. sbit IN3=P3^2;        //電機(jī)驅(qū)動R
  106. sbit IN4=P3^4;        //電機(jī)驅(qū)動R



  107. //void delay10ms(unsigned char a);


  108. //小車動作函數(shù)
  109. void run()//前進(jìn)
  110. {
  111.         IN1=1;//左電機(jī)往前走
  112.         IN2=0;
  113.        
  114.         IN3=1;//右電機(jī)往前走
  115.         IN4=0;
  116. }
  117. void backrun()//后退
  118. {
  119.         IN1=0;//左電機(jī)往后走
  120.         IN2=1;
  121.        
  122.         IN3=0;//右電機(jī)往后走
  123.         IN4=1;
  124. }
  125. /*
  126. void leftrun()//左前
  127. {
  128.         IN1=0;//左電機(jī)往后走
  129.         IN2=0;
  130.        
  131.         IN3=1;//右電機(jī)往前走
  132.         IN4=0;
  133. }
  134. void rightrun()//右前
  135. {
  136.         IN1=1;//左電機(jī)往前走
  137.         IN2=0;
  138.        
  139.         IN3=0;//右電機(jī)往后走
  140.         IN4=0;
  141. }
  142. */
  143. void lefturn()//左轉(zhuǎn)
  144. {
  145.         IN1=0;//左電機(jī)往后走
  146.         IN2=1;
  147.        
  148.         IN3=1;//右電機(jī)往前走
  149.         IN4=0;
  150. }
  151. void righturn()//右轉(zhuǎn)
  152. {
  153.         IN1=1;//左電機(jī)往前走
  154.         IN2=0;
  155.        
  156.         IN3=0;//右電機(jī)往后走
  157.         IN4=1;
  158. }
  159. void stop()//停止
  160. {
  161.         IN1=0;//左電機(jī)停止
  162.         IN2=0;
  163.        
  164.         IN3=0;//右電機(jī)停止
  165.         IN4=0;
  166. }



  167. uchar m,flag,x,y;
  168. bit n;
  169. //PCON2=0X00;
  170. void main()
  171. {
  172. //        P3M1 = 0x00;
  173. //    P3M1 = 0xFF;

  174.         uchar a,b,c,p=0;   //定義存取的數(shù)據(jù)
  175.         TMOD=0X01;
  176.         TH0=(65536-100)/256;   //開定時器0
  177.         TL0=(65536-100)%256;
  178.         EA=1;         //開總中斷
  179.         ET0=1;         //開定時器0中斷
  180.         TR0=1;         //啟動定時器0工作
  181.         EX1=1;         //允許外部中斷INT1
  182.         IT1=1;         //外部中斷INT1為下降沿觸發(fā)方式
  183.         p=0;
  184.         x=0;
  185.         LED=1;
  186.         while(1)
  187.         {
  188.         if(n==1)
  189.         {                               
  190. p=a+b+c;
  191.                                         x++;
  192.                                         if(x==1)y=p;
  193. //                                        delay10ms(1);
  194.                                         if(x==2)
  195.                                         {
  196.                                                 x=0;
  197.                                                 if(y==p)
  198.                                                 {
  199.                                         //        P2=p;delay100ms(8); P2=0XFF;
  200.                                                         switch(p)
  201.                                                         {
  202.                                                                 case 0:stop();break;        //停止
  203.                                                                 case 1:run()break;
  204.                                                                 case 2:backrun();break;
  205.                                                                 case 3:lefturn();break;
  206.                                                                 case 4:righturn();break;
  207.                                                 //                case 5:lefturn();break;
  208.                                                 //                case 6:righturn();break;
  209.                                                  //                case 7:LED = 1;delay100ms(1); break;
  210.                                                                 default:stop();LED = 1;break;
  211.                                                         }
  212.                                                 }       
  213.                                         }
  214.                                 //        stop();LED = 1;
  215.                                 }
  216.                           
  217.                         }                       
  218.                 }               
  219.         }
  220. }
  221. /*
  222. void delay10ms(unsigned char a)
  223. {
  224.     unsigned char i,j,k;
  225.     for(i=a;i>0;i--)
  226.     for(j=20;j>0;j--)
  227.     for(k=248;k>0;k--);
  228. }
  229. */
  230. void timer0() interrupt 1
  231. {
  232.          
  233.         TH0=(65536-100)/256;
  234.         TL0=(65536-100)%256;
  235.         m++;
  236.   //  x++;
  237.        
  238.         TF0=0;
  239. }

  240. void INT_1() interrupt 2
  241. {
  242.         n=1;
  243. }
復(fù)制代碼

評分

參與人數(shù) 1黑幣 +80 收起 理由
admin + 80 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報(bào)

沙發(fā)
ID:407374 發(fā)表于 2019-5-5 10:14 | 只看該作者
這也不是用的51啊
回復(fù)

使用道具 舉報(bào)

板凳
ID:320226 發(fā)表于 2019-6-13 22:29 | 只看該作者
樓主 你好.你的程序翻譯不通過啊
回復(fù)

使用道具 舉報(bào)

地板
ID:695961 發(fā)表于 2022-4-4 10:35 | 只看該作者
哥們,您這發(fā)射接收模塊用的是什么呢?
回復(fù)

使用道具 舉報(bào)

5#
ID:673647 發(fā)表于 2022-7-13 15:45 | 只看該作者
謝謝分享,原理圖好像不完整啊?請問有完整的圖嗎?包括發(fā)射接收的?
回復(fù)

使用道具 舉報(bào)

6#
ID:66287 發(fā)表于 2022-8-3 16:02 | 只看該作者
大神,像 v0();這類,你在哪定義的?
回復(fù)

使用道具 舉報(bào)

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表