基于CPLD的LCD1602顯示系統(tǒng)設(shè)計與實現(xiàn)
掃描二維碼
隨時隨地手機(jī)看文章
摘要:為了提高LCD1602顯示效果,增強(qiáng)抗擾能力,文章基于TOP2812開發(fā)板,依據(jù)LCD1602操作時序要求,在開發(fā)板CPLD部分實現(xiàn)了LCD1602顯示系統(tǒng)的設(shè)計。文中對LCD1602時序進(jìn)行了詳細(xì)分析,并在QuartusⅡ平臺下采用Verilog HDL編寫了test bench測試文件和驅(qū)動程序,經(jīng)仿真和實際測試表明,顯示效果較好,達(dá)到了設(shè)計要求。
關(guān)鍵詞:CPLD;LCD1602;顯示系統(tǒng);時序;Vetilog HDL
隨著技術(shù)的發(fā)展,社會數(shù)字化的程度顯得越來越明顯,集成電路在社會當(dāng)中的應(yīng)用也越來越廣泛。傳統(tǒng)的ASIC曾在數(shù)字領(lǐng)域扮演重要角色,雖種類繁多,但功能固定、管腳有限,應(yīng)用范圍也相對較窄,因此在一定程度上限制了人們對其的使用。如今,隨著現(xiàn)場可編程技術(shù)的發(fā)展,F(xiàn)PGA及CPLD技術(shù)已不再是傳統(tǒng) ASCI技術(shù)領(lǐng)域的一個點綴與補(bǔ)充,其顯然已成為電子應(yīng)用領(lǐng)域廣受歡迎的實用化技術(shù),為數(shù)字系統(tǒng)的科研實驗、樣機(jī)試制、小批量產(chǎn)品的即時實現(xiàn)等提供了最佳途徑。EPM240T100C5是Altera公司生產(chǎn)的MaxII系列CPLD,其功耗低、價格廉、配置靈活、資源豐富,具有較高的市場性價比,因而備受青睞。
在顯示輸出方面,目前主要采用3種方式,即:圖形、數(shù)字或?qū)S梅枺谇度胧筋I(lǐng)域,顯示常采用LED、數(shù)碼管及液晶顯示器。前兩種雖然實現(xiàn)簡單,但顯示內(nèi)容不夠豐富。LCD1602具有體積小、功耗低、顯示容量大、接口簡單,操作方便,能夠顯示字符、數(shù)字及符號等優(yōu)點,因此被廣泛應(yīng)用于日常生活當(dāng)中。
該文以EPM2405100C5為控制核心,在Quartus II平臺下采用Verilog HDL編寫LCD1602顯示驅(qū)動程序,并生成相應(yīng)目標(biāo)文件,最終下載至目標(biāo)芯片,實現(xiàn)LCD1602的顯示設(shè)計功能。
1 實現(xiàn)原理
將EPM240T100C5的I/O口與LCD1602的數(shù)據(jù)管腳及控制管腳進(jìn)行接口,利用Verilog HDL編寫軟件程序,使CPID輸出滿足LCD1602的操作時序。由于LCD1602屬慢顯示設(shè)備,而CPLD往往時鐘頻率較高,為此需要對CPLD主時鐘進(jìn)行分頻,從而產(chǎn)生合適的時鐘信號供LCD1602使用。在讀/寫數(shù)據(jù)時,需要對LCD1602的忙標(biāo)志進(jìn)行檢測,只有在忙標(biāo)志位為0的情況下,才能完成對數(shù)據(jù)或指令的讀取與寫入。此外,為方便對LCD1602模塊進(jìn)行操作,其內(nèi)部控制器為該模塊提供了11條控制指令,通過寫入相應(yīng)的控制指令,可定制該模塊的顯示模式。LCD1602為用戶提供的存儲空間分3部分:DDRAM、CGRAM和CGROM。DDRAM共有80個存儲空間,對應(yīng)屏幕的兩行,每行40個,但每行可顯示的地址只有16個,其他地址所寫入的數(shù)據(jù)可通過移屏進(jìn)行顯示。CGRAM為用戶自定義字符圖形RAM,用戶可以定制特定的圖形。 CGROM為字符發(fā)生ROM,其內(nèi)部已存儲160個不同點陣字符圖形,由于其編碼與ASC II碼基本一致,因此在進(jìn)入寫操作時,也可直接寫入對應(yīng)字符,如寫8’h41,可顯示字符A,直接寫入“A”,也可達(dá)到同樣的顯示效果。
LCD1602的初始化主要用于完成字符顯示模式、光標(biāo)顯示模式、寫入數(shù)據(jù)后地址指針變化的設(shè)置、清屏及開顯示等操作。該模塊若要成功地被驅(qū)動,除了正確的初始化步驟以外,還必須依賴于準(zhǔn)確的操作時序,因此分析其操作時序也就顯得尤為重要。
2 時序分析
操作時序為IC芯片的工作提供了正確的節(jié)拍,如果節(jié)拍錯了,那么芯片將不可能正常工作。LCD1602的寫操作時序圖如圖1所示。
由圖1可知,若要寫入正確的數(shù)據(jù),必須在E的上升沿到來之前建立RS及R/W電平,同時完成數(shù)據(jù)的寫入操作,在E處于高電平期間,寫入的數(shù)據(jù)才能有效。圖 1中,tsp1即為RS、R/W的建立時間,tsp2為數(shù)據(jù)的建立時間,若要正確完成寫入操作,必須使各建立時間滿足時序要求。數(shù)據(jù)在E的高電平期間有效,即持續(xù)一個脈沖寬度tpw。圖1中具體參數(shù)的時間要求如表1所示。
為方便建立E信號的波形,可取tpw=tc/2,即將E的波形設(shè)計為方波,只要保證tc>400 ns,則其高、低電平所維持的時間都將不小于200 ns,而如果將RS、R/W及數(shù)據(jù)變化的時間都取在E信號低電平的中間位置,則地址及數(shù)據(jù)的建立時間和地址及數(shù)據(jù)的保持時間都將大于100 ns,對比表1的時序參數(shù)要求,顯然按這種方法設(shè)計出的時序是完全滿足LCD1602寫操作時序要求的。
因此,只需選取一個合適的tc,也就基本確定寫操作時序了。由于LCD1602初始化時需要延時5 ms來完成對顯示模式的設(shè)定,因此可選取5 ms作為tc的取值,從而簡化顯示模塊的初始化操作。
3 軟件實現(xiàn)
文中設(shè)計采用Verilog HDL實現(xiàn),模塊程序的接口如下所示:
由于LCD1602初始化需要按特定步驟寫入不同的控制指令,其可顯示的數(shù)據(jù)地址在空間上是兩個獨立的固定區(qū)域,因此可借用有限狀態(tài)機(jī)的設(shè)計思想進(jìn)行設(shè)計系統(tǒng)。狀態(tài)采用一位獨熱碼進(jìn)行編碼。所定義狀態(tài)如下:
在QuartusⅡ平臺下,經(jīng)綜合所得的狀態(tài)轉(zhuǎn)移關(guān)系如圖2所示。
要想實現(xiàn)狀態(tài)的轉(zhuǎn)移,需構(gòu)建LCD1602顯示模塊所必需的時鐘,在時序分析過程中已確定將E信號的周期設(shè)計為5ms,而數(shù)據(jù)的寫入以及RS、R/W電平的變化總是在E信號低電平的中間發(fā)生,因此可重新建立一個時鐘,使其在該位置發(fā)生跳變,可以是上升沿也可以是下降沿,其周期與E信號周期相等,為便于設(shè)計,也將該時鐘設(shè)計成脈寬為50%的方波信號。這里設(shè)E信號的時鐘為lcd_en,在E信號低電平中間位置跳變的時鐘為clkjlag。若選擇 clk_flag的上升沿觸發(fā)RS、R/W電平的改變及數(shù)據(jù)的寫入操作,則顯然clk_flag高電平要超前clk_div高電平90°。為得到相位上互差90°的兩個時鐘,可以通過對系統(tǒng)時鐘分頻,構(gòu)建一個周期為2.5ms的時鐘clk_div,使得clk_flag總是在clk_div的上升沿翻轉(zhuǎn),而lcd_en總是在clk_div的下降沿翻轉(zhuǎn),由此即可得到相位上互差90°的兩個時鐘信號了。由于主時鐘為30 Mhz,因此需對其進(jìn)行37 500分頻,即可得到周期為2.5 ms的clk _div。其軟件實現(xiàn)如下:[!--empirenews.page--]
由clk_div時鐘信號獲取lcd_en及l(fā)cd_flag兩個時鐘信號,具體如下:
至此,只需捕獲clk_flag的上升沿,并在該跳變沿處送入指令或數(shù)據(jù)即可。而狀態(tài)之間的轉(zhuǎn)移關(guān)系則需按初始化的正確步驟進(jìn)行,完成初始化后,指定DDRAM的地址,并向lcd_dat送數(shù)據(jù)即可實現(xiàn)數(shù)據(jù)的寫入操作。
4 仿真結(jié)果及實現(xiàn)效果
軟件仿真借助了第三方的仿真軟件Modelsim,在QuartusII當(dāng)中利用Test Bench Template Writer建立仿真模板文件,并在模板當(dāng)中給出激勵條件,編譯后即可生成用于仿真測試的vt文件了。初始化部分的仿真結(jié)果如圖3所示。
上圖信號從上到下依次為:clk,rst_n,lcd_dat,lcd_en,lcd_rs,lcd_rw。由圖3可知,由于系統(tǒng)時鐘頻率較高,clk已顯示為一條粗線,rst_n僅延時10個仿真單位,即被拉高為高電平,lcd_dat中出線一段藍(lán)色線條,占lcd_en的3個周期,即實現(xiàn)了15ms的延時,緊接著的四個周期連續(xù)寫入8’h38,然后8’h01等,直到8’h0c完成對LCD1602的初始化。圖4為初始化后向LCD1602寫入的數(shù)據(jù),由于顯示內(nèi)容的編碼與ASCII碼基本一致,可將其設(shè)置為ASCII進(jìn)行觀察。
將Verilog HDL編寫的程序進(jìn)行編譯,并將生的目標(biāo)代碼下載至EPM240T100C5,最終顯示的效果如圖5所示。
5 結(jié)束語
通過對LCD1602時序進(jìn)行詳細(xì)分析,本文實現(xiàn)了用CPLD驅(qū)動LCD1602顯示模塊工作的目的。通過仿真及硬件驗證,均說明了設(shè)計的合理性與正確性。另外,采用模塊化設(shè)計,也為后續(xù)系統(tǒng)的大規(guī)模化和可擴(kuò)展性提供了很大方便。相比單片機(jī)實現(xiàn)過程,利用CPLD實現(xiàn)顯得更加簡單、方便。另外,CPLD管腳的可配置特點也為CPLD的使用帶來了極大的靈活性。隨著CPLD及FPGA技術(shù)的發(fā)展,數(shù)字系統(tǒng)設(shè)計也必將發(fā)展到一個新的階段。