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

下載本文檔

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

文檔簡介

1、T0產(chǎn)生雙路 PWMW號(hào),L298N為直流電機(jī)調(diào)速,接 L298N時(shí)相應(yīng)的管腳上最好接上10K/*晶振采用12M,產(chǎn)生的PWM勺頻率約為100Hz */ #include<reg51.h>#include<math.h> #define uchar unsigned char #define uint unsigned intsbit en 1=卩3人4; /* L298sbit en2=P 3人5; /* L298sbit s仁P 1人0; /* L298sbit s2=P "1; /* L298sbit s3=P "3; /* L298sbit

2、s4=P1A2; /* L298sbit R=P 2人0;sbit C=P 2人1;sbit L=P 2人2;sbit key=PIM; uchar t=0; /* uchar m1=0; /* uchar m2=0; /*的 Enable A */ 的 Enable B */ 的 的 的 的Input 1 */Input 2 */Input 3 */Input 4 */uchar tmp1,tmp2; /*中斷計(jì)數(shù)器電機(jī) 1 速度值 */電機(jī) 2 速度值 */電機(jī)當(dāng)前速度值 */*/* 電機(jī)控制函數(shù) index- 電機(jī)號(hào) (1,2); speed- 電機(jī)速度 (0-100) */ void

3、motor(uchar index, char speed)if(speed<=100)if(index=1) /*m1=abs(speed); /*s1=1;s2=0;if(index=2) /*電機(jī) 1 的處理 */取速度的絕對(duì)值 */電機(jī) 2 的處理 */m2=abs(speed); /* s3=1; s4=0;電機(jī) 2 的速度控制 */void Back(void) s1=0;s2=1;s3=1;s4=0;void GO(void) s1=1; s2=0; s3=1; s4=0;void TL(void) s1=1;s2=0;s3=0;s4=1;void TR(void) s1=

4、0;s2=1;s3=1;s4=0;void STOP(void)s1=1;s2=1;s3=1;s4=1;/*簡易延時(shí)函數(shù) */void delay(uint j) /* for(j;j>0;j-); */void delay(uint z)uint x,y;for(x=z;x>O;x-)for(y=11O;y>O;y-);void main()uchar i=0,j=0;TMOD=0x02;/*設(shè)定TO的工作模式為2 ,8位自動(dòng)重置定時(shí)器,每過幾個(gè)機(jī)器周期,計(jì)數(shù)器 加一 */THO=Ox9B; /* 裝入定時(shí)器的初值,計(jì)數(shù) 1OO 次溢出 */TLO=Ox9B; /* 裝入時(shí)

5、間常數(shù) */EA=1; /* 開中斷 */ETO=1; /* 定時(shí)器 O 允許中斷 */TRO=1; /* 啟動(dòng)定時(shí)器 O */while(1)if(key=1)/* 電機(jī)實(shí)際控制演示 */if(i<=1OO) / 正轉(zhuǎn)加速motor(1,i);motor(2,i);delay(5OOO);i+;elseGO();elseEA=O;while(1)if(L|C|R)=O)STOP();if(L&R)GO();if(L=0) while(C)TL(); if(R=0) while(C)TR();中斷服務(wù)程序void timer0() interrupt 1 /* T0if(t=o)

6、/* 1 個(gè)PWI周期完成后才會(huì)接受新數(shù)值 tmp1=m1;tmp2=m2;if(t<tmp1) en1=1; else en1=0; /*if(t<tmp2) en2=1; else en2=0; /*t+;if(t>=100) t=0; /* 1個(gè)PWI信號(hào)由*/*/的PwMt號(hào)*/產(chǎn)生電機(jī) 1產(chǎn)生電機(jī)2的PWMt號(hào)*/100 次中斷產(chǎn)生 */#in clude< intrin s.h> #i nclude<AT89X52.h> /* * *宏定義區(qū)*/*LCD模塊*/#defi neRead 0x01 /#defi neData 0x01 /#d

7、efi neCmd 0x00 /#defi neEn able 0x00 /高電平讀出高電平選擇數(shù)據(jù)低電平選擇命令躍變到低電平時(shí)執(zhí)行命令#defineLCD_RW P2_6 / 讀寫控制端#defi neLCD_RS P2_7 /數(shù)據(jù)命令選擇端#defi neLCD_E P2_5 / 執(zhí)行使能端#defi neLCD_Data P1 /P1 口低電平寫入#defi neWrite 0x00 /#defi neDisable 0x01 #defi neTrue 0x01 #defi neFalse 0x00#defi neLCD_I nit 0x38 /初始化模式#defi neLCD_Dis

8、pCtr 0x0C /開顯示及光標(biāo)設(shè)置#defi neLCD_CloseCtr 0x08 /關(guān)顯示#defi neLCD_CLS 0x01 / 清屏幕顯示光標(biāo)#defi neLCD_E nterSet 0x06 /#defi neBusy P1_7 /忙信號(hào)/*/#defi neCircleLe ngth 0.132 /*小車轉(zhuǎn)一輪的長度為.132m控#defi neP04 P0_4 /后電機(jī)#defi neP01 P0 1 /前電機(jī)#defi neP02 P0 2 /前電機(jī)#defi neP31 P0 5 /控制液晶背光#defi neP33 P3_3/*/*/代表直線模式#defi neP

9、03 P0_3 /后電機(jī)#defi neLi ne 0x00 /0#defi neCurve 0x01 /1代表S型模式I*#defi neNormal 0x00 II0#defi neLow 0x01 II1#defi neHigh 0x02 II2代表正常速度 代表低速代表高速*全局函數(shù)聲明區(qū)*II*LCD*/voidLCDI nit(void); /LCD voidSetWriteCmd(void); / voidSetReadCmd(void); / voidSetWriteData(void); / voidWriteCmd(charcmd); / voidWriteData(cha

10、rddata); / voidExecuteCmd(void); / voidSetXY(charx,chary); /初始化設(shè)置寫命令模式設(shè)置讀命令模式設(shè)置寫數(shù)據(jù)模式寫命令寫數(shù)據(jù)執(zhí)行命令定位顯示地址顯示單個(gè)字符 顯示一段字符串voidDis pl ayS in gleChar(charx,chary,charcchar); / voidDis pl ayStri ng(charx,chary,char*str); / voidDelay(u nsig nedi nttime); /延時(shí)主程序voidDelayUs(u nsig nedi nttime); /延時(shí)子程序bit IsBusy(v

11、oid); II 判斷忙標(biāo)志函數(shù) voidDis playTime(void); II 顯示時(shí)間 voidDis playAVGS peed(void); II顯示平均速度voidDis pl ayDista nce(void); II顯示路程I* 測曠I 測 距 I 測 時(shí) 模 塊*IvoidINT In it(void); II所有中斷初始化voidS peedlNT(void); II測速中斷voidCo mpu teTime(void);voidCom pu teS peedANDDista nce(void); III*計(jì)算速度和距離控voidClockOnit(void); II時(shí)

12、鐘中斷初始化voidClockI ln it(void); II時(shí)鐘中斷初始化*IvoidCtrS peedlNT(void); II 控速中斷 voidTimeOINT(void);voidTimellNT(void); II控速單位時(shí)間中斷voidCtrS peed(void);I*全局變量區(qū)* */float SpeedCount=0; /測速計(jì)數(shù)脈沖float Speed=0.0;float Distance=0.0;char Time1INTCount=0; /T1 中斷時(shí)間計(jì)時(shí) float PassTime=0.00; / 小車行走的時(shí)間 short IsT0INT=1;bit I

13、sT1INT; / 判斷 T1 是否已經(jīng)響應(yīng)中斷 short IsT0INT2=1;char Thx5=0xf4,0xf4,0xc5,0xf4,0xff; /3ms,3ms,15ms,3ms char Tlx5=0x48,0x48,0x68,0x48,0xff;char Thx0=0xd8; char Tlx0=0xf0;char Thx1=0xb1; /20ms char Tlx1=0xe0; short Round=0; short Back=0; short Back0=0; bit Backid; bit Stop=0;第一個(gè)低速區(qū)通過時(shí)間 高速區(qū)通過時(shí)間 第二個(gè)低速區(qū)通過時(shí)間char

14、 Area0=0; char Area1=0; / 區(qū)域變量 char LowSpeedArea1StartTime; char LowSpeedArea1EndTime; char HighSpeedAreaEndTime; char LowSpeedArea2EndTime;char LowSpeedArea1PassTime=0; / char HighSpeedAreaPassTime=0; / char LowSpeedArea2PassTime=0; / char ReadyToGo=4; / 倒計(jì)時(shí) char flag;模式和速度是否選擇完畢標(biāo)志模式選擇標(biāo)志 速度選擇標(biāo)志 已經(jīng)被

