《2022年自动往返电动小汽车设计报告 .pdf》由会员分享,可在线阅读,更多相关《2022年自动往返电动小汽车设计报告 .pdf(40页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、1 机电学院测控 2010_1 李菠1001040111 目录1 设计任务1 1.1 要求2 2 方案设计2 2.1路面检测模块3 2.2 LCD显示模块3 2.3测速模块3 2.4控速模块4 3 程序框图4 4 系统的具体设计与实现6 4.1路面检测模块6 4.2 LCD显示模块6 4.3 测速模块6 4.4 控速模块6 4.5 复位电路模块6 4.6 脉冲产生模块7 5 最小系统图7 6 系统程序9 7参考文献39 8 附录39 1. 设计任务:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - -
2、 - - 第 1 页,共 40 页 - - - - - - - - - 2 设计并制作了一个自动往返小汽车,其行驶路线满足所需的要求。1.1 要求:1.1.1 基本要求:(1)分区控制:如(图 1)所示:(图 1)车辆从起跑线出发(出发前,车体不得超出起跑线)。在第一个路程CD 区(36米)以低速行驶,通过时间不低于10s;第二个路程 DE 区(2 米)以高速行驶,通过时间不得多于 4 秒;第三个路程 EF区(36 米)以低速行驶,通过时间不低于8s。1.1.2 发挥部分(1)自动记录、显示一次往返时间(记录显示装置要求安装在车上)。(2)自动记录、显示行驶距离(记录显示装置要求安装在车上)。
3、(3)其它特色与创新。2. 方案设计:根据设计任务要求,并且根据我们自己的需要而附加的功能,该电路的总体框图可分为几个基本的模块,框图如(图2)所示:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 40 页 - - - - - - - - - 3 (图 2) 2.1 路面检测模块:路面黑线检测模块采用反射式红外发射-接收器 ,在车底的前部和中部安装了两个反射式红外传感器 . 2.2 LCD 显示模块:采用 1602LCD ,由单片机的总线模式连接。为节约电源电量并且不影响
4、LCD的功能,LCD的背光用单片机进行控制, 使 LCD的背光在小车行驶的过程中不亮, 因为我们不必看其显示;在其它我们需要看显示的内容的时候LCD背光亮。2.3 测速模块:采用采用霍尔开关元器件A44E检测轮子上的小磁铁从而给单片机中断脉冲,达到测量速度的作用。霍尔元件具有体积小,频率响应宽度大,动态特性好,对外围电路要求简单,使用寿命长,价格低廉等特点,电源要求不高,安装也较为方便。霍尔开关只对一定强度的磁场起作用,抗干扰能力强,因此可以在车轮上安装小磁铁,而将霍尔器件安装在固定轴上,通过对脉冲的计数进行车速测量。其原理图接线如(图3)所示:LCD显 示模块测速模块AT89S51 路面检测
5、控速模块555 定时器名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 40 页 - - - - - - - - - 4 (图 3)2.4 控速模块:采用由双极性管组成的H 桥电路。用单片机控制晶体管使之工作在占空比可调的开关状态,精确调整电机转速。这种电路由于工作在管子的饱和截止模式下,效率非常高;H桥电路保证了可以简单地实现转速和方向的控制;电子开关的速度很快,稳定性也很高,是一种广泛采用的调速技术。其电路原理图如(图4)所示:(图 4)3. 程序框图:单片机主程序框图
6、、速度感应程序框图和铁片感应程序框图分别如(图7)所示。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 40 页 - - - - - - - - - 5 (图 5) 限速模块刹车第 8 条黑线全速行驶全速行驶开始第 3 条黑线设定速度第 4 条黑线全速行驶第 5 条黑线第 6条黑线限速模块刹车第 11 条黑线刹车限速模块停 10s,交替显示路程 ,时间全速倒车第 10 条黑线刹车限速模块刹车限速模块第 9 条黑线停止 ,交替显示往返时间,路程名师资料总结 - - -精品资
7、料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 40 页 - - - - - - - - - 6 4系统的具体设计与实现:4.1 路面检测模块:路面黑线检测模块采用反射式红外发射-接收器 ,在车底的前部和中部安装了两个反射式红外传感器.原理图如图6. 图 6 4.2 LCD 显示模块:采用 1602LCD ,由单片机的总线模式连接。为节约电源,LCD的背光用单片机进行控制。4.3 测速模块:通过霍尔元件感应磁铁来产生脉冲(当霍尔元件在离磁场较近时输出会是高电平,其它时候是低电平 ),一个车轮均匀放四个
8、小磁铁,计算一秒所得的脉冲数,从而计算出一秒小车轮子转动圈数,再测量出小车车轮周长即可计算出小车当前速度,累加可得到当前路程。4.4 控速模块:考虑到元器件的缺少以及我们所用的电路的驱动电机的电路原理图和和小车自带的电路的电机驱动原理图一样,所以暂时使用小车自带的电机驱动电路图。4.5 复位电路模块:单片机的复位电路通过手动来实现,复位电路图如(图7)所示。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 40 页 - - - - - - - - - 7 (图 7)4.6
9、脉冲产生模块:脉冲产生电路采用 555 定时器 . 原理图如图 . U11DIS7O UT3RST48T HR6CO N5T RI2G NDVCC555_V IRTUALR15kohm 50%10kOhmKey = aR2R35kohmC11uF5VVCCD1DIODE_V IRTUALD2DIODE_V IRTUALC20.01uFR41kohm(图 8)5最小系统图:该系统主要用到的是单片机,所以主要的部分是最小系统图,该最小系统图如图9. 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - -
10、 - 第 7 页,共 40 页 - - - - - - - - - 8 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 40 页 - - - - - - - - - 9 (图 9) 6系统程序:按照预定的功能,系统实现预定的功能的程序如下所示:#include#include /* * 宏定义区* */ /*- LCD模块 -*/ #define LCD_RW P2_6 / 读写控制端#define LCD_RS P2_7 / 数据命令选择端#define LCD_E P
11、2_5 / 执行使能端#define LCD_Data P1 /P1 口#define Write 0 x00/ 低电平写入#define Read 0 x01/ 高电平读出#define Data 0 x01/ 高电平选择数据#define Cmd 0 x00/ 低电平选择命令#define Enable 0 x00/ 跃变到低电平时执行命令#define Disable 0 x01#define True 0 x01 #define False 0 x00 #define LCD_Init 0 x38/ 初始化模式#define LCD_DispCtr 0 x0C/ 开显示及光标设置#de
12、fine LCD_CloseCtr 0 x08/ 关显示#define LCD_CLS 0 x01/ 清屏幕#define LCD_EnterSet 0 x06/ 显示光标#define Busy P1_7 / 忙信号/*- 测速 / 测距 / 测时模块 -*/ #define CircleLength 0.132/ 小车转一轮的长度为.132m /*- 控速模块 -*/ #define P03 P0_3 / 后电机#define P04 P0_4 / 后电机#define P01 P0_1 / 前电机#define P02 P0_2 / 前电机#define P31 P0_5 / 控制液晶背
13、光#define P33 P3_3 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 40 页 - - - - - - - - - 10 /*- 菜单选择模块-*/ #define Normal 0 x00/0 代表正常速度#define Low 0 x01/1 代表低速#define High 0 x02/2 代表高速/* * 全局函数声明区 * */ /*- LCD模块 -*/ void LCDInit(void ); /LCD 初始化void SetWriteCmd(
14、 void ); / 设置写命令模式void SetReadCmd(void ); / 设置读命令模式void SetWriteData(void ); / 设置写数据模式void WriteCmd( char cmd); / 写命令void WriteData(char ddata); / 写数据void ExecuteCmd( void ); / 执行命令void SetXY( char x, char y); / 定位显示地址void DisplaySingleChar(char x, char y, char cchar); / 显示单个字符void DisplayString(cha
15、r x, char y, char *str); / 显示一段字符串void Delay( unsignedint time); / 延时主程序void DelayUs( unsignedint time); / 延时子程序bit IsBusy(void ); / 判断忙标志函数void DisplayTime(void ); / 显示时间void DisplayAVGSpeed( void ); / 显示平均速度void DisplayDistance(void ); / 显示路程/*- 测速 / 测距 / 测时模块 -*/void INTInit(void ); / 所有中断初始化void
16、 SpeedINT( void ); / 测速中断void ComputeTime( void ); void ComputeSpeedANDDistance( void ); / 计算速度和距离/*- 控速模块 -*/ void CtrSpeedINT( void ); / 控速中断void Time0INT( void ); void Time1INT( void ); / 控速单位时间中断void Clock0_Init(void ); / 时钟中断初始化void Clock1_Init(void ); / 时钟中断初始化void CtrSpeed( void ); /* * 全局变量区
17、* 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 10 页,共 40 页 - - - - - - - - - 11 */ float SpeedCount = 0; / 测速计数脉冲float Speed = 0.0 ; float Distance = 0.0 ; char Time1INTCount=0; /T1 中断时间计时float PassTime= 0.00 ; / 小车行走的时间short IsT0INT=1; bit IsT1INT; / 判断 T1是否已经响应中断
18、short IsT0INT2=1; char Thx5= 0 xf4 , 0 xf4 ,0 xc5, 0 xf4 , 0 xff ; /3ms,3ms,15ms,3ms char Tlx5= 0 x48, 0 x48,0 x68, 0 x48, 0 xff ; char Thx0=0 xd8; char Tlx0=0 xf0 ; char Thx1=0 xb1; /20ms char Tlx1=0 xe0; short Round= 0; short Back= 0; short Back0= 0; bit Backid; bit Stop=0; char Area0=0; char Area
19、1=0; / 区域变量char LowSpeedArea1StartTime; char LowSpeedArea1EndTime; char HighSpeedAreaEndTime; char LowSpeedArea2EndTime; char LowSpeedArea1PassTime= 0; / 第一个低速区通过时间char HighSpeedAreaPassTime=0; / 高速区通过时间char LowSpeedArea2PassTime= 0; / 第二个低速区通过时间char ReadyToGo= 4; / 倒计时char flag; bit Roundid=0; char
20、 Nocurve=0; char ChangeFlag; char Mode; bit Running; bit SelectedAll; / 速度是否选择完毕标志名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 11 页,共 40 页 - - - - - - - - - 12 bit IsSelectingSpeed; / 速度选择标志bit Next; /Next 键标志bit SpeedSelected; / 已经被选中的速度方案标志char SelectedSpeed; / 速
21、度选择是否完毕标志bit ChoosingDisplay; / 人工选择菜单开始标志bit SelectedShow; / 显示选择标志bit SelectedReturn; / 返回选择标志bit Selected; / 确定 / 返回键选择标志bit ReturnSelection; / 返回键启用标志bit AVGSpeedShow; / 平均速度显示标志bit TotalDistanceShow; / 总路程显示标志bit ReturnMain; / 返回主菜单标志bit AutoDisplay; / 自动显示标志bit GoToChoosingDisplay; / 人工选择标志bit
22、 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 时的速度float Count= 4; / 时间的倍数/* * 全局函数实现区* */ /*- 主函数 -*/ void main() P01=0; P02=0; P03=0; P04=0
23、; P31=1; / 单片机复位,背光开名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 12 页,共 40 页 - - - - - - - - - 13 Delay( 40); / 延时等待 LCD 启动LCDInit(); / 初始化 LCD DisplayString(0 x0, 0, Starting. ); DisplayString(0 x0, 1, Designed By 202); Delay( 300); WriteCmd(LCD_CLS); EA= 1; / 开总中
24、断EX0= 1; / 开INT0中断IT0= 1; /INTO 边沿触发EX1= 1; / 开INT1中断IT1= 1; /INT1 边沿触发SelectedAll=False; / 开始速度选择/*- 速度选择 -*/ if (SelectedMode=Line & AutoMode=0) DisplayString(0 x0, 0, Now Choose a ); DisplayString(0 x0, 1, kind of Speed ); Delay( 50); WriteCmd(LCD_CLS); IsSelectingSpeed=True; while ( 1) WriteCmd(
25、LCD_CLS); DisplayString(0 x0, 0, Normal Speed ); DisplayString(0 x0, 1, Next Yes); Delay( 300); / 延时消除抖动while ( 1) if (Next=True) / 如果按 Next键则直接跳出break ; if (SpeedSelected=True) / 如果按确定键则设置速度为Normal并跳出 Thx 0= 0 xec;Tlx0= 0 x78; /5ms Thx 1= 0 xf0 ;Tlx1= 0 x60; /4ms Thx 2= 0 x8a;Tlx2= 0 xd0; /30ms Thx
26、 3= 0 xf4 ;Tlx3= 0 x48; /3ms SelectedSpeed=Normal; break ; / 如果什么键都没有按下,那么一直显示等待名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 13 页,共 40 页 - - - - - - - - - 14 if (SpeedSelected=True) / 按下了确定键,退出速度选择 IsSelectingSpeed=False; break ; if (Next=True) Next=False; WriteCmd
27、(LCD_CLS); DisplayString(0 x0, 0, Low Speed ); DisplayString(0 x0, 1, Next Yes); Delay( 300); / 延时消除抖动while ( 1) if (Next=True) / 如果再一次按下Next键,则跳出break; if (SpeedSelected=True) / 如果按下确定键,则设置速度为Low,并跳出 SelectedSpeed=Low; / 这里没有速度设置,因为默认速度就是Low break; if (SpeedSelected=True) / 按下了确定键,退出速度选择 IsSelectin
28、gSpeed=False; break ; if (Next=True) Next=False; WriteCmd(LCD_CLS); DisplayString(0 x0, 0, High Speed ); DisplayString(0 x0, 1, Next Yes); Delay( 300); / 延时消除抖动名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 14 页,共 40 页 - - - - - - - - - 15 while ( 1) if (Next=True) /
29、 如果再一次按下 Next键,则跳出break; if (SpeedSelected=True) / 如果按下确定键,则设置速度为High,并跳出 Thx 0= 0 xe0;Tlx0= 0 xc0; /8ms Thx1= 0 xe0;Tlx1= 0 xc0; /8ms Thx2= 0 x63;Tlx2= 0 xc0; /40ms Thx3= 0 xec;Tlx3= 0 x78; /5ms SelectedSpeed=High; break; if (SpeedSelected=True) / 按下了确定键,退出速度选择 IsSelectingSpeed=False; break ; if (N
30、ext=True) / 再一次按下了 Next键,则循环速度选择 Next=False; continue ; SelectedAll=True; / 标志模式选择和速度选择完毕Running=True; Delay( 50); WriteCmd(LCD_CLS); /*- 显示所选择的模式和速度方案 -*/ if (SelectedMode=Line) DisplayString(0 x0, 0, Choosen Mode is ); DisplayString(0 x0, 1, Line ); Delay( 50); WriteCmd(LCD_CLS); 名师资料总结 - - -精品资料欢
31、迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 15 页,共 40 页 - - - - - - - - - 16 if (SelectedMode=Curve) DisplayString(0 x0, 0, Choosen Mode is ); DisplayString(0 x0, 1, Curve ); Delay( 50); WriteCmd(LCD_CLS); if (AutoMode= 1) DisplayString(0 x0, 0, Choosen Mode is ); DisplayString(0
32、x0, 1, AutoMode ); Delay( 50); WriteCmd(LCD_CLS); if (SelectedMode=Line) if (SelectedSpeed=Normal) DisplayString(0 x0, 0, Choosen Speed is); DisplayString(0 x0, 1, Normal ); Delay( 50); WriteCmd(LCD_CLS); if (SelectedSpeed=Low) DisplayString(0 x0, 0, Choosen Speed is); DisplayString(0 x0, 1, Low );
33、Delay( 50); WriteCmd(LCD_CLS); if (SelectedSpeed=High) DisplayString(0 x0, 0, Choosen Speed is); DisplayString(0 x0, 1, High ); Delay( 50); WriteCmd(LCD_CLS); INTInit(); / 初始化所有中断名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 16 页,共 40 页 - - - - - - - - - 17 DisplayS
34、tring(0 x0, 0, Left Times To Go); while (ReadyToGo-) DisplaySingleChar(0 x7, 1,ReadyToGo+0 x30); DisplaySingleChar(0 x09, 1, s); Delay( 300); WriteCmd(LCD_CLS); DisplayString(0 x05, 0, Go!); Delay( 100); WriteCmd(LCD_CLS); DisplayString(0 x0, 0, Living. ); DisplayString(0 x0, 1, Designed by 202); if
35、 (SelectedMode=Line&AutoMode= 0) flag=Area0; else flag=1; while (flag 5) if (AutoMode=1) switch (PassLineID) case 0 : if (IsT0INT= 1) P01=P02=P04=0;P03=1; else P01=P02=P03=P04=0; break ; case 1 : P01=P02=P03=0;P04=1; break ; case 2 : P01=P02=P04=0;P03= 1; break ; default : break ; else if (SelectedM
36、ode=Line) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 17 页,共 40 页 - - - - - - - - - 18 flag=Area0; if (IsT0INT= 1) P03=1;P04=0;P01=P02=0; else P03= 0;P04= 0;P01=P02=0; else if (Nocurve0)&Back!= 0) if (Backid= 1) P01= 1;P02= 0;P03=0;P04= 1; else P01= 0;P02= 1;P03=0
37、;P04= 1; Back=1; else if (Round=0) if (IsT0INT2= 1) P01=0;P02=0;P03=1;P04= 0; else P01=0;P02=0;P03=0;P04= 0; else if (P33=0) if (IsT0INT2= 1) P01=0;P02=0;P03= 1;P04= 0; else P01=0;P02= 0;P03= 0;P04= 0; else EX1= 1; if (Round%2) if (IsT0INT2= 1) P01=1;P02= 0;P03= 1;P04= 0;Backid= 1; else P01=1;P02=0;
38、P03=0;P04=0; else 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 18 页,共 40 页 - - - - - - - - - 19 if (IsT0INT2= 1) P01=0;P02= 1;P03= 1;P04= 0;Backid= 0; else P01=0;P02= 1;P03= 0;P04= 0; if (IsT1INT=1) IsT1INT= 0; ComputeTime(); ComputeSpeedANDDistance(); / 补中断路程,加上最后
39、一次中断缺失的路程ComputeSpeedANDDistance(); P04=1;P03=0;P01=P02=0;Delay( 90); P03=0;P04=0; / 行程结束,小车停止P31=1; / 行程结束,背光开ET0=0 x0; / 关T0中断ET1=0 x0; / 关T1中断EX1= 0 x01; / 开INT1中断Running=False; AutoDisplay=True; / 自动显示各个区域经过的时间WriteCmd(LCD_CLS); if (SelectedMode=Line) while ( 1) if (GoToChoosingDisplay=True) bre
40、ak ; Delay( 200); WriteCmd(LCD_CLS); Delay( 200); DisplayString(0, 0, LowSpeedArea1 ); DisplayString(0, 1, Costed ); DisplaySingleChar(0 x0C,1, s); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 19 页,共 40 页 - - - - - - - - - 20 LowSpeedArea1PassTime=LowSpeedArea1EndT
41、ime-LowSpeedArea1StartTime; DisplaySingleChar(0 x0A,1,LowSpeedArea1PassTime%10+0 x30); if (LowSpeedArea1PassTime 9) / 通过第一个低速区的时间超过s DisplaySingleChar(0 x0B, 1,LowSpeedArea1PassTime/ 10+0 x30); if (GoToChoosingDisplay=True) break ; Delay( 200); WriteCmd(LCD_CLS); Delay( 200); DisplayString(0, 0, Hig
42、hSpeedArea ); DisplayString(0, 1, Costed ); DisplaySingleChar(0 x0C,1, s); HighSpeedAreaPassTime=HighSpeedAreaEndTime-LowSpeedArea1EndTime; DisplaySingleChar(0 x0A,1,HighSpeedAreaPassTime%10+0 x30); if ( HighSpeedAreaPassTime 9) / 通过高速区的时间超过s DisplaySingleChar(0 x0B, 1,HighSpeedAreaPassTime/ 10+0 x3
43、0); if (GoToChoosingDisplay=True) break ; Delay( 200); WriteCmd(LCD_CLS); Delay( 200); DisplayString(0, 0, LowSpeedArea2 ); DisplayString(0, 1, Costed ); DisplaySingleChar(0 x0C,1, s); LowSpeedArea2PassTime=LowSpeedArea2EndTime-HighSpeedAreaEndTime; DisplaySingleChar(0 x0A,1,LowSpeedArea2PassTime%10
44、+0 x30); if ( LowSpeedArea2PassTime 9) / 通过第二个低速区的时间超过s DisplaySingleChar(0 x0B, 1,LowSpeedArea2PassTime/ 10+0 x30); AutoDisplay=False; /*- 菜单选择你想要看的内容- 总时间、总路程以及平均速度 -*/ ChoosingDisplay=True; WriteCmd(LCD_CLS); /* 首先显示主菜单,然后显示第一个选项*/ DisplayString(0 x0, 0, Now Choose what ); DisplayString(0 x0, 1,
45、you want to see ); Delay( 100); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 20 页,共 40 页 - - - - - - - - - 21 while ( 1) WriteCmd(LCD_CLS); DisplayString(0 x0, 0, Costed Time ); DisplayString(0 x0, 1, Next Show); Delay( 250); / 延时消除抖动/*-第一次按键 -*/ /* 不断检测确定键和Next键*/
46、 while ( 1) if (Next=True) break ; if (SelectedShow=True) break ; /* 按下了确定键,显示第一个选项的内容*/ if (SelectedShow=True) SelectedShow=False; SelectedReturn=False; Selected=False; WriteCmd(LCD_CLS); DisplayString(0, 0, Costed Time is); DisplayTime(); DisplayString(0 x0A,1, s ); ReturnSelection=True; / 按下了确定键,
47、那么这个时候开启返回键的功能AVGSpeedShow=False; Delay( 250); / 延时消除抖动 /* 按下了 Next键,则显示第二个选项*/ if (Next=True) / 按下 Next键,显示 AVGSpeed 菜单项 Next=False; WriteCmd(LCD_CLS); DisplayString(0 x0, 0, AVGSpeed ); DisplayString(0 x0, 1, Next Show); ReturnMain=False; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师
48、精心整理 - - - - - - - 第 21 页,共 40 页 - - - - - - - - - 22 ReturnSelection=False; / 按下了 Next键,那么这个时候关闭返回键的功能AVGSpeedShow=True; / 表明 AVGSpeed 选项已经显示过了Delay( 250); / 延时消除抖动 /*-第二次按键 -*/ /* 显示第一个选项的内容后又不断检测返回键(确定键)和Next键*/ while ( 1) if (Next=True) break ; if (Selected=True) break ; if (Next=True) Next=Fals
49、e; ReturnMain=False; ReturnSelection=False; / 按下了 Next键,那么这个时候关闭返回键的功能if (AVGSpeedShow=False) / 还没有显示 AVGSpeed 选项,显示它 / 即第一次选择了确定键WriteCmd(LCD_CLS); DisplayString(0 x0, 0, AVGSpeed ); DisplayString(0 x0, 1, Next Show); TotalDistanceShow=False; / 显示了 AVGSpeed ,则表明 TotalDistance还没有显示Delay( 250); / 延时消
50、除抖动 if (AVGSpeedShow=True) / 已经显示过 AVGSpeed 选项了,则显示下一个选项 / 即第一次选择了Next键WriteCmd(LCD_CLS); DisplayString(0 x0, 0, Total Distance ); DisplayString(0 x0, 1, Next Show); TotalDistanceShow=True; / 表明显示了 TotalDistance选项Delay( 250); / 延时消除抖动 if (Selected=True) / 按下了确定键或返回键 SelectedShow=False; 名师资料总结 - - -精