?? keyboard.txt
字號:
DTIME EQU 48H
ORDER EQU 50H ;鍵盤命令標志
KEYNUM EQU 51H;定義鍵值,連續四個字節51H,52H,53H,54H,分別存儲X,Y(由高到低)
ORG 0000H
LJMP MAIN
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;主程序;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
ORG 0030H
MAIN:
BLOCK0:
LCALL KEYPRO
MOV A,ORDER
ANL A,#0F0H ;??????????
CLR C ;??????????
SUBB A,#80H ;??????????
JZ BLOCK0
MOV R5,#4 ;循環4次,第一次是X坐標的十位
;第二次是X的個位,第三次是Y的十位,第四次是
;Y的個位
MOV R1,#51H ;坐標值存儲區
NUMS:
LCALL KEYPRO ;KEYPRO出口是R3
MOV A,R3
;DEC R1
;SUBB A,@R1
;JNZ GETIT ;與上一次不相等則取數,否則增加一次采樣
;INC R1
;INC R5
;GETIT:
;INC R1
;MOV A,R3
MOV @R1,A
INC R1
LCALL KEYDELAY
DJNZ R5,NUMS
MOV A,#0 ;寄存器組清零
MOV R7,A
MOV R6,A
MOV R5,A
MOV R3,A
MOV R1,A
MOV R0,A
BLOCK1:
MOV A,#4BH ;清屏指令鍵編碼
CLR C
SUBB A,ORDER
JZ CLR_KEYNUM ;清屏鍵按下,跳到CLR_KEYNUM處
MOV DTIME,R7
MOV R7,#255
SHOW: ;顯示程序段
LCALL DISPLAY
DJNZ R7,SHOW
MOV R7,DTIME
LJMP BLOCK0
CLR_KEYNUM: ;清屏程序段
MOV R7,4
MOV R0,#51H
CLRNOW:
MOV A,#0
MOV @R0,A
INC R0
DJNZ R7,CLRNOW
LJMP BLOCK0
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;KEYDELAY;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
KEYDELAY:
MOV R2,#255
DEL0:
MOV R4,#255
DJNZ R4,$
DJNZ R2,DEL0
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;KEYPRO函數出口是R3,ORDER;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
KEYPRO: ;該函數出口是R3
LOOP0:
MOV R6,#4 ;掃描四次
MOV R7,#01H;鍵盤掃描初值
LOOP1:
MOV DPTR,#0E400H
MOV A,R7
MOVX @DPTR,A ;設置掃描初值
MOV DPTR,#0E000H
MOVX A,@DPTR ;讀鍵盤初值
ANL A,#0FH ;
CJNE A,#0FH,FINTABLE
;本行沒有按鍵按下,則繼續掃描
MOV A,R7
RL A
MOV R7,A ;移位掃描下一行
DJNZ R6,LOOP1 ;
LJMP LOOP0 ;沒有鍵按下則等待????????????????????????????????????????????
FINTABLE: ;有按鍵按下轉到該處
SWAP A
ADD A,R7 ;組成8BIT狀態
SWAP A
MOV R7,A ;R7內是按鍵狀態值
ANL A,#0F0H
CJNE A,#0F0H,KDEFINE;若不是命令鍵,轉到數字定義程序,否則把命令值給ORDER
MOV A,R7
MOV ORDER,A ;把命令值賦給ORDER
LJMP EXIT ;有命令鍵按下跳出????????????????????????
KDEFINE:
SAME:
MOVX A,@DPTR ;讀鍵盤初值
ANL A,#0FH ;
CJNE A,#0FH,SAME
MOV R0,#0
MOV R6,#10
GO_ON:
MOV DPTR,#TABLE
MOV A,R0
MOVC A,@A+DPTR
CLR C
SUBB A,R7 ;R7內是按鍵狀態值
JZ OK ;找到對應狀態值,轉到OK處,否則繼續查找
INC R0
INC R0
DJNZ R6,GO_ON ;
INC R5 ;最后仍未找到,說明所按的鍵非法,R5加一,再等待按鍵???是否加提示信
;息????????????????????????????????????????????????????????
OK: ;把狀態值轉換為定義值
INC R0
MOV A,R0
MOVC A,@A+DPTR
MOV R3,A
EXIT:
RET
TABLE: DB 1EH,1,1DH,2,1BH,3,17H,4,2EH,5,2DH,6,2BH,7,27H,8,4EH,9,4DH,0
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;DISPLAY子程徐;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
DISPLAY:
MOV R1,#51H ;指向顯示數據首址
MOV R6,#10H ;掃描控制字初值
PLAY: MOV A,R6
MOV DPTR,#0E400H ;送掃描地址
MOVX @DPTR,A
MOV A,@R1
MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV DPTR,#0E200H ;送數碼管地址
MOVX @DPTR,A
LCALL DL1MS
INC R1
MOV A,R6
JB ACC.7,ENDOUT ;ACC.8=0時一次顯示結束
RL A
MOV R6,A
AJMP PLAY
ENDOUT: MOV A,#00H
MOV DPTR,#0E200H
MOVX @DPTR,A
MOV DPTR,#0E400H
MOVX @DPTR,A
RET
TAB: DB 0FAH,10,0E3H,6BH,1BH,79H,0F9H,2AH,0FBH,7BH,01H
;共陽段碼表 "0""1""2" "3""4""5""6""7" "8""9"--"
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; 延時程序 ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
;1MS延時程序,LED顯示程序用
DL1MS: MOV R2,#10
DL1: MOV R4,#200
DL2: DJNZ R4,DL2
DJNZ R2,DL1
RET
END
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -