📄 显示器.txt
字号:
DBUF EQU 39H
DCNT EQU 50H ;定义DBUF ,DCNT
ORG 0 ;程序起始偏移量
MAIN: MOV SP, #6FH ;将堆栈指针置初值
MOV DCNT, #20H ;立即数20H送入DCNT 即50H
MOV R7, #6 ;设置循环次数,用R7记录
MOV R0, #DBUF ;将 39H送R0
CLR A ;清累加器内容
MLP0: MOV @R0, A ;R0指向的地址的内容清零
;在循环中对39H~3EH的内存地址清零
;39H~3EH用于存显示值
INC R0 ;指针加1,指向下一地址
DJNZ R7, MLP0 ;循环6次
MOV DPTR, #5FFFH ;将8279命令口地址送DPTR
MOV A, #0DCH ;设定8279的控制字110 11100B,将显示RAM置为全1
MOVX @DPTR, A ;送控制字
LP: MOVX A, @DPTR ;读8279状态字
JB ACC.7, LP ;判断ACC最高位为1回到上一步
MOV A, #00H ;设定8279的控制字000 00000B,左进方式,显示8
个字符,二键锁定,编码扫描
MOVX @DPTR, A ;送控制字
MOV A, #2AH ;设定8279的控制字001 01010B,将系统时钟分频至
100kHz的10倍
MOVX @DPTR, A ;送控制字
MLP1: LCALL DIR ;调用显示子程序
DJNZ DCNT, MLP1 ;如果DCNT减1为0,则继续,否则跳转到MLP1。
;通过循环显示使字型稳定
MOV DCNT, #20H ;立即数20H送入DCNT 即50H
;下面是计数循环,从39H开始,按数位依次累加
CONT: MOV R0, #DBUF ;立即数39H送R0
MOV R7, #6 ;R7为循环计数,循环6次
CNT1: MOV A, @R0 ;得到R0指向的地址中的内容用于累加
CLR C ;进位位清零
ADDC A, #01H ;将A中内容带进位加1
①SUBB A, #01H ;将A中内容带进位减1,扩展实验1中相对原程序的改变
DA A ;调整A为10进制
CJNE A, #0AH, $+3 ;如果A中内容不等于10,将进位位置位
JNC CNT2 ;如果进位为0,跳转到CNT2,否则继续
MOV @R0, A ;将A内容移到R0所指的地址
LCALL DEEE ;调用延时子程序
SJMP MLP1 ;跳转到MLP1
CNT2: CLR A ;如果有进位,清A
MOV @R0, A ;将A内容移入到R0所指向的地址
INC R0 ;R0加1,指向下一个地址,处理当前R0指向的地
址加1后的进位
DJNZ R7, CNT1 ;循环,R7减1不为0跳转到CNT1
LCALL DEEE ;调用延时子程序
SJMP MLP1 ;跳转到MLP1
;显示子程序
DIR: MOV R2, #06H ;顺次显示6个LED,循环次数6送R2
MOV DPTR, #5FFFH ;将8279命令口地址送DPTR
MOV A, #92H ;设A为8279写显示RAM命令100 10010B,自动地址
递增,从RAM中的2H地址开始
MOVX @DPTR, A ;送控制字
MOV R0, #39H ;立即数39H送R0,6位显示值的首地址
TY11: MOV DPTR,#TABL ;将表格TABL的表地址送入16位数据指针
MOV A, @R0 ;将R0指向的地址的内容送A
MOVC A, @A+DPTR ;在表格内查找显示码
MOV DPTR, #5EFFH ;将8279数据口地址送DPTR
MOVX @DPTR, A ;送显示数据到8279
INC R0 ;将偏移量加1,以查找下一个显示数据
DJNZ R2, TY11 ;循环6次,如果没有显示完,则跳转到TY11
RET ;子程序返回
;延时子程序,共做4×255×255的空循环
DEEE: MOV R5, #04H ;一条语句平均延时1毫秒,延时次数4H送R5
DEE3: MOV R1, #0FFH ;延时次数0FFH送R1
DEE1: MOV R4, #0FFH ;延时次数0FFH送R4
DEE2: DJNZ R4, DEE2 ;R4减1为0则继续,否则跳转到DEE2
DJNZ R1, DEE1 ;R1减1为0则继续,否则跳转到DEE1
DJNZ R5, DEE3 ;R5减1为0则继续,否则跳转到DEE3
RET ;子程序返回
TABL: DB 0C0H,0F9H,0A4H,0B0H ;数据表格,存储对应的LED灯显示码
DB 99H,92H,82H,0F8H,80H ;0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F,P,U
DB 90H,88H,83H,0C6H,0A1H;H,L,Y,8, ,
DB 86H,8EH,8CH,0C1H,89H
DB 0C7H,0BFH,91H,00H,0FFH
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -