電子發(fā)燒友網(wǎng)核心提示:簡單介紹設(shè)計的LCD液晶IP核的思路,首先生成100us的時鐘,然后根據(jù)初始化順序,編寫狀態(tài)機。最終設(shè)計效果是在1602液晶屏上可以靜態(tài)顯示16*2的任意字符串(可顯示英文或部分日文或自定義圖像),而這只需修改兩個參數(shù)即可輕松實現(xiàn)。1602為常見的液晶顯示設(shè)備,本實驗所用的規(guī)格為16x2字符型驅(qū)動,直觀圖如下所示。
上圖為已完成的LCD液晶驅(qū)動顯示效果(可以顯示任意字符串),由兩行組成,可以顯示英文字符,部分日語,也可以顯示自定義的圖像,Spartan-3E所用的1602 (Sitronix ST7066U graphics controller)與FPGA的接口如下所示:
信號說明:
其中SF_D為4位的數(shù)據(jù)接口位,LCD_E為液晶顯示或者不顯示控制位,LCD_RS為區(qū)分控制或數(shù)據(jù)信號標(biāo)志位,當(dāng)LCD_RS = ‘0’時,表示SF_D為控制信號;LCD_RS=’1’,此時SF_D為數(shù)據(jù)位,LCD_RW為讀寫控制位,因為不需要從LCD液晶屏中讀取數(shù)據(jù)所以可以簡單的再復(fù)位操作時,將其清零即可。
可以看出,此1602的數(shù)據(jù)位為4位,故要寫入8位命令時需要進(jìn)行兩次寫入操作,寫入數(shù)據(jù)的時序圖如下所示,

紅線所畫為兩個字節(jié)數(shù)據(jù)寫入所需的最小時差(這個需要特別注意)
根據(jù)Spartan-3E的GUIDE,可以知道1602工作的基本流程主要分為上電初始化、寫命令、設(shè)置讀寫地址、傳遞數(shù)據(jù)三大過程,筆者統(tǒng)計了下這三大步驟中的等待時間最小值和最大值,其中最小值為40us,最大值為15ms,故筆者采取了將50MHZ的時鐘分頻為10KHZ,即時鐘周期為100us的方法來簡化設(shè)計。
在Spartan-3E的用戶手冊上詳細(xì)講解了如何對此液晶進(jìn)行操作,筆者做了簡單的摘要:
一) 上電初始化(目的是建立寬度為4 bit的數(shù)據(jù)接口)
1) 等待15ms或者更長時間
2) 寫命令字0x3,保持LCD_E高電平12個周期(時鐘頻率為50MHZ時)
3) 等待4.1ms或者更長時間
4) 寫命令字0x3,保持LCD_E高電平12個周期
5) 等待100us或者更長時間
6) 寫命令字0x3,保持LCD_E高電平12個周期
7) 等待40us或者更長時間
8) 寫命令字0x2,保持LCD_E高電平12個周期
9) 等待40us或者更長時間
二) 寫命令
1) 發(fā)送功能設(shè)置命令(Function Set),0x28
2) 發(fā)送端口模式設(shè)置命令(Entry Mode Set),0x06,自動增加地址指針
3) 發(fā)送Display ON/OFF命令,0x0C,打開顯示開關(guān)并禁止光標(biāo)閃爍
4) 發(fā)送Clear Display命令,等待1.64ms或者更長時間
三) 設(shè)置讀寫地址和傳遞數(shù)據(jù)
指定起始地址,并給出一個或者多個數(shù)據(jù),這一步是顯示的關(guān)鍵,必須仔細(xì)設(shè)置控制位,筆者就是因為這個錯誤,白白花費了大半天的時間,具體方法是在寫任何數(shù)據(jù)之前,發(fā)送Set DD RAM Address 命令,(寫入7位的DD RAM地址,注意最高位為1)然后再寫入數(shù)據(jù)。
簡單介紹我所設(shè)計的LCD液晶IP核的思路,首先生成100us的時鐘,然后根據(jù)初始化順序,編寫狀態(tài)機。最終設(shè)計效果是在1602液晶屏上可以靜態(tài)顯示16*2的任意字符串—而這只需修改兩個參數(shù)即可輕松實現(xiàn)。下面是部分代碼展示。下圖為代碼說明。


圖 1 寫16個字符的代碼實現(xiàn)
圖1所示為寫16個字符的代碼實現(xiàn),圖2所示為將普通的字符串轉(zhuǎn)換為1602可顯示的編碼值的模塊,圖3所示為生成clk_100us的代碼,

圖 2 將普通的字符串轉(zhuǎn)換為1602可顯示的編碼值的模塊

圖 3 生成clk_100us的代碼
最終效果圖是在屏幕上顯示兩行字符串:
圖 最終效果圖是在屏幕上顯示兩行字符串
電子發(fā)燒友App




















評論