PWM調(diào)速+循跡--智能小車程序_第1頁
PWM調(diào)速+循跡--智能小車程序_第2頁
PWM調(diào)速+循跡--智能小車程序_第3頁
PWM調(diào)速+循跡--智能小車程序_第4頁
PWM調(diào)速+循跡--智能小車程序_第5頁
已閱讀5頁,還剩66頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、PW碉速+循跡-智能小車程序/T0 產(chǎn)生雙路 PWM 信號,L298N 為直流電機調(diào) 速,接 L298N 時相應(yīng)的管腳上最好接上 10K 的 上拉電阻。/* 晶振采用 12M, 產(chǎn)生的 PWM 的頻率約為 100Hz */#include #include #define uchar unsigned char #define uint unsigned int sbit en1=P34; /* L298 的 Enable A */ sbit en2=P35; /* L298 的 Enable B */ sbit s1=P10; /* L298的 Input 1 */ sbit s2=P11;

2、 /* L298的 Input 2 */ sbit s3=P13; /* L298的 Input 3 */ sbit s4=P12; /* L298 的 Input 4 */ sbit R=P20;sbit C=P21; sbit L=P22; sbit key=P14; uchar t=0; /* 中斷計數(shù)器 */ uchar m1=0; /* 電機 1 速度值 */ uchar m2=0; /* 電機 2 速度值 */uchar tmp1,tmp2; /* 電機當(dāng)前速度值 */ /* 電機控制函數(shù) index-電機號 (1,2); speed-電機 速度(0-100) */void mot

3、or(uchar index, char speed)if(speed0;j-); */void delay(uint z)uint x,y;for(x=z;x0;x)for(y=110;y0;y-);void main() uchar i=0j=0;TMOD=0x02; /*設(shè)定TO的工作模式為2 ,8位自 動重置定時器,每過幾個機器周期,計數(shù)器加一TH0=0x9B; /*裝入定時器的初值,計數(shù)100次 溢出*/TL0=0x9B; /*裝入時間常數(shù)勺EA=1; /*開中斷*/ET0=l; /*定時器0允許中斷引TR0=1; /* 啟動定時器 0 */ while(1)if(key=1)/*

4、電機實際控制演示 */ if(i=100) / 正轉(zhuǎn)加速 motor(1,i);motor(2,i); delay(5000);i+;elseGO();elseEA=0;while(1)if(L|C|R)=0)STOP(); if(L&R) GO(); if(L=0) while(C)TL(); if(R=0) while(C)TR();void timer0() interrupt 1 /* T0 中斷服務(wù)程序 */ if(t=0) /* 1個 PWM 周期完成后才會接受新數(shù) 值 */ tmp1=m1;tmp2=m2;if(ttmp1) en1=1; else en1=0; /* 產(chǎn)生電機

5、1 的 PWM 信號 */if(t=100) t=0; /* 1個 PWM 信號由 100次中斷 產(chǎn)生 */#include#include* 宏定義區(qū)*/*LCD 模 塊*/ #defineLCD_RW P2_6 /讀寫控制端 #defineLCD_RS P2_7 /數(shù)據(jù)命令選擇端 #defineLCD_E P2_5 /執(zhí)行使能端 #defineLCD_Data P1 /P1 口 #defineWrite 0x00 /低電平寫入 #defineRead 0x01 /高電平讀出 #defineData 0x01 /高電平選擇數(shù)據(jù) #defineCmd 0x00 /低電平選擇命令 #define

6、Enable 0x00 /躍/ 變到低電平時執(zhí)行命令 #defineDisable 0x01 #defineTrue 0x01 #defineFalse 0x00 #defineLCD_Init 0x38 / 初始化模式 #defineLCD_DispCtr 0x0C / 開顯示及光標(biāo)設(shè)置 #defineLCD_CloseCtr 0x08 /關(guān)顯示 #defineLCD_CLS 0x01 /清屏幕 #defineLCD_EnterSet 0x06 /顯示光標(biāo) #defineBusy P1_7 /忙/ 信號/* 測速 /測 距/測 時 模塊*/#defineCircleLength 0.132

7、/小車轉(zhuǎn)一輪的長度控速模塊為.132m/*/#defineP03 P0_3 /后電機#defineP04 P0_4 /后電機#defineP01 P0_1 /前電機#defineP02 P0_2 /前電機 #defineP31 P0_5 /控制液晶背光 #defineP33 P3_3/*菜單選擇模塊 */ #defineLine 0x00 /0 代表直線模式 #defineCurve 0x01 /1代表 S 型模式 #defineNormal 0x00 /0 代表正常速度 #defineLow 0x01 /1 代表低速 #defineHigh 0x02 /2 代表高速 /* 全局函數(shù)聲明區(qū) *

8、LCD 模 塊/*/ voidLCDInit(void); /LCD 初始化 voidSetWriteCmd(void); /設(shè)置寫命令模式 voidSetReadCmd(void); /設(shè)置讀命令模式 voidSetWriteData(void); /設(shè)置寫數(shù)據(jù)模式 voidWriteCmd(charcmd); /寫命令 voidWriteData(charddata); / 寫數(shù)據(jù) voidExecuteCmd(void); /執(zhí)行命令 voidSetXY(charx,chary); /定位顯示地址 voidDisplaySingleChar(charx,chary,charcchar);

9、 /顯示單個字符 voidDisplayString(charx,chary,char*str); / 顯示 一段字符串 voidDelay(unsignedinttime); /延/ 時主程序 voidDelayUs(unsignedinttime); /延/ 時子程序 bit IsBusy(void); /判斷忙標(biāo)志函數(shù) voidDisplayTime(void); /顯示時間 voidDisplayAVGSpeed(void); /顯示平均速度 voidDisplayDistance(void); /顯/ 示路程/* 測 速 / 測 距 / 測 時 模 塊*/voidINTInit(vo

10、id); / 所有中斷初始化 voidSpeedINT(void); /測速中斷 voidComputeTime(void); voidComputeSpeedANDDistance(void); / 計 算 速度和距離/*控速模塊*/voidCtrSpeedINT(void); / 控速中斷voidTime0INT(void);voidTime1INT(void); / 控速單位時間中斷 voidClock0_Init(void); /時鐘中斷初始化 voidClock1_Init(void); /時鐘中斷初始化 voidCtrSpeed(void);/* 全局變量區(qū)*/float Spee

11、dCount=0; /測速計數(shù)脈沖float Speed=0.0;float Distance=0.0;char Time1INTCount=0; /T1 中斷時間計時 float PassTime=0.00; /小/ 車行走的時間 short IsT0INT=1;bit IsT1INT; / 判斷 T1 是否已經(jīng)響應(yīng)中斷 short IsT0INT2=1;char Thx5=0xf4,0xf4,0xc5,0xf4,0xff; /3ms,3ms,15ms,3mschar Tlx5=0x48,0x48,0x68,0x48,0xff;char Thx0=0xd8;char Tlx0=0xf0;ch

12、ar Thx1=0xb1; /20mschar Tlx1=0xe0;short Round=0;short Back=0; short Back0=0; bit Backid; bit Stop=0;char Area0=0;char Area1=0; /區(qū)域變量char LowSpeedArea1StartTime;char LowSpeedArea1EndTime;char HighSpeedAreaEndTime;char LowSpeedArea2EndTime;char LowSpeedArea1PassTime=0; /第一個低速 區(qū)通過時間char HighSpeedAreaPa

