正在加载图片...
KEY: LCALL KS1;查有无键闭合 MOVA,R2;取出此次行扫描值 JNZ LK1;有键闭合转消颤 JNB ACC.7,LK8;若已扫过最后 LJMP LK8;无键闭合则退出1 行就退出扫描,否则扫下一行。 LK1: LCALL DL6ms;消颤12ms RLA;Acc中的“0”左移 LCALL DL6mS 位 LCALL KS1;再查有无键闭合 MOVR2,A;新扫描值仍存进R2 JNZ LK2;的确有,转处理1 INCR3;行号加1指向下一行 LJMP LK8;确实无,退出去 SJMP LK3;转LK3去扫描下一行 LK2:MOVR3,#0OH;(R3)←行号初值 MOVR2,#OFEH;(R2)←行扫描初值 行号:第0行第7行→(R3) LK3: MOV DPTR#010H;指向8155A口 0,1,2,34.5,6,7) MOA,R2:取行扫描值扫描值:OFEH→(R2) MOVX,, @DPTR,A;送到行线上去( FE FD.F7 EE DE BE7F) INC DPTR FEH=11111110B(首次扫 INC DPTR 指向8155C口 MOVX A,@DPTR;读列线的电平 描) ANLA,#OFH;保留C口低4位 MOYR,A:列值暂存进R4BFH1011111(7次扫 CJNE A,#0mH,LK4;列值≠全“1”描 表明此次送0的行有键按下转K4处理7H011111(8次扫描 若=全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去扫描下一行 @ 行号:第0行—第7行→(R3) (0,1,2,3,4,5,6,7) @ 行扫描值: 0FEH→ (R2) (FE,FD,FB,F7,EF,DF,BF,7F) FEH = 1111 1110 B(首次扫 描) …………… BFH = 1011 1111 B (7次扫 描) 7FH = 0111 1111 B (8次扫描) 注意: 只有第8次扫描值最高位= 0
<<向上翻页向下翻页>>
©2008-现在 cucdc.com 高等教育资讯网 版权所有