基于51单片机的无线遥控小车设计 (附发射接收程序) 关于遥控小车,网上的资料很多,有蓝牙的、有WIFI的、有红外的、还有单片机+PT2262/PT2272编解码芯片的等等,动不动就上演智能小车的节奏,什么避障、什么循迹,讲半天云里雾里的,还不知道真正的遥控在哪里。如果只是需要小车进行简单的前后左右停止操作,需要那么麻烦吗?1.蓝牙版的需要手机APP和蓝牙接收模块(一般十几元,加运费的话也得二十了),另外遥控范围有限,一般在10米以内;2.WIFI版的,难到小车只在有网的地方跑吗?况且WIFI接收模块也不便宜吧;3.红外版的,遥控器只能对着小车遥控,又不是电视机(搁那一直不动),用红外遥控器的,不知道怎么想的;4.还有单片机+PT2262/PT2272编解码芯片的,这个让我不能理解的是既然已经有单片机了,还要编解码芯片做什么呢?好了,话不多说,现在给大家来一款51单片机版(不需要编解码芯片)的无线遥控小车设计,电路原理图及实物照片如下图:
另外需要说明的是,发射接收模块需要自己各接上17cm长的导线作为天线,小车电源的话用一节可充电的锂电池就好,容量最好大一点,小车跑的时间就能长一些,或者把以前不用的手机上的锂电池拆下来接上也可以!遥控器电源采用2节3V(2032的)钮扣电池就可以了。
以下是遥控小车程序代码:
- /***************************************************************/
- /*【基于51单片机的无线遥控小车设计】
- /***************************************************************/
- /*发射部分*/
- #include"STC15F104E.H"
- #define uchar unsigned char
- sbit K0=P3^5;//S4,停止
- sbit K1=P3^4;//S5,前进
- sbit K2=P3^1;//S2,后退
- sbit K3=P3^2;//S1,左转
- sbit K4=P3^0;//S3,右转
- 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; //开定时器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) //发送指令0
- {
- delay_315();
- while(K0==0){ v0();v0();v0();m=0;while(m<40);}
- }
-
- if(K1==0) //发送指令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) //发送指令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单片机的无线遥控小车设计】
- /***************************************************************/
- /*接收部分*/
- #include"STC15F104E.H"
- #define uchar unsigned char
- sbit RX=P3^3; //定义接收脚
- sbit LED=P3^5; //定义继电器端
- sbit IN1=P3^0; //电机驱动L
- sbit IN2=P3^1; //电机驱动L
- sbit IN3=P3^2; //电机驱动R
- sbit IN4=P3^4; //电机驱动R
- //void delay10ms(unsigned char a);
- //小车动作函数
- void run()//前进
- {
- IN1=1;//左电机往前走
- IN2=0;
-
- IN3=1;//右电机往前走
- IN4=0;
- }
- void backrun()//后退
- {
- IN1=0;//左电机往后走
- IN2=1;
-
- IN3=0;//右电机往后走
- IN4=1;
- }
- /*
- void leftrun()//左前
- {
- IN1=0;//左电机往后走
- IN2=0;
-
- IN3=1;//右电机往前走
- IN4=0;
- }
- void rightrun()//右前
- {
- IN1=1;//左电机往前走
- IN2=0;
-
- IN3=0;//右电机往后走
- IN4=0;
- }
- */
- void lefturn()//左转
- {
- IN1=0;//左电机往后走
- IN2=1;
-
- IN3=1;//右电机往前走
- IN4=0;
- }
- void righturn()//右转
- {
- IN1=1;//左电机往前走
- IN2=0;
-
- IN3=0;//右电机往后走
- IN4=1;
- }
- void stop()//停止
- {
- IN1=0;//左电机停止
- IN2=0;
-
- IN3=0;//右电机停止
- IN4=0;
- }
- uchar m,flag,x,y;
- bit n;
- //PCON2=0X00;
- void main()
- {
- // P3M1 = 0x00;
- // P3M1 = 0xFF;
- uchar a,b,c,p=0; //定义存取的数据
- TMOD=0X01;
- TH0=(65536-100)/256; //开定时器0
- TL0=(65536-100)%256;
- EA=1; //开总中断
- ET0=1; //开定时器0中断
- TR0=1; //启动定时器0工作
- EX1=1; //允许外部中断INT1
- IT1=1; //外部中断INT1为下降沿触发方式
- 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;
- }
复制代码
|