📄 max7221cs.asm
字号:
DIN BIT P3.0 ;数据输入端
CLK BIT P3.2 ;时钟输入端
LOAD BIT P3.1 ;数据锁存控制端
ORG 0000H
LJMP START
ORG 0030H
START:
MOV SP,#60H
LCALL PROCESS ;调用初始化MAX7221子程序
MOV 50H,#09H
MOV 51H,#08H
MOV 52H,#07H
MOV 53H,#06H
MOV 54H,#05H
MOV 55H,#04H
MOV 56H,#03H
MOV 57H,#02H
LCALL DISPLAY ;调用显示
sjmp $
PROCESS:MOV A,#0CH ;进入停机工作方式
MOV B,#00H
LCALL W_7221
MOV A,#0BH ;扫描位数
MOV B,#07H
LCALL W_7221
MOV A,#09H ;译码方式
MOV B,#0FFH
LCALL W_7221
MOV A,#0AH ;显示亮度
MOV B,#09H
LCALL W_7221
MOV A,#0FH
MOV B,#01H
LCALL W_7221
MOV A,#0CH ;进入启动工作方式
MOV B,#01H
LCALL W_7221
RET
W_7221: CLR LOAD ;设置LOAD为
LCALL SD_7221 ;发送位数据的高位
MOV A,B ;发送位数据的低位
LCALL SD_7221
NOP
NOP
SETB LOAD ;锁存位数据
RET
SD_7221: MOV R1,#08H ;发送位数据
C_SD: NOP
NOP
CLR CLK
RLC A ;发位数据的最高位
MOV DIN,C ;传待发位到发送口
NOP
NOP
SETB CLK ;设置上升沿,发送数据
DJNZ R1,C_SD ;直到数据发送完,跳出
RET
;MAX7221 显示子程序
DISPLAY: MOV R0,#50H ;设置缓冲区首址
MOV R2,#1 ;准备启用MAX7221中的第号寄存器
MOV R3,#8 ;共要发送个数据
C_DISP: MOV A,@R0 ;取出缓冲区数据显示
MOV B,A
MOV A,R2
LCALL W_7221 ;发送第一个待显示的数据
INC R0 ;继续取下一个待显数据
INC R0 ;继续取下一个待显数据
INC R2 ;启用下一个MAX7221中的寄存器
DJNZ R3,C_DISP ;三个待显数据发送完跳出
RET
DELAY: MOV R4,#100
L2: MOV R5,#20
L1: MOV R6,#0FFH
DJNZ R6,$
DJNZ R5,L1
DJNZ R4,L2
RET
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -