基于CPLD的LCD1602顯示系統設計與實(shí)現
摘要:為了提高LCD1602顯示效果,增強抗擾能力,文章基于TOP2812開(kāi)發(fā)板,依據LCD1602操作時(shí)序要求,在開(kāi)發(fā)板CPLD部分實(shí)現了LCD1602顯示系統的設計。文中對LCD1602時(shí)序進(jìn)行了詳細分析,并在QuartusⅡ平臺下采用Verilog HDL編寫(xiě)了test bench測試文件和驅動(dòng)程序,經(jīng)仿真和實(shí)際測試表明,顯示效果較好,達到了設計要求。
本文引用地址:http://dyxdggzs.com/article/201609/303571.htm關(guān)鍵詞:CPLD;LCD1602;顯示系統;時(shí)序;Vetilog HDL
隨著(zhù)技術(shù)的發(fā)展,社會(huì )數字化的程度顯得越來(lái)越明顯,集成電路在社會(huì )當中的應用也越來(lái)越廣泛。傳統的ASIC曾在數字領(lǐng)域扮演重要角色,雖種類(lèi)繁多,但功能固定、管腳有限,應用范圍也相對較窄,因此在一定程度上限制了人們對其的使用。如今,隨著(zhù)現場(chǎng)可編程技術(shù)的發(fā)展,FPGA及CPLD技術(shù)已不再是傳統 ASCI技術(shù)領(lǐng)域的一個(gè)點(diǎn)綴與補充,其顯然已成為電子應用領(lǐng)域廣受歡迎的實(shí)用化技術(shù),為數字系統的科研實(shí)驗、樣機試制、小批量產(chǎn)品的即時(shí)實(shí)現等提供了最佳途徑。EPM240T100C5是Altera公司生產(chǎn)的MaxII系列CPLD,其功耗低、價(jià)格廉、配置靈活、資源豐富,具有較高的市場(chǎng)性?xún)r(jià)比,因而備受青睞。
在顯示輸出方面,目前主要采用3種方式,即:圖形、數字或專(zhuān)用符號,在嵌入式領(lǐng)域,顯示常采用LED、數碼管及液晶顯示器。前兩種雖然實(shí)現簡(jiǎn)單,但顯示內容不夠豐富。LCD1602具有體積小、功耗低、顯示容量大、接口簡(jiǎn)單,操作方便,能夠顯示字符、數字及符號等優(yōu)點(diǎn),因此被廣泛應用于日常生活當中。
該文以EPM2405100C5為控制核心,在Quartus II平臺下采用Verilog HDL編寫(xiě)LCD1602顯示驅動(dòng)程序,并生成相應目標文件,最終下載至目標芯片,實(shí)現LCD1602的顯示設計功能。
1 實(shí)現原理
將EPM240T100C5的I/O口與LCD1602的數據管腳及控制管腳進(jìn)行接口,利用Verilog HDL編寫(xiě)軟件程序,使CPID輸出滿(mǎn)足LCD1602的操作時(shí)序。由于LCD1602屬慢顯示設備,而CPLD往往時(shí)鐘頻率較高,為此需要對CPLD主時(shí)鐘進(jìn)行分頻,從而產(chǎn)生合適的時(shí)鐘信號供LCD1602使用。在讀/寫(xiě)數據時(shí),需要對LCD1602的忙標志進(jìn)行檢測,只有在忙標志位為0的情況下,才能完成對數據或指令的讀取與寫(xiě)入。此外,為方便對LCD1602模塊進(jìn)行操作,其內部控制器為該模塊提供了11條控制指令,通過(guò)寫(xiě)入相應的控制指令,可定制該模塊的顯示模式。LCD1602為用戶(hù)提供的存儲空間分3部分:DDRAM、CGRAM和CGROM。DDRAM共有80個(gè)存儲空間,對應屏幕的兩行,每行40個(gè),但每行可顯示的地址只有16個(gè),其他地址所寫(xiě)入的數據可通過(guò)移屏進(jìn)行顯示。CGRAM為用戶(hù)自定義字符圖形RAM,用戶(hù)可以定制特定的圖形。 CGROM為字符發(fā)生ROM,其內部已存儲160個(gè)不同點(diǎn)陣字符圖形,由于其編碼與ASC II碼基本一致,因此在進(jìn)入寫(xiě)操作時(shí),也可直接寫(xiě)入對應字符,如寫(xiě)8’h41,可顯示字符A,直接寫(xiě)入“A”,也可達到同樣的顯示效果。
LCD1602的初始化主要用于完成字符顯示模式、光標顯示模式、寫(xiě)入數據后地址指針變化的設置、清屏及開(kāi)顯示等操作。該模塊若要成功地被驅動(dòng),除了正確的初始化步驟以外,還必須依賴(lài)于準確的操作時(shí)序,因此分析其操作時(shí)序也就顯得尤為重要。
2 時(shí)序分析
操作時(shí)序為IC芯片的工作提供了正確的節拍,如果節拍錯了,那么芯片將不可能正常工作。LCD1602的寫(xiě)操作時(shí)序圖如圖1所示。

