|
BUFFER DATA 30H ;鍵盤輸入緩沖區(qū)首地址
BUFFER1 DATA 40H ;8字節(jié)顯示緩沖區(qū)在首地址
CMD8279 XDATA 0BF01H ;8279命 令/狀態(tài)字地
DATA8279 XDATA 0BFO0H ;8279讀寫 數(shù)據(jù)口地址
KEYCOUNT DATA 50H
ORG 0000H
LJMP MAIN
ORG 0100H
MAIN:
RUN8279: ACALL INIT ;8279初始化
MOV KEYCOUNT,#0 ;按鍵個(gè)數(shù)計(jì)數(shù)
STAR1: LCALL SCAN_KEY ;鍵掃描
JNC STAR1 ;無按鍵則循環(huán)
XCH A,KEYCOUNT
INC A
CJINE A,#9,STAR2
MOV_ KEYCOUNT,#0
LCALL INIT8279_1
SJMP STAR1
STAR2: XCH A,KEYCOUNT
LCALL KEY_NUM
MOV DPTR,#LED_TAB
MOVC A,@A+DPTR
LCALL WRITE_DATA
SJMP STAR1 ;8279初始化INIT:
INIT: MOV A,#34H ;命令字:分頻系數(shù)20分頻
MOV DPTR, #CMD8279
MOVX @DPTR,A
MOV A,#10H
MOVX @DPTR,A
INIT8279_ 1: LCALL CLEAR ;清顯示
MOV A,#90H ;從最后-一個(gè)數(shù)碼管開始顯示移位
MOVX @DPTR,A
RET ;清顯示
CLEAR: MOV A,#ODEH ;清屏命令
MOV DPTR,#CMD8279
MOVX @DPTR,A
WATIT11: MOVX A,@DPTR
JB ACC.7,WAIT11 ;顯示RAM清除完畢否?
RET
;鍵盤掃描
SCAN_ KEY: MOV DPTR,#CMD8279 ;讀狀態(tài)字
MOVX A, @DPTR
READ_ FIFO: ANL A,#7
JZ NO_KEY ;判定是否有鍵按下
READ: MOV A,#40H
MOVX @DPTR,A ;讀FIFO RAM命令字
MOV DPTR,#DATA8279
MOVX A,@DPTR
SETB C
SCAN_KEY1: RET
NO_KEY: CLR C
SJMP SCAN_KEY1
KEY_NUM: ANL A,#3FH
RET
WRITE_DATA: MOV DPTR,#DATA8279
MOVX @DPTR,A
RET
LED_TAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H
DB 80H,90H,88H,83H,0C6H,0A1H,86H,8EH
END
|
|