13、ssTime=0; / 高速區(qū)通過 時間char LowSpeedArea2PassTime=0; /第二個低速 區(qū)通過時間char ReadyToGo=4; /倒計時char flag;bit Roundid=0;char Nocurve=0;char ChangeFlag;char Mode;bit Running;bit SelectedAll; /模式和速度是否選擇完畢標(biāo)志bit IsSelectingMode; /模式選擇標(biāo)志bit IsSelectingSpeed; /速/ 度選擇標(biāo)志bit ModeSelected; /已/ 經(jīng)被選擇的模式標(biāo)志 char SelectedMode

14、=10; / 模式選擇是否完畢標(biāo)bit Next; /Next 鍵標(biāo)志bit SpeedSelected; /已/ 經(jīng)被選中的速度方案標(biāo)志 char SelectedSpeed; 速/ 度選擇是否完畢標(biāo)志 bit ChoosingDisplay; /人/ 工選擇菜單開始標(biāo)志 bit SelectedShow; /顯/ 示選擇標(biāo)志 bit SelectedReturn; /返回選擇標(biāo)志 bit Selected; /確定 /返回鍵選擇標(biāo)志 bit ReturnSelection; /返回鍵啟用標(biāo)志 bit AVGSpeedShow; /平均速度顯示標(biāo)志 bit TotalDistanceShow

15、; /總/ 路程顯示標(biāo)志 bit ReturnMain; / 返回主菜單標(biāo)志 bit AutoDisplay; /自動顯示標(biāo)志 bit GoToChoosingDisplay; /人/ 工選擇標(biāo)志 bit AutoMode=0;char PassLineID=0; char PassLine=0;float PrepareDistance; float FirstDistance;float SecondDistance; float ThirdDistance;int FirstHigh;int SecondHigh;int ThirdHigh;float Rate=1.25; /5ms時的

16、速度 float Count=4; /時間的倍數(shù) /* 全局函數(shù)實現(xiàn)區(qū) */*函數(shù)*/voidmain()P01=0;P02=0;P03=0;P04=0;P31=1; /單片機復(fù)位,背光開Delay(40); /延時等待 LCD 啟動 LCDInit(); / 初始化 LCDDisplayString(0x0,0, Starting. );DisplayString(0x0,1,DesignedBy202) Delay(300);WriteCmd(LCD_CLS);EA=1; / 開總中斷EX0=1; / 開 INT0 中斷IT0=1; /INTO 邊沿觸發(fā)EX1=1; / 開 INT1 中斷

17、IT1=1; /INT1 邊沿觸發(fā)選擇);SelectedAll=False; /開/ 始模式和速度選擇 /* 模 式*/ DisplayString(0x0,0,ChooseTheMode DisplayString(0x0,1,youwant. ); Delay(50);WriteCmd(LCD_CLS);IsSelectingMode=True; while(1)WriteCmd(LCD_CLS);DisplayString(0x0,0, LineMode );DisplayString(0x0,1,Next Yes);Delay(300); /延時消除抖動 while(1) /不斷檢測

18、中斷,直到按確定鍵或是 NEXT 鍵if(Next=True) /如果按 Next 鍵則直接跳出 break;if(ModeSelected=True) / 如果按確定鍵則設(shè)置 模式為Line 并跳出SelectedMode=Line;break; / 如果什么鍵都沒有按下,那么一直 顯示等待if(ModeSelected=True) /按下了確定鍵,退出模 式選擇IsSelectingMode=False; break;if(Next=True) /按下了 Next 鍵,顯示下一個菜單項Next=False;WriteCmd(LCD_CLS);DisplayString(0x0,0, Cur

19、veMode );DisplayString(0x0,1,Next Yes);Delay(300); /延時消除抖動while(1) /不斷檢測中斷,直到按確定鍵或是Next 鍵if(Next=True) /如果再一次按下 Next 鍵,則跳 出break;if(ModeSelected=True) /如果按下確定鍵, 則設(shè) 置模式為Curve,并跳出SelectedMode=Curve;break;if(Modese-eaedHTnJe) /aTTMa 圧藏宀-sse-eaingModeuFa-se;break;if(NexirHTHJe) /曲T7 Nexfa淫忒密iNexirFa-se;

20、WHfecmd(LCDICLS)Disp5)ysSTing(oxoo=AufoMode ) DispwysSTingoxonJNexfYes匸 De_ay(300)=團卑羔弗車劇 whi-e(l) 宀if(NexirHTHJe)break;iftodese-eaedHT HJe)宀AOMOdeul;break;if(ModeSelected=True)IsSelectingMode=False;break;if(Next=True)Next=False;continue;Delay(50);選擇WriteCmd(LCD_CLS);/* 速 度*/ if(SelectedMode=Line&Au

21、toMode=0) DisplayString(0x0,0, NowChoosea );Disp5)ysSTing(oxo-1=kindofspeecr);De5)y(50);WHfecmd(LCDICLS)-sse-eaingspeeduTnue; whi-e(l)宀WHfecmd(LCDICLS)Disp5)ysSTing(oxoo=Norma-speed );DispwysSTingoxonJNexfYes匸 De_ay(300)=團卑羔弗車劇 whi-e(l) 宀=h(NexirHTRle)=臺斌 Ne$圧 break;if(speedse-eaedHTHJe)/nMam=w Norm

