独立按键与菜单显示系统的设计

独立按键与菜单显示系统的设计

ID:8834852

大小:42.50 KB

页数:5页

时间:2018-04-09

独立按键与菜单显示系统的设计_第1页
独立按键与菜单显示系统的设计_第2页
独立按键与菜单显示系统的设计_第3页
独立按键与菜单显示系统的设计_第4页
独立按键与菜单显示系统的设计_第5页
资源描述:

《独立按键与菜单显示系统的设计》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、独立按键与菜单显示系统的设计引言:通过按键和LCD液晶显示组成的人机界面是电子产品设计的常用的人机交互方式,如果能够将复杂且耗时的按键驱动、液晶驱动、菜单维护等工作从系统中分离出来并提供完备的功能,对于减少资源占用提高系统实时性、简化系统设计具有重要的意义。本文以设计一套包含按键置数、菜单滚动、动态显示变量、系统状态发送等功能的最小化的单片机系统,并且以此为契机探讨按键和显示程序设计中应当注意的种种问题和程序的优化设计。一、独立设计按键和显示系统的意义人机交互界面就是是人与计算机之间传递、交换信息的媒介和对话接口

2、,是计算机系统的重要组成部分。按键驱动和液晶显示部分是很多电子设计采取的交互手段,它的好处是接口简便、成本低。实际上多数的设计中按键和液晶的响应控制不需要有很高的实时性,按键程序通常都包含100ms左右的消抖延时,液晶显示时只要刷屏速度大于150ms(60HZ)肉眼是看不出分别的,但这段时间相对于实时系统来说是一个很长的,如果和系统混合在一起编译运行将占用很大的存储和运行开销。能够将按键和显示部分从应用系统中剥离出来对于提高开发效率完备程序设计都有很高的价值,特别的对于电子竞赛短时间内需要完成完整的功能设计的情况

3、都有重要的意义。从系统应用的角度看不同的系统对于按键的处理和显示的功能都是很类似的,比如按键输入一个数据、屏幕的特定位置显示一个变量、菜单上下滚动选中其中的某一行等等。一个只有三个按键的系统输入一个变量时需要很多的中间变量,还要配合按键扫描、变量数据上下限判断、液晶屏显示当前值、标记显示当前正在输入的位等一系列的功能函数调用步骤才能完成,然而最后系统所关心的只是输入变量的值是多少。不难看出将按键与显示部分分离出来不仅简化应用系统的设计而且可以大幅提高系统实时处理能力。设计一个完整的按键菜单液晶模块对于初学者来说也

4、并不是一件容易的事,通常在很熟悉编译环境和语言的前提下要完整编写这些代码也需要几个星期甚至更长的时间,重复编写这些功能不仅耗时而且没有必要。本设计中带有一个简单的单片机系统完全实现按键和显示的全部功能独立于系统外运行,可以简单快速的开发需要的人机界面系统,同时通过通讯总线系统通知发生的事件(比如:按键状态变化、用户通过菜单选中某行、用户输入了完整的变量数据等)发送到上位机,上位机接收后可以有选择的进行处理以减少系统开销。本设计可将菜单字符和结构信息存储在片上eeprom中通过指令改写,这样系统就具有了很强的移植的

5、特性。一、按键驱动设计按键驱动程序看似简单,但是要编写功能完备、响应灵敏、资源占用少的按键程序需要一些技巧才能实现的。按键一般由开关构成,少量的按键可直接io控制,数量较多时一般构成阵列形式,以下论述也适合于AD器件扩展的按键形式。按键驱动程序一般由扫描部分、按键获取、按键处理部分组成,逻辑功能见下图:获取键码按键扫描有待取按键?按键状态变化?YN置待取按键YN按键处理后清除返回返回将扫描和获取分开设计是有必要的。按键扫描程序负责检查按键状态,如果按键状态变化并且执行消抖延时后仍然保持就将按键状态存入全局量待取,

6、实时性好的按键扫描应该定时触发的形式调用。按键获取程序返回待取按键状态处理完后清除按键状态。首先分开设计符合按键程序的基本思想,即扫描产生事件、处理与事件一一对应、不同的事件对应多种处理方式;另外分开设计有利于扩展按键功能,例如组合按键、长按键、按键对应字符等复杂功能的设计上如果没有清晰的程序逻辑结构很容易造成混乱产生不易察觉的错误。下面的示例程序以100~200HZ定时调用扫描程序即可驱动按键并且以调用计数消除了去抖延时。uint8Press_Key_ID=0;//按键扫描码int8Press_Key_Time

7、=-KEY_DEJITTER_TIME;//键盘扫描voidKey_Scan(void){uint8tmp=0;//非消抖时间键盘扫描,置键值if(Press_Key_Time==-KEY_DEJITTER_TIME

8、

9、Press_Key_Time>=0){tmp=~KEY_PORTX&KEY_CODE;if(tmp==0){//无键按下Press_Key_ID=0;Press_Key_Time=-KEY_DEJITTER_TIME;}else//有键按下if(Press_Key_ID!=tmp)//按键状态有改

10、变{Press_Key_ID=tmp;Press_Key_Time=-KEY_DEJITTER_TIME+1;//进入消抖期}//常有状态保持不变Press_Key_Time=0待取}//消抖期键码不变keytime++elsePress_Key_Time++;}//获取键值,如果有返回键码或长按返回-1uint8Key_Get(void){uint8ret=0;if(P

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。