電子發(fā)燒友網(wǎng)核心提示:簡(jiǎn)單介紹設(shè)計(jì)的LCD液晶IP核的思路,首先生成100us的時(shí)鐘,然后根據(jù)初始化順序,編寫(xiě)狀態(tài)機(jī)。最終設(shè)計(jì)效果是在1602液晶屏上可以靜態(tài)顯示16*2的任意字符串(可顯示英文或部分日文或自定義圖像),而這只需修改兩個(gè)參數(shù)即可輕松實(shí)現(xiàn)。1602為常見(jiàn)的液晶顯示設(shè)備,本實(shí)驗(yàn)所用的規(guī)格為16x2字符型驅(qū)動(dòng),直觀圖如下所示。
上圖為已完成的LCD液晶驅(qū)動(dòng)顯示效果(可以顯示任意字符串),由兩行組成,可以顯示英文字符,部分日語(yǔ),也可以顯示自定義的圖像,Spartan-3E所用的1602 (Sitronix ST7066U graphics controller)與FPGA的接口如下所示:
信號(hào)說(shuō)明:
其中SF_D為4位的數(shù)據(jù)接口位,LCD_E為液晶顯示或者不顯示控制位,LCD_RS為區(qū)分控制或數(shù)據(jù)信號(hào)標(biāo)志位,當(dāng)LCD_RS = ‘0’時(shí),表示SF_D為控制信號(hào);LCD_RS=’1’,此時(shí)SF_D為數(shù)據(jù)位,LCD_RW為讀寫(xiě)控制位,因?yàn)椴恍枰獜腖CD液晶屏中讀取數(shù)據(jù)所以可以簡(jiǎn)單的再?gòu)?fù)位操作時(shí),將其清零即可。
可以看出,此1602的數(shù)據(jù)位為4位,故要寫(xiě)入8位命令時(shí)需要進(jìn)行兩次寫(xiě)入操作,寫(xiě)入數(shù)據(jù)的時(shí)序圖如下所示,
紅線所畫(huà)為兩個(gè)字節(jié)數(shù)據(jù)寫(xiě)入所需的最小時(shí)差(這個(gè)需要特別注意)
根據(jù)Spartan-3E的GUIDE,可以知道1602工作的基本流程主要分為上電初始化、寫(xiě)命令、設(shè)置讀寫(xiě)地址、傳遞數(shù)據(jù)三大過(guò)程,筆者統(tǒng)計(jì)了下這三大步驟中的等待時(shí)間最小值和最大值,其中最小值為40us,最大值為15ms,故筆者采取了將50MHZ的時(shí)鐘分頻為10KHZ,即時(shí)鐘周期為100us的方法來(lái)簡(jiǎn)化設(shè)計(jì)。
在Spartan-3E的用戶(hù)手冊(cè)上詳細(xì)講解了如何對(duì)此液晶進(jìn)行操作,筆者做了簡(jiǎn)單的摘要:
一) 上電初始化(目的是建立寬度為4 bit的數(shù)據(jù)接口)
1) 等待15ms或者更長(zhǎng)時(shí)間
2) 寫(xiě)命令字0x3,保持LCD_E高電平12個(gè)周期(時(shí)鐘頻率為50MHZ時(shí))
3) 等待4.1ms或者更長(zhǎng)時(shí)間
4) 寫(xiě)命令字0x3,保持LCD_E高電平12個(gè)周期
5) 等待100us或者更長(zhǎng)時(shí)間
6) 寫(xiě)命令字0x3,保持LCD_E高電平12個(gè)周期
7) 等待40us或者更長(zhǎng)時(shí)間
8) 寫(xiě)命令字0x2,保持LCD_E高電平12個(gè)周期
9) 等待40us或者更長(zhǎng)時(shí)間
二) 寫(xiě)命令
1) 發(fā)送功能設(shè)置命令(Function Set),0x28
2) 發(fā)送端口模式設(shè)置命令(Entry Mode Set),0x06,自動(dòng)增加地址指針
3) 發(fā)送Display ON/OFF命令,0x0C,打開(kāi)顯示開(kāi)關(guān)并禁止光標(biāo)閃爍
4) 發(fā)送Clear Display命令,等待1.64ms或者更長(zhǎng)時(shí)間
三) 設(shè)置讀寫(xiě)地址和傳遞數(shù)據(jù)
指定起始地址,并給出一個(gè)或者多個(gè)數(shù)據(jù),這一步是顯示的關(guān)鍵,必須仔細(xì)設(shè)置控制位,筆者就是因?yàn)檫@個(gè)錯(cuò)誤,白白花費(fèi)了大半天的時(shí)間,具體方法是在寫(xiě)任何數(shù)據(jù)之前,發(fā)送Set DD RAM Address 命令,(寫(xiě)入7位的DD RAM地址,注意最高位為1)然后再寫(xiě)入數(shù)據(jù)。
簡(jiǎn)單介紹我所設(shè)計(jì)的LCD液晶IP核的思路,首先生成100us的時(shí)鐘,然后根據(jù)初始化順序,編寫(xiě)狀態(tài)機(jī)。最終設(shè)計(jì)效果是在1602液晶屏上可以靜態(tài)顯示16*2的任意字符串—而這只需修改兩個(gè)參數(shù)即可輕松實(shí)現(xiàn)。下面是部分代碼展示。下圖為代碼說(shuō)明。
圖 1 寫(xiě)16個(gè)字符的代碼實(shí)現(xiàn)
圖1所示為寫(xiě)16個(gè)字符的代碼實(shí)現(xiàn),圖2所示為將普通的字符串轉(zhuǎn)換為1602可顯示的編碼值的模塊,圖3所示為生成clk_100us的代碼,
圖 2 將普通的字符串轉(zhuǎn)換為1602可顯示的編碼值的模塊
圖 3 生成clk_100us的代碼
最終效果圖是在屏幕上顯示兩行字符串:
圖 最終效果圖是在屏幕上顯示兩行字符串
評(píng)論