基于c的单片机键盘

基于c的单片机键盘

ID:23894209

大小:136.50 KB

页数:9页

时间:2018-11-11

基于c的单片机键盘_第1页
基于c的单片机键盘_第2页
基于c的单片机键盘_第3页
基于c的单片机键盘_第4页
基于c的单片机键盘_第5页
资源描述:

《基于c的单片机键盘》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库

1、学习过单片机技术的人都知道,单片机的按键输入一般可分为简单的独立式按键输入及行列式键盘输入两种。图1为简单的独立式键盘输入示意图,独立式键盘输入适合于按键输入不多的情况(<5个按键),具有占用口线较少、软件编写简单容易等特点。  图2为行列式键盘输入示意图,列线接P1.0~P1.3,行线接P1.4~P1.7。行列式键盘输入适合于按键输入多的情况,如有16个按键输入,用简单按键输入用要占用2个输入口(共16位),而使用行列式键盘输入只需占用一个输入口(8位)。但行列式键盘输入软件编写较复杂,对初学者而言有一定的难度。  以上略谈了一下按键输入的情况。

2、在很多状态下,按键输入的值要同时要在LED数码管上显示出来。如一个按键设计为输入递增(加法)键,可以设计成每点按一下,数值递增加1,同时在LED数码管上显示出来;也可设计成持续按下时,数值以一定时间间隔(如0.3秒)累加。但是当欲输入值较大时(如三位LED数码管作输入显示时的输入值最大为999),则可能按下键的时间太长(最长达300秒),看来这种方式只适用于一位或至多两位数值(最大99)的输入。当然你也可多设几个键,每个键只负责一位数值的输入,但这样会占用较多的口线,浪费宝贵的硬件资源。  大家可能见到过,一些进口的温度控制器(如日本RKCINST

3、RUMENTINC.生产的REX_C700温控器)的面板设计为:温度测量值用4位LED数码管显示,输入设定值显示也用4位LED数码管,输入按键只有4个,一个为“模式设定键”,一个为“左移键”,另两个为“加法键”、“减法键”。欲输入设定值(温控值)时,按一下“模式设定键”,程序进入设定状态,此时输入设定值显示的4位LED数码管中,个位显示最亮(稳定显示),而十、百、千位显示较暗(有闪烁感),说明可对个位进行输入。按下“加法键”或“减法键”,即可输入个位数的值;点按一下“左移键”,变为十位显示最亮,而个、百、千位显示较暗,说明可对十位进行输入。按下“加

4、法键”或“减法键”,即可输入十位数的值;……这样可完成4位数的输入。完成输入后,再按一下“模式设定键”,程序即退出设定状态,进入工作运行。用这种输入方法,不仅输入4位数用4个键即可,再多位(5位至24位)的输入也用这4个键就够了。大家了解了这种新颖的按键输入方式后,一定很感兴趣,也想掌握设计方法。为了便于大家理解,这里结合笔者设计的一款“节能时控器”,详细进行讲解。“节能时控器”用于定时控制大功率电器工作,因现采用分时计费方法,可起到节约开支的作用,对工业生产成效显著。图3为“节能时控器”硬件构成原理图。“节能时控器”共有4个输入按键:set--模

5、式设定键,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为主程序状态流程图。可见主程序只负责进行走时或调

6、整时间的运算及显示,而判断按键输入则放在T1定时中断(10mS)服务子程序中。T0作为走时的基准被设置为100mS定时中断。这种设计的优点是大大简化了主程序设计,并且CPU会定时关心键盘,只要定时中断时间足够短(如为几十mS),就不会漏掉每一次的按键输入。下面为判断按键输入的T1定时中断服务子程序,序号为解释方便而加。/*10mS定时中断服务子函数*/序号1:voidzd1(void)interrupt32:{3:uchari,j;i=P1;j=P3;4:TH1=-(5000/256);5:TL1=-(5000%256);6:if(m==1)n++

7、;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;17:if(set==1)flag=0x55;18:if(P1_1==0)left++;19:if(left>=4)left=0;20:if(P1_2==0){up++;21:switch(left)22:{23:case0:{if(up>=10)up=0;}break;24

8、:case1:{if(up>=6)up=0;}break;25:case2:{if(up>=10)up=0;}break;

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

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

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