應(yīng)對智能手機(jī)的背光驅(qū)動(dòng)干擾
單片機(jī)STC12C5616 的外部時(shí)鐘選擇22. 118 4 MHz,便于串行口波特率的精確控制; 引腳P3. 0和P3. 1為UART 接口,通過通信接口芯片MAX232 芯片實(shí)現(xiàn)控制卡和PC 機(jī)之間的通信連接; 引腳P2. 0 ~ P2. 3為4 位數(shù)據(jù)線,該數(shù)據(jù)線一方面連接存儲(chǔ)器SST26VF016B 的4 位數(shù)據(jù)口,另一方面通過74HC245 驅(qū)動(dòng)后連接到LED 單元板輸出接口的數(shù)據(jù)線上。 在控制卡上設(shè)計(jì)有2 個(gè)單色LED單元板輸出接口,接口J1 使用數(shù)據(jù)線D0和D1,接口J2 使用數(shù)據(jù)線D2和D3; 引腳P1. 7為SPI 時(shí)鐘輸出,SPI 時(shí)鐘輸出線同時(shí)連接到串行Flash 存儲(chǔ)器SST26VF016B 和LED 單元板的時(shí)鐘輸入; 引腳P1. 4為串行Flash 存儲(chǔ)器SST26VF016B 的片選信號(hào); 引腳P3. 5為LED 單元板的數(shù)據(jù)鎖存信號(hào); 引腳P3. 7為LED 單元板的使能信號(hào)輸出; 引腳P1. 0 ~P1. 3為LED 單元板的行選擇信號(hào)輸出; J1 和J2 連接頭用來連接顯示屏在高度方向上的LED 單元板,以符合門頭屏64 點(diǎn)高度要求。
該電路的設(shè)計(jì)可以靈活地在單片機(jī)、串行存儲(chǔ)器和LED 單元板相互之間實(shí)現(xiàn)3 種不同的數(shù)據(jù)訪問模式,分別是:
(1) 單片機(jī)和存儲(chǔ)器之間的正常訪問。
由圖3 可以看出,單片機(jī)STC12C5616 和串行Flash 存儲(chǔ)器SST26VF016B 之間的連接是參照數(shù)據(jù)手冊進(jìn)行連接的,可以實(shí)現(xiàn)正常的數(shù)據(jù)存取,同時(shí)該數(shù)據(jù)也會(huì)進(jìn)入LED 單元板上的移位寄存器緩沖區(qū),但只要LED 單元板上的數(shù)據(jù)鎖存RCK 沒有得到有效信號(hào),進(jìn)入LED 單元板的數(shù)據(jù)是不顯示出來的無效數(shù)據(jù)。
(2) 單片機(jī)和LED 單元板之間數(shù)據(jù)通信。
將單片機(jī)引腳P1. 4置高電平,即將串行Flash存儲(chǔ)器的使能端無效,這時(shí)存儲(chǔ)器的數(shù)據(jù)端口呈高阻狀態(tài),單片機(jī)和LED 單元板之間數(shù)據(jù)通信就不會(huì)受到存儲(chǔ)器數(shù)據(jù)口的影響,可以將單片機(jī)的數(shù)據(jù)正常輸出到LED 單元板上。
(3) 存儲(chǔ)器和LED 顯示屏之間的數(shù)據(jù)傳輸。
首先采用第( 1) 種模式,單片機(jī)先向串行存儲(chǔ)器輸出命令字、存儲(chǔ)地址和虛擬字節(jié),然后將單片機(jī)的數(shù)據(jù)口P2. 0 ~ P2. 3全部置高電平,通過SPI 時(shí)鐘從串行存儲(chǔ)器讀取顯示數(shù)據(jù),同時(shí)以DMA方式進(jìn)入LED 單元板,當(dāng)讀取完一行數(shù)據(jù)后,在LED單元板上的數(shù)據(jù)鎖存端RCK 上產(chǎn)生有效信號(hào),就可以顯示該行數(shù)據(jù)。 當(dāng)采用這種模式時(shí),一定要將單片機(jī)STC12C5616 的引腳P2. 0 ~ P2. 3設(shè)置為弱上拉模式。
4 超長LED 顯示屏顯示程序設(shè)計(jì)
在1 /16 單色LED 顯示屏硬件電路設(shè)計(jì)中,74HC595 采用直通方式連接。 根據(jù)直通方式特點(diǎn),預(yù)先對單色顯示數(shù)據(jù)進(jìn)行優(yōu)化組織,將組織后的顯示數(shù)據(jù)預(yù)先存放在串行Flash 存儲(chǔ)器SST26VF016B 中。 如圖4 所示,單片機(jī)輸出顯示每行數(shù)據(jù)時(shí)按輸出數(shù)據(jù)→送移位脈沖→地址加1的順序重復(fù)進(jìn)行,顯示完一行后,RCK 鎖存顯示,通過ABCD 切換行選通線。
圖4 1 /16 掃描單色F3. 75 或F5. 0 單元板( 64 × 32 點(diǎn)) 連接方式。
以LED 顯示屏的水平方向點(diǎn)數(shù)為4 096 點(diǎn)為例,其顯示一幀數(shù)據(jù)的程序代碼如下:
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 個(gè)字節(jié)地址
SendSQI_Byte( ( Addr 》 16) 0xff) ;
SendSQI_Byte( ( Addr 》 8) 0xff) ;
SendSQI_Byte( ( Addr0xff) ;
SendSQI_Byte( ( 0xff) ; / /送虛字節(jié)
P2 = P2 |0x0f;
SPCTL = 0xd0; / /允許SPI 接口
SPDAT = 0xff; / /啟動(dòng)第1 次SPI 發(fā)送
Data_Length = ( Data_Length 》 3) - 1;
while( Data_Length! = 0)
{ / /SPI 時(shí)鐘每次傳輸8 個(gè)脈沖
while( ( SPSTAT0x80) == 0) ;
SPSTAT = 0x80; / /清接收標(biāo)志
SPDAT = 0xff; / /啟動(dòng)SPI 發(fā)送
Data_Length -- ;
}
while( ( SPSTAT0x80) == 0) ;
SPSTAT = 0x80; / /清接收標(biāo)志
SPCTL = 0x90; / /禁止SPI 接口
CS = 1; /* disable devicce * /
EN = 0;
RCK = 1; RCK = 0;
PI = ( ( P10xf0) | Ln
) ;
EN = 1;
}
}
在設(shè)計(jì)程序時(shí),僅在換行時(shí)關(guān)閉顯示屏,避免它產(chǎn)生余輝,其余時(shí)間都點(diǎn)亮。 在該程序中,Bv為數(shù)據(jù)線在垂直方向使用595 的組數(shù); Lw為LED 顯示屏水平方向像素點(diǎn)數(shù); Ln為當(dāng)前LED 顯示屏顯示數(shù)據(jù)行號(hào)。 當(dāng)顯示數(shù)據(jù)時(shí),采用存儲(chǔ)器和LED 顯示屏的數(shù)據(jù)輸出模式,單片機(jī)先向串行存儲(chǔ)器輸出讀數(shù)據(jù)命令字0x0B,然后輸出24 位地址和虛擬字節(jié),再使單片機(jī)數(shù)據(jù)口輸出高電平,就可以根據(jù)LED 顯示屏的長度輸出SCK 脈沖。 送完一行數(shù)據(jù)后,禁止SPI 接口,RCK 鎖存信號(hào)有效,切換至下一行,按重復(fù)步驟繼續(xù)輸出顯示數(shù)據(jù)。
5 測試
經(jīng)過測試后,顯示屏顯示正常,沒有抖動(dòng)情況,使用邏輯分析儀測試了其刷新率,如圖5( b) 所示,信號(hào)A 的電平寬度表示顯示1 行所需要的時(shí)間,其寬度為1. 036 16 ms,顯示1 幀的時(shí)間為16 ×1. 036 16 ms≈16 ms,所以LED 顯示屏的刷新率為1 /16 ms = 62. 5 Hz. 而當(dāng)LED 顯示屏的刷新率大于50 次/s 時(shí),就可以滿足設(shè)計(jì)要求,故本設(shè)計(jì)能夠滿足正常顯示要求。 通過測試SCK 信號(hào),如圖5( a)所示,可以看出SCK 信號(hào)每8 個(gè)脈沖1 組,每組之間的時(shí)間間隔僅為570 ns,該時(shí)間主要消耗在判斷SPI 數(shù)據(jù)傳輸完成標(biāo)志和循環(huán)控制上。
評論