新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 基于單片機(jī)和8279驅(qū)動(dòng)數(shù)碼管顯示與上位機(jī)通信的收發(fā)程序

基于單片機(jī)和8279驅(qū)動(dòng)數(shù)碼管顯示與上位機(jī)通信的收發(fā)程序

作者: 時(shí)間:2016-11-26 來源:網(wǎng)絡(luò) 收藏
;系統(tǒng)晶振是 11.0592 MHz

;上位機(jī)用串口調(diào)試助手來配合實(shí)驗(yàn)
Z8279EQU0FF82H;8279 狀態(tài)/命令口地址
D8279EQU0FF80H;8279 數(shù)據(jù)口地址
LEDMODEQU00H;左邊輸入 八位字符顯示
;外部譯碼鍵掃描方式,雙鍵互鎖
LEDFEQEQU33H;掃描速率
LEDCLSEQU0C1H;清除顯示 RAM
LEDWR0EQU80H;設(shè)定的將要寫入的顯示RAM地址
READKBEQU40H;讀 FIFO RAM 地址 0 的命令字

本文引用地址:http://butianyuan.cn/article/201611/321851.htm

ORG0000H
AJMPSTART
ORG0040H
START:
MOVSP,#60H
LCALLINIT8279;初始化8279
MOVSCON,#50H;串口 方式 1
MOVTMOD,#20H;T1 方式 1
MOVTL1,#0FDH;波特率 9600 的常數(shù)
MOVTH1,#0FDH
SETBTR1

SETBEA
WAIT:
JBCRI,DIS_REC;是否接收到數(shù)據(jù)
LCALLGETKEY;讀鍵盤
CJNEA,#0FFH,WAIT;是否有鍵輸入
MOVSBUF,B;串口輸出鍵盤輸入的值
NOP
SS:JBCTI,WAIT;是否發(fā)送完畢
SJMPSS

DIS_REC:
MOVA,SBUF;讀串口接收到的數(shù)據(jù)
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;顯示輸入的數(shù)字(0-F)
ERROR:AJMPWAIT

INIT8279:;8279初始化子程序
PUSHDPH;保存現(xiàn)場(chǎng)
PUSHDPL
PUSHACC
LCALLDELAY;延時(shí)
MOVDPTR ,#Z8279
MOVA,#LEDMOD;置8279工作方式
MOVX@DPTR,A
MOVA,#LEDFEQ;置鍵盤掃描速率
MOVX@DPTR,A
MOVA,#LEDCLS;清除 LED 顯示
MOVX@DPTR,A
POPACC;恢復(fù)現(xiàn)場(chǎng)
POPDPL
POPDPH
RET
;讀取鍵盤子程序
;輸入: 無; 輸出: B: 讀到的鍵碼 A: 按鍵的標(biāo)志
GETKEY: PUSHDPH;保存現(xiàn)場(chǎng)
PUSHDPL
PUSHPSW
MOVDPTR,#Z8279
MOVXA,@DPTR;讀8279狀態(tài)
ANLA,#07H;屏蔽D7-D3
JNZGETVAL;判斷是否有鍵輸入
MOVA,#0H;置標(biāo)志(無鍵輸入)
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;置標(biāo)志(有鍵輸入)
NKBHIT: POPPSW;恢復(fù)現(xiàn)場(chǎng)
POPDPL
POPDPH
RET
;顯示字符子程序
;輸入: R4,位置 R5,值
DISLED:PUSHDPH;保存現(xiàn)場(chǎng)
PUSHDPL
PUSHACC
MOVA,#LEDWR0;置顯示起始地址
ADDA,R4;加位置偏移量
MOVDPTR,#Z8279
MOVX@DPTR,A;設(shè)定顯示位置
MOVDPTR,#LEDSEG;置顯示常數(shù)表起始位置
MOVA,R5
MOVCA,@A+DPTR;查表
MOVDPTR,#D8279
MOVX@DPTR,A;顯示數(shù)據(jù)
POPACC;恢復(fù)現(xiàn)場(chǎng)
POPDPL
POPDPH
RET

DELAY:;延時(shí)子程序
PUSH0;保存現(xiàn)場(chǎng)
PUSH1
MOV0,#0H
DELAY1: MOV1,#0H
DJNZ1,$
DJNZ0,DELAY1
POP1;恢復(fù)現(xiàn)場(chǎng)
POP0
RET
;LED顯示常數(shù)表
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
;鍵盤鍵碼表
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



評(píng)論


技術(shù)專區(qū)

關(guān)閉