15、選擇的模式標(biāo)志 模式選擇是否完畢標(biāo)志bit Roundid=0; char Nocurve=0; char ChangeFlag; char Mode; bit Running; bit SelectedAll; / bit IsSelectingMode; / bit IsSelectingSpeed; / bit ModeSelected; /char SelectedMode=10; / bit Next; /Next 鍵標(biāo)志 bit SpeedSelected; /已經(jīng)被選中的速度方案標(biāo)志確定 / 返回鍵選擇標(biāo)志char SelectedSpeed; / bit ChoosingDis

16、play; / bit SelectedShow; / bit SelectedReturn; / bit Selected; /速度選擇是否完畢標(biāo)志 人工選擇菜單開始標(biāo)志 顯示選擇標(biāo)志 返回選擇標(biāo)志bit ReturnSelection; / 返回鍵啟用標(biāo)志 bit AVGSpeedShow; / 平均速度顯示標(biāo)志 bit TotalDistanceShow; /總路程顯示標(biāo)志bit ReturnMain; /返回主菜單標(biāo)志bit AutoDisplay; /自動(dòng)顯示標(biāo)志bit GoToChoosingDisplay; / 人工選擇標(biāo)志 bit AutoMode=0;char PassLin

17、eID=0; char PassLine=0; float PrepareDistance; float FirstDistance; float SecondDistance; float ThirdDistance; int FirstHigh; int SecondHigh; int ThirdHigh;float Rate=1.25; /5ms 時(shí)的速度 float Count=4; / 時(shí)間的倍數(shù) /* *主函數(shù)*/* 全局函數(shù)實(shí)現(xiàn)區(qū) * * */ /*voidmain() P01=0; P02=0; P03=0; P04=0; P31=1; / 單片機(jī)復(fù)位,背光開Delay(40)

18、; / 延時(shí)等待LCD啟動(dòng) LCDInit(); / 初始化 LCD DisplayString(0x0,0," Starting. "); DisplayString(0x0,1,"DesignedBy202");Delay(300); WriteCmd(LCD_CLS);EA=1; / 開總中斷 EX0=1; / 開 INT0 中斷IT0=1; /INTO 邊沿觸發(fā) EX1=1; / 開 INT1 中斷IT1=1; /INT1 邊沿觸發(fā)*/SelectedAll=False; / 開始模式和速度選擇 /* 模式選擇DisplayString(0x0,

19、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); / 延時(shí)消除抖動(dòng) while(1) / 不斷檢測中斷,NEXT鍵Next 鍵則直接跳出

20、 if(Next=True) / 如果按 break;如果按確定鍵則設(shè)置模式為if(ModeSelected=True) /Line 并跳出 SelectedMode=Line; break;那么一直按下了確定鍵,退出模式選擇 / 如果什么鍵都沒有按下, 顯示等待 if(ModeSelected=True) / IsSelectingMode=False; break;Next 鍵,顯示下一個(gè)菜單項(xiàng) if(Next=True) / 按下了 Next=False; WriteCmd(LCD_CLS);DisplayString(0x0,0," CurveMode "); Di

21、splayString(0x0,1,"Next Yes");Delay(300); / 延時(shí)消除抖動(dòng) while(1) / 不斷檢測中斷,直到按確定鍵或是 Next 鍵if(Next=True) / 如果再一次按下 Next 鍵,則跳出 break;如果按下確定鍵,則設(shè)置模式為if(ModeSelected=True) /Curve ,并跳出SelectedMode=Curve; break;按下了確定鍵,退出模式選擇 if(ModeSelected=True) /IsSelectingMode=False;break;if(Next=True) / 再一次按下了 Next

22、 鍵,則循環(huán)模式 選擇Next=False;WriteCmd(LCD_CLS);DisplayString(0x0,0," AutoMode "); DisplayString(0x0,1,"Next Yes");Delay(300); / 延時(shí)消除抖動(dòng) while(1) if(Next=True) break;if(ModeSelected=True)AutoMode=1; break; if(ModeSelected=True)IsSelectingMode=False; break; if(Next=True)Next=False; continu

23、e;Delay(50);WriteCmd(LCD_CLS);*/* 速度選擇 if(SelectedMode=Line&&AutoMode=0)DisplayString(0x0,0," NowChoosea ");DisplayString(0x0,1," kindofSpeed"); Delay(50);WriteCmd(LCD_CLS); IsSelectingSpeed=True;while(1)WriteCmd(LCD_CLS); DisplayString(0x0,0,"NormalSpeed ");Dis

