本文通過以LCD1602液晶顯示模塊為基礎,介紹FPGA驅動LCD1602原理,詳細介紹硬件原理圖設計及FPGA驅動LCD1602軟件設計,通過萬年歷功能綜合實現(xiàn)時鐘功能、LCD1602顯示功能。
1.硬件設計原理
1.1 概述
LCD1602液晶顯示器是廣泛使用的一種字符型液晶顯示模塊,它可以顯示字母、數(shù)字和符號等。
LCD1602由字符型液晶顯示屏(LCD)、控制驅動主電路HD44780及其擴展驅動電路HD44100,以及少量電阻、電容元件和結構件等裝配在PCB板上而組成。從圖2中COM信號、SEG信號可以看出,LCD1602的驅動原理與數(shù)碼管本質上是類似的,只不過其內部LCD驅動電路實現(xiàn)了對數(shù)據(jù)的解碼,用戶只需按照控制接口簡單輸入要顯示的數(shù)據(jù)即可。
圖2:常見的LCD1602內部組成結構
常用的類型有16×1,16×2,20×2和40×2等的模塊。不同廠家生產的LCD1602芯片可能有所不同,但使用方法都是一樣的,本文以16×2為例進行介紹。
1.2 LCD1602硬件設計
(1)主要技術參數(shù)
顯示字符容量:16×2個字符,即顯示兩行字符,每行16個字符;
工作電壓:4.5V~5.5V(最佳工作電壓5.0V),典型電流2mA@5.0V;
字符尺寸:2.95×4.35(W×H)mm。
(2)尺寸大小
LCD1602尺寸大小如圖3所示。
圖3:LCD1602尺寸大小
(3)信號接口說明
信號接口定義說明如下表所示。
表1:LCD1602信號定義
管腳說明:
-
- 管腳1,2,為電源管腳,15,16為背光管腳,均推薦5.0V供電;
-
- 管腳3為,對比度調節(jié)管腳,需提供偏壓電壓。其用于LCD1602液晶屏對比度控制,該管腳電壓在1.2V±0.1V左右顯示對比度較佳,硬件連接是建議采用滑動變阻器對其電壓進行控制;管腳4 RS,為數(shù)據(jù),命令選擇管腳:H:數(shù)據(jù)選擇,L:命令選擇;管腳5 R/W,為讀寫管腳:H:讀操作,L:寫;管腳6 E,為是能管腳,該信號下降沿有效時,數(shù)據(jù)傳輸給內部模塊;
管腳7~14 D0~D7,為數(shù)據(jù)或命令。
(4)原理圖設計
LCD1602硬件原理圖設計如4所示。
圖4:LCD1602硬件原理圖
2.軟件設計
2.1 LCD1602顯示及指令說明
如圖3右側所示,液晶屏每個字符其實是有5×8個LED燈組成,由于LCD1602內部已經集成了專門的驅動芯片,無需用戶像數(shù)碼管那樣單獨的去控制每一個LED燈,降低了開發(fā)難度,減少了硬件連接信號線。
(1)LCD1602內部RAM地址映射圖
圖5:LCD1602內部RAM地址映射圖
LCD1602內部控制器帶有80×8位(80字節(jié))的RAM緩沖區(qū)如圖5所示。LCD1602內部字符表編碼如圖6所示。
圖6:LCD1602內部字符表編碼:
(2)指令說明
初始化設置指令:
-
- 顯示模式設置指令38H:
-
- 顯示開/關、光標功能
(3)數(shù)據(jù)控制
控制器內部設有一個數(shù)據(jù)指針,用戶可以通過他們方位內部的全部80字節(jié)RAM。
-
- 數(shù)據(jù)指針設置:即如果要在01位置顯示字符,RAM的地址必須是01H+80H,即81H,其他位置類似,均需要加上80H。
(4)其他設置
-
- 顯示清屏和顯示回車指令:
2.2 讀寫操作時序
(1)讀操作
讀操作時序如圖7所示。
圖7:讀操作時序
讀狀態(tài):輸入:RS = L,RW = H,E = H,輸出D0~D7狀態(tài)字;
讀數(shù)據(jù):輸入:RS = H,RW = H,E = H,輸出D0~D7數(shù)據(jù)。
(2)寫操作
寫操作時序如圖8所示。
圖8:讀操作時序
寫指令:輸入:RS = L,RW = L,D0~D7=指令碼,E = H,輸出無;
寫數(shù)據(jù):輸入:RS = H,RW = L,D0~D7=指令碼,E = H,輸出D0~D7數(shù)據(jù)。
讀寫操作需要注意的是,D0~D7數(shù)據(jù)要在使能E信號的下降沿寫入控制器,要注意tHD2保持時間必須滿足手冊要求,其他時序參數(shù)也要參考手冊要求。
2.3 LCD1602上電初始化操作
LCD1602上電必須進行初始化操作,初始化過程如下:
(1)硬件上電后,延遲15ms;
(2)寫指令38H(可不檢測忙信號);
(3)延遲5ms;
(4)寫指令38H(可不檢測忙信號);(5)延遲5ms;
(6)寫指令38H(可不檢測忙信號,以后每次寫指令、讀寫操作前均需檢測忙信號,也可通過增大延遲,如5ms,不檢測忙信號);
(7)寫指令38H:顯示模式設置;
(8)寫08H:關閉顯示;
(9)寫0H:顯示清屏;
(10)寫指令06H:顯示光標移動設置;
(11)寫指令0CH:顯示開及光標設置。
2.4 軟件設計
本文要利用LCD1602實現(xiàn)萬年歷顯示。具體功能如下:
(1)DS1302芯片SPI接口驅動功能;
(2)DS1302芯片寄存器讀寫控制功能,可以實現(xiàn)時鐘初始化設置;
(3)按鍵消抖功能;
(4)LCD1602顯示萬年歷靜態(tài)設置時間;
(5)LCD1602顯示萬年歷動態(tài)時間。
軟件功能模塊劃分如圖9所示。
圖9:軟件設計模塊劃分框圖
各個模塊功能:
(1)lcd1602_calendar.v模塊為萬年歷頂層模塊,實現(xiàn)模塊間互聯(lián);(2)spi_driver.v實現(xiàn)DS1302 SPI接口通信功能;
(3)ds1302_ctrl_m.v實現(xiàn)DS1302寄存器讀寫控制功能,包括將設置值寫入芯片和將芯片寄存器值讀出控制。
(4)set_init_time.v實現(xiàn)通過按鍵實現(xiàn)萬年歷初始值設置;(5)lcd1602_driver.v驅動LCD1602接口實現(xiàn)萬年歷顯示功能(動態(tài)顯示年、月、日、星期、時、分、秒,溫度靜態(tài)顯示);
(6)KeyJitters.v實現(xiàn)按鍵消抖功能。
3.測試結果
軟件下載至電路板,通過SignaTap II在線邏輯分析儀抓取LCD1602接口寫數(shù)據(jù)如下圖所示。
圖10:LCD1602寫操作
通過按鍵設置萬年歷初始值,顯示在LCD1602上,如圖11所示,可以看到萬年歷時間已經正確顯示。
圖11:LCD1602萬年歷初始值設置顯示
測試結果詳見視頻號:FPGA技術實戰(zhàn)。
歡迎關注FPGA技術實戰(zhàn)公眾號,喜歡就多多轉發(fā)吧!