6单片机的多功能智能小车设计_第1页
6单片机的多功能智能小车设计_第2页
6单片机的多功能智能小车设计_第3页
已阅读5页,还剩46页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、作者:Pan Hon glia ng仅供个人学习摘要(关键词:智能车 AT89S52单片机金属感应器霍尔元件1602LCD智能作为现代地新发明,是以后地发展方向,他可以按照预先设定地模式 在一个环境里自动地运作,不需要人为地管理,可应用于科学勘探等等地用途. 智能电动车就是其中地一个体现本次设计地简易智能电动车,采用AT89S52 单片机作为小车地检测和控制核心;采用金属感应器TL-Q5MC来检测路上感应 到地铁片,从而把反馈到地信号送单片机,使单片机按照预定地工作模式控制 小车在各区域按预定地速度行驶,并且单片机选择地工作模式不同也可控制小 车顺着S形铁片行驶;采用霍尔元件 A44E检测小车

2、行驶速度;采用1602LCD 实时显示小车行驶地时间,小车停止行驶后,轮流显示小车行驶时间、行驶距离、 平均速度以及各速度区行驶地时间.本设计结构简单,较容易实现,但具有高度 地智能化、人性化,一定程度体现了智能.目录1 设计任务 31.1 要求 32 方案比较与选择 42.1 路面检测模块 42.2 LCD显示模块 52.3 测速模块 52.4 控速模块 62.5 模式选择模块 73 程序框图 74 系 统 地 具 体 设 计 与 实现 94.1 路面检测模块 94.2 LCD显示模块 94.3 测速模块 94.4 控速模块 94.5 复位电路模块 94.6 模式选择模块 95 最小系统图

3、106 最终PCB板图 127 系统程序 138 致谢 469 参考文献 4710 附录 481. 设计任务:设计并制作了一个智能电动车,其行驶路线满足所需地要求1.1要求:基本要求:(1) 分区控制:女口(图1)所示:(图1)车辆从起跑线出发(出发前,车体不得超出起跑线).在第一个路程CD区 (36米)以低速行驶,通过时间不低于10s;第二个路程DE区(2米)以高 速行驶,通过时间不得多于4秒;第三个路程EF区(36米)以低速行驶,通 过时间不低于10s.(2)小车能自动记录、显示行驶时间、行驶距离以及行驶速度,还能记录每段所走地时间,从而判断是否符合课程设计要求 .(记录显示装置要求安装在

4、车 上).发挥部分:S型控制:如(图2)所示:(图2)车辆沿着S形铁片行驶,自动转弯,自动寻找正确方向和铁片.当离开S型铁片 跑道或者感应不到铁片一段时间地时候 ,小车自动停止,并记录行驶时间,路程,平 均速度并通过LCD显示出来.2. 方案比较与选择:根据设计任务要求,并且根据我们自己地需要而附加地功能 ,该电路地总体 框图可分为几个基本地模块,框图如(图3)所示:(图3)2.1路面检测模块:采用铁片感应器TL-Q5MC来检测路面上地铁片从而给单片机中断脉冲.原理 图接线如(图4)所示:(图4)2.2 LCD显示模块:采用1602LCD,由单片机地总线模式连接.为节约电源电量并且不影响LCD

5、地功能丄CD地背光用单片机进行控制,使LCD地背光在小车行驶地过程中不亮,因 为我们不必看其显示;在其它我们需要看显示地内容地时候LCD背光亮.2.3测速模块: 2.3.1 方案 1 :采用采用霍尔开关元器件A44E检测轮子上地小磁铁从而给单片机中断脉冲 达到测量速度地作用霍尔元件具有体积小,频率响应宽度大,动态特性好,对外 围电路要求简单,使用寿命长,价格低廉等特点,电源要求不高,安装也较为方便 霍尔开关只对一定强度地磁场起作用,抗干扰能力强,因此可以在车轮上安装小 磁铁,而将霍尔器件安装在固定轴上,通过对脉冲地计数进行车速测量.232方案2 :采用红外传感器进行测速.但无论是反射式红外传感

6、器还是对射式红外传感器,他们对都对外围环境要求较高,易受外部环境地影响,稳定性不高,且价格较为昂贵.通过对方案1方案2地比较其优缺点,综合多方面因素决定选用方案1,其原理图接线如(图5)所示:(图5)2.4控速模块:2.4.1 方案 1 :使用功率三极管作为功率放大器地输出控制直流电机.线性型驱动地电路结构和原理简单,成本低,加速能力强,但功率损耗大,特别是低速大转距运行时 通过电阻R地电流大,发热厉害,损耗大,对于小车地长时间运行不利.2.4.2 方案 2 :采用继电器对电动机地开或关进行控制,通过开关地切换对小车地速度进行调整.此方案地优点是电路较为简单,缺点是继电器地响应时间慢,易损坏,

7、寿 命较短,可靠性不高.2.4.3 方案 3 :采用由双极性管组成地H桥电路.用单片机控制晶体管使之工作在占空比可 调地开关状态,精确调整电机转速.这种电路由于工作在管子地饱和截止模式下效率非常高;H桥电路保证了可以简单地实现转速和方向地控制;电子开关地速度很快,稳定性也很高,是一种广泛采用地调速技术综合3种方案地优缺点,决定选择方案3,其电路原理图如(图6)所示:(图6)2.5模式选择模块:模式选择模块通过一个74LS00与非门和两个不带锁按钮来控制单片机单片 机地两个中断口,从而按动按钮来选择小车走动地路型、来选择小车地速度是快 速、中速、慢速;走完路程小车停止后还可以通过按钮选择想要在L

8、CD上想看地信息,比如总时间、走过各段路程地时间、平均速度、总路程等小车走动地模式选择有:(1)直线型:满足设计任务地基本要求,能稳定地走完全程.之后按顺序 循环不断地显示走完全程所用地时间、走完高速区所用地时间和走完低速区所用地时间这三个时间;或者可以通过两个按钮以及LCD显示地菜单选择所要看地内容如平均速度、全程距离以及那三个时间(2)S型:满足设计任务地发挥部分地要求,小车能自动地感应到在前面或在后面铁片,即第一次转弯后若感应到地是错误地方向 ,则小车会后退自动调 整方向,沿着S型地铁片走当走完S型铁片后地一定时间里,小车自动停止之 后自动进入菜单由我们自己选择要看地内容时间、平均速度和

9、所走地距离(3)自动型:小车先以一定地速度走完全程 ,之后再以一定地速度倒退回 起点,再调整速度在一定地时间内走完全程走完后LCD显示地内容与直线型显 示地内容一样3. 程序框图:单片机主程序框图、速度感应程序框图和铁片感应程序框图分别如(图7)所示.(图7)4. 系统地具体设计与实现:4.1路面检测模块:应用一个金属感应器,安装在车盘下,离地略小于或约四毫米当金属传感器 检测到铁片时将对单片机发送中断信号 ,单片机运行中断,改变输给电机驱动信 号地电压占空比来控制小车地速度.4.2 LCD显示模块:采用1602LCD由单片机地总线模式连接.为节约电源丄CD地背光用单片机 进行控制.4.3测速

10、模块:通过霍尔元件感应磁铁来产生脉冲(当霍尔元件在离磁场较近时输出会是高 电平,其它时候是低电平),一个车轮均匀放四个小磁铁,计算一秒所得地脉冲数 从而计算出一秒小车轮子转动圈数 ,再测量出小车车轮周长即可计算出小车当 前速度,累加可得到当前路程.4.4控速模块:考虑到元器件地缺少以及我们所用地电路地驱动电机地电路原理图和和小 车自带地电路地电机驱动原理图一样 ,所以暂时使用小车自带地电机驱动电路 图.4.5复位电路模块:单片机地复位电路通过手动来实现,复位电路图如(图8)所示.(图8)4.6模式选择模块:两个中断口使用和感应铁片、感应速度所使用地中断口一样,通过一个与非门和按钮控制.原理图如

11、(图9)所示:(图9)5. 最小系统图:该系统主要用到地是单片机,所以主要地部分是最小系统图,该最小系统图 如(图10)所示:(图 12)6. 最终PCB板图:该最小系统地最终PCB板图(包括LCD接 口以及其他地外部扩展电路部分 考虑到最小系统地简洁以及容易看懂,外部扩展电路不在最小系统图上显示.) 分别如(图11 )、(图12)所示:(图 11)(图7. 系统程序:按照预定地功能,系统实现预定地功能地程序如下所示:#include <intrins.h>#include <AT89X52.h>/*宏定义区*/*LCD模块*/#defineLCD_RWP2_6/读写控

12、制端#defineLCD_RSP2_7/数据命令选择端#defineLCD_EP2_5/执行使能端#defineLCD_DataP1/P1 口#defineWrite0x00/低电平写入#defineRead0x01/高电平读岀#defineData0x01/高电平选择数据#defineCmd0x00/低电平选择命令#defineEnable0x00/跃变到低电平时执行命令#defineDisable0x01#defineTrue0x01#defineFalse0x00#defineLCD_Init0x38/初始化模式#defineLCD_DispCtr0x0C/开显示及光标设置#define

13、LCD_CloseCtr0x08/关显示#defineLCD_CLS0x01/清屏幕#defineLCD_EnterSet0x06/显示光标#defineBusyP1_7/忙信号/*测速/测距/测时模块-*/#defineCircleLength0.132/小车转一轮地长度为.132m/*控速模块*/#defineP03P0_3/后电机#defineP04P0_4/后电机#defineP01P0_1/前电机#defineP02P0_2/前电机#defineP31P0_5/控制液晶背光#defineP33P3_3/*菜单选择模块*/#defineLine0x000代表直线模式#defineCur

14、ve0x011代表S型模式#defineNormal0x000代表正常速度#defineLow0x011代表低速#defineHigh0x022代表高速咲*全局函数声明区咲*/* LCD模块*/void LCDInit( void );/LCD 初始化voidSetWriteCmd( void );/设置写命令模式voidSetReadCmd(void );/设置读命令模式voidSetWriteData( void );/设置写数据模式voidWriteCmd( char cmd);/写命令voidWriteData( char ddata);/写数据voidExecuteCmd( void

15、 );/执行命令voidSetXY( char x, char y);/定位显示地址voidDisplaySingleChar( char x, char y, char cchar);/显示单个字符voidDisplayString( char x, char y, char *str);/显示一段字符串voidDelay( unsigned int time);/延时主程序voidDelayUs( unsigned int time);/延时子程序bit IsBusy( void );/判断忙标志函数voidDisplayTime( void );/显示时间voidDisplayAVGSp

16、eed( void );/显示平均速度voidDisplayDistance( void );/显示路程/* 测速/测距/测时模块 */ void CtrSpeed( void );void INTInit( void );void SpeedINT( void );void ComputeTime( void );void ComputeSpeedANDDistance( void );/*void CtrSpeedlNT( void );void Time0INT( void );void Time1INT( void );void ClockO_lnit(void );void Cloc

17、k1_Init(void );/所有中断初始化/测速中断/计算速度和距离控速模块*/控速中断/控速单位时间中断/时钟中断初始化/时钟中断初始化/*全局变量区*floatSpeedCount =0;/测速计数脉冲floatSpeed =0.0;floatDistance =0.0 ;charTime1INTCount= 0;T1中断时间计时floatPassTime= 0.00 ;/小车行走地时间shortIsT0INT= 1;bitIsT1INT;/判断T1是否已经响应中断shortIsT0INT2= 1;charThx 5= 0xf4,0xf4,0xc5, 0xf4,0xff ;3ms,3m

18、s,15ms,3mscharTlx 5= 0x48, 0x48, 0x68, 0x48, 0xff ;charThx0= 0xd8;charTlx0= 0xf0 ;charThx 1= 0xb1;/20mscharTlx1= 0xe0;shortRound= 0;shortBack= 0;shortBack0= 0;bitBackid;bitStop= 0;charArea0= 0;charArea1= 0;/区域变量charLowSpeedArea1StartTime;charLowSpeedArea1EndTime;charHighSpeedAreaEndTime;charLowSpeed

19、Area2EndTime;charLowSpeedArea1PassTime= 0;/第一个低速区通过时间charHighSpeedAreaPassTime= 0;/高速区通过时间charLowSpeedArea2PassTime= 0;/第二个低速区通过时间charReadyToGo= 4;/倒计时charflag;bitRoundid= 0;charNocurve= 0;charChangeFlag;charMode;bitRunning;bitSelectedAll;/模式和速度是否选择完毕标志bitIsSelectingMode;/模式选择标志bitIsSelectingSpeed;/

20、速度选择标志bitModeSelected;/已经被选择地模式标志charSelectedMode= 10;/模式选择是否完毕标志bitNext;/Next键标志bitSpeedSelected;/已经被选中地速度方案标志charSelectedSpeed;/速度选择是否完毕标志bitChoosingDisplay;/人工选择菜单开始标志bitSelectedShow;/显示选择标志bitSelectedReturn;/返回选择标志bitSelected;/确定/返回键选择标志bitReturnSelection;/返回键启用标志bitAVGSpeedShow;/平均速度显示标志bitTota

21、lDistanceShow;总路程显示标志bitReturnMain;/返回主菜单标志bitAutoDisplay;/自动显示标志bitGoToChoosingDisplay;/人工选择标志bitAutoMode= 0;charPassLineID= 0;charPassLine= 0;floatPrepareDistance;floatFirstDistance;floatSecondDistance;floatThirdDistance;intFirstHigh;intSecondHigh;intThirdHigh;floatRate= 1.25 ;/5ms时地速度floatCount=

22、4;/时间地倍数/*、*全局函数实现区*/* 主函数*/void main()P01= 0;P02=0;P03=0;/单片机复位,背光开/延时等待LC:启动/初始化LCDP04=0;P31=1;Delay( 40);LCDInit();DisplayString(0x0,0," Starting.");DisplayString( 0x0, 1, "Designed By 202"); Delay( 300);WriteCmd(LCD_CLS);EA=1;/开总中断EX0=1;ITO= 1;EX1=1;IT 1=1;SelectedAII=False;/

23、开INTO中断/INTO边沿触发/开INT1中断/INT1边沿触发/开始模式和速度选择/* 模式选择DisplayString(0x0, 0, "Choose The Mode ");DisplayString( 0x0, 1, "you want. ");Delay( 50);WriteCmd(LCD_CLS);*/lsSelectingMode=True;while (1)WriteCmd(LCD_CLS);DisplayString( 0x0, 0, " Line Mode ");DisplayString( 0x0, 1, &

24、quot;Next Yes" );Delay( 300);while ( 1)键if (Next=True)break;if (ModeSelected=True)SelectedMode=Line;break;等待if (ModeSelected=True)IsSelectingMode=False; break ;if (Next=True)Next=False;WriteCmd(LCD_CLS);DisplayString( 0x0,0," Curve Mode "DisplayString( 0x0, 1, "Next Yes"/延时消

25、除抖动/不断检测中断,直到按确定键或是NEXT/如果按Next键则直接跳岀/如果按确定键则设置模式为Line并跳岀/如果什么键都没有按下,那么一直显示/按下了确定键,退岀模式选择/按下了 Next键,显示下一个菜单项Delay( 300);););/延时消除抖动while (1)键if (Next=True)break;if (ModeSelected=True) 岀SelectedMode=Curve; break;/不断检测中断,直到按确定键或是Next/如果再一次按下Next键,则跳出/如果按下确定键,则设置模式为Curve,并跳if (ModeSelected=True)lsSelec