24、playString(0x0,1,"Next Yes");Delay(300); / 延時(shí)消除抖動(dòng) while(1) if(Next=True) / 如果按 Next 鍵則直接跳出 break;if(SpeedSelected=True) / 如果按確定鍵則設(shè)置速度為 Normal 并跳出Thx0=0xec;Tlx0=0x78; /5ms Thx1=0xf0;Tlx1=0x60; /4msThx2=0x8a;Tlx2=0xd0; /30ms Thx3=0xf4;Tlx3=0x48; /3msSelectedSpeed=Normal; break; / 如果什么鍵都沒有按下,

25、那么一 直顯示等待if(SpeedSelected=True) / 按下了確定鍵,退出速度選擇 IsSelectingSpeed=False; break; if(Next=True)Next=False;WriteCmd(LCD_CLS); DisplayString(0x0,0," Low Speed ");DisplayString(0x0,1,"Next Yes");Delay(300); / 延時(shí)消除抖動(dòng) while(1)if(Next=True) / 如果再一次按下 Next 鍵,則跳出 break;if(SpeedSelected=True

26、) / 如果按下確定鍵,則設(shè)置速度為Low,并跳出SelectedSpeed=Low; / 這里沒有速度設(shè)置,因?yàn)槟J(rèn) 速度就是 Low break; if(SpeedSelected=True) / 按下了確定鍵,退出速度選擇IsSelectingSpeed=False; break;if(Next=True)Next=False;WriteCmd(LCD_CLS);DisplayString(0x0,0," High Speed ");DisplayString(0x0,1,"Next Yes");Delay(300); / 延時(shí)消除抖動(dòng) while

27、(1)if(Next=True) / 如果再一次按下 Next 鍵,則跳出 break;if(SpeedSelected=True) / 如果按下確定鍵,則設(shè)置速度為High ,并跳出Thx0=0xe0;Tlx0=0xc0;/8msThx1=0xe0;Tlx1=0xc0; /8msThx2=0x63;Tlx2=0xc0; /40ms Thx3=0xec;Tlx3=0x78; /5msSelectedSpeed=High; break; if(SpeedSelected=True) / 按下了確定鍵,退出速度選擇IsSelectingSpeed=False; break;if(Next=True

28、) /再一次按下了 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)Dis

29、playString(0x0,0,"ChoosenModeis");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)DisplaySt

30、ring(0x0,0,"ChoosenSpeedis");DisplayString(0x0,1," Normal ");Delay(50);WriteCmd(LCD_CLS);if(SelectedSpeed=Low)DisplayString(0x0,0,"ChoosenSpeedis");DisplayString(0x0,1," Low ");Delay(50);WriteCmd(LCD_CLS);if(SelectedSpeed=High)DisplayString(0x0,0,"Choosen

31、Speedis");DisplayString(0x0,1," High ");Delay(50);WriteCmd(LCD_CLS);INTInit(); /初始化所有中斷DisplayString(0x0,0,"LeftTimesToGo"); while(ReadyToGo-)DisplaySingleChar(0x7,1,ReadyToGo+0x30);DisplaySingleChar(0x09,1,'s');Delay(300);WriteCmd(LCD_CLS);DisplayString(0x05,0,"

32、;Go!");Delay(100);WriteCmd(LCD_CLS);DisplayString(0x0,0," Living. ");DisplayString(0x0,1,"Designedby202"); if(SelectedMode=Line&&AutoMode=0) flag=Area0;elseflag=1;while(flag<5)if(AutoMode=1) / 自動(dòng)模式switch(PassLineID)case0 :if(IsT0INT=1)P01=P02=P04=0;P03=1;elseP01=P

33、02=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 /S 型模式if(Nocurve<2)&&Round!=0&&(Back0>0)&&Back!=0) if(Backid

34、=1)P01=1;P02=0;P03=0;P04=1;elseP01=0;P02=1;P03=0;P04=1;Back=1;elseif(Round=0) if(IsT0INT2=1)P01=0;P02=0;P03=1;P04=0;else P01=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=1)P01=1;P02=0;P03=1;P04=0;Backid=1; elseP

35、01=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();/ 補(bǔ)中斷路程,加上最后一次中斷缺失的路程 ComputeSpeedANDDistance();P04=1;P03=0;P01=P02=0;Delay(90);P03=0;P04=0; / 行程結(jié)束,小車停止P31=1; / 行程結(jié)束,背光開ET0=0x0; / 關(guān)

