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

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


图片1


(2)键盘扫描子程序:

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


JNZLK1;有键按下,转LK1

AJMPKEY1;无键按下,返回

LK1:ACALLT12MS;调延时12ms子程序

ACALLKS1;查有无键按下


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

AJMPKEY1;无键按下,返回

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


MOVR2,#FEH;首列扫描字R2


LK4:MOVA,R2;列扫描字P1口


MOVP1,A;使第一列线为0

MOVA,P1;读入行状态


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

MOVA,#00H;第0行有键按下,该行首键号#00HA


AJMPLKP;转求键号

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


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


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


PUSHACC;键号进栈保护

LK3:ACALLKS1;等待键释放

JNZLK3;未释放,等待


POPAC;键释放,键号A

RET;键扫描结束

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

MOVA,R2;列扫描字A

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

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

MOVR2,A;扫描字R2


AJMPLK4;扫描下一列


AJMPKEY1;全扫描完,返回


MOVA,#FCH;全扫描字11111100BA


MOVP1,A;全扫描字所有行

MOVA,P1;读取列值

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

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


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


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