|
|
今天,小編給各位電子愛好者伙伴講解這么一個程序,也許你看了郭天祥的10天學(xué)會單片機后感覺好多代碼都不能親手動手去寫對嗎?其實自己寫代碼寫模塊都是有一定的方法的,掌握了一定的方法,以后不管寫什么,你都會如魚得手,小編總結(jié)了一個很多人都頭疼的問題,如何寫一個液晶顯示的程序呢?代碼好長!!!!怎么辦?害怕了?沒有動力干了?小編告訴你,你立馬有動力,不再懼怕類似1602的模塊!!請往下看。
首先:
要寫一個液晶1602的程序,我們需要明白液晶有三個端口是要寫入相關(guān)的數(shù)據(jù)的;分別是E、RS、RW。
數(shù)據(jù)手冊內(nèi)容眾多,小編就不一一闡釋了;
所以,請看lcd1602數(shù)據(jù)手冊:http://www.denmoz.com/mcu/827.html
接著:
看完了數(shù)據(jù)手冊,有木有發(fā)現(xiàn)靈感?是不是好多都是可以看著自己就可以敲出來?
好了,我們開始寫程序:
寫液晶的時候分為以下步驟:
1、寫指令(看看數(shù)據(jù)手冊里有的)
void writecmd(uchar com)
{
E=0; //為什么要寫這一條呢,看看時序圖就清楚了
RS=0;
RW=0;
P0=com;
delay(2); //延時一下會穩(wěn)定很多,后面一條也是一樣的
E=1;
delay(2);
E=0;
}
//以上的P0就是液晶送數(shù)據(jù)的端口,當(dāng)然你可以是P2口,看你的 電路是怎么樣那就怎么改,至于為什么是com,這是個自定義形式參數(shù)來的,也可以改成別的,但是不能是關(guān)鍵字,這個參數(shù)傳的就是你想要寫的指令;下面寫數(shù)據(jù)的P0是你想要寫的數(shù)據(jù)。詳情看看大程序便知
2、寫數(shù)據(jù)(同樣數(shù)據(jù)手冊也有)
void writedata(uchar dat)//寫數(shù)據(jù),函數(shù)名隨便你定義看得懂就行
{
E=0; //寫數(shù)據(jù)和寫命令的方法差不多,復(fù)制過來。照著數(shù)據(jù)手 //冊的寫數(shù)據(jù)要求去寫!
RS=1;
RW=0;
P0=dat;
delay(2);
E=1;
delay(2);
E=0;
}
3、初始化(一樣的,數(shù)據(jù)手冊也有,照寫)
void init(void)
{ delay(15);
writecmd(0x38);
delay(5);
writecmd(0x38);
delay(5);
writecmd(0x38);
writecmd(0x38);
writecmd(0x08);
writecmd(0x01);
writecmd(0x06);
writecmd(0x0c);
}
好了一個液晶的基本操作就是這三部分組成的,不難吧?
接下來來看看我們?nèi)绾物@示如圖所示的字符:
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
//這三個引腳參考資料
sbit E=P2^7; //1602使能引腳
sbit RW=P2^6; //1602讀寫引腳
sbit RS=P2^5; //1602數(shù)據(jù)/命令選擇引腳
uchar tab1[]=" www.denmoz.com "; //要顯示什么就在這兒改
uchar tab2[]="LCD1602 test ok!"; //[size=15.5555562973022px]要顯示什么就在這兒改
void delay(uint del) //延時1ms
{
uint i,j;
for(i=0;i<del;i++)
for(j=0;j<=168;j++);
}
void writecmd(uchar com) //寫指令
{
E=0;
RS=0;
RW=0;
P0=com;
delay(2);
E=1;
delay(2);
E=0;
}
void writedata(uchar dat)//寫數(shù)據(jù)
{
E=0;
RS=1;
RW=0;
P0=dat;
delay(2);
E=1;
delay(2);
E=0;
}
void init(void) //初始化
{
delay(15);
writecmd(0x38);
delay(5);
writecmd(0x38);
delay(5);
writecmd(0x38);
writecmd(0x38);
writecmd(0x08);
writecmd(0x01);
writecmd(0x06);
writecmd(0x0c);
}
void main()
{ uchar j;
init();
writecmd(0x80); //告訴液晶在哪個地方顯示 (設(shè)置地址指針)//80H+00
for(j=0;j<16;j++) //有16個字符,要循環(huán)16次
{
writedata(tab1[j]);
delay(2);
}
writecmd(0x80+0x40); //再設(shè)置第二行的起始位置80H+40H
for(j=0;j<16;j++) //有16個字符,要循環(huán)16次
{ writedata(tab2[j]);
delay(2);
}
while(1); //讓液晶顯示就一直停在這里。
}
好了,你們可以照著我這個程序去修改得到你們想要的顯示結(jié)果,同樣也可以發(fā)揮一下你們的想法,如何讓液晶進行移屏顯示呢?怎么樣做出移動的效果呢?有待大家的努力噢!小編最主要的目的是要告訴大家,任何模塊拿起來都不要懼怕,把數(shù)據(jù)手冊看一遍,看不懂再看一遍,然后看看別人是怎么寫的,自己動手改一遍,再寫一遍,轉(zhuǎn)化為自己的東西,這樣就可以學(xué)到經(jīng)驗了。
|
評分
-
查看全部評分
|