当前位置:首页 > 单片机 > 单片机
[导读]1)2×2行列式键盘电路如图所示 图片1(2)键盘扫描子程序:KEY1: ACALL KS1 ;调用判断有无键按下子程序JNZ LK1 ;有键按下,转LK1AJMP KEY1 ;无键按下,返回LK1: ACALL T12MS ;调延时12ms子程序ACALL KS1 ;查有无

1)2×2行列式键盘电路如图所示

 

图片1

(2)键盘扫描子程序:

KEY1: ACALL KS1 ;调用判断有无键按下子程序

JNZ LK1 ;有键按下,转LK1

AJMP KEY1 ;无键按下,返回

LK1: ACALL T12MS ;调延时12ms子程序

ACALL KS1 ;查有无键按下

JNZ LK2 ;若有,则为键确实按下,转逐列扫描

AJMP KEY1 ;无键按下,返回

LK2: MOV R4,#00H ;首列号 R4

MOV R2,#FEH ;首列扫描字 R2

LK4: MOV A,R2 ;列扫描字 P1口

MOV P1,A ;使第一列线为0

MOV A,P1 ;读入行状态

JB ACC.0,LONE;第0行无键按下,转查第一行

MOV A,#00H ;第0行有键按下,该行首键号#00H A

AJMP LKP ;转求键号

LONE: JB ACC.1,NEXT ;第一行无键按下,转查下一列

MOV A,#02 ;第一行有键按下,该行首键号#02 A

LKP: ADD A,R4 ;键号=首行号+列号

PUSH ACC ;键号进栈保护

LK3: ACALL KS1 ;等待键释放

JNZ LK3 ;未释放,等待

POP AC ;键释放,键号 A

RET ;键扫描结束

NEXT: INC R4 ;列号加1,指向下一列

MOV A,R2 ;列扫描字 A

JNB ACC.1,KND ;判断2列全扫描完?扫描完,转KND

RL A ;没扫描完,扫描字左移一位,形成下一列扫描字

MOV R2,A ;扫描字 R2

AJMP LK4 ;扫描下一列

AJMP KEY1 ;全扫描完,返回

MOV A,#FCH ;全扫描字11111100B A

MOV P1,A ;全扫描字 所有行

MOV A,P1 ;读取列值

CPL A ;取正逻辑,高电平表示有键按下

ANL A,#0C0H ;屏蔽低6位,取高2位

RET ;出口状态(A)!=0,有键按下

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除( 邮箱:macysun@21ic.com )。
换一批
延伸阅读
关闭