;系統晶振是 11.0592 MHz;上位機用串口調試助手來(lái)配合實(shí)驗
Z8279EQU0FF82H;8279 狀態(tài)/命令口地址
D8279EQU0FF80H;8279 數據口地址
LEDMODEQU00H;左邊輸入 八位字符顯示
;外部譯碼鍵掃描方式,雙鍵互鎖
LEDFEQEQU33H;掃描速率
LEDCLSEQU0C1H;清除顯示 RAM
LEDWR0EQU80H;設定的將要寫(xiě)入的顯示RAM地址
READKBEQU40H;讀 FIFO RAM 地址 0 的命令字
本文引用地址:http://dyxdggzs.com/article/201611/321851.htmORG0000H
AJMPSTART
ORG0040H
START:
MOVSP,#60H
LCALLINIT8279;初始化8279
MOVSCON,#50H;串口 方式 1
MOVTMOD,#20H;T1 方式 1
MOVTL1,#0FDH;波特率 9600 的常數
MOVTH1,#0FDH
SETBTR1
SETBEA
WAIT:
JBCRI,DIS_REC;是否接收到數據
LCALLGETKEY;讀鍵盤(pán)
CJNEA,#0FFH,WAIT;是否有鍵輸入
MOVSBUF,B;串口輸出鍵盤(pán)輸入的值
NOP
SS:JBCTI,WAIT;是否發(fā)送完畢
SJMPSS
DIS_REC:
MOVA,SBUF;讀串口接收到的數據
CLRC
SUBBA,#30H;以下判定輸入是否在0-F
JCERROR
SUBBA,#0AH
JNCDIS_REC1
ADDA,#0AH
SJMPDIS_REC2
DIS_REC1:
SUBBA,#7H
JCERROR
SUBBA,#6H
JNCERROR
ADDA,#10H
DIS_REC2:
MOVR4,#00H
MOVR5,A
LCALLDISLED;顯示輸入的數字(0-F)
ERROR:AJMPWAIT
INIT8279:;8279初始化子程序
PUSHDPH;保存現場(chǎng)
PUSHDPL
PUSHACC
LCALLDELAY;延時(shí)
MOVDPTR ,#Z8279
MOVA,#LEDMOD;置8279工作方式
MOVX@DPTR,A
MOVA,#LEDFEQ;置鍵盤(pán)掃描速率
MOVX@DPTR,A
MOVA,#LEDCLS;清除 LED 顯示
MOVX@DPTR,A
POPACC;恢復現場(chǎng)
POPDPL
POPDPH
RET
;讀取鍵盤(pán)子程序
;輸入: 無(wú); 輸出: B: 讀到的鍵碼 A: 按鍵的標志
GETKEY: PUSHDPH;保存現場(chǎng)
PUSHDPL
PUSHPSW
MOVDPTR,#Z8279
MOVXA,@DPTR;讀8279狀態(tài)
ANLA,#07H;屏蔽D7-D3
JNZGETVAL;判斷是否有鍵輸入
MOVA,#0H;置標志(無(wú)鍵輸入)
SJMPNKBHIT
GETVAL: MOVA,#READKB;讀 FIFO RAM 命令
MOVX@DPTR,A
MOVDPTR,#D8279
MOVXA,@DPTR;讀鍵
ANLA,#0FH;屏蔽 SHIFT 和 CTRL 鍵
MOVDPTR,#KEYCODE;鍵碼表起始地址
MOVCA,@A+DPTR;查表
MOVB,A;置返回鍵值
MOVA,#0FFH;置標志(有鍵輸入)
NKBHIT: POPPSW;恢復現場(chǎng)
POPDPL
POPDPH
RET
;顯示字符子程序
;輸入: R4,位置 R5,值
DISLED:PUSHDPH;保存現場(chǎng)
PUSHDPL
PUSHACC
MOVA,#LEDWR0;置顯示起始地址
ADDA,R4;加位置偏移量
MOVDPTR,#Z8279
MOVX@DPTR,A;設定顯示位置
MOVDPTR,#LEDSEG;置顯示常數表起始位置
MOVA,R5
MOVCA,@A+DPTR;查表
MOVDPTR,#D8279
MOVX@DPTR,A;顯示數據
POPACC;恢復現場(chǎng)
POPDPL
POPDPH
RET
DELAY:;延時(shí)子程序
PUSH0;保存現場(chǎng)
PUSH1
MOV0,#0H
DELAY1: MOV1,#0H
DJNZ1,$
DJNZ0,DELAY1
POP1;恢復現場(chǎng)
POP0
RET
;LED顯示常數表
LEDSEG: DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H
DB7FH,6FH,77H,7CH,39H,5EH,79H,71H
DB0BFH,086H,0DBH,0CFH,0E6H,0EDH,0FDH,087H
DB0FFH,0EFH,0F7H,0FCH,0B9H,0DEH,0F9H,0F1H
DB6DH,02H,08H,00H,59H,0FH,76H
;鍵盤(pán)鍵碼表
KEYCODE:DB30H,31H,32H,33H,34H,35H,36H,37H
DB38H,39H,41H,42H,43H,44H,45H,46H
DB47H,48H,49H,4AH,4BH,4CH,4DH,4EH
END
評論