資源描述:
《智能小車循跡、避障、紅外遙控C語言代碼.doc》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。
1、//智能小車避障、循跡、紅外遙控C語言代碼//實現(xiàn)功能有超聲波避障,紅外遙控智能小車,紅外傳感器實現(xiàn)小車自動循跡,1602顯示小車的工作狀態(tài),另有三個獨立按鍵分別控制三種狀態(tài)的轉(zhuǎn)換//注:每個小車的引腳配置都不一樣,要注意引腳的配置,但是我的代碼注釋比較多,看起來比較容易一點#include#include#include"lcd.h"#include#defineucharunsignedchar#defineuintunsignedintucharENCHAR_PuZh1[8]="run";/
2、/1602顯示數(shù)組ucharENCHAR_PuZh2[8]="back";ucharENCHAR_PuZh3[8]="stop";ucharENCHAR_PuZh4[8]="left";ucharENCHAR_PuZh5[8]="right";ucharENCHAR_PuZh6[8]="xunji";ucharENCHAR_PuZh7[8]="bizhang";ucharENCHAR_PuZh8[8]="yaokong";#defineHWP2//紅外傳感器引腳配置P2k口#definePWMP1/*L298N管腳定義*//**************
3、****************超聲波引腳控制******************************/sbitECHO=P3^2;//超聲波接收引腳定義兼紅外遙控按鍵state_total=2sbitTRIG=P3^3;//超聲波發(fā)送引腳定義/////紅外控制引腳配置sbitKEY2=P3^7;//紅外接收器數(shù)據(jù)線兼循跡按鍵state_total=0sbitKEY1=P3^4;//獨立按鍵p3.4控制自動避障state_total=1ucharstate_total=3,state_2=0;//總狀態(tài)控制全局變量0為自動循跡模塊1為自動避障模塊2
4、為紅外遙控ucharstate_1,DAT;//紅外掃描標志位uchartime_1=0,time_2=0;//定時器1中斷全局變量time_2控制PWM脈沖計數(shù)time_1控制轉(zhuǎn)彎延時計數(shù)也做延時一次0.005suchartime,timeH,timeL,state=0;//超聲波測量緩沖變量state為超聲波狀態(tài)檢測控制全局變量uintcount=0;//1602顯示計數(shù)/**************************/unsignedcharIRCOM[7];//紅外接收頭接收數(shù)據(jù)緩存IRCOM[2]存放的為數(shù)據(jù)unsignedcharNu
5、mber,distance[4],date_data[8]={0,0,0,0,0,0,0,0};//紅外接收緩存變量/***********/voidIRdelay(charx);//x*0.14MS紅外頭專用delayvoidrun();voidback();voidstop();voidleft_90();voidleft_180();voidright_90();voiddelay(uintdat);//voidinit_test();voiddelay_100ms(uintms);voiddisplay(uchartemp);//超聲波顯示驅(qū)動
6、voidbizhang_test();voidxunji_test();voidhongwai_test();voidDelay10ms(void);voidinit_test()//定時器01外部中斷01延時初始化{TMOD=0x11;//設(shè)置定時器01工作方式116位初值定時器TH1=0Xfe;//裝入初值定時一次為0.0005s2000hzTL1=0x0c;TF0=0;//定時器0方式1計數(shù)溢出標志TF1=0;//定時器1方式1計數(shù)溢出標志ET0=1;//允許定時器0中斷溢出ET1=1;//允許定時器1中斷溢出EA=1;//開總中斷if(stat
7、e_total==1)//為超聲波模塊時初始化{TRIG=0;//發(fā)射引腳低電平ECHO=0;//接收引腳低電平EX0=0;//關(guān)閉外部中斷IT0=1;//由高電平變低電平,觸發(fā)外部中斷0}if(state_total==2)//紅外遙控初始化{IT1=1;//外部中斷1為負跳變觸發(fā)EX1=1;//允許外部中斷1TRIG=1;//3.3為高電平I/O口初始化}delay(60);//等待硬件操作}voidmain(){uinti;delay(50);init_test();TR1=1;//開啟定時器1LCD1602_Init();delay(50);w
8、hile(state_2==0){if(KEY1==0)//檢測按鍵s1是否按下{Delay1