为了方便使用,自己改进了一下遥控器控制智能小车程序,现在分享给大家。
(不同遥控器可能稍有不同,本程序使用的配套遥控器如下图,如果你的和我不同,可以向卖家索要遥控器资料)
单片机源程序如下:
- #include<AT89x51.H>
- sbit lnfrared_led=P3^2; //定义红外线接收端
- #define Imax 14000 //此处为晶振为11.0592时的取值,
- #define Imin 8000 //如用其它频率的晶振时,
- #define Inum1 1450 //要改变相应的取值。
- #define Inum2 700
- #define Inum3 3000
- /**********************电机驱动模块设置********************/
- #define Left_moto_go {P1_0=1,P1_1=0,P1_2=1,P1_3=0;} //左边两个电机向前
- #define Right_moto_go {P1_4=1,P1_5=0,P1_6=1,P1_7=0;} //右边两个电机向前
- #define Right_moto_back {P1_4=0,P1_5=1,P1_6=0,P1_7=1;} //右边两个电机向后
- #define Left_moto_back {P1_0=0,P1_1=1,P1_2=0,P1_3=1;} //左边两个电机向后
- #define Right_moto_Stop {P1_4=0,P1_5=0,P1_6=0,P1_7=0;} //右边两个电机停转
- #define Left_moto_Stop {P1_0=0,P1_1=0,P1_2=0,P1_3=0;} //左边两个电机停转
- unsigned char f=0;
- unsigned char Im[4]={0x00,0x00,0x00,0x00};
- unsigned char show[2]={0,0};
- unsigned long m,Tc;
- unsigned char IrOK;
- /***************************延时函数*********************************************/
- void delay(unsigned int k)
- {
- unsigned int x,y;
- for(x=0;x<k;x++)
- for(y=0;y<2000;y++);
- }
- /************************外部中断解码程序*****************************************/
- void intersvr0(void) interrupt 1 using 1
- {
- Tc=TH0*256+TL0; //提取中断时间间隔时长
- TH0=0;
- TL0=0; //定时中断重新置零
- if((Tc>Imin)&&(Tc<Imax))
- {
- m=0;
- f=1;
- return;
- } //找到启始码
- if(f==1)
- {
- if(Tc>Inum1&&Tc<Inum3)
- {
- Im[m/8]=Im[m/8]>>1|0x80; m++;
- }
- if(Tc>Inum2&&Tc<Inum1)
- {
- Im[m/8]=Im[m/8]>>1; m++; //取码
- }
- if(m==32)
- {
- m=0;
- f=0;
- if(Im[2]==~Im[3])
- {
- IrOK=1;
- }
- else IrOK=0; //取码完成后判断读码是否正确
- }
- //准备读下一码
- }
-
- }
- /**********************电机运行模式设置*****************************************/
- //前速前进
- void run(void)
- {
- Left_moto_go ; //左电机往前走
- Right_moto_go ; //右电机往前走
- }
- //前速后退
- void back(void)
- {
-
- Left_moto_back ; //左电机往前走
- Right_moto_back ; //右电机往前走
- }
- //左转
- void leftrun(void)
- {
- Left_moto_back ; //左电机往前走
- Right_moto_go ; //右电机往前走
- }
- //右转
- void rightrun(void)
- {
- Left_moto_go ; //左电机往前走
- Right_moto_back ; //右电机往前走
- }
- //停
- void Stop(void)
- {
- Left_moto_Stop ; //左电机往前走
- Right_moto_Stop ; //右电机往前走
- }
- /***********************主函数**********************************************/
- void main(void)
- {
-
- m=0;
- f=0;
- IT0=1;
- EX0=1;
-
- TMOD=0x11;
- TH0=0;
- TL0=0;
- TR0=1;
- EA=1;
-
- delay(100);
- while(1) /*无限循环*/
- {
- if(IrOK==1) //如果处理好后进行红外处理
- {
- switch(Im[2])
- {
- case 0x18: run(); //前进 2
- ……………………
- …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
所有资料51hei提供下载:
红外遥控智能小车.rar
(656.55 KB, 下载次数: 71)
|