基于51單片機的無線遙控小車設(shè)計
//////////////////////////////////////////////////////////***C51程序*******////////////////////////////////////////
#include reg51.h>#define TH0C 0xff#define TL0C 0xf6unsigned int dr_l,dr_r,times; //duty ratio 是占空比的意思。unsigned char flag;sbit leftv=P1^0;sbit leftg=P1^1;sbit rightv =P1^2;sbit rightg =P1^3;sbit ena=P1^4;sbit enb=P1^5;sbit key0=P2^5;sbit key_a=P2^0;sbit key_r=P2^1;sbit key_l=P2^2;sbit key_b=P2^3;void beforeint(void);void main(){while(1){ P2=0xff;if(key0){ena=1;enb=1;if(key_a){flag=1;dr_l=50;dr_r=50;leftv=1;rightv=1;beforeint();}if(key_r){flag=2;dr_l=99;dr_r=1;leftv=1;rightg=1;beforeint();}if(key_l){flag=3;dr_l=1;dr_r=99;leftg=1;rightv=1;beforeint();}if(key_b){flag=4;dr_l=50;dr_r=50;leftg=1;rightg=1;beforeint();}}else{ena=0;enb=0;flag=0;P1=0xff;continue;} }}void beforeint(void){TMOD=0x01;TH0=TH0C;TL0=TL0C;TR0=1;ET0=1;EA=1;}void time0(void) interrupt 1 using 2{times=0;TH0=TH0C;TL0=TL0C;times+=1;if(times>99){times=0;}if(flag==1){if(times=dr_l){leftg=0;}else{leftg=1;}if(times=dr_r){rightg=0;}else{rightg=1;}}else if(flag==2){if(times=dr_l){leftg=0;}else{leftg=1;}if(times=dr_r){rightv=0;}else{rightv=1;} }else if(flag==3){if(times=dr_l){leftv=0;}else{leftv=1;}if(times=dr_r){rightg=0;}else{rightg=1;}}else if(flag==4){if(times=dr_l){leftv=0;} else{leftv=1;}if(times=dr_r){rightv=0;}else{rightv=1;}}}
////////////////////////////////////////////////////******************************///////////////////////////////////
完整的程序代碼從這里下:http://www.51hei.com/ziliao/file/xiaoch.rar
小車的演示視頻:http://v.youku.com/v_show/id_XMTM3MDkyMDA4.html
程序是根據(jù)2272接收到的型號判斷該左轉(zhuǎn)右轉(zhuǎn)還是前進后退,這個是四個基本功能,我們的小車也就實現(xiàn)這些功能,對于電源我們處理的不是很好,只是簡單的將小車共地。并且把L298的邏輯電壓單獨接出來,這個小車以后還是會改進的,呵呵。
后記:該說的都說的差不多了,程序很簡單,我只用了幾個鐘頭包括仿真(Proteus仿真圖就不貼出來了),主要是控制,然后就是產(chǎn)生PWM來進行對小車的調(diào)速,不過調(diào)試的時候 一次通過,雖然轉(zhuǎn)的比較快,但是不影響轉(zhuǎn)彎。有問題請隨意,呵呵。
評論