CALL MAX6951_TRANSMIT
RET
max6951_transmit:該函數(shù)向Max6951發(fā)送一個(gè)寄存器地址和數(shù)據(jù)字節(jié)(16位)。
max6951_set_all_n:這些函數(shù)將一位數(shù)字寄存器的P0級(jí)和P1級(jí)設(shè)置為數(shù)字“n”。所有函數(shù)具備16進(jìn)制譯碼和非譯碼模式。
max6951_e_d_s_d:該函數(shù)先使能MAX6951顯示,然后延遲半秒,關(guān)斷顯示,再延遲100ms。
max6951_screenshot:這些函數(shù)在8位數(shù)字LED面板的八個(gè)不同位置處顯示HELLO。
max6951_scroll_R_to_L:以不同順序顯示,該函數(shù)以非譯碼方式從右至左滾動(dòng)顯示HELLO。
max6951_scroll_L_to_R:以不同順序顯示,該函數(shù)以非譯碼方式從左至右滾動(dòng)顯示HELLO。
max6951_bouncing:該函數(shù)在LED的兩個(gè)邊沿之間跳動(dòng)顯示HELLO。
font_lookup:給定一個(gè)16進(jìn)制數(shù),該函數(shù)查詢?cè)跇?biāo)準(zhǔn)7段LED上以非譯碼方式顯示的相同字符。
max6951_counting:該函數(shù)用于顯示毫秒計(jì)時(shí),精確度為10毫秒。 列表2為詳細(xì)代碼。
列表2. MAX6951計(jì)時(shí)例程
;*******************************************************************************
;* Function: MAX6951_counting
;*
;* This routine counts how many 10-milliseconds have elapsed and displays
;*
;* the value from 0000 to 9999 on LED digits 3-0(no way to blank leading digits).
;*
; The routine displays the same value on LED digits 7-4(by using no decode
;*
;* mode, individual leading digits can be blanked).
;*
;* Input: None
;*
;* Output: None
;*
;* Destroys: ACC, A[1] - A[4], A[9]
;*
;*******************************************************************************
MAX6951_COUNTING:
CALL MAX6951_SHUTDOWN
CALL MAX6951_SET_ALL_0 ; SET ALL BITS OF DATA REGISTERS TO 0
MOVE ACC, #010FH ; HEXDECIMAL DECODE DIGITS 3-0, NO DEOCDE DIGITS 7-4
CALL MAX6951_TRANSMIT
; INITIALIZE THE COUNT TO 0
MOVE A[1], #0 ; A[1] => DIGIT 0
MOVE A[2], #0 ; A[2] => DIGIT 1
MOVE A[3], #0 ; A[3] => DIGIT 2
MOVE A[4], #0 ; A[4] => DIGIT 3
COUNT_LOOP:
INCREASE_DIGIT3:
MOVE ACC, A[4] ; PROCESS DIGIT 3
SUB #9
JUMP Z, INCREASE_DIGIT2 ; DIGIT 3 = 9, THERE IS CARRY OVER
MOVE ACC, A[4] ; DIGIT 3 < 9, CONTINUE
ADD #1
MOVE A[4], ACC
CALL FONT_LOOKUP ; LOOK UP THE VALUE FOR THIS FONT
; STORE IT IN A[9], KEEP ACC UNCHANGED
OR #6300H
CALL MAX6951_TRANSMIT ; NO CARRY OVER, WRITE DIGIT 3 NEW VALUE
MOVE ACC, A[9] ; WRITE THE NO DECODE VALUE TO DIGIT 7
OR #6700H
CALL MAX6951_TRANSMIT
JUMP DISPLAY_NUMBER
INCREASE_DIGIT2:
OR #6300H
CALL MAX6951_TRANSMIT ; WRITE 0 TO DIGIT 3 REGISTER FIRST
MOVE A[4], #0 ; SET DIGIT 3 BACK TO 0
MOVE ACC, #677EH ; NO DECODE VALUE FOR FONT ''0'' IS "7EH"
CALL MAX6951_TRANSMIT ; WRITE 7EH TO DIGIT 7 REGISTER
MOVE ACC, A[3] ; PROCESS DIGIT 2
SUB #9
JUMP Z, INCREASE_DIGIT1 ; DIGIT 2 = 9, THERE IS CARRY OVER
MOVE ACC, A[3] ; DIGIT 2 < 9, CONTINUE
ADD #1
MOVE A[3], ACC
CALL FONT_LOOKUP ; LOOK UP THE VALUE FOR THIS FONT
; STORE IT IN A[9], KEEP ACC UNCHANGED
OR #6200H
CALL MAX6951_TRANSMIT ; NO CARRY OVER, WRITE DIGIT 2 NEW VALUE
MOVE ACC, A[9] ; WRITE THE NO DECODE VALUE TO DIGIT 6
OR #6600H
CALL MAX6951_TRANSMIT
JUMP DISPLAY_NUMBER
INCREASE_DIGIT1:
OR #6200H
CALL MAX6951_TRANSMIT ; WRITE 0 TO DIGIT 2 REGISTER FIRST
MOVE A[3], #0 ; SET DIGIT 2 BACK TO 0
MOVE ACC, #667EH ; NO DECODE VALUE FOR FONT ''0'' IS "7EH"
CALL MAX6951_TRANSMIT ; WRITE 7EH TO DIGIT 6 REGISTER
MOVE ACC, A[2] ; PROCESS DIGIT 1
SUB #9
JUMP Z, INCREASE_DIGIT0 ; DIGIT 1 = 9, THERE IS CARRY OVER
MOVE ACC, A[2] ; DIGIT 1 < 9, CONTINUE
ADD #1
MOVE A[2], ACC
CALL FONT_LOOKUP ; LOOK UP THE VALUE FOR THIS FONT
; STORE IT IN A[9], KEEP ACC UNCHANGED
OR #6100H
CALL MAX6951_TRANSMIT ; NO CARRY OVER, WRITE DIGIT 1 NEW VALUE
MOVE ACC, A[9] ; WRITE THE NO DECODE VALUE TO DIGIT 5
OR #6500H
CALL MAX6951_TRANSMIT
JUMP DISPLAY_NUMBER
INCREASE_DIGIT0:
OR #6100H
CALL MAX6951_TRANSMIT ; WRITE 0 TO DIGIT 1 REGISTER FIRST
MOVE A[2], #0 ; SET DIGIT 1 BACK TO 0
MOVE ACC, #657EH ; NO DECODE VALUE FOR FONT ''0'' IS "7EH"
CALL MAX6951_TRANSMIT ; WIRTE 7EH TO DIGIT 5 REGISTER
MOVE ACC, A[1] ; PROCESS DIGIT 0
SUB #9
JUMP Z, COUNT_COMPLETE ; DIGIT 0 = 9, COUNTING IS OVER
MOVE ACC, A[1] ; DIGIT 0 < 9, CONTINUE
ADD #1
MOVE A[1], ACC
CALL FONT_LOOKUP ; LOOK UP THE VALUE FOR THIS FONT
; STORE IT IN A[9], KEEP ACC UNCHANGED
OR #6000H
CALL MAX6951_TRANSMIT ; NO CARRY OVER, WRITE DIGIT 0 NEW VALUE
MOVE ACC, A[9] ; WRITE THE NO DECODE VALUE TO DIGIT 4
OR #6400H
CALL MAX6951_TRANSMIT
DISPLAY_NUMBER: ; DISPLAY DIGIT 3-0 IN HEXADECIMAL DECODE MODE
; DIEPLAY DIGIT 7-4 IN NO DECODE MODE
CALL MAX6951_ENABLE
CALL MAX6951_10MS_DELAY
JUMP COUNT_LOOP
COUNT_COMPLETE:
RET
maxq2000_spi.asm文件:該文件用于配置、使用MAXQ2000 SPI模塊。集成在MAX-IDE,用戶無(wú)需修改即可使用。
divide32.asm文件:這是MAX-IDE軟件提供的32位除法程序。
maxq2000.inc、maxq2000_spi.inc和max2000ev_6951.inc文件:這些是MAXQ2000引腳定義和MAX6951寄存器定義的嵌套文件。
結(jié)論
MAX6951/MAX6950 SPI LED驅(qū)動(dòng)器簡(jiǎn)單易用的共陰極顯示器驅(qū)動(dòng)器,通過(guò)SPI串行接口連接微控制器。MAXQ系列微控制器集成了SPI模塊,可通過(guò)SPI接口與LED驅(qū)動(dòng)器通信。這里介紹的例程有助于用戶理解MAX6951的LED驅(qū)動(dòng)功能。也可將該例程應(yīng)用到類似的MAXQ2000系統(tǒng)開(kāi)發(fā)中。





