📄 wdisp6.#3
字号:
;参考程序A:;WDISP6.ASM
;程序功能:在六个数码管上显示6位数据。数值在CPU RAM 的71H ~ 76H之中。
$INCLUDE (C8051F020.inc)
ORG 00H
AJMP START
ORG 0030H
START: ACALL PORT_Init ;I/O口初始化
ACALL INT8255 ;8255初始化
ACALL SEND ;传送子程序,在RAM 71H~76H中分别存入六位数(1~6)
SS: ACALL DISP ; 显示子程序
AJMP SS
;显示子程序
DISP: MOV R2,#01H ; 字位码在R2中
MOV R5,#6 ;显示6个数
MOV R0,#71H ;71H为数据区首地址
DSP1: MOV DPTR,#8001H ;#8001H为输出口PB的地址
MOV A,R2
MOVX @DPTR,A ;PB口输出字位码
MOV A,@R0 ;将要显示的数值送入A中
DSP2: MOV DPTR,#BCD ;查表
MOVC A,@A+DPTR ;查表,查出要显示的数值的字形码
MOV DPTR,#8002H ;#8002H为输出口PC的地址
MOVX @DPTR,A ;C口输出字形码
ACALL DEL0 ;延时
MOV A,R2
RL A
MOV R2,A
INC R0
DJNZ R5, DSP1
RET
BCD: DB 3FH,06H,5BH,4FH ;显示数值0,1,2,3
DB 66H,6DH,7DH,07H ;4,5,6,7
DB 7FH,6FH,77H,7CH ;8,9,A,B
DB 39H,5EH,79H,71H ;C,D,E,F
DB 73H,3EH,31H,6EH ;P,U,Z,Y
DB 40H,00H ;- ,灭
DEL0: MOV R6,#00H ;延时子程序
TM: MOV R7,#00H
DJNZ R7,$
DJNZ R6,TM
RET
;传送子程序, 在RAM 71H~76H中分别存入六位数字:'1', '2', '3', '4,' '5', '6'
SEND: MOV R7,#6
MOV R0,#71H
MOV A,#1
SS1: MOV @R0,A
INC A
INC R0
DJNZ R7,SS1
RET
;初始化8255
INT8255:MOV A,#80H ; 设置PC口,PB口为输出,PA口为输入
MOV DPTR,#8003H ;#8003H为8255的控制寄存器地址
MOVX @DPTR,A
RET
PORT_Init :
MOV EMI0CF ,#2cH; /*EMIF工作在地址/数据复用方式,只用外部存储器,ALE高/低脉宽占1个SYSCLK周期*/
MOV EMI0TC ,#6dH; /*地址建立/保持时间占1个SYSCLK周期,/WR和/RD占12个SYSCLK周期*/
MOV P74OUT,#3fH; /*P7为漏极开路,P4,P5,P6为推拉方式*/
RET
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -