第11章微机控制系统扩展的设计-微机原理与接口技术.doc

第11章微机控制系统扩展的设计-微机原理与接口技术.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第11章微机控制系统扩展的设计-微机原理与接口技术

第章 微机控制系统扩展的设计 键盘电路的设计 图12. 1(a)单键盘 (b)矩阵键盘 在矩阵结构的键盘里,按键以矩阵形式连接,如图12.1(b)所示。对于64键的键盘,采用8×8矩阵方式,只要2个8位的I/O端口便可完成实现,如图12.2所示。 图12. 2 8x8矩阵键盘 12.1.2 矩阵键盘的按键识别 识别矩阵键盘上的闭合键,通常用两种方法:行扫描法和行反转法。 1.行扫描法 行扫描法又称为逐行(或列)扫描查询法,是一种最常用的按键识别方法。行扫描法识别按键一般需要两个步骤。 第一步,首先要判断有没有按键被按下。 这里以图12.2所示的8行8列的矩阵键盘为例。将键盘行线与8255A的端口B相连,端口B设置为输出端口B的某一位为0,便将该行线接低电平;某位为1,则该行线接高电平。将列线与端口A相连,端口A设置为输入。CPU通过读取端口A的数据,来判别是否有键被按下。首先让端口B输出0,如果此时端口A读到的值是0FFH,表明当前没有按键被按下,否则,就是有按键被按下,接下来对该键进行识别。 判断有没有按键被按下的程序段如下: WAIT1: MOV AL, 0H MOV DX, PORTB OUT DX, AL ;把数据0送给端口B MOV DX, PORTA IN AL,DX ;读取端口A值 CMP AL, 0FFH ;判定是否有列线为低电平 JZ WAIT1 ;没有,无闭合键,则循环等待 CALL DELAY ;有,调用延时程序,键盘消抖 CALL PROC ;调用按键处理程序 第二步,识别被按下的键,获得按键编号 如果程序判断有按键被按下了,接下通过扫描键盘矩阵的方式来获得按键编号,即键值。对某一行进行扫描,就是将该行行线置为低电平,其它行线为高电平。此时检测列线的状态,若到有某根列线为低电平,被按下的键就在该行该列;如果列线全是高电平,表明被按下的键不在该行,则置下一根行线为低电平,继续检测列线状态,直到检测到某根列线为低电平为止。 判断按键被按下的具体过程如下:先使第0行接低电平,其余行为高电平,读取列端口PORTA的值。如果有某列线变为低电平,则表示第0行和此列线相交位置上的键被按下,结束扫描,开始识别;否则说明第0行没有任何键被按下,接着扫描,将第1行接低电平,检测是否有变为低电平的列线。如此重复地扫描,直到找到闭合键所在的列为止。 扫描程序如下: 其中BL中存放键号值,初始值为0;CL 中放行扫描值;初始值为0FEH;DL中放扫描的最大次数,初始值为8; PROC: MOV BL,0 ;BL中存放键号值,初始值为0 MOV CL ;CL 中放行扫描初值 MOV DL,8 ;DL中放扫描的最大次数,初始值为8 FROW: MOV AL,CL ;扫描程序开始 OUT PORTB,AL ;行端口B输出扫描值 ROL AL,1 MOV CL,AL ;设置下一个扫描值 IN AL,PORTA ;读列端口A的值 CMP PORTA,0FFH ;测试列端口值是否为0FFH JNZ FCOL ;如果是,表明被按下的键就在此列,停止扫描 ADD BL,8 ;进入下一行扫描,键号值加8 DEC DL ;完成一次扫描, 扫描次数减1 JNZ FROW ;重新下一行扫描 JMP DONE FCOL: RCR AL,1 ; JNC PROCE ;完成键号值识别 INC BL ;键号值加1 JMP FCOL PROCE:…… DONE (2)行反转法 行反转法也是识别键盘的常用方法。这里以图12. 2所示的矩阵键盘为例来说明其工作原理。首先,让端口A输出0;此时读取端口B的值,如果端口B的值为0FF,则没有键被按下,否则就是有键被按下,接下来进行按键识别。 当判断有按键被按下时,记下此时端口B所读的值,比方说,如果键“1DH”被按下,则此时端口B读到的值就是。 接下来让端口B输出该值,此时读取端口A的值,应该是。这两个值合在一起构成的代码, 即对应着键盘唯一的一个键。 在程序里,还可以列一个表,里面存放每一个

文档评论(0)

youbika + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档