22、a-半湊圧 宀ThxoiioxecHxoiiox78; /5msThxnii0xf0Hxnii0x60; /4msThx2iiox8BT_TMa-淫Low半湊圧宀se-eaedspeeduLOW;肉Hffi萍血BHW因 R 隔湘禪和Lowbreak;if(speedse-eaedHTnJe)/T7MM7 陸圧 宀-sse-eaingspeeduFa-se;break;if(NexirHTHJe)宀NexirFa-se;WHfecmd(LCDICLS)Disp5)ysSTing(oxoo=High Speed ); DispwysSTingoxonJNexfYes匸 De_ay(300)=團卑羔

23、弗車劇 whi-e(l) 宀 if(NexirHTHJe) /n曲T Nexfa淫w圧break;if(speedse-eaedHTHJe)/nTMa7 淫 茹確離禰R High21ThxoiioxeoH-xoiioxco/ooms ThxniioxeoH-xniioxco; /8ms Thxf2iiox63H-2iioxco; /40ms Thxc3iioxecHxc3iiox78; /5ms se-eaedspeeduHigh;break;if(speedse-eaedHTHJe)/T7Ma7 圧速度選擇IsSelectingSpeed=False; break;if(Next=True)

24、 /再一次按下了 Next 鍵,則循環(huán) 速度選擇Next=False; continue;SelectedAll=True; /標(biāo)志模式選擇和速度選擇完 畢Running=True; Delay(50);WriteCmd(LCD_CLS);/* 顯示所選擇的模式和速度方案*/ if(SelectedMode=Line)DisplayString(0x0,0,ChoosenModeis);DisplayString(0x0,1, Line );Delay(50);WriteCmd(LCD_CLS);if(SelectedMode=Curve)DisplayString(0x0,0,Choosen

25、Modeis);DisplayString(0x0,1, Curve );Delay(50);WriteCmd(LCD_CLS);if(AutoMode=1)DisplayString(0x0,0,ChoosenModeis);DisplayString(0x0,1, AutoMode );Delay(50);WriteCmd(LCD_CLS);if(SelectedMode=Line)if(SelectedSpeed=Normal)DisplayString(0x0,0,ChoosenSpeedis);DisplayString(0x0,1, Normal );Delay(50);Write