由圖1可知,若要寫(xiě)入正確的數據,必須在E的上升沿到來(lái)之前建立RS及R/W電平,同時(shí)完成數據的寫(xiě)入操作,在E處于高電平期間,寫(xiě)入的數據才能有效。圖 1中,tsp1即為RS、R/W的建立時(shí)間,tsp2為數據的建立時(shí)間,若要正確完成寫(xiě)入操作,必須使各建立時(shí)間滿(mǎn)足時(shí)序要求。數據在E的高電平期間有效,即持續一個(gè)脈沖寬度tpw。圖1中具體參數的時(shí)間要求如表1所示。

為方便建立E信號的波形,可取tpw=tc/2,即將E的波形設計為方波,只要保證tc>400 ns,則其高、低電平所維持的時(shí)間都將不小于200 ns,而如果將RS、R/W及數據變化的時(shí)間都取在E信號低電平的中間位置,則地址及數據的建立時(shí)間和地址及數據的保持時(shí)間都將大于100 ns,對比表1的時(shí)序參數要求,顯然按這種方法設計出的時(shí)序是完全滿(mǎn)足LCD1602寫(xiě)操作時(shí)序要求的。
因此,只需選取一個(gè)合適的tc,也就基本確定寫(xiě)操作時(shí)序了。由于LCD1602初始化時(shí)需要延時(shí)5 ms來(lái)完成對顯示模式的設定,因此可選取5 ms作為tc的取值,從而簡(jiǎn)化顯示模塊的初始化操作。
3 軟件實(shí)現
文中設計采用Verilog HDL實(shí)現,模塊程序的接口如下所示:

由于LCD1602初始化需要按特定步驟寫(xiě)入不同的控制指令,其可顯示的數據地址在空間上是兩個(gè)獨立的固定區域,因此可借用有限狀態(tài)機的設計思想進(jìn)行設計系統。狀態(tài)采用一位獨熱碼進(jìn)行編碼。所定義狀態(tài)如下:


在QuartusⅡ平臺下,經(jīng)綜合所得的狀態(tài)轉移關(guān)系如圖2所示。

要想實(shí)現狀態(tài)的轉移,需構建LCD1602顯示模塊所必需的時(shí)鐘,在時(shí)序分析過(guò)程中已確定將E信號的周期設計為5ms,而數據的寫(xiě)入以及RS、R/W電平的變化總是在E信號低電平的中間發(fā)生,因此可重新建立一個(gè)時(shí)鐘,使其在該位置發(fā)生跳變,可以是上升沿也可以是下降沿,其周期與E信號周期相等,為便于設計,也將該時(shí)鐘設計成脈寬為50%的方波信號。這里設E信號的時(shí)鐘為lcd_en,在E信號低電平中間位置跳變的時(shí)鐘為clkjlag。若選擇 clk_flag的上升沿觸發(fā)RS、R/W電平的改變及數據的寫(xiě)入操作,則顯然clk_flag高電平要超前clk_div高電平90°。為得到相位上互差90°的兩個(gè)時(shí)鐘,可以通過(guò)對系統時(shí)鐘分頻,構建一個(gè)周期為2.5ms的時(shí)鐘clk_div,使得clk_flag總是在clk_div的上升沿翻轉,而lcd_en總是在clk_div的下降沿翻轉,由此即可得到相位上互差90°的兩個(gè)時(shí)鐘信號了。由于主時(shí)鐘為30 Mhz,因此需對其進(jìn)行37 500分頻,即可得到周期為2.5 ms的clk _div。其軟件實(shí)現如下:
評論