關(guān)于1602液晶顯示器的一些經(jīng)驗
說說今天的總結(jié)!雖然開始有些吃力,但是也不至于想以前那樣看著視頻一步一步來!今天寫液晶程序是找了兩個例子,自己看著1602的PDF資料。開始時看了看程序然后自己看著時序圖寫,但是卻怎么出不來結(jié)果,對比著例子一點點的嘗試著修改,終于發(fā)現(xiàn)原來是一個小小的延時問題,也就是在往數(shù)據(jù)端口輸進指令或數(shù)據(jù)后要有個小小的延時。但是看時序圖上卻是EN端電平已經(jīng)降下去了,數(shù)據(jù)口還在賦值,而實際上卻是賦值后差不多要個5毫秒的延時,具體原因不明白!
關(guān)于液晶字符定位的問題,我看的一個例程是用坐標定位的,我看著頭暈,老是轉(zhuǎn)不過來。其實在我看來1602液晶就能顯示那幾個字符而已,自己就算掰著手指查也不會出錯吧!所以好不如直接控制來的爽快!特別注意的是,只要你讓那個位置的字符顯示,就一定要給你賦值,那怕是一個空格,那也算是一個字符,否則會出現(xiàn)亂碼!
再說一下控制液晶的驅(qū)動程序(暫且稱其為驅(qū)動程序吧,反正是控制液晶的)!其實控制這種小液晶很簡單!給它的初始化函數(shù)(也就是告訴它:小弟,你要開始工作了),給它做做準備,具體函數(shù)按照配套PDF資料寫就行!再有個就是發(fā)送指令的函數(shù)。首先給RS賦值,RS=0,當MPU進行寫模塊操作,指向指令寄存器,當MPU進行讀模塊操作,指向地址計數(shù)器。RS=1,無論MPU讀操作還是寫操作,均指向數(shù)據(jù)寄存器。再給RW賦值,賦值為1是寫操作,為0是讀操作。然后就是EN端了,其實因為數(shù)據(jù)是在EN下降沿才會把命令或數(shù)據(jù)讀進,所以就先拉高它,然后往數(shù)據(jù)口送指令,現(xiàn)在是最關(guān)鍵的,你一定要讓它稍微有個延時,例如5 毫秒!然后令EN=0!好了,這就完成了指令輸入!至于數(shù)據(jù)輸入函數(shù),格式同指令輸入函數(shù)一樣,只是RS賦值不一樣而已!至于什么指令控制什么功能,自己查查配套資料就行了!另外還有一個檢查繁忙問題,只是.....暫時不會用,我把繁忙檢查寫進程序中,它竟然罷工!現(xiàn)在自己的水平就是寫個小程序?qū)崿F(xiàn)個小功能,檢查繁忙暫時用不到,以后再說吧!
附一自己寫的液晶驅(qū)動函數(shù)!其中dat為液晶數(shù)據(jù)進口!
void del(uint i)
{
char j;
for(;i>0;i--)
for(j=125;j>0;j--);
}
void writecom(uchar com)
{
rs=0;
rw=0;
en=1;
dat=com;
del(5);
en=0;
}
void writedat(uchar da)
{
rs=1;
rw=0;
en=1;
dat=da;
del(5);
en=0;
}
void init()
{ del(15);
writecom(0x38);
del(5);
writecom(0x38);
del(5);
writecom(0x38);
del(10);
writecom(0x08);
writecom(0x0e);
writecom(0x06);
writecom(0x0c);
writecom(0x80);
}
led顯示器相關(guān)文章:led顯示器原理
評論