26、Cmd(LCD_CLS);if(SelectedSpeed=Low)DisplayString(0x0,0,ChoosenSpeedis);DisplayString(0x0,1, Low );Delay(50);WriteCmd(LCD_CLS);if(SelectedSpeed=High)DisplayString(0x0,0,ChoosenSpeedis);DisplayString(0x0,1, High );Delay(50);WriteCmd(LCD_CLS);INTInit(); / 初始化所有中斷DisplayString(0x0,0,LeftTimesToGo);while(

27、ReadyToGo-)DisplaySingleChar(0x7,1,ReadyToGo+0x30);DisplaySingleChar(0x09,1,s);Delay(300);WriteCmd(LCD_CLS);DisplayString(0x05,0,Go!);Delay(100);WriteCmd(LCD_CLS);DisplayString(0x0,0, Living. );DisplayString(0x0,1,Designedby202);if(SelectedMode=Line&AutoMode=0) flag=Area0;elseflag=1;while(flag5)if(A

28、utoMode=1) / 自動模式switch(PassLineID) case0 : if(IsT0INT=1)P01=P02=P04=0;P03=1; elseP01=P02=P03=P04=0; break;case1 : P01=P02=P03=0;P04=1;break; case2 :P01=P02=P04=0;P03=1; break;default:break;elseif(SelectedMode=Line) /直線模式 flag=Area0;if(IsT0INT=1) P03=1;P04=0;P01=P02=0; elseP03=0;P04=0;P01=P02=0;else

29、 /S 型模式 if(Nocurve0)&B ack!=0)if(Backid=1) P01=1;P02=0;P03=0;P04=1;elseP01=0;P02=1;P03=0;P04=1; Back=1;else if(Round=0) if(IsT0INT2=1) P01=0;P02=0;P03=1;P04=0;elseP01=0;P02=0;P03=0;P04=0;elseif(P33=0)if(IsT0INT2=1)P01=0;P02=0;P03=1;P04=0;elseP01=0;P02=0;P03=0;P04=0;elseEX1=1; if(Round%2)if(IsT0INT2=

30、1)P01=1;P02=0;P03=1;P04=0;Backid=1; elseP01=1;P02=0;P03=0;P04=0;elseif(IsT0INT2=1)P01=0;P02=1;P03=1;P04=0;Backid=0; elseP01=0;P02=1;P03=0;P04=0;if(IsT1INT=1)IsT1INT=0;ComputeTime();ComputeSpeedANDDistance();/補中斷路程,加上最后一次中斷缺失的路程 ComputeSpeedANDDistance();P04=1;P03=0;P01=P02=0;Delay(90);P03=0;P04=0; /

31、行程結(jié)束,小車停止P31=1; /行程結(jié)束,背光開ET0=0x0; / 關(guān) T0 中斷ET1=0x0; / 關(guān) T1 中斷EX1=0x01; /開 INT1 中斷Running=False;AutoDisplay=True; /默認情況下直線模式會自 動顯示各個區(qū)域經(jīng)過的時間WriteCmd(LCD_CLS); if(SelectedMode=Line) /直線模式才顯示 while(1)if(GoToChoosingDisplay=True)break;Delay(200);WriteCmd(LCD_CLS);Delay(200);DisplayString(0,0,LowSpeedArea

32、1);DisplayString(0,1,Costed);DisplaySingleChar(0x0C,1,s);LowSpeedArea1PassTime=LowSpeedArea1End Time-LowSpeedArea1StartTime;DisplaySingleChar(0x0A,1,LowSpeedArea1Pass Time%10+0x30);if(LowSpeedArea1PassTime9) /通過第一個低 速區(qū)的時間超過sDisplaySingleChar(0x0B,1,LowSpeedArea1Pass Time/10+0x30);if(GoToChoosingDisp

33、lay=True)break;Delay(200);WriteCmd(LCD_CLS);Delay(200);DisplayString(0,0,HighSpeedArea);DisplayString(0,1,Costed);DisplaySingleChar(0x0C,1,s);HighSpeedAreaPassTime=HighSpeedAreaEndT ime-LowSpeedArea1EndTime;DisplaySingleChar(0x0A,1,HighSpeedAreaPass Time%10+0x30);if(HighSpeedAreaPassTime9) / 通過高速區(qū)的時

