BUFFER DATA 30H ;键盘输入缓冲区首地址
BUFFER1 DATA 40H ;8字节显示缓冲区在首地址
CMD8279 XDATA 0BF01H ;8279命 令/状态字地
DATA8279 XDATA 0BFO0H ;8279读写 数据口地址
KEYCOUNT DATA 50H
ORG 0000H
LJMP MAIN
ORG 0100H
MAIN:
RUN8279: ACALL INIT ;8279初始化
MOV KEYCOUNT,#0 ;按键个数计数
STAR1: LCALL SCAN_KEY ;键扫描
JNC STAR1 ;无按键则循环
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 ;命令字:分频系数20分频
MOV DPTR, #CMD8279
MOVX @DPTR,A
MOV A,#10H
MOVX @DPTR,A
INIT8279_ 1: LCALL CLEAR ;清显示
MOV A,#90H ;从最后-一个数码管开始显示移位
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 ;读状态字
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
|