26、tingMode=False;break ;if (Next=True)Next=False;WriteCmd(LCD_CLS);DisplayString( 0x0,0," AutoModeDisplayString( 0x0, 1, "Next Yes"Delay( 300);while (1)if (Next=True)break;if (ModeSelected=True)AutoMode=1;break;if (ModeSelected=True)IsSelectingMode=False;break ;if (Next=True)/按下了确定键,退岀模

27、式选择/再一次按下了 Next键,则循环模式选择););/延时消除抖动Next=False; continue ;Delay( 50);WriteCmd(LCD_CLS);/* 速度选择*/if (SelectedMode=Line && AutoMode= 0)DisplayString(0x0, 0, " Now Choose a ");DisplayString(0x0, 1, " kind of Speed ");Delay( 50);WriteCmd(LCD_CLS);lsSelectingSpeed=True;while (1

28、)WriteCmd(LCD_CLS);DisplayString( 0x0,0," Normal SpeedDisplayString( 0x0, 1, "Next Yes"Delay( 300);while (1)if (Next=True)break;if (SpeedSelected=True)跳岀Thx 0= 0xec;Tlx 0= 0x78;Thx 1= 0xf0 ;Tlx 1=0x60;Thx 2= 0x8a;Tlx 2= 0xd0;Thx 3= 0xf4 ;Tlx 3= 0x48;SelectedSpeed=Normal;break;等待if (Sp

29、eedSelected=True););/延时消除抖动/如果按Next键则直接跳岀/如果按确定键则设置速度为Normal并/5ms/4ms/30ms/3ms/如果什么键都没有按下,那么一直显示/按下了确定键,退岀速度选择IsSelectingSpeed=False;跳岀break;if (Next=True)Next=False;WriteCmd(LCD_CLS);DisplayString( 0x0,0," Low SpeedDisplayString( 0x0, 1, "Next Yes"Delay( 300);while (1)if (Next=True)b

30、reak ;if (SpeedSelected=True)SelectedSpeed=Low;););/延时消除抖动/如果再一次按下Next键,则跳出/如果按下确定键,则设置速度为Low,并/这里没有速度设置,因为默认速度就是Lowbreak ;if (SpeedSelected=True)lsSelectingSpeed=False; break;/按下了确定键,退岀速度选择if (Next=True)Next=False;WriteCmd(LCD_CLS);DisplayString(0x0, 0," High SpeedDisplayString( 0x0, 1, "

31、Next Delay( 300);while (1)if (Next=True)break ;);Yes" );/延时消除抖动/如果再一次按下Next键,则跳出Thx 0= 0xe0 ;Tlx0= 0xc0;/8 msThx1= 0xe0;Tlx1 = 0xc0;/8msThx2= 0x63;Tlx2= 0xc0;/40msThx3= 0xec;Tlx3= 0x78;/5msSelectedSpeed=High; break ;if (SpeedSelected=True)lsSelectingSpeed=False; break;if (Next=True)Next=False;c

