📄 max7219.txt
字号:
MAX7219的编程非常简单,只占用系统的3个普通I/O口,本例使用的是P1.5,P1.6与P1.7口,
实际上改用其它任意3个普通I/O口都可以。
(1)从CPU输出I/O口到MAX7219芯片DIN数据输入口的基本数据传输格式为16位串行数据,
不管是传送控制数据还是显示数据,都是按16位串行数据进行的。
(2)对单片MAX7219而言,传送的顺序从DIG0到DIG7,即先送高位,后送低位,而且每一
位所对应的16位串行数据也是从位15开始至位0结束,这一点恰好与常用的单片机系统移位
寄存器74LS164相反。
(3)在多片MAX7219串联方式下,CPU先最远端的MAX7219芯片传送数据,然后依次由远到
近,最后才传送相邻最靠近的CPU的那一片MAX7219。
对两片MAX7219一次同时传送数据,即采用32位串行数据移位通信的方法,也可以充分利用
MAX7219的不工作方式寄存器。对两片MAX7219分别送16位串行数据,这样程序会更简洁一些,
而且可读性更好。
……
MOV 70H,#0FFH ;译码方式控制字
MOV 71H,#0F5H ;亮度控制字(可调) MOV 72H,#0F5H ;扫描个数控制字
MOV 73H,#0F1H ;关闭REG控制字
MOV 74H,#0F0H ;显示测试控制字
MOV R1,#05H ;7219-1初始化
MOV R2,#09H
MOV R5,#00H
MOV R0,#70H
LCALL DIP
MOV R1,#05H ; 7219-2初始化
MOV R2,#09H
MOV R5,#0FH
MOV R0,#70H
LCALL DIP
……
(40H为显示BCD码缓冲区首址)
MOV R1,#06H ; 7219-1送数
MOV R2,#01H
MOV R5,#00H
MOV R0,#40H
LCALL DIP
MOV R1,#06H ; 7219-2送数
MOV R2,#01H
MOV R5,#0FH
MOV R0,#46H
LCALL DIP
……
(显示驱动子程序)
DIP: NOP
PL1: MOV A,R5 ;R5=0 送数据给7219-1
JNZ PL2 ;R5≠0 送数据给7219-2
MOV 21H,#00H ;启动不工作方式REG
MOV 20H,#00H
LCALL DIP2
PL2: MOV 21H,R2 ;7219REG地址指针送21H
MOV 20H,@R0 ;BCD码缓冲区指针送20H
INC R2
INC R0
LCALL DIP2
MOV A,R5
JZ PL3
MOV 21H,#00H
MOV 20H,#00H
LCALL DIP2
PL3: SETB P1.5 ;LOAD上升沿锁存最后移入的16位数
DJNZ R1,PL1 ; 如未完,接着送下一组16位数
RET
(16位数据移位子程序)
DIP2: CLR P1.5
CLR P1.6
MOV R7,#10H
PL4: MOV C,0FH ;16位数的最高位送7219的DIN
MOV P1.7,C
SETB P1.6 ;7219CLK的上升沿锁存该位数
MOV A,21H ;移位操作
RL A
MOV 21H,A
MOV A,20H
RLC A
MOV 20H,A
MOV 08H,C
CLR P1.6 ;下降沿把数据移出DOUT端口
DJNZ R7,PL4
RET
八位串行LED显示驱动器MAX7219 7211应用程序.ASM
程序匠人 发表于 2005-8-27 20:08:00 阅读全文 | 回复(0) | 引用通告 | 编辑
程序清单:
ORG 0000H
MAX7219:DIN BIT P1.1 ;定义变量
CLK BIT P1.2
LOAD BIT P1.1
LED_BF EQU 50H ;显示数据首址
AJMP MAIN
MAIN: MOV SP.#70H
LCALL PROCESS ;设置MAX7219初始值
LCALL DISPLAY ;显示
WAIT; ;其他程序省略
SJMP WAIT
;MAX7219初始化子程序
PROCECC :MOV A,#0BH
MOV B,#07H
LCALL W_7219
MOV A,#09H
MOV B,#00H
LCALL W_7219
MOV A,##0AH
MOV B,#09H
LCALL W_7219
MOV A,#0CH
MOV B,#01H
LCALL W_7219
RET
;MAX7219显示子程序
DISPLAY:MOV R0,#LED_BF
MOV R4,#01H
MOV R3,#08H
C_DISP:MOV A,@R0
MOV B,A
MOV A,R4
LCALL W_7219
INC R0
INC R4
DJNZ R3,C_DISP
RET
W_7219:CLR LOAD
LCALL SD_7219
MOV A,B
LCALL SD_7219
SETB LOAD
RET
SD_7219:MOV R6,#08H
C_SD:NOP
CLR CLK
RLC A
MOV DIN,C
NOP
SETB CLK
DJNZ R6,C_SD
RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -