正在加载图片...
KEY: LCALL KS1;查有无键闭合 MOVA,R2;取出此次行扫描值 JNZ LK1;有键闭合转消颤 JNB ACC.7,LK8;若已扫过最后 LJMP LK8;无键闭合则退出 行就退出扫描,否则扫下一行。 LK1: LCALL DL6ms;消颤12ms RLA;Acc中的“0”左移一位 LCALL DL6mS MOVR2,A;新扫描值仍存进R2 LCALL KS1;再查有无键闭合 INCR3;行号加1指向下一行 JNZ LK2;的确有,转处理 SJMP LK3;转LK3去扫描下一行 LJMP LK8;确实无,退出去LK4:MoVA,R3;此行有按键,取行号 LK2:MOVR3,#0OH;(R3)←行号初值 ADDA,R3)行号乘4 MOVR2,#OFEH;(R2)←行扫描初值 MOVR5,A得行首值 LK3: MOV DPTR#0101H;指向8155A口 ADDA,R5即:0,4,8,12 MOVA,R2;取行扫描值 M0VR5,A暂存进R5 MOVX,@DPTR,A;送到行线上去 M0VA,R4;列值只可能 INC DPTR #OF,#OE,#0D,#0B,#07H INC DPTR 指向8155C口LK5:RCA取列值的最低位到y MOVX A,@DPTR;读列线的电平 JNC LK6;Cy=0就找到了,即R5 ANLA,#0FH;保留C口低4位 INCR5;否则行值增1,即同 MOV R4, A 列值暂存进R4 行中的下一个键值 CJNE A,#0F,LK4;列值≠全“ SJMP LK5;再转LK5判C键值 表明此次送0的行有键按下,转K4处理,LK6:PUSH 将找到的键值压栈 若=全1,表明此次送0的行无键按下。 保存起来KEY1:LCALL KS1 ;查有无键闭合 JNZ LK1 ;有键闭合转消颤 LJMP LK8 ;无键闭合则退出 LK1:LCALL DL6ms ;消颤12ms LCALL DL6ms LCALL KS1 ;再查有无键闭合 JNZ LK2 ;的确有,转处理 LJMP LK8 ;确实无,退出去 LK2:MOV R3,#00H ;(R3)←行号初值 MOV R2,#0FEH;(R2)←行扫描初值 LK3:MOV DPTR #0101H;指向8155 A口 MOV A, R2 ;取行扫描值 MOVX,@DPTR,A ;送到行线上去 INC DPTR INC DPTR ;指向8155 C口 MOVX A,@DPTR ;读列线的电平 ANL A,#0FH ;保留C口低4位 MOV R4,A ;列值暂存进R4 CJNE A,#0FH,LK4;列值≠全“1” 表明此次送0的行有键按下,转LK4处理, 若=全1,表明此次送0的行无键按下。 MOV A,R2 ;取出此次行扫描值 JNB ACC.7,LK8 ;若已扫过最后 一行就退出扫描,否则扫下一行。 RL A ;Acc中的“0”左移一位 MOV R2,A ;新扫描值仍存进R2 INC R3 ;行号加1指向下一行 SJMP LK3 ;转LK3去扫描下一行 LK4:MOV A, R3;此行有按键,取行号 ADD A, R3 ;行号乘 4 MOV R5, A ;得行首值 ADD A, R5 ;即:0,4,8,12… MOV R5, A ;暂存进 R5 MOV A, R4 ;列值只可能= #0F,#0E,#0D,#0B,#07H LK5: RRC A ;取列值的最低位到Cy JNC LK6 ;Cy=0就找到了,即R5 INC R5 ;否则行值增1,即同 行中的下一个键值 SJMP LK5 ;再转LK5判C键值 LK6: PUSH 05H ;将找到的键值压栈 保存起来
<<向上翻页向下翻页>>
©2008-现在 cucdc.com 高等教育资讯网 版权所有