為了方便使用,自己改進了一下遙控器控制智能小車程序,現在分享給大家。
(不同遙控器可能稍有不同,本程序使用的配套遙控器如下圖,如果你的和我不同,可以向賣家索要遙控器資料)
遙控器參考 不同遙控器可能不同.png (649.79 KB, 下載次數: 72)
下載附件
本程序使用的配套遙控器
2017-7-5 15:07 上傳
0.png (54.63 KB, 下載次數: 71)
下載附件
2017-7-10 03:30 上傳
單片機源程序如下:
- #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)
2017-7-5 15:09 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|