36、 T0 中斷ET1=0x0; / 關(guān) T1 中斷EX1=0x01; / 開 INT1 中斷Running=False;AutoDisplay=True; / 默認(rèn)情況下直線模式會(huì)自動(dòng)顯示各個(gè)區(qū)域 經(jīng)過的時(shí)間WriteCmd(LCD_CLS);if(SelectedMode=Line) / 直線模式才顯示while(1) if(GoToChoosingDisplay=True) break;Delay(200);WriteCmd(LCD_CLS);Delay(200);DisplayString(0,0,"LowSpeedArea1");DisplayString(0,1,&

37、quot;Costed");DisplaySingleChar(0x0C,1,'s');LowSpeedArea1PassTime=LowSpeedArea1EndTime-LowSpeedArea1StartTime; DisplaySingleChar(0x0A,1,LowSpeedArea1PassTime%10+0x30);if(LowSpeedArea1PassTime>9) / 通過第一個(gè)低速區(qū)的時(shí)間超過sDisplaySingleChar(0x0B,1,LowSpeedArea1PassTime/10+0x30); if(GoToChoosingD

38、isplay=True)break;Delay(200);WriteCmd(LCD_CLS);Delay(200);DisplayString(0,0,"HighSpeedArea");DisplayString(0,1,"Costed");DisplaySingleChar(0x0C,1,'s');HighSpeedAreaPassTime=HighSpeedAreaEndTime-LowSpeedArea1EndTime; DisplaySingleChar(0x0A,1,HighSpeedAreaPassTime%10+0x30);

39、if(HighSpeedAreaPassTime>9) / 通過高速區(qū)的時(shí)間超過 s DisplaySingleChar(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');Lo

40、wSpeedArea2PassTime=LowSpeedArea2EndTime-HighSpeedAreaEndTime; DisplaySingleChar(0x0A,1,LowSpeedArea2PassTime%10+0x30);if(LowSpeedArea2PassTime>9) / 通過第二個(gè)低速區(qū)的時(shí)間超過sDisplaySingleChar(0x0B,1,LowSpeedArea2PassTime/10+0x30);AutoDisplay=False;/* 菜 單選 擇你想 要看的 內(nèi)容 - 總時(shí) 間、總 路程 以及平 均速 度*/ChoosingDisplay=Tru

41、e;WriteCmd(LCD_CLS);*/* 首先顯示主菜單,然后顯示第一個(gè)選項(xiàng) DisplayString(0x0,0,"NowChoosewhat"); DisplayString(0x0,1,"youwanttosee");Delay(100);while(1)WriteCmd(LCD_CLS);DisplayString(0x0,0," CostedTime ");DisplayString(0x0,1,"Next Show");Delay(250); / 延時(shí)消除抖動(dòng)/*/* 不斷檢測確定鍵和 Next

42、 鍵*/ while(1) if(Next=True) break;if(SelectedShow=True)break;*/* 按下了確定鍵,顯示第一個(gè)選項(xiàng)的內(nèi)容 if(SelectedShow=True)SelectedShow=False;SelectedReturn=False;Selected=False; WriteCmd(LCD_CLS);DisplayString(0,0,"CostedTimeis");DisplayTime();DisplayString(0x0A,1,"s");ReturnSelection=True; / 按下了確

43、定鍵,那么這個(gè)時(shí)候開啟返回 鍵的功能AVGSpeedShow=False;Delay(250); / 延時(shí)消除抖動(dòng)/* 按下了 Next 鍵,則顯示第二個(gè)選項(xiàng) */if(Next=True)/ 按下 Next 鍵,顯示 AVGSpeec菜單項(xiàng)Next=False;WriteCmd(LCD_CLS);DisplayString(0x0,0," AVGSpeed ");DisplayString(0x0,1,"Next Show");ReturnMain=False;ReturnSelection=False; / 按下了 Next 鍵,那么這個(gè)時(shí)候關(guān)閉返

44、回鍵的功能AVGSpeedShow=True; / 表明 AVGSpeec選項(xiàng)已經(jīng)顯示過了Delay(250); / 延時(shí)消除抖動(dòng)/*/Next 鍵 */* 顯示第一個(gè)選項(xiàng)的內(nèi)容后又不斷檢測返回鍵(確定鍵)和while(1)if(Next=True) break;if(Selected=True)break;if(Next=True)Next=False;ReturnMain=False;ReturnSelection=False; / 按下了 Next 鍵,那么這個(gè)時(shí)候關(guān)閉返 回鍵的功能if(AVGSpeedShow=False)/ 還沒有顯示 AVGSpeec選項(xiàng),顯示它 / 即第一次選擇

45、了確定鍵WriteCmd(LCD_CLS);DisplayString(0x0,0," AVGSpeed ");DisplayString(0x0,1,"Next Show");TotalDistanceShow=False; /顯示了 AVGSpeed 則表明 TotalDistanee 還沒有顯示Delay(250); / 延時(shí)消除抖動(dòng)if(AVGSpeedShow=True)/ 已經(jīng)顯示過 AVGSpeec選項(xiàng)了,則顯示 下一個(gè)選項(xiàng) / 即第一次選擇了 Next 鍵 WriteCmd(LCD_CLS);DisplayString(0x0,0,&qu

46、ot;TotalDistance");DisplayString(0x0,1,"Next Show");TotalDistanceShow=True; / 表明顯示了 TotalDistance 選項(xiàng) Delay(250); / 延時(shí)消除抖動(dòng) if(Selected=True) / 按下了確定鍵或返回鍵 SelectedShow=False;SelectedReturn=False;Selected=False;第一次選擇了確定鍵,故這次按下if(ReturnSelection=True) / 的是返回鍵 ReturnMain=True;if(ReturnSele

47、ction=False)WriteCmd(LCD_CLS); DisplayString(0,0,"TheAVGSpeedis");DisplayAVGSpeed(); DisplayString(0x0A,1,"m/s");ReturnSelection=True; / 按下了確定鍵,那么這個(gè)時(shí)候開啟返回 鍵的功能Delay(250); / 延時(shí)消除抖動(dòng)TotalDistanceShow=False; if(ReturnMain=True) / 按下了返回鍵,返回主菜單 ReturnMain=False; continue; /*/* 如果沒有返回主菜

48、單,則繼續(xù)檢測 Next 鍵和確定鍵 */ while(1)if(Next=True) break;if(SelectedShow=True)break;/* 按下 Next 鍵,顯示下一個(gè)選項(xiàng) */ if(Next=True)Next=False;ReturnMain=False;ReturnSelection=False; / 按下了 Next 鍵,那么這個(gè)時(shí)候關(guān)閉返 回鍵的功能 if(TotalDistanceShow=True) ReturnMain=True;還沒有顯示 TotalDistance 選項(xiàng),顯示它if(TotalDistanceShow=False) /WriteCmd

49、(LCD_CLS); DisplayString(0x0,0,"TotalDistance"); DisplayString(0x0,1,"Next Show"); TotalDistanceShow=True;Delay(250); / 延時(shí)消除抖動(dòng) if(Selected=True) / 按下了確定鍵或返回鍵 SelectedShow=False; SelectedReturn=False;按下的是返回鍵Selected=False; if(ReturnSelection=True) / ReturnMain=True;if(ReturnSelect

50、ion=False)表明AVGSpeec選項(xiàng)的內(nèi)容還沒有 if(TotalDistanceShow=False) / 顯示 WriteCmd(LCD_CLS); DisplayString(0,0,"TheAVGSpeedis");DisplayAVGSpeed();DisplayString(0x0A,1,"m/s");ReturnSelection=True;Delay(250); / 延時(shí)消除抖動(dòng) if(TotalDistanceShow=True) WriteCmd(LCD_CLS); DisplayString(0,0,"TotalD

51、istance"); DisplayDistance(); DisplayString(0x0A,1,"m");ReturnSelection=True; / 按下了確定鍵,那么這個(gè)時(shí)候開啟返回 鍵的功能Delay(250); / 延時(shí)消除抖動(dòng)if(ReturnMain=True) / 按下了返回鍵,返回主菜單 ReturnMain=False; continue;/*/while(1) if(Next=True) break;if(SelectedShow=True) break;if(Next=True) / 所有菜單項(xiàng)已經(jīng)顯示完畢,返 回主菜單 Next=F

52、alse; ReturnMain=False;ReturnSelection=False; if(TotalDistanceShow=False) WriteCmd(LCD_CLS); DisplayString(0x0,0,"TotalDistance"); DisplayString(0x0,1,"Next Show"); TotalDistanceShow=True;Delay(250); / 延時(shí)消除抖動(dòng) if(SelectedShow=True) 按下的是返回鍵SelectedShow=False; SelectedReturn=False; Selected=False; if(ReturnSelection=True) /

溫馨提示

  • 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)論