(1) 軟件譯碼編程:
先找出各字符的編碼,根據(jù)a 、b 、c 、d 、e 、f 、g 各段與數(shù)據(jù)位的對應(yīng)關(guān)系,可得: 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 單元(片內(nèi)RAM存放顯示數(shù)據(jù)的8 個字節(jié)單元首地址) 。顯示器最左邊一位為第一位,R0 為對應(yīng)的顯示位,R1 為顯示數(shù)據(jù)單元地址,R2 為顯示位數(shù),共8 位。因8051 串行輸出的時序順序為將一字節(jié)的最低位最先送出, 而MAX7219 的時序順序為將接收到的第一位當(dāng)作該一字節(jié)數(shù)據(jù)的最高位, 所以需要改變送出位的順序。
程序如下:
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 位數(shù)據(jù)
DISPLA Y8 :MOV R0 , # 01H ;置顯示位,從第0 位開始
MOV R1 , # 50H ;置顯示數(shù)據(jù)首址
MOV R2 , # 08H ;共8 位顯示
A GAIN : CL R P1. 0
MOV A ,R0 ;顯示位
LCALL CHAN GE
MOV A , @R1 ;取出顯示數(shù)據(jù)
LCALL CHAN GE ;輸出數(shù)據(jù)
SETB P1. 0
INC R0 ;指向下一位
INC R1 ;指向下一位顯示數(shù)據(jù)
DJNZ R2 ,A GAIN ;8 位未完,繼續(xù)
RET
CHAN GE : MOV C ,ACC. 7 ; 改變位順序,對應(yīng)于接收位
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 (下轉(zhuǎn)P45圖3 8051 與MAX7219 組成的8 位L ED 顯示器)
JNB TI , $ ;等待發(fā)送完畢
CL R TI ;清TI 標(biāo)志,允許再發(fā)
RET
(2) 硬件譯碼編程:
若采用B 碼譯碼顯示“HEL P7219”字符串,對應(yīng)的編碼分別為:0CH、0BH、0DH、0EH、07H、02H、01H、09H。8 個數(shù)據(jù)字節(jié)存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 位數(shù)據(jù)