取鍵值MC51單片機(jī)子程序?qū)嵗?/h1>
;取鍵值程序
;功能:等待鍵入,并刷新顯示,并返回鍵值放A
;占用:PSW,A,DPTR,R0,R2,R3,R4,R6,R7
;入口:無(wú)出口:A
ORG0190H
WAT_KB:MOVR0,#3FH
WAT_0:ACALLDISP_0;刷新顯示器
ACALLT_KB
JZWAT_0;無(wú)鍵,循環(huán)
ACALLKEY_LD;延時(shí)消抖,刷新顯示
JZWAT_0;無(wú)鍵,循環(huán)
KB_VUL:CLRA
CPLA
MOVDPTR,#PORT_B
MOVX@DPTR,A;關(guān)顯示
MOVR2,#0FEH
MOVR4,#0
KB_1:MOVDPTR,#PORT_A
MOVA,R2
MOVX@DPTR,A;掃描鍵盤(pán)
INCDPTR
INCDPTR
MOVXA,@DPTR;讀鍵盤(pán)
CPLA
ANLA,#0FH;屏蔽無(wú)效位
JNZKB_2;有鍵,轉(zhuǎn)鍵分析
INCR4
MOVA,R2
JNBACC.7,WAT_0;無(wú)鍵,返回
RLA
MOVR2,A
SJMPKB_1;無(wú)鍵,掃描下一行
KB_2:RRCA
JCKB_3;有鍵,轉(zhuǎn)取鍵值
XCHA,R4;取下一行
ADDA,#8
XCHA,R4
SJMPKB_2;無(wú)鍵,循環(huán)
KB_3:MOVR2,#21
KB_4:ACALLDISP_0
ACALLT_KB
JZKB_5;刷新顯示,等鍵釋放
DJNZR2,KB_4
KB_5:MOVDPTR,#KEY_TB
MOVA,R4
MOVCA,@A+DPTR;取鍵值
RET
KEY_LD:ACALLDISP_0
ACALLDISP_0
ACALLT_KB
RET
KEY_TB:DB07H,08H,09H,0AH;7,8,9,A
DB1CH,1DH,1EH,11H;FFIS/FUNC,FFNO/USER,FILL/MODE,空
DB04H,05H,06H,0BH;4,5,6,B
DB1AH,1BH,1FH,10H;COMP/DEC,MOVE/HEX,OFST/HIST,MON
DB01H,02H,03H,0CH;1,2,3,C
DB18H,19H,14H,15H;BP/BTOP,BT/BENT,EXEC,SCAL
DB00H,0FH,0EH,0DH;0,F,E,D
DB16H,17H,12H,13H;NEXT/+,LAST/-,TRAC,STEP