基于51單片機和可編程邏輯器件實現LED顯示屏
2.3 LED顯示驅動時序信號的產生
CPLD 與LED點陣的驅動電路接口如圖 所示,其中:CS為3-8譯碼器片選信號;OE為BMI5026輸出使能信號,控制LED點陣是否能被點亮;LE為驅動芯片數據鎖存信號;sck為移位脈沖,將CPLD串行輸出的紅綠數據串行移入MBI5026(移位寄存器);A-D為雙3-8譯碼器構成的4-16譯碼器的數據輸入,實現顯示行選通控制; sdr為紅數據信號線;sdb為綠數據信號線。
其工作過程為:S3狀態(tài),sck脈沖置0,sdr和sdb分別輸出一位數據;S4狀態(tài)時,sck置 1,紅和綠數據分別移入相應移位寄存器BMI5026,若不足8位時,返回S3狀態(tài),若不足一行時,返回S1狀態(tài),讀下一個字節(jié),若完成一行數據移位過程,則轉S5狀態(tài);S5狀態(tài)時,置le為0,將BMI5026的緩沖寄存中一個顯示行的點陣數據送輸出寄存器,同時置cs1有效,控制第hcnt行的點陣顯示,然后判斷一屏內容是否顯示完成,返回s1狀態(tài)。圖4為完整的有限狀態(tài)機的狀態(tài)圖。
下面給出LED顯示屏體驅動時序信號對應的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; //讀完一個字節(jié)地址記數器加1
byte=byte+8'b1;
if(byte= = nrow)// 如果讀完一行數據
begin
oe1=1'b1;//關LED顯示
cs=1'b1;
le=1'b0;//驅動芯片寫入數據
byte = 8'b0;
state=s5;//讀完一行數據則顯示
end
else state=s1;
end
else state=s3; //當前字節(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
51單片機和可編程邏輯器件實現LED顯示屏" src="http://editerupload.eepw.com.cn/fetch/20140120/219667_3_0.jpg" onload="javascript:if(this.width>500)this.style.width=500;" border=0>
4系統(tǒng)測試及仿真
系統(tǒng)的開發(fā)調試環(huán)境是:單片機部分在KeilC51下調試,CPLD部分在Maxplus10下調試。LED顯示屏的掃描控制模塊的Verilog HDL源程序編寫完成后,在ALTERA公司Maxplus10可以先進行軟件仿真,以觀察各信號是否符合硬件電路所需的時序要求。圖5為掃描模塊 CLPD仿真結果,符合設計要求。通過JTAG接口下載到ATF1508AS后,系統(tǒng)工作正常。
5 結束語
基于Verilog HDL實現的LED顯示屏掃描控制模塊,應用于我們開發(fā)LED大屏幕電子信息顯示屏系統(tǒng),簡化了系統(tǒng)結構,提高性了性價比。該LED顯示屏在實際應用中具有良好的顯示效果,畫面清晰、性能穩(wěn)定,已經在學校的多個部門得到應用。
評論