LED顯示控制系統(tǒng)的數(shù)據(jù)組織如圖3所示。從圖2可以得到圖3(a)所示的從正面看過(guò)去顯示行與顯示數(shù)據(jù)位以及顏色的對(duì)應(yīng)關(guān)系。為了提高數(shù)據(jù)的讀取速度,將顯示數(shù)據(jù)按掃描行進(jìn)行連續(xù)排列,可得到圖3(b)所示的存儲(chǔ)單元與掃描行、存儲(chǔ)單元數(shù)據(jù)位及顏色的關(guān)系。
具體編程時(shí)可按下列步驟進(jìn)行:①將準(zhǔn)備掃描的行地址送P2口的低4位中。②將DPTR指向待顯示行相應(yīng)存儲(chǔ)單元的首地址。③以DPTR為指針,使用“MOXCA,@A+DPTR”讀顯示數(shù)據(jù),并將顯示數(shù)據(jù)送P0口。④通過(guò)P3.6產(chǎn)生SCK,同時(shí)DPTR加1。⑤重復(fù)②、③、④直到一行數(shù)據(jù)顯示完畢,通過(guò)P3.4產(chǎn)生RCK將通過(guò)移位寄存器移入的一行數(shù)據(jù)顯示。⑥重復(fù)②、③、④、⑤直到15行數(shù)據(jù)全部顯示完畢。⑦重復(fù)①~⑥刷新顯示。
根據(jù)上述編程步驟,可以很容易編出顯示第i行的子程序1。子程序1的第3行至第9行為循環(huán)體,送1字節(jié)的顯示數(shù)據(jù)共需10個(gè)機(jī)器周期,機(jī)器碼的字節(jié)數(shù)為11。通過(guò)分析74HC595的SCK為上升沿有效,可用單片機(jī)的寫信號(hào)(WR)來(lái)代替,故子程序1中的第5、6、7行3條指令可用“MOVX@R0,A”一條指令來(lái)替換,實(shí)驗(yàn)表明這樣的替換是可靠的。顯示第i行的子程序2為替換后的程序,送1字節(jié)的顯示數(shù)據(jù)所需機(jī)器周期減為9,機(jī)器碼的字節(jié)數(shù)減為6。再對(duì)顯示第i行的子程序2仔細(xì)分析后發(fā)現(xiàn),在僅使用SST89E516內(nèi)部64 KB的Flash存儲(chǔ)器作為顯示數(shù)據(jù)存儲(chǔ)且不增加輔助電路的前提下,只有子程序2第7行“DJNZ R0,DP1”這條2個(gè)機(jī)器周期2字節(jié)指令,可以利用SST89E516內(nèi)部64 KB的Flash存儲(chǔ)器大的特點(diǎn),直接簡(jiǎn)單的重復(fù)256次子程序2中第3、4、5、6行4條單字節(jié)指令,從而可以縮短2個(gè)機(jī)器周期的時(shí)間。這樣送1字節(jié)的機(jī)器周期可以減少為7,但程序需要增加1 KB。對(duì)64 KB的Flash存儲(chǔ)器來(lái)說(shuō),程序增加1KB減少不了多少顯示數(shù)據(jù)。與子程序1相比,子程序3速度提高了30%。在圖2所示12 MHz晶振并利用SST89E516的倍速功能,其1個(gè)機(jī)器周期為0.5μs,在忽略其他數(shù)據(jù)處理時(shí)間的前提下,顯示1屏完整數(shù)據(jù)所需時(shí)間近似為:(7×0.5 μs×256列×16行)=14.336 ms(每秒近70幀)。實(shí)驗(yàn)表明:人眼對(duì)LED顯示屏開始感覺到閃爍大約為每秒55幀,即每幀時(shí)間18 mS。從圖2、圖1(c)和3個(gè)子程序可以看出,一幀顯示數(shù)據(jù)在內(nèi)存中的排列有以下幾個(gè)特點(diǎn):①按掃描行掃描的先后順序依次排列;②在每一行按數(shù)據(jù)輸出的先后順序依次排列;③通過(guò)硬件和軟件的優(yōu)化使每個(gè)顯示數(shù)據(jù)輸出的時(shí)間最短。