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