(1) 软件译码编程:
先找出各字符的编码,根据a 、b 、c 、d 、e 、f 、g 各段与数据位的对应关系,可得: H 中a 、d 段为0 , 。其余为1 ,即00110111 或37H ,同样E、L 、P 、7、2、1、9 的编码分别为4FH、0EH、67H、70H、6DH、30H、73H。将HEL P7219 字符编码分别存入8051 地址为50H 单元(片内RAM存放显示数据的8 个字节单元首地址) 。显示器最左边一位为第一位,R0 为对应的显示位,R1 为显示数据单元地址,R2 为显示位数,共8 位。因8051 串行输出的时序顺序为将一字节的最低位最先送出, 而MAX7219 的时序顺序为将接收到的第一位当作该一字节数据的最高位, 所以需要改变送出位的顺序。
程序如下:
SHOW: CL R P1. 0 ;LOAD 置低
MOV A , # 09H ;译码模式控制字
LCALL CHAN GE
MOV A , # 00H ;软件译码
LCALL CHAN GE
SETB P1. 0 ; 置LOAD 为高, 锁存软件译码控制字
ACALL DISPLA Y8 ;显示8 位数据
DISPLA Y8 :MOV R0 , # 01H ;置显示位,从第0 位开始
MOV R1 , # 50H ;置显示数据首址
MOV R2 , # 08H ;共8 位显示
A GAIN : CL R P1. 0
MOV A ,R0 ;显示位
LCALL CHAN GE
MOV A , @R1 ;取出显示数据
LCALL CHAN GE ;输出数据
SETB P1. 0
INC R0 ;指向下一位
INC R1 ;指向下一位显示数据
DJNZ R2 ,A GAIN ;8 位未完,继续
RET
CHAN GE : MOV C ,ACC. 7 ; 改变位顺序,对应于接收位
MOV 0A0H ,C
MOV C ,ACC. 6
MOV 0A1H ,C
MOV C ,ACC. 5
MOV 0A2H ,C
MOV C ,ACC. 4
MOV 0A3H ,C
MOV C ,ACC. 3
MOV 0A4H ,C
MOV C ,ACC. 2
MOV 0A5H ,C
MOV C ,ACC. 1
MOV 0A6H ,C
MOV C ,ACC. 0
MOV 0A7H ,C
MOV A ,0A0H
MOV SBU F ,A (下转P45图3 8051 与MAX7219 组成的8 位L ED 显示器)
JNB TI , $ ;等待发送完毕
CL R TI ;清TI 标志,允许再发
RET
(2) 硬件译码编程:
若采用B 码译码显示“HEL P7219”字符串,对应的编码分别为:0CH、0BH、0DH、0EH、07H、02H、01H、09H。8 个数据字节存50H开始的单元中,程序如下:
SHOW: CL R P1. 0 ;LOAD 置低
MOV A , # 09H ;译码模式控制字
LCALL CHAN GE
MOV A , # FFH ;B 码硬件译码
SETB P1. 0 ; 置LOAD 为高, 锁存硬件译码控制字
ACALL DISPLA YS ;显示8 位数据