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