34、間超過 sDisplaySingleChar(0x0B,1,HighSpeedAreaPassTime/10+0x30);if(GoToChoosingDisplay=True)break;Delay(200);WriteCmd(LCD_CLS);Delay(200);DisplayString(0,0,LowSpeedArea2);DisplayString(0,1,Costed);DisplaySingleChar(0x0C,1,s);LowSpeedArea2PassTime=LowSpeedArea2EndTime-HighSpeedAreaEndTime;DisplaySingleC

35、har(0x0A,1,LowSpeedArea2Pass Time%10+0x30);if(LowSpeedArea2PassTime9) /通過第二個低 速區(qū)的時間超 過sDisplaySingleChar(0x0B,1,LowSpeedArea2PassTime/10+0x30);AutoDisplay=False;/* 菜單選擇你想要看的內(nèi)容 -總時間、總路程以及平均速度 */ChoosingDisplay=True;WriteCmd(LCD_CLS);/* 首先顯示主菜單,然后顯示第一個選項 */DisplayString(0x0,0,NowChoosewhat);DisplayStr

36、ing(0x0,1,youwanttosee);Delay(100);while(1)WriteCmd(LCD_CLS);DisplayString(0x0,0, CostedTime );DisplayString(0x0,1,Next Show);Delay(250); /延時消除抖動/* 第 一 次 按 鍵*/ /*不斷檢測確定鍵和 Next 鍵*/ while(1)if(Next=True)break;if(SelectedShow=True)break;/* 按下了確定鍵,顯示第一個選項的內(nèi)容 */ if(SelectedShow=True)SelectedShow=False;Se

37、lectedReturn=False;Selected=False;WriteCmd(LCD_CLS);DisplayString(0,0,CostedTimeis);DisplayTime();DisplayString(0x0A,1,s);ReturnSelection=True; /按下了確定鍵,那么這 個時候開啟返回鍵的功能AVGSpeedShow=False;Delay(250); /延時消除抖動/* 按下了 Next 鍵,則顯示第二個選項 */ if(Next=True) / 按下 Next 鍵,顯示 AVGSpeed 菜單項Next=False;WriteCmd(LCD_CLS)

38、;DisplayString(0x0,0, AVGSpeed );DisplayString(0x0,1,Next Show); ReturnMain=False;ReturnSelection=False; /按下了 Next 鍵,那么 這個時候關(guān)閉返 回鍵的功能AVGSpeedShow=True; /表明 AVGSpeed 選項已 經(jīng)顯示過 了Delay(250); /延時消除抖動/* 第 二 次 按 鍵*/ /*顯示第一個選項的內(nèi)容后又不斷檢測返回鍵 (確定鍵)和 Next 鍵*/while(1) if(Next=True) break;if(Selected=True)break;if

39、(Next=True)Next=False;ReturnMain=False;ReturnSelection=False; /按下了 Next 鍵,那么 這個時候關(guān)閉返回鍵的功能if(AVGSpeedShow=False) / 還 沒 有 顯 示AVGSpeed 選項,顯示它 / 即第一次選擇了確定鍵WriteCmd(LCD_CLS);DisplayString(0x0,0, AVGSpeed );DisplayString(0x0,1,Next Show);TotalDistanceShow=False; /顯/ 示了 AVGSpeed, 則表明 TotalDistance還沒有顯示Dela

40、y(250); /延時消除抖動if(AVGSpeedShow=True) / 已 經(jīng) 顯 示 過AVGSpeed 選項了,則顯示 下一個選項 /即第一次選擇了 Next 鍵 WriteCmd(LCD_CLS);DisplayString(0x0,0,TotalDistance);DisplayString(0x0,1,Next Show);TotalDistanceShow=True; / 表 明 顯 示 了 TotalDistance選項Delay(250); /延時消除抖動 if(Selected=True) /按下了確定鍵或返回鍵SelectedShow=False; SelectedR

