基于AT89S52和ATF1508AS的LED顯示屏的硬件設(shè)計(jì)
本文引用地址:http://cafeforensic.com/article/171619.htm
2.3 LED顯示驅(qū)動(dòng)時(shí)序信號(hào)的產(chǎn)生
CPLD 與LED點(diǎn)陣的驅(qū)動(dòng)電路接口如圖 所示,其中:CS為3-8譯碼器片選信號(hào);OE為BMI5026輸出使能信號(hào),控制LED點(diǎn)陣是否能被點(diǎn)亮;LE為驅(qū)動(dòng)芯片數(shù)據(jù)鎖存信號(hào);sck為移位脈沖,將CPLD串行輸出的紅綠數(shù)據(jù)串行移入MBI5026(移位寄存器);A-D為雙3-8譯碼器構(gòu)成的4-16譯碼器的數(shù)據(jù)輸入,實(shí)現(xiàn)顯示行選通控制; sdr為紅數(shù)據(jù)信號(hào)線;sdb為綠數(shù)據(jù)信號(hào)線。
其工作過程為:S3狀態(tài),sck脈沖置0,sdr和sdb分別輸出一位數(shù)據(jù);S4狀態(tài)時(shí),sck置 1,紅和綠數(shù)據(jù)分別移入相應(yīng)移位寄存器BMI5026,若不足8位時(shí),返回S3狀態(tài),若不足一行時(shí),返回S1狀態(tài),讀下一個(gè)字節(jié),若完成一行數(shù)據(jù)移位過程,則轉(zhuǎn)S5狀態(tài);S5狀態(tài)時(shí),置le為0,將BMI5026的緩沖寄存中一個(gè)顯示行的點(diǎn)陣數(shù)據(jù)送輸出寄存器,同時(shí)置cs1有效,控制第hcnt行的點(diǎn)陣顯示,然后判斷一屏內(nèi)容是否顯示完成,返回s1狀態(tài)。圖4為完整的有限狀態(tài)機(jī)的狀態(tài)圖。
下面給出LED顯示屏體驅(qū)動(dòng)時(shí)序信號(hào)對(duì)應(yīng)的Verilog HDL程序代碼:
s3: begin
sck=1'b0;
sdr= SDA color[0];
sdb= SDC color[1];
OE=1'b1; CE=1'b1;
state=s4;
end
s4: begin // 移位輸出到LED顯示屏
sck = 1'b1;
shcnt = shcnt +1'b1;
if (shcnt = = 0)
begin
addr=addr+1'b1; //讀完一個(gè)字節(jié)地址記數(shù)器加1
byte=byte+8'b1;
if(byte= = nrow)// 如果讀完一行數(shù)據(jù)
begin
oe1=1'b1;//關(guān)LED顯示
cs=1'b1;
le=1'b0;//驅(qū)動(dòng)芯片寫入數(shù)據(jù)
byte = 8'b0;
state=s5;//讀完一行數(shù)據(jù)則顯示
end
else state=s1;
end
else state=s3; //當(dāng)前字節(jié)移位輸出
end
s5: begin
sck=1'b0;
le=1'b0;
counter=hcnt;
OE=1'b1;
CE=1'b0;
if(addr = = nscreen)
addr=0;
oe1=1'b0;
cs=1'b0;
state =s1;
end
評(píng)論