- 1、本文档共101页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
单片机与键盘显示接口简介
下面介绍键输入程序。键输入程序应具有以下四个方面的功能: (1)判断键盘上有无键闭合。方法为:扫描口PA0~PA7首先输出全“0”,然后读PC口的状态,若PC0~PC3为全“1”(键盘上行线全为高电),则键盘上没有闭合键,若PC0~PC3不为全“1”则有键处于闭合状态; (2)去除键的机械抖动。方法为:判别到键盘上有键闭合后,经一段时间延时后再次判别键盘的状态,若仍有键闭合,则认为键盘上有一个键处于稳定的闭合期,否则认为是键的抖动; (3)判别闭合键的键号。方法为:对键盘的列线进行扫描。扫描口PA0~PA7的输出顺序、PC口的输入状态与按下键号的关系见表9-2。 扫描口PA按表9-2所示的输出顺序分别扫描各列线,并按相应的顺序读PC口的状态,若PC0~PC1为全“1”,则列线为0的这—列上没有键闭合,否则这一列上有键闭合,闭合键的键号为低电平的列号加上为低电平的行的首键号。例如:PA口输出,读出PC0~PC3为1101,即PA1和PC1均为“0”,表示1行1列相交的键处于闭合状态。第l行的首键号为8,列号为l,闭合键的键号为: N=行首键号+列号=8+l=9 (4)判断闭合的键是否释放。为了使CPU对键的一次闭合仅作一次处理。采用的方法为等待键释放以后再作处理。 我们采用显示子程序作为延迟子程序,其优点是在进入键输入子程序后,显示器始终是亮的。在键输入源程序中,DISUP为显示程序调用一次用了6ms延时。DIGL为FFFCH即A口的地址,DISM为显示器占有数据存储单元首地址。子程序如下: 键输入程序:ORG 8200H MOV DPTR,#0FFFFH ;8255初始化,A口出,B口出,C口入 MOV A,#81H MOVX @DPTR,A KEY: ACALL KS1 ;调用键扫描子程序 JNZ LK1 NI: ACALL DISUP ;调用显示子程序等于6ms AJMP KEY ;返回 LK1: ACALL DISUP ;等于12ms ACALL DISUP ACALL KS1 ;调用键扫描子程序 JNZ LK2 ;有键按下转LK2 AJMP NI ;无键按下转NI LK2: MOV R2,#0FEH ;扫描模式→R2(从PA0开始扫描) MOV R4,#00H ;R4清0 LK4: MOV DPTR,#DIGL ;A口逐列扫描 MOV A,R2 MOVX @DPTR,A INC DPL ;取C口地址 INC DPL MOVX A,@DPTR ;读C口内容 JB ACC.0,LONE ;转判1行 MOV A,#00H ;0行有键闭合,首键号0→A AJMP LKP ;转键处理 LONE: JB ACC.1,NEXT ;转判下一行 MOV A,#08H ;1列有键闭合,首键号08→A LKP: ADD A,R4 ;键处理 PUSH ACC ;键号进栈保护 LK3: ACALL DISUP ;判键释放否 ACALL KS1 JNZ LK3 POP ACC ;键号出栈 RET NEXT: INC R4 ;列计数器加1 MOV A,R2 ;判是否扫描到最后一列 JNB ACC.7,KND RL A ;扫描模式左移一位 MOV R2,A AJMP LK4 KND: AJMP KEY KS1: MOV DPTR,#DIGL ;全“0”→扫描口A口
文档评论(0)