41、eturn=False;Selected=False;if(ReturnSelection=True) / 第一次選擇了確定 鍵,故這次按下的是返回鍵 ReturnMain=True; if(ReturnSelection=False)WriteCmd(LCD_CLS); DisplayString(0,0,TheAVGSpeedis);DisplayAVGSpeed();DisplayString(0x0A,1,m/s);ReturnSelection=True; /按下了確定鍵,那么這 個時候開啟返回鍵的功能Delay(250); /延時消除抖動TotalDistanceShow=Fals

42、e;if(ReturnMain=True) /按下了返回鍵,返回主 菜單ReturnMain=False; continue;/* 第 三 次 按 鍵*/* 如果沒有返回主菜單,則繼續(xù)檢測 Next 鍵和 確定鍵 */while(1)if(Next=True) break;if(SelectedShow=True)break;/* 按下 Next 鍵,顯示下一個選項 */ if(Next=True)Next=False;ReturnMain=False;ReturnSelection=False; /按下了 Next 鍵,那么 這個時候關(guān)閉返 回鍵的功能if(TotalDistanceShow

43、=True) ReturnMain=True;if(TotalDistanceShow=False) / 還 沒 有 顯 示 TotalDistance選項,顯示它WriteCmd(LCD_CLS); DisplayString(0x0,0,TotalDistance);DisplayString(0x0,1,Next Show); TotalDistanceShow=True;Delay(250); /延時消除抖動if(Selected=True) /按下了確定鍵或返回鍵SelectedShow=False; SelectedReturn=False;Selected=False; if(R

44、eturnSelection=True) /按下的是返回鍵 ReturnMain=True;if(ReturnSelection=False)if(TotalDistanceShow=False) /表明 AVGSpeed 選項的內(nèi)容還沒有顯示W(wǎng)riteCmd(LCD_CLS);DisplayString(0,0,TheAVGSpeedis); DisplayAVGSpeed();DisplayString(0x0A,1,m/s);ReturnSelection=True;Delay(250); /延時消除抖動 if(TotalDistanceShow=True)WriteCmd(LCD_CL

45、S); DisplayString(0,0,TotalDistance);DisplayDistance();DisplayString(0x0A,1,m);ReturnSelection=True; /按下了確定鍵,那么這 個時候開啟返回鍵的功能Delay(250); /延時消除抖動if(ReturnMain=True) /按下了返回鍵,返回主 菜單ReturnMain=False;continue;/* 第 四 次 按 鍵*/ while(1) if(Next=True) break;if(SelectedShow=True)break;if(Next=True) / 所有菜單項已經(jīng)顯示完

46、畢,返 回主菜單Next=False;ReturnMain=False; ReturnSelection=False; if(TotalDistanceShow=False)WriteCmd(LCD_CLS); DisplayString(0x0,0,TotalDistance);DisplayString(0x0,1,Next Show); TotalDistanceShow=True;Delay(250); /延時消除抖動if(SelectedShow=True)SelectedShow=False;SelectedReturn=False;Selected=False;if(Return

47、Selection=True) /按下的是返回鍵ReturnMain=True;if(ReturnSelection=False)if(TotalDistanceShow=True)WriteCmd(LCD_CLS);DisplayString(0,0,TotalDistance);DisplayDistance();DisplayString(0x0A,1,m);ReturnSelection=True;/按下了確定鍵,那么這 個時候開啟返回鍵的功能Delay(250); /延時消除抖動if(ReturnMain=True) /按下了返回鍵,返回主 菜單ReturnMain=False; continue;/* 第 五 次 按 鍵*/while(1)if(Next=True)break;if(SelectedShow=True)break;if(Next=True) /所有菜單項已經(jīng)顯示完畢,返 回主菜單Next=False;ReturnMain=False;ReturnSelection=False; if(TotalDistanceShow=True) /最后一個選項已 經(jīng)顯示完畢,返回主菜單ReturnMain=True;if(SelectedShow=True

溫馨提示

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

評論

0/150

提交評論