- 1、本文档共38页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
单片机键盘输入编程
学习过单片机技术的人都知道,单片机的按键输入一般可分为简单的独立式按键输入及行列式键盘输入两种。图1为简单的独立式键盘输入示意图,独立式键盘输入适合于按键输入不多的情况(5个按键),具有占用口线较少、软件编写简单容易等特点。
图2为行列式键盘输入示意图,列线接P1.0~P1.3,行线接P1.4~P1.7。行列式键盘输入适合于按键输入多的情况,如有16个按键输入,用简单按键输入用要占用2个输入口(共16位),而使用行列式键盘输入只需占用一个输入口(8位)。但行列式键盘输入软件编写较复杂,对初学者而言有一定的难度。
以上略谈了一下按键输入的情况。在很多状态下,按键输入的值要同时要在LED数码管上显示出来。如一个按键设计为输入递增(加法)键,可以设计成每点按一下,数值递增加1,同时在LED数码管上显示出来;也可设计成持续按下时,数值以一定时间间隔(如0.3秒)累加。但是当欲输入值较大时(如三位LED数码管作输入显示时的输入值最大为999),则可能按下键的时间太长(最长达300秒),看来这种方式只适用于一位或至多两位数值(最大99)的输入。当然你也可多设几个键,每个键只负责一位数值的输入,但这样会占用较多的口线,浪费宝贵的硬件资源。
大家可能见到过,一些进口的温度控制器(如日本RKC INSTRUMENT INC. 生产的REX_C700温控器)的面板设计为:温度测量值用4位LED数码管显示,输入设定值显示也用4位LED数码管,输入按键只有4个,一个为“模式设定键”,一个为“左移键”,另两个为“加法键”、“减法键”。欲输入设定值(温控值)时,按一下“模式设定键”,程序进入设定状态,此时输入设定值显示的4位LED数码管中,个位显示最亮(稳定显示),而十、百、千位显示较暗(有闪烁感),说明可对个位进行输入。按下“加法键”或“减法键”,即可输入个位数的值;点按一下“左移键”,变为十位显示最亮,而个、百、千位显示较暗,说明可对十位进行输入。按下“加法键”或“减法键”,即可输入十位数的值;……这样可完成4位数的输入。完成输入后,再按一下“模式设定键”,程序即退出设定状态,进入工作运行。用这种输入方法,不仅输入4位数用4个键即可,再多位(5位至24位)的输入也用这4个键就够了。
大家了解了这种新颖的按键输入方式后,一定很感兴趣,也想掌握设计方法。为了便于大家理解,这里结合笔者设计的一款“节能时控器”,详细进行讲解。“节能时控器”用于定时控制大功率电器工作,因现采用分时计费方法,可起到节约开支的作用,对工业生产成效显著。
图3为“节能时控器”硬件构成原理图。“节能时控器”共有4个输入按键:set--模式设定键,left--左移键,up—加法键,on/off--定时1、2启动/关闭键。单片机IC1(AT89C2051)只有15条I/O线,由于受I/O线数量限制,因此P1口中的P1.0~P1.3既作为驱动4位LED数码管的数据输出一部分,同时也用作按键的输入。无疑,这种方式大大节约了硬件的I/O线,但也给编程者提出了更高的技术要求。限于篇幅,我们只对要详解的按键输入程序进行分析,其它部分只略作介绍。如读者需“节能时控器”详细的源程序,可以Email:xuyuandz@163.com与作者联系。
图4为主程序状态流程图。可见主程序只负责进行走时或调整时间的运算及显示,而判断按键输入则放在T1定时中断(10mS)服务子程序中。T0作为走时的基准被设置为100mS定时中断。这种设计的优点是大大简化了主程序设计,并且CPU会定时关心键盘,只要定时中断时间足够短(如为几十mS),就不会漏掉每一次的按键输入。
下面为判断按键输入的T1定时中断服务子程序,序号为解释方便而加。
/*10mS定时中断服务子函数*/
序号 1:void zd1(void) interrupt 3
2:{
3:uchar i,j;i=P1;j=P3;
4:TH1=-(5000/256);
5:TL1=-(5000%256);
6:if(m==1)n++;
7:if(n=30){n=0;m=0;}
8:P3_7=0;
9:P1=0xff;
10:if(P1!=0xff)
11:{
12:if(n==0)m=1;
13:{if(n==1)
14:{
15:if(P1_0==0){set++;left=0;}
16:if(set=4)set=0
您可能关注的文档
最近下载
- 《就业指导与实训》课程考试题库(含答案).pdf
- 狗洞修补处理实施方案修改.doc VIP
- 月度收入分析的定义目的意义会议运作与注意要点原则.ppt
- 2024至2030年中国体育健身休闲行业市场深度研究及投资规划建议报告.docx
- 消防水池混凝土质量缺陷处理方案..doc VIP
- 2023年主题团课PPT课件:牢记嘱托不负韶华奋斗青春.pptx VIP
- 00639《广播电视广告》复习资料.doc
- 2023-2024学年山东省枣庄市七年级上学期期末考试历史模拟试题(含答案).pdf
- 牧原股份首次覆盖报告:成本优势显著的生猪养殖龙头,充分受益行业高景气度.docx
- 《液压传动与气动技术》课程标准.docx VIP
文档评论(0)