32、ontinue ;SelectedAII=True;/按下了确定键,退岀速度选择/再一次按下了 Next键,则循环速度选择/标志模式选择和速度选择完毕Running=True;Delay( 50);WriteCmd(LCD_CLS);/* 显示所选择地模式和速度方案 */if (SelectedMode=Line)DisplayString(0x0, 0, "Choosen Mode is ");DisplayString(0x0, 1, " Line ");Delay( 50);WriteCmd(LCD_CLS);if (SelectedMode=Cu

33、rve)DisplayString( 0x0, 0, "Choosen Mode is ");DisplayString( 0x0, 1, " Curve ");Delay( 50);WriteCmd(LCD_CLS);if (AutoMode= 1)DisplayString( 0x0, 0, "Choosen Mode is ");DisplayString( 0x0, 1, " AutoMode ");Delay( 50);WriteCmd(LCD_CLS);if (SelectedMode=Line)if

34、(SelectedSpeed=Normal)DisplayString( 0x0,0, "Choosen Speed is");DisplayString( 0x0, 1," Normal ");Delay( 50);WriteCmd(LCD_CLS);if (SelectedSpeed=Low)DisplayString( 0x0,0, "Choosen Speed is");DisplayString( 0x0, 1," Low ");Delay( 50);WriteCmd(LCD_CLS);if (Selec

35、tedSpeed=High)DisplayString( 0x0,0, "Choosen Speed is");DisplayString( 0x0,1," High ");Delay( 50);WriteCmd(LCD_CLS);/初始化所有中断INTInit();DisplayString( 0x0, 0, "Left Times To Go" );while (ReadyToGo-)DisplaySingleChar( 0x7, 1,ReadyToGo+0x30);DisplaySingleChar( 0x09, 1, '

36、;s');Delay( 300);WriteCmd(LCD_CLS);DisplayString( 0x05,0, "Go!");Delay( 100);WriteCmd(LCD_CLS);DisplayString(0x0, 0," Living.");DisplayString(0x0, 1, "Designed by 202");if (SelectedMode=Line&&AutoMode= 0)flag=Area0;elseflag= 1;while (flag< 5)if (AutoMode=

37、 1)switch (PassLineID)case 0 :if (lsT0INT= 1)P01=P02=P04=0;P03=1;elseP01=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 ;elseif (SelectedMode=Line)flag=Area0;if (IsT0INT= 1)P03=1;P04=0;P01=P02=0;else/自动模式/直线模式P03= 0;P04=0;P01=P02=0;elseS型模

38、式if (Nocurvev 2)&&Round!=0&&(Back0>0)&&Back!= 0)if (Backid= 1)P01= 1;P02=0;P03=0;P04=1;elseP01= 0;P02=1;P03=0;P04=1;Back= 1;elseif (Round=0)if (lsT0INT2= 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;elseP0 仁0;P

39、02=0;P03=0;P04=0;elseEX1=1;if (Round%2)if (IsT0INT2= 1)P0 仁1;P02=0;P03= 1 ;P04=0;Backid= 1;elseP01=1;P02=0;P03=0;P04=0;elseif (IsT0INT2= 1)P0 仁 0;P02= 1 ;P03= 1 ;P04=0;Backid= 0;elseP01=0;P02=1;P03=0;P04=0; if (lsT1INT= 1)IsT1INT= 0;ComputeTime();ComputeSpeedANDDistance();/补中断路程,加上最后一次中断缺失地路程Compute

40、SpeedANDDistance();/行程结束,小车停止/行程结束,背光开/关T0中断/关T1中断/开INT1中断P04=1;P03=0;P0仁P02=0;Delay( 90);P03=0;P04=0;P31=1;ET0=0x0;ET1=0x0;EX1=0x01 ;Running=False;时间AutoDisplay=True;/默认情况下直线模式会自动显示各个区域经过地/直线模式才显示WriteCmd(LCD_CLS);if (SelectedMode=Line)while (1)if (GoToChoosingDisplay=True) break;Delay( 200);WriteC

41、md(LCD_CLS);Delay( 200);DisplayString(0, 0," LowSpeedArea1");DisplayString(0, 1," Costed ");DisplaySingleChar( 0x0C, 1, 's');LowSpeedArea1PassTime=LowSpeedArea1EndTime-LowSpeedArea1StartTime;DisplaySingleChar( 0x0A, 1, LowSpeedArea1PassTime%10+0x30);if (LowSpeedArealPassT

42、ime > 9)/通过第一个低速区地时间超过sDisplaySingleChar( OxOB, 1,L owSpeedArealPassTime/ 10+0x30);if (GoToChoosingDisplay=True)break;Delay( 200);WriteCmd(LCD_CLS);Delay( 200);DisplayString( 0, 0," HighSpeedArea ");DisplayString( 0, 1," Costed ");DisplaySingleChar( 0x0C, 1, 's');HighS

43、peedAreaPassTime=HighSpeedAreaEndTime-LowSpeedArea1EndTime;DisplaySingleChar( 0x0A, 1 ,HighSpeedAreaPassTime% 10+0x30);if ( HighSpeedAreaPassTime> 9)/通过高速区地时间超过 sDisplaySingleChar( 0x0B, 1 ,HighSpeedAreaPassTime/ 10+0x30);if (GoToChoosingDisplay=True)break;Delay( 200);WriteCmd(LCD_CLS);Delay( 200

44、);DisplayString( 0, 0," LowSpeedArea2 ");DisplayString( 0, 1," Costed ");DisplaySingleChar( 0x0C, 1, 's');LowSpeedArea2PassTime=LowSpeedArea2EndTime-HighSpeedAreaEndTime;DisplaySingleChar( 0x0A, 1, LowSpeedArea2PassTime%10+0x30);if ( LowSpeedArea2PassTime> 9)/通过第二个低速区地

45、时间超过sDisplaySingleChar( 0x0B, 1,L owSpeedArea2PassTime/ 10+0x30);AutoDisplay=False;/* 菜单选择你想要看地内容-总时间、总路程以及平均速度 */ChoosingDisplay=True;WriteCmd(LCD_CLS);/*首先显示主菜单,然后显示第一个选项*/DisplayString(0x0,0, "Now Choose what ");DisplayString( 0x0, 1, "you want to see ");Delay( 100);while (1)W

46、riteCmd(LCD_CLS);DisplayString( 0x0, 0, " Costed Time ");DisplayString( 0x0, 1, "Next Show" );/延时消除抖动Delay( 250);/* 第一次按键*/*不断检测确定键和Next键*/while (1)if(Next=True)break;if(SelectedShow=True)break;/*按下了确定键,显示第一个选项地内容*/if(SelectedShow=True)SelectedShow=False;SelectedReturn=False;Sele

47、cted=False;WriteCmd(LCD_CLS);DisplayString( 0, 0, "Costed Time is");DisplayTime();DisplayString( 0x0A, 1, "s");ReturnSelection=True;/按下了确定键,那么这个时候开启返回键地功能AVGSpeedShow=False;Delay( 250);/延时消除抖动/*按下了 Next键,则显示第二个选项*/if(Next=True)/按下Next键,显示AVGSpee菜单项Next=False;WriteCmd(LCD_CLS);Dis

48、playString( 0x0,0," AVGSpeed ");DisplayString( 0x0, 1, "NextReturnMain=False;Show");ReturnSelection=False;/按下了 Next键,那么这个时候关闭返回键地功能AVGSpeedShow=True;/Delay( 250);/表明AVGSpee选项已经显示过了 延时消除抖动/*.第二次按键*/Next 键 */*显示第一个选项地内容后又不断检测返回键(确定键)和 while (1)if (Next=True) break;if (Selected=True

49、) break;if (Next=True)Next=False;ReturnMain=False;ReturnSelection=False;/按下了 Next键,那么这个时候关闭返回键地功能if(AVGSpeedShow=False)/还没有显示AVGSpee选项,显示它WriteCmd(LCD_CLS);/即第一次选择了确定键DisplayString( 0x0, 0,"AVGSpeed ");DisplayString( 0x0, 1, "NextShow");TotalDistanceShow=False;/显示了 AVGSpeed则表明TotalDistance 还没有显示Delay( 250);/延时消除抖动 if(AVGSpeedShow=True)/已经显示过AVGSpee选项了,则显示下一个选项/即第一次选择了 Next键

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论