在LED顯示屏應用中,超長條形LED屏是非常廣泛的一種形式,其特點是長度“特別長”而寬度窄。 超長LED顯示屏目前沒有明確的定義,可以將其水平方向的點數定義為≥2 048比較合適。
以由1 /4 掃描P10單元板(點間距10 mm) 組成的超長條形LED顯示屏為例,當水平方向的點數為2 048時,其水平方向物理尺寸為20. 48 m. LED 屏的寬度(垂直方向) 點數一般為16、24和32點,最多不超過64 點,應用中以能夠顯示一行各類字體的漢字為主。 為保證刷新率,在對超長LED 顯示屏的控制上,要求在規定時間內送出更多數據,普通的LED顯示屏控制卡很難實現控制要求。
本文在分析現有各種條形LED顯示屏單元板電路的基礎上,提出了一種基于多端口串行Flash存儲器的LED 顯示控制系統。 利用單片機的SPI接口產生可控時鐘,將多端口串行Flash 存儲器中的顯示數據以“DMA”方式直接輸出至超長條形LED顯示屏。
1 常用單元板內部串行移位寄存器連接方式
圖1 為3 種常用單元板內部串行移位寄存器連接方式。 其中圖1(a) 為單元板74HC595 與LED發光管點陣連接關系及簡化表示電路。 LED 顯示屏單元板內部使用的串行移位寄存器一般為74HC595、MBI5026 或MBI5026 兼容芯片,而MBI5026 可以看成是由兩片74HC595 級聯構成,為恒流源驅動模式,更適合LED 的驅動。
圖1(b) 、(c) 、(d) 分別為P10、P16、F3. 75 或F5. 0單元板的連接方式。
圖1 3 種常用單元板內部串行移位寄存器連接方式
2 超長LED顯示屏面臨的問題及解決方案
目前,市場上大量的門頭屏( 條形LED 顯示屏)是LED 顯示屏應用最廣的一種形式。從技術上來說,門頭屏的水平方向點數從256 點至數千點,而高度一般不超過64 點。隨著市場需求和顯示精度的提高,數千點長度的超長LED 顯示屏需求量在不斷加大。 普通的LED 顯示屏控制卡難于滿足刷新率的要求,以在長度上像素點是4 096 的F3. 75 LED 顯示屏為例,設刷新率為60 Hz,其SCK時鐘周期至少為106 /60 /16 /4 096 = 0. 254 μs = 254 ns.
解決超長LED 顯示屏數據輸出的方法有兩種:一是選擇高性能嵌入式處理器和FPGA 芯片,該方法控制卡成本較高;二是巧妙應用單片機上的特殊功能部件并優化組織數據算法,這種方法成本很低。本文采用的就是第2 種方法,通過優化算法將數據預先寫入多端口串行Flash 存儲器SST26VF016B 中,利用STC12C5616 單片機的SPI部件產生高速可控SCK 時鐘,將多端口串行Flash存儲器中的顯示數據以“DMA”方式直接輸出至超長條形LED 顯示屏中,滿足超長LED 顯示屏的顯示要求。
超長LED 顯示屏高度一般不超過64 點,若控制1 /16 掃描單色LED 顯示屏,SST26VF016B 存儲器的4 位數據端口正好滿足LED 顯示屏數據口寬度的需要。圖2 為SST26VF016B 存儲器的控制時序,CS 為SST26VF016B 存儲器的片選端,所有對存儲器的操作都要在CS 為低電平期間進行;SCK 為時鐘線,當空閑模式時,SCK 信號可以處于低電平狀態( MODE 0),也可以處在高電平狀態( MODE 3) ; SIO( 3∶ 0) 為4 位數據端口,在數據傳輸時,先傳字節的高4 位,再傳字節的低4 位。從存儲器的控制時序可以看出,對存儲器的控制按照命令字、24 位存儲地址、虛擬字節、數據字節0 到數據字節N 的順序發送。存儲器的命令字可以實現對存儲器進行片擦除、扇區擦除、單字節讀寫、連續字節讀寫等功能,完全能夠滿足超長LED 顯示屏對存儲器的容量和控制方式的要求。
圖2 SST26VF016B 存儲器的控制時序。
STC12C5616 是STC 公司推出的高速1T 單片機,時鐘頻率可達30 MHz 以上,其內部集成一個高速串行通信接口部件( 即SPI 接口)。當STC12C5616 的SPI 部件采用主模式工作時,其SPI時鐘輸出頻率( fclk) 可以達到晶振頻率( fosc) 的1 /4 倍,并且可以靈活配置它的時鐘相位和時鐘極性,既滿足對SST26VF016B存儲器控制的要求,又滿足超長LED 顯示屏對時鐘的要求。
3 超長LED顯示屏控制卡電路設計
利用串行Flash 存儲器SST26VF016B 的多位數據口存儲器和STC12C5616 單片機的SPI 部件能產生高速SCK 時鐘的特點,將顯示數據從串行Flash存儲器旁路輸出至LED顯示屏,電路如圖3 所示。
圖3 超長LED 顯示屏控制卡電路圖。
當顯示屏的動態刷新速率達到50 次/s 時,在1 /16 掃描的LED 顯示屏上,一行顯示時間要小于1 /50 /16 s,即1. 25 ms. 在控制卡設計上,當fosc =22 MHz時,串行Flash 時鐘頻率fclk = 1 /4 fosc =5. 5 MHz,故4 096 個CLK 時鐘所需時間為4 096 × 1 /(5. 5 × 106 ) s = 0. 744 ms,加上采用SQI協議發送存儲器指令和地址的時間后也小于1. 25 ms,故在圖3 中,單片機STC12C5616 的外部時鐘選擇22 MHz 時鐘,就可以保證在SQI 協議方式下實現4 096 超長顯示屏的顯示。
單片機STC12C5616 的外部時鐘選擇22. 118 4 MHz,便于串行口波特率的精確控制;引腳P3. 0和P3. 1為UART 接口,通過通信接口芯片MAX232 芯片實現控制卡和PC 機之間的通信連接;引腳P2. 0 ~ P2. 3為4 位數據線,該數據線一方面連接存儲器SST26VF016B 的4 位數據口,另一方面通過74HC245 驅動后連接到LED 單元板輸出接口的數據線上。在控制卡上設計有2 個單色LED單元板輸出接口,接口J1 使用數據線D0和D1,接口J2 使用數據線D2和D3; 引腳P1. 7為SPI 時鐘輸出,SPI 時鐘輸出線同時連接到串行Flash 存儲器SST26VF016B 和LED 單元板的時鐘輸入;引腳P1. 4為串行Flash 存儲器SST26VF016B 的片選信號; 引腳P3. 5為LED 單元板的數據鎖存信號;引腳P3. 7為LED 單元板的使能信號輸出;引腳P1. 0 ~P1. 3為LED 單元板的行選擇信號輸出;J1 和J2 連接頭用來連接顯示屏在高度方向上的LED 單元板,以符合門頭屏64 點高度要求。
該電路的設計可以靈活地在單片機、串行存儲器和LED單元板相互之間實現3 種不同的數據訪問模式,分別是:
(1) 單片機和存儲器之間的正常訪問。
由圖3 可以看出,單片機STC12C5616 和串行Flash 存儲器SST26VF016B 之間的連接是參照數據手冊進行連接的,可以實現正常的數據存取,同時該數據也會進入LED 單元板上的移位寄存器緩沖區,但只要LED 單元板上的數據鎖存RCK 沒有得到有效信號,進入LED 單元板的數據是不顯示出來的無效數據。
(2) 單片機和LED 單元板之間數據通信。
將單片機引腳P1. 4置高電平,即將串行Flash存儲器的使能端無效,這時存儲器的數據端口呈高阻狀態,單片機和LED 單元板之間數據通信就不會受到存儲器數據口的影響,可以將單片機的數據正常輸出到LED 單元板上。
(3) 存儲器和LED 顯示屏之間的數據傳輸。
首先采用第(1) 種模式,單片機先向串行存儲器輸出命令字、存儲地址和虛擬字節,然后將單片機的數據口P2. 0 ~ P2. 3全部置高電平,通過SPI 時鐘從串行存儲器讀取顯示數據,同時以“DMA”方式進入LED 單元板,當讀取完一行數據后,在LED單元板上的數據鎖存端RCK 上產生有效信號,就可以顯示該行數據。當采用這種模式時,一定要將單片機STC12C5616 的引腳P2. 0 ~ P2. 3設置為“弱上拉”模式。
4 超長LED 顯示屏顯示程序設計
在1 /16 單色LED 顯示屏硬件電路設計中,74HC595 采用直通方式連接。根據直通方式特點,預先對單色顯示數據進行優化組織,將組織后的顯示數據預先存放在串行Flash 存儲器SST26VF016B 中。如圖4 所示,單片機輸出顯示每行數據時按“輸出數據→送移位脈沖→地址加1”的順序重復進行,顯示完一行后,RCK 鎖存顯示,通過ABCD 切換行選通線。
圖4 1 /16 掃描單色F3. 75 或F5. 0 單元板( 64 × 32 點) 連接方式。
|
以LED 顯示屏的水平方向點數為4 096 點為例,其顯示一幀數據的程序代碼如下:
woid Display(unsigned long begin_Addr)
{
unsigned char Ln
,Bv = 1;
unsigned int Data_Length,Lw = 4096;
unsigned long Addr;
Data_Length = Bv* Lw
) ;
for ( Ln = 0; Ln 《 16; Ln + + )
{
Addr = Begin_Addr + Ln* Data_Length;
CS = 0;
SendSQI_Byte( 0x0B) ; / /送讀命令
/ /送3 個字節地址
SendSQI_Byte( ( Addr 》 16) &0xff) ;
SendSQI_Byte( ( Addr 》 8) &0xff) ;
SendSQI_Byte( ( Addr&0xff) ;
SendSQI_Byte( ( 0xff) ; / /送虛字節
P2 = P2 |0x0f;
SPCTL = 0xd0; / /允許SPI 接口
SPDAT = 0xff; / /啟動第1 次SPI 發送
Data_Length = ( Data_Length》 3) - 1;
while( Data_Length! = 0)
{ / /SPI 時鐘每次傳輸8 個脈沖
while( ( SPSTAT&0x80) == 0) ;
SPSTAT = 0x80; / /清接收標志
SPDAT = 0xff; / /啟動SPI 發送
Data_Length -- ;
}
while( ( SPSTAT&0x80) == 0) ;
SPSTAT = 0x80; / /清接收標志
SPCTL = 0x90; / /禁止SPI 接口
CS = 1; /* disable devicce * /
EN = 0;
RCK = 1; RCK = 0;
PI = ( ( P1&0xf0) | Ln
) ;
EN = 1;
}
}
在設計程序時,僅在換行時關閉顯示屏,避免它產生余輝,其余時間都點亮。在該程序中,Bv為數據線在垂直方向使用595 的組數;Lw為LED 顯示屏水平方向像素點數;Ln為當前LED 顯示屏顯示數據行號。 當顯示數據時,采用存儲器和LED 顯示屏的數據輸出模式,單片機先向串行存儲器輸出“讀數據”命令字“0x0B”,然后輸出24 位地址和虛擬字節,再使單片機數據口輸出高電平,就可以根據LED 顯示屏的長度輸出SCK 脈沖。送完一行數據后,禁止SPI 接口,RCK 鎖存信號有效,切換至下一行,按重復步驟繼續輸出顯示數據。
5 測試
經過測試后,顯示屏顯示正常,沒有抖動情況,使用邏輯分析儀測試了其刷新率,如圖5(b) 所示,信號A 的電平寬度表示顯示1 行所需要的時間,其寬度為1. 036 16 ms,顯示1 幀的時間為16 ×1. 036 16 ms≈16 ms,所以LED 顯示屏的刷新率為1 /16 ms = 62. 5 Hz. 而當LED 顯示屏的刷新率大于50 次/s 時,就可以滿足設計要求,故本設計能夠滿足正常顯示要求。通過測試SCK 信號,如圖5(a)所示,可以看出SCK 信號每8 個脈沖1 組,每組之間的時間間隔僅為570 ns,該時間主要消耗在判斷SPI 數據傳輸完成標志和循環控制上。
圖5 LED 屏信號測試
6 結論
本文提出了基于多端口串行Flash存儲器的LED顯示控制系統,利用單片機的SPI 接口產生可控時鐘,將多端口串行Flash 存儲器中的顯示數據以“DMA”方式直接輸出至超長條形LED 顯示屏。
其制造成本低廉,根據本文程序及邏輯分析儀得到的時序圖可知,該方法可以控制4 096 × 64 點陣單色LED顯示屏,在超長顯示屏市場上有很好的應用前景。
責任編輯;zl
評論
查看更多