智能小車循跡、避障、紅外遙控C語言代碼_第1頁
智能小車循跡、避障、紅外遙控C語言代碼_第2頁
智能小車循跡、避障、紅外遙控C語言代碼_第3頁
智能小車循跡、避障、紅外遙控C語言代碼_第4頁
智能小車循跡、避障、紅外遙控C語言代碼_第5頁
已閱讀5頁,還剩8頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、/智能小車避障、循跡、紅外遙控C語言代碼/實(shí)現(xiàn)功能有超聲波避障,紅外遙控智能小車,紅外傳感器實(shí)現(xiàn)小車自動(dòng)循跡,1602顯示小車的工作狀態(tài),另有三個(gè)獨(dú)立按鍵分別控制三種狀態(tài)的轉(zhuǎn)換/注:每個(gè)小車的引腳配置都不一樣,要注意引腳的配置,但是我的代碼注釋比較多,看起來比較容易一點(diǎn)#include #include #includelcd.h#include #define uchar unsigned char #define uint unsigned int uchar ENCHAR_PuZh18= run ;/1602顯示數(shù)組uchar ENCHAR_PuZh28= back ;uchar ENC

2、HAR_PuZh38= stop ;uchar ENCHAR_PuZh48= left ;uchar ENCHAR_PuZh58= right ;uchar ENCHAR_PuZh68= xunji ;uchar ENCHAR_PuZh78= bizhang;uchar ENCHAR_PuZh88= yaokong;#define HW P2 /紅外傳感器引腳配置P2k口#define PWM P1 /* L298N管腳定義 */* 超聲波引腳控制*/sbit ECHO=P32; /超聲波接收引腳定義 兼紅外遙控按鍵 state_total =2sbit TRIG=P33; /超聲波發(fā)送引腳定

3、義 /紅外控制引腳配置sbit KEY2=P37; /紅外接收器數(shù)據(jù)線兼循跡按鍵state_total= 0sbit KEY1=P34; /獨(dú)立按鍵p3.4控制 自動(dòng)避障 state_total=1 uchar state_total=3,state_2=0;/總狀態(tài)控制全局變量 0為自動(dòng)循跡模塊1為自動(dòng)避障模塊2為紅外遙控 uchar state_1,DAT; /紅外掃描標(biāo)志位 uchar time_1=0,time_2=0;/定時(shí)器1中斷全局變量time_ 2控制PWM脈沖計(jì)數(shù) time_1控制轉(zhuǎn)彎延時(shí)計(jì)數(shù)也做延時(shí)一次0.005s uchar time,timeH,timeL,state=

4、0;/超聲波測量緩沖變量 state為超聲波狀態(tài)檢測控制全局變量 uint count=0;/1602顯示計(jì)數(shù)/*/unsigned char IRCOM7; /紅外接收頭接收數(shù)據(jù)緩存 IRCOM2存放的為數(shù)據(jù)unsigned char Number,distance4,date_data8=0,0,0,0,0,0,0,0; /紅外接收緩存變量/*/void IRdelay(char x); /x*0.14MS 紅外頭專用delayvoid run();void back();void stop();void left_90();void left_180();void right_90();

5、void delay(uint dat);/void init_test();void delay_100ms(uint ms) ;void display(uchar temp); /超聲波顯示 驅(qū)動(dòng)void bizhang_test();void xunji_test();void hongwai_test();void Delay10ms(void); void init_test()/定時(shí)器0 1 外部中斷0 1 延時(shí)初始化 TMOD=0x11; /設(shè)置定時(shí)器0 1 工作方式1 16位初值定時(shí)器 TH1=0Xfe; /裝入初值定時(shí)一次為0.0005s 2000hz TL1=0x0c;

6、TF0=0; /定時(shí)器0方式1計(jì)數(shù)溢出標(biāo)志 TF1=0; /定時(shí)器1方式1計(jì)數(shù)溢出標(biāo)志 ET0=1; /允許定時(shí)器0中斷溢出 ET1=1; /允許定時(shí)器1中斷溢出 EA=1; /開總中斷 if(state_total=1)/為超聲波模塊時(shí)初始化 TRIG=0; /發(fā)射引腳低電平 ECHO=0; / 接收引腳低電平 EX0=0; /關(guān)閉外部中斷 IT0=1; /由高電平變低電平,觸發(fā)外部中斷0 if(state_total=2) /紅外遙控初始化 IT1=1; /外部中斷1為負(fù)跳變觸發(fā) EX1=1; /允許外部中斷1 TRIG=1; / 3.3為高電平I/O口初始化 delay(60); /等待

7、硬件操作 void main() uint i; delay(50); init_test(); TR1=1; /開啟定時(shí)器1 LCD1602_Init() ; delay(50); while(state_2=0) if(KEY1=0)/檢測按鍵s1是否按下Delay10ms();/消除抖動(dòng)if(KEY1=0) state_total=0; /總狀態(tài)定義0為自動(dòng)循跡模塊 1為自動(dòng)避障模塊 2為紅外遙控 while(i30)&(KEY1=0) /檢測按鍵是否松開Delay10ms();i+;i=0; if(TRIG=0)/檢測按鍵s2是否按下Delay10ms();/消除抖動(dòng)if(TRIG=0

8、) state_total=1; /總狀態(tài)定義0為自動(dòng)循跡模塊 1為自動(dòng)避障模塊 2為紅外遙控while(i30)&(TRIG=0) /檢測按鍵是否松開Delay10ms();i+;i=0; if(KEY2=0)/檢測按鍵s3是否按下Delay10ms();/消除抖動(dòng)if(KEY2=0) state_total=2; /總狀態(tài)定義0為自動(dòng)循跡模塊 1為自動(dòng)避障模塊 2為紅外遙控while(i30)&(KEY2=0) /檢測按鍵是否松開Delay10ms();i+;i=0; init_test(); delay(50); /等待硬件操作 50us TR1=0; /關(guān)閉定時(shí)器1 if(state_

9、total=1) /SPEED=90; /自動(dòng)循跡速度控制 高電平持續(xù)次數(shù) 占空比為10的低電平 bizhang_test(); if(state_total=0) / SPEED=98; /自動(dòng)循跡速度控制 高電平持續(xù)次數(shù) 占空比為40的低電平 xunji_test(); if(state_total=2) /SPEED=98; /自動(dòng)循跡速度控制 高電平持續(xù)次數(shù) 占空比為40的低電平 hongwai_test(); void init0_suspend(void) interrupt 0 /3 為定時(shí)器1的中斷號(hào) 1 定時(shí)器0的中斷號(hào) 0 外部中斷1 2 外部中斷0 4 串口中斷 time

10、H=TH0; /記錄高電平次數(shù) timeL=TL0; / state=1; /標(biāo)志狀態(tài)為1,表示已接收到返回信號(hào) EX0=0; /關(guān)閉外部中斷0 void time0_suspend0(void) interrupt 1 /3 為定時(shí)器1的中斷號(hào) 1 定時(shí)器0的中斷號(hào) 0 外部中斷1 2 外部中斷0 4 串口中斷 if(state_total=1) / 自動(dòng)避障初值裝入 TH0=0X00; /裝入初值 TL0=0x00;if(state_total=0) /自動(dòng)循跡初值裝入 TH0=0Xec; /裝入初值 定時(shí)一次0.005s 200hz TL0=0x78; time_1+; /控制轉(zhuǎn)彎延時(shí)計(jì)

11、數(shù) void IR_IN(void) interrupt 2 unsigned char j,k,N=0; EX1 = 0; IRdelay(5); if (TRIG=1) EX1 =1; return; /確認(rèn)IR信號(hào)出現(xiàn) while (!TRIG) /等IR變?yōu)楦唠娖?,跳過9ms的前導(dǎo)低電平信號(hào)。 IRdelay(1); for (j=0;j4;j+) /收集四組數(shù)據(jù) for (k=0;k=30) EX1=1; return; /0.14ms計(jì)數(shù)過長自動(dòng)離開。 /高電平計(jì)數(shù)完畢 IRCOMj=IRCOMj 1; /數(shù)據(jù)最高位補(bǔ)“0” if (N=8) IRCOMj = IRCOMj | 0

12、x80; /數(shù)據(jù)最高位補(bǔ)“1” N=0; /end for k /end for j if(IRCOM2!=IRCOM3) /判斷數(shù)據(jù)碼與數(shù)據(jù)反碼是否正確 真確返回 EX1=1; return; EX1 = 1; void time1_suspend1(void) interrupt 3 /3 為定時(shí)器1的中斷號(hào) 1 定時(shí)器0的中斷號(hào) 0 外部中斷1 2 外部中斷0 4 串口中斷 TH1=0Xec; /裝入初值定時(shí)一次為0.0005s 2000hz TL1=0x78; time_2+; /控制PWM 脈沖計(jì)數(shù) if(state_total!=3) /判斷進(jìn)入按鍵是否按下 進(jìn)入狀態(tài)1 避障 或者

13、 0 循跡 state_2=1; /退出按鍵判斷/*if(time_2100) time_2=0;else if(time_2=SPEED) PWM_g; /頻率為2000hz的占空比為高電平的方波else PWM_l; /為低電平 */ void IRdelay(unsigned char x) /x*0.14MS用于紅外遙控 unsigned char i; while(x-) for (i = 0; i0;c-) for(b=38;b0;b-) for(a=130;a0;a-);void delay(uint dat) /延時(shí)函數(shù)用于初始化 uint i; for(i=dat;i0;i-

14、) _nop_(); void delay_100ms(uint ms) /延時(shí)函數(shù)用于超聲波 uint i,j; for(i=ms;i0;i-) for(j=200;j0;j-) _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); /小車前進(jìn)void run(void) PWM=0X56;/小車后退void back(void) PWM=0XA9; TR1=1; time_2=0; while(time_2=100); /延時(shí)0.2s TR1=0;/小車停止void stop(void) PWM=0X00; /小車左轉(zhuǎn)180 void left_180(

15、) /PWM=0X59; /左兩輪反轉(zhuǎn),右兩輪正轉(zhuǎn) PWM=0X50; /右兩輪正轉(zhuǎn) TR1=1; time_2=0; while(time_2=150); /延時(shí)0.2stime_2=0;while(time_2=150); /延時(shí)0.2s /小車左轉(zhuǎn) 90void left_90(void) PWM=0X59; /左兩輪反轉(zhuǎn),右兩輪正轉(zhuǎn) /PWM=0X50; /右兩輪正轉(zhuǎn) TR0=1; time_1=0;while(time_1=20); /延時(shí)0.2s TR0=0;/小車左轉(zhuǎn) 120void left_120(void) PWM=0X59; /左兩輪反轉(zhuǎn),右兩輪正轉(zhuǎn) / PWM=0X50

16、; /右兩輪正轉(zhuǎn) TR0=1; time_1=0; while(time_1=60); /延時(shí)0.4s TR0=0;/小車右轉(zhuǎn) 90void right_90(void) PWM=0XA6; /左兩輪正轉(zhuǎn) 右兩輪反轉(zhuǎn) /PWM=0X06; /左兩輪正轉(zhuǎn) TR0=1; time_1=0; while(time_1=20); /延時(shí)0.2s TR0=0;/小車右轉(zhuǎn) 120void right_120(void) PWM=0XA6; /左兩輪正轉(zhuǎn) 右兩輪反轉(zhuǎn) /PWM=0X06; /左兩輪正轉(zhuǎn) TR0=1; time_1=0; while(time_1=60); /延時(shí)0.4s TR0=0; /*

17、自動(dòng)避障模塊*/ void display(uchar temp) /判斷障礙距離小車的距離,左轉(zhuǎn)180,前進(jìn),峰呤器報(bào)警1602顯示 uint ge,shi,bai,i; if(temp2) /小于15厘米 小車后退 再左轉(zhuǎn) back(); left_180(); if(count=20) bai=temp/100; /1602顯示數(shù)據(jù) date_data5=bai;shi=(temp%100)/10;date_data 6=shi;ge=temp%100%10; date_data7=ge;for(i=0;i8;i+) LCD1602_WriteCom(0x80+i); LCD1602_W

18、riteData(date_datai+48); count=0; void bizhang_test() int i,j=0; uchar distance_dat; delay(50); for(i=0;idistance1) else distance0=distance1; if(distance0distance2) else distance0=distance2; if(distance0distance3) else distance0=distance3; distance_dat=distance0; j=0; display(distance_dat); count+;

19、void xunji_test() int i; delay(50); for(i=0;i8;i+) LCD1602_WriteCom(0x80+i); LCD1602_WriteData(ENCHAR_PuZh6i); while(1) / delay(10); state_1=HW; DAT=state_1&(0x0f); /判斷低4位的狀態(tài) 每隔5ms檢測一次 switch(DAT) case 0x00: run();break;case 0x01: right_120();break;case 0x02: right_90();break;case 0x04: left_90(); break;case 0x06: run(); break;case 0x03:right_120(); break;case 0x08: left_120();break;case 0x0c: left_120();break;default: run(); break; void hongwai_test() int i;delay(60);for(i=0;i8;i+) LCD1602_WriteCom(0x

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論