资源描述:
《按键扫描参考子程序》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、按键扫描----线反转法说明矩阵键盘分行线、列线2组线,如下图,P23~P20为行线,P27~P24为列线。程序原理:第1步:列线P2.7~P2.4全输出0,读输入线P2.3~P2.0;如果某行有键按下,由于4条列线全输出0,这时此行电平肯定为0,程序中是逐条读取、判断P2.3~P2.0,判到某条为0,就说明按下键在此行上,这时可确定按下键的行值。[通常:P20所在行的行值为0,P21所在行的行值为4,P22所在行的行值为8,P23所在行的行值为12]第2步:行线P2.3~P2.0全输出0,读输入线P2.7~P2.4,
2、(注意这时行、列2组线的输入输出方向反了,所以叫线反转法)如果某列有键按下,由于4条行线全输出0,这时此列电平肯定为0,程序中是逐条读取、判断P2.7~P2.4,判到某条为0,就说明按下键在此列上,这时可确定按下键的列值。[通常:P24所在列的列值为0,P25所在列的列值为1,P26所在列的列值为2,P27所在列的列值为3]最后,按下键键号=行值+列值比如:10号键按下了,按上面2步:[1]列线P2.7~P2.4全输出0,读输入线P2.3~P2.0,显然P2.2=0,这时就可确定按下键在P2.2行上,确定其行值=8;[
3、2]行线P2.3~P2.0全输出0,读输入线P2.7~P2.4,显然P2.6=0,这时就可确定按下键在P2.6列上,确定其列值=2;最后,按下键的键号=行值+列值=8+2=10。;=================================================================;按键扫描、获取按下键键号子程序,线反转法;最终按下键的键号值在30H单元中(正常值0~F[或0~15],否则为非正常值),至于这个键做什么功能用,随题目不同而不同。KEY_SCAN:MOVR4,#16;按下键行值
4、,故意置为此值MOVR5,#16;按下键列值,故意置为此值;键号=行值+列值,正常时键号=0~15,异常时R4或R5不会刷新,得到的键号值就会大于等于16,此时按异常处理;-----列线P2.7~P2.4全输出0,读输入线P2.3~P2.0------------------------MOVP2,#0FHROW0:JBP2.0,ROW1MOVR4,#0;按下键在P2.0行上,行值=0LJMPCOL_SCANROW1:JBP2.1,ROW2MOVR4,#4;按下键在P2.1行上,行值=4LJMPCOL_SCANROW2
5、:JBP2.2,ROW3MOVR4,#8;按下键在P2.2行上,行值=8LJMPCOL_SCANROW3:JBP2.3,COL_SCANMOVR4,#12;按下键在P2.3行上,行值=12;-----行线P2.3~P2.0全输出0,读输入线P2.7~P2.4------------------------COL_SCAN:MOVP2,#0F0HCOL0:JBP2.4,COL1MOVR5,#0;按下键在P2.4列上,列值=0LJMPCAL_KEY_NOCOL1:JBP2.5,COL2MOVR5,#1;按下键在P2.5列上
6、,列值=1LJMPCAL_KEY_NOCOL2:JBP2.6,COL3MOVR5,#2;按下键在P2.6列上,列值=2LJMPCAL_KEY_NOCOL3:JBP2.7,CAL_KEY_NOMOVR5,#3;按下键在P2.7列上,列值=3;-----计算键号=行值+列值[A=R4+R5]------------------------CAL_KEY_NO:MOVA,R4ADDA,R5MOV30H,A;键号=行值+列值,放入30H单元;-------------------------------------------
7、--------------MOVP2,#0FH;恢复列线P2.7~P2.4全输出0状态RET