- 1、本文档共66页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
;应用系统配置及接口;;§9.1.1 键盘接口及处理程序; 键盘中的按键:都是一个常开开关电路。
当按键K未被按下时, P1.0输入为高电平;
当按键K闭合时,P1.0输入为低电平。;键在闭合及断开瞬间均伴有一连串的抖动。抖动时间一般为5~10 ms。;1) 独立式非编码键盘接口及处理程序;查询方式键盘的处理程序; P0F: LJMP PROM0
P1F: LJMP PROM1 ;入口地址表
┊ ┊
P7F : LJMP PROM7
PROM0: … ;0号键功能程序
LJMP START ;0号键执行完返回
PROM1: …
LJMP START
┊
PROM7: …
LJMP START
各按键由软件设置了优先级,优先级顺序依次为0~7。;2) 行列式键盘接口及工作原理;按键扫描的工作过程如下:
① 判断键盘中是否有键按下;
② 进行行扫描,判断是哪一个键按下,若有键按下,则调用延时子程序去抖动;
③ 读取按键的位置码;
④ 将按键的位置码转换为键值(键的顺序号)0、1、2…、F。
在扫描过程中,当发现某行有键按下,也就是输入的列线中有一位为0时,便可判别闭合按键所在列的位置,根据行线位置和列线位置就能判断按键在矩阵中的位置,知道是哪一个键按下。;首先判别键盘中有无键按下:由I/O口向键盘送(输出)全扫描字,然后读入(输入)列线状态来判断。
方法: 向行线(水平线)输出全扫描字00H,把全部行线置为“0”,然后将列线的状态读入累加器A中。如果有按键按下,总有一根列线电平被拉至低电平,使列输入不全为1。
判断键盘中哪一个键被按下:通过将行线逐行置低电平后,检查列输入状态实现的。
方法: 依次给行线送“0”,然后查所有列线状态,称行扫描。如果全为1,则所按下的键不在此行;如果不全为1,则所按下的键必在此行,而且是在与“0”列线相交交点上的那键。;行扫描法识别键号的工作原理:
将第0行输出低电平,其余行高电平时,输出编码为1110。然后读取列,判别第0行是否有键按下。若有一键按下,则相应列被拉到低电平,则表示第0行和此列相交位置上有按键按下。若没有任一条列线为低电平,则说明0行上无键按下。
将第1行变为低电平,其余行高电平时,输出编码为1101。读取各列,判别是有哪一列键按下方法同上。
将第2行变为低电平,其余行为高电平时,输出编码为1011。判别是否有哪一列键按下的方法同上。
将第3行变为低电平,其余行为高电平时,输出编码为0111。判别是否有哪一列键按下的方法同上。
根据行线扫描值(行码)与列线输入值(列码)可唯一确定按下的键并获得该键的位置码(键码)
例如:行码=1011B;列码=1101B则:键码;键的位置码及键值的译码过程;4×4键盘扫描流程图;3) 键盘扫描子程序; MOV A,P1 ;读列值
MOV R1,A ;暂存列值
ANL A,#0F0H ;取列值
CPL A ;高电平则有键闭合
S123:JNZ SKEY3 ;有键按下转SKEY3
INC R0 ;行计数器加1
SETB C ;准备将行扫描左移1位,
;形成下一行扫描字,C=1保证输出行扫描字中高4位全为1,
;为列输入作准备,低4位中只有1位为0
MOV A,R3 ;R3带进位C左移1位
RLC A
MOV R3,A ;形成下一行扫描字→R3
MOV A,R0
CJNE A,#04H,SKEY1 ;最后一行扫(4次)完了吗?
EKEY:RET;;列号译码
SKEY3:MOV A,R1
JNB ACC.4,SKEY5
JNB ACC.5,SKEY6
JNB ACC.6,SKEY7
JNB ACC.7,SKEY8
AJMP EKEY
SKEY5:MOV A,#00H
MOV R2,A ;存0列号
AJMP DKEY
SKEY6:MOV A,#01H
MOV R2,A ;存1列号
AJMP DKEY
SKEY7:MOV A,#02H
MOV R2,A ;存2列号
AJMP DKEY
SKEY8:MOV A,#03H
MOV R2,A ;存3列号
AJMP DKEY;;键位置译码
DKEY: MOV A,R0 ;取行
文档评论(0)