- 1、本文档共5页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
单片机人机界面设计
*************************************************************************
独立按键与菜单显示系统的设计
****************************************************************************
引言:
通过按键和LCD液晶显示组成的人机界面是电子产品设计的常用的人机交互方式,如果能够将复杂且耗时的按键驱动、液晶驱动、菜单维护等工作从系统中分离出来并提供完备的功能,对于减少资源占用提高系统实时性、简化系统设计具有重要的意义。本文以设计一套包含按键置数、菜单滚动、动态显示变量、系统状态发送等功能的最小化的单片机系统,并且以此为契机探讨按键和显示程序设计中应当注意的种种问题和程序的优化设计。
独立设计按键和显示系统的意义
人机交互界面就是是人与计算机之间传递、交换信息的媒介和对话接口,是计算机系统的重要组成部分。int8 Press_Key_Time=-KEY_DEJITTER_TIME;
//键盘扫描
void Key_Scan(void)
{
uint8 tmp=0;
//非消抖时间键盘扫描,置键值
if (Press_Key_Time==-KEY_DEJITTER_TIME || 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) //按键状态有改变
{
Press_Key_ID = tmp;
Press_Key_Time=-KEY_DEJITTER_TIME+1; //进入消抖期
}
//常有状态保持不变Press_Key_Time=0待取
}
// 消抖期键码不变 keytime++
else
Press_Key_Time++;
}
//获取键值,如果有返回键码或长按返回-1
uint8 Key_Get(void)
{
uint8 ret=0;
if (Press_Key_ID Press_Key_Time=0)
if (Press_Key_Time==0) //有待取按键
{
ret=Press_Key_ID;
Press_Key_Time++;
}
return ret;
}
显示部分的菜单设计
菜单应用程序的特点在于分支重多,因此要特别设计好程序的逻辑结构和菜单存储的组织形式,否则当菜单项比较多或涉及的功能比较复杂时就很难实现了。为了不影响菜单处理时其他功能应该将菜单处理函数以外的实时控制部分单独编写到一个函数中,菜单处理函数中调用此函数完成实时任务。下面以ST7920控制器的汉字库液晶字符菜单为例,非字符菜单其逻辑结构上也是一样的。
菜单系统可以看作由若干个菜单项组成的树状结构,每一个菜单项包括显示字符和处理函数两部分组成,即每进入一个菜单项先显示若干字符然后进入处理函数。由此我们可以定义基本的菜单项结构如下:
typedef void (*MENU_FUNCTION)(void);
typedef struct { //菜单项结构
uint8 * MenuString; //字符数组指针
uint8 StringSize; //大小
MENU_FUNCTION Dispose_Fun; //处理函数指针
}MENU_ITEM_STRUCT;
通过结构中的函数指针可以把一个菜单项完整的描述出来,程序中每一个菜单项的切换就可以用同一个函数来处理了。函数指针的调用形式如:
(* (Menu_Current[MenuChoice].Dispose_Fun))(); //处理调用
为清晰程序设计的逻辑,建议菜单项的命名方式以菜单系统的树状结构自然命名(例如第一层第一个菜单项字符为MenuString_1_1同时其对应的处理函数命名为MenuDispose_1_1等等),然后定义一个菜单结构数组完全描述整个菜单系统,同时附加若干条件编译来简化程序的编写,例如编译条件如果定义了某个菜单字符或处理函数就添加此菜单项的定义等,具体实现不再赘述IO口需求和性价比因素的分析,单片机采用了STC15F100系列8脚封装的单片机,这个型号的单片机内置RC震荡和复位电路,可以省去外部的晶振和复位电路。总共可提供6个管脚的IO口,三个用于按键,三个用于模拟SPI总线。
总结
通过实践本文提出的独
您可能关注的文档
最近下载
- 基于VISSIM的城市道路交叉口自适应信号控制仿真技术研究-交通运输规划与管理专业论文.docx VIP
- 专题05 名著导读【备考2025】2024年中考语文真题分类汇编 全国版(含答案).docx VIP
- (完整版)交管12123学法减分考试题库及答案.docx
- 群建阀门公司安全生产事故应急预案.doc VIP
- GA_T 1343-2016防暴升降式阻车路障.pdf
- 教育数字化转型背景下高校数字素养教育实践模式创新路径.docx VIP
- 200个句子涵盖了高中英语4500词汇[宝典].doc
- 体育馆会堂网架提升专项施工方案.doc
- 小学英语“教—学—评”一体化的优势及运用对策.pptx VIP
- 2020年2月四川省喜德县医院系统(卫生类)招聘考试《医学基础知识》试卷及答案.pdf
文档评论(0)