標(biāo)題: 基于51單片機(jī)的無(wú)線遙控小車(chē)設(shè)計(jì)[附發(fā)射接收程序] [打印本頁(yè)]
作者: 藍(lán)色海陽(yáng) 時(shí)間: 2019-5-5 00:11
標(biāo)題: 基于51單片機(jī)的無(wú)線遙控小車(chē)設(shè)計(jì)[附發(fā)射接收程序]
基于51單片機(jī)的無(wú)線遙控小車(chē)設(shè)計(jì)
(附發(fā)射接收程序)
關(guān)于遙控小車(chē),網(wǎng)上的資料很多,有藍(lán)牙的、有WIFI的、有紅外的、還有單片機(jī)+PT2262/PT2272編解碼芯片的等等,動(dòng)不動(dòng)就上演智能小車(chē)的節(jié)奏,什么避障、什么循跡,講半天云里霧里的,還不知道真正的遙控在哪里。如果只是需要小車(chē)進(jìn)行簡(jiǎn)單的前后左右停止操作,需要那么麻煩嗎?1.藍(lán)牙版的需要手機(jī)APP和藍(lán)牙接收模塊(一般十幾元,加運(yùn)費(fèi)的話也得二十了),另外遙控范圍有限,一般在10米以?xún)?nèi);2.WIFI版的,難到小車(chē)只在有網(wǎng)的地方跑嗎?況且WIFI接收模塊也不便宜吧;3.紅外版的,遙控器只能對(duì)著小車(chē)遙控,又不是電視機(jī)(擱那一直不動(dòng)),用紅外遙控器的,不知道怎么想的;4.還有單片機(jī)+PT2262/PT2272編解碼芯片的,這個(gè)讓我不能理解的是既然已經(jīng)有單片機(jī)了,還要編解碼芯片做什么呢?好了,話不多說(shuō),現(xiàn)在給大家來(lái)一款51單片機(jī)版(不需要編解碼芯片)的無(wú)線遙控小車(chē)設(shè)計(jì),電路原理圖及實(shí)物照片如下圖:
另外需要說(shuō)明的是,發(fā)射接收模塊需要自己各接上17cm長(zhǎng)的導(dǎo)線作為天線,小車(chē)電源的話用一節(jié)可充電的鋰電池就好,容量最好大一點(diǎn),小車(chē)跑的時(shí)間就能長(zhǎng)一些,或者把以前不用的手機(jī)上的鋰電池拆下來(lái)接上也可以!遙控器電源采用2節(jié)3V(2032的)鈕扣電池就可以了。
以下是遙控小車(chē)程序代碼:
- /***************************************************************/
- /*【基于51單片機(jī)的無(wú)線遙控小車(chē)設(shè)計(jì)】
- /***************************************************************/
- /*發(fā)射部分*/
- #include"STC15F104E.H"
- #define uchar unsigned char
- sbit K0=P3^5;//S4,停止
- sbit K1=P3^4;//S5,前進(jìn)
- sbit K2=P3^1;//S2,后退
- sbit K3=P3^2;//S1,左轉(zhuǎn)
- sbit K4=P3^0;//S3,右轉(zhuǎn)
- sbit TX=P3^3;
- void delay_315()
- {
- uchar i,j;
- for(i=0;i<10;i++)
- for(j=0;j<110;j++);
- }
- void main()
- {
- uchar i;
- bit dong=0;
- TMOD=0X01; //開(kāi)定時(shí)器0中斷
- TH0=(65536-100)/256;
- TL0=(65536-100)%256;
- EA=1;
- ET0=1;
- TR0=1;
- EX0=1;
- IT0=1;
- TX=0;
- while(1)
- {
- if(K0==0) //發(fā)送指令0
- {
- delay_315();
- while(K0==0){ v0();v0();v0();m=0;while(m<40);}
- }
-
- if(K1==0) //發(fā)送指令1
- {
- delay_315();
- while(K1==0){ v0();v0();v1();m=0;while(m<40);}
- }
-
- if(K2==0)
- {
- delay_315();
- while(K2==0){ v0();v1();v0();m=0;while(m<40);}
- dong=1;
- }
- if(K3==0)
- {
- delay_315();
- while(K3==0){ v0();v1();v1();m=0;while(m<40);}
- dong=1;
- }
- if(K4==0)
- {
- delay_315();
- while(K4==0){ v1();v0();v0();m=0;while(m<40);}
- dong=1;
- }
- if(dong==1)
- {
- dong=0;
- for(i=0;i<5;i++)
- { v0();v0();v0();m=0;while(m<40);
- delay_315(); }
-
- }
- }
- }
- /*
- void EXINT_0() interrupt 0
- {
- delay_315();
- if(K7==0) //發(fā)送指令1
- {
- delay_315();
- while(K7==0){v3();v2();v0();v0();v1();m=0;while(m<40);}
- delay_315();
-
- // dong=1;
- }
- }
- */
- void timer0() interrupt 1
- {
- TH0=(65536-100)/256;
- TL0=(65536-100)%256;
- m++;
- TF0=0;
- }
- /***************************************************************/
- /*【基于51單片機(jī)的無(wú)線遙控小車(chē)設(shè)計(jì)】
- /***************************************************************/
- /*接收部分*/
- #include"STC15F104E.H"
- #define uchar unsigned char
- sbit RX=P3^3; //定義接收腳
- sbit LED=P3^5; //定義繼電器端
- sbit IN1=P3^0; //電機(jī)驅(qū)動(dòng)L
- sbit IN2=P3^1; //電機(jī)驅(qū)動(dòng)L
- sbit IN3=P3^2; //電機(jī)驅(qū)動(dòng)R
- sbit IN4=P3^4; //電機(jī)驅(qū)動(dòng)R
- //void delay10ms(unsigned char a);
- //小車(chē)動(dòng)作函數(shù)
- void run()//前進(jìn)
- {
- IN1=1;//左電機(jī)往前走
- IN2=0;
-
- IN3=1;//右電機(jī)往前走
- IN4=0;
- }
- void backrun()//后退
- {
- IN1=0;//左電機(jī)往后走
- IN2=1;
-
- IN3=0;//右電機(jī)往后走
- IN4=1;
- }
- /*
- void leftrun()//左前
- {
- IN1=0;//左電機(jī)往后走
- IN2=0;
-
- IN3=1;//右電機(jī)往前走
- IN4=0;
- }
- void rightrun()//右前
- {
- IN1=1;//左電機(jī)往前走
- IN2=0;
-
- IN3=0;//右電機(jī)往后走
- IN4=0;
- }
- */
- void lefturn()//左轉(zhuǎn)
- {
- IN1=0;//左電機(jī)往后走
- IN2=1;
-
- IN3=1;//右電機(jī)往前走
- IN4=0;
- }
- void righturn()//右轉(zhuǎn)
- {
- IN1=1;//左電機(jī)往前走
- IN2=0;
-
- IN3=0;//右電機(jī)往后走
- IN4=1;
- }
- void stop()//停止
- {
- IN1=0;//左電機(jī)停止
- IN2=0;
-
- IN3=0;//右電機(jī)停止
- IN4=0;
- }
- uchar m,flag,x,y;
- bit n;
- //PCON2=0X00;
- void main()
- {
- // P3M1 = 0x00;
- // P3M1 = 0xFF;
- uchar a,b,c,p=0; //定義存取的數(shù)據(jù)
- TMOD=0X01;
- TH0=(65536-100)/256; //開(kāi)定時(shí)器0
- TL0=(65536-100)%256;
- EA=1; //開(kāi)總中斷
- ET0=1; //開(kāi)定時(shí)器0中斷
- TR0=1; //啟動(dòng)定時(shí)器0工作
- EX1=1; //允許外部中斷INT1
- IT1=1; //外部中斷INT1為下降沿觸發(fā)方式
- p=0;
- x=0;
- LED=1;
- while(1)
- {
- if(n==1)
- {
- p=a+b+c;
- x++;
- if(x==1)y=p;
- // delay10ms(1);
- if(x==2)
- {
- x=0;
- if(y==p)
- {
- // P2=p;delay100ms(8); P2=0XFF;
- switch(p)
- {
- case 0:stop();break; //停止
- case 1:run()break;
- case 2:backrun();break;
- case 3:lefturn();break;
- case 4:righturn();break;
- // case 5:lefturn();break;
- // case 6:righturn();break;
- // case 7:LED = 1;delay100ms(1); break;
- default:stop();LED = 1;break;
- }
- }
- }
- // stop();LED = 1;
- }
-
- }
- }
- }
- }
- /*
- void delay10ms(unsigned char a)
- {
- unsigned char i,j,k;
- for(i=a;i>0;i--)
- for(j=20;j>0;j--)
- for(k=248;k>0;k--);
- }
- */
- void timer0() interrupt 1
- {
-
- TH0=(65536-100)/256;
- TL0=(65536-100)%256;
- m++;
- // x++;
-
- TF0=0;
- }
- void INT_1() interrupt 2
- {
- n=1;
- }
復(fù)制代碼
作者: Hi℡ 時(shí)間: 2019-5-5 10:14
這也不是用的51啊
作者: vbnm 時(shí)間: 2019-6-13 22:29
樓主 你好.你的程序翻譯不通過(guò)啊
作者: chinayanhui 時(shí)間: 2022-4-4 10:35
哥們,您這發(fā)射接收模塊用的是什么呢?
作者: cwb2038 時(shí)間: 2022-7-13 15:45
謝謝分享,原理圖好像不完整��?請(qǐng)問(wèn)有完整的圖嗎?包括發(fā)射接收的?
作者: bhjyqjs 時(shí)間: 2022-8-3 16:02
大神,像 v0();這類(lèi),你在哪定義的?
歡迎光臨 (http://www.torrancerestoration.com/bbs/) |
Powered by Discuz! X3.1 |