找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 58266|回復(fù): 14
打印 上一主題 下一主題
收起左側(cè)

常用液晶的使用之LCD1602顯示自定義字符及漢字

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
這篇篇講解一下LCD1602,學(xué)過(guò)單片機(jī)的朋友們都知道它了吧,可以說(shuō)是用的最廣,最簡(jiǎn)單,也是學(xué)液晶入門級(jí)別的一塊液晶了。LCD1602顧名思義就是兩行顯示的液晶,每行最多顯示16個(gè)字符(里面總共有160個(gè)字符),其中包括阿拉伯?dāng)?shù)字、英文字母的大小寫,常用符號(hào),及日文的假名!每個(gè)字符對(duì)應(yīng)一個(gè)ASCII碼,我們通過(guò)向液晶送相應(yīng)符號(hào)的ASCII碼來(lái)顯示這個(gè)字符。
下面看一下Proteus軟件中的LCD1602,在Proteus軟件的元件庫(kù)中,LCD1602為L(zhǎng)M016L,下面是這塊液晶的引腳圖:


   具體的相關(guān)引腳和功能設(shè)定參看LCD1602的PDF文檔資料,由于篇幅問(wèn)題,這里就不贅述了!
   還有一點(diǎn)要說(shuō)的就是大家在仿真LCD1602時(shí),要是用的是DB7~DB0連單片機(jī)的P0口的話,一定要加上拉電阻,要不然驅(qū)動(dòng)不了,因?yàn)閱纹瑱C(jī)的四組IO口就P0的內(nèi)部無(wú)上拉,驅(qū)動(dòng)能力弱!看下面的圖:在P0口加了排阻(RESPACK-8)

對(duì)于自帶字符的顯示,只需要將對(duì)應(yīng)的ASCII碼寫入LCD中顯示即可,這個(gè)是每個(gè)人開始學(xué)習(xí)液晶最開始要學(xué)會(huì)的了,看看數(shù)據(jù)手冊(cè),寫寫程序,想必大家都會(huì)了,這里就不做介紹,本篇著重講解一下怎樣自定義顯示字符,比如顯示自定的字符、顯示漢字等等這些!
  要顯示我們自定義的字符,就要用到LCD中的CGRAM存儲(chǔ)器(character generate RAM),而我們之前用的顯示自帶的字符用到的是DDRAM,兩個(gè)是不同的?匆壕謨(cè)我們知道,CGRAM的容量是64個(gè)字節(jié),而一個(gè)字符是8個(gè)字節(jié),所以一共能顯示8個(gè)自定義的字符。內(nèi)部常用字符的顯示是從0x20開始的,0x00 ~ 0x0F是專門留給自定義字符顯示用的,0x00~0x07和0x80~0x0F顯示的內(nèi)容是一樣的,也就是說(shuō)0x00=0x08,0x01=0x09,以此類推。CGRAM共128個(gè)位,地址是0x40~0x7F,128/8=16正好對(duì)應(yīng)的是0x00~0x0F共16個(gè),剛才說(shuō)了,0x00與0x08對(duì)應(yīng),0x01與0x09對(duì)應(yīng),共16個(gè),這并不矛盾!說(shuō)了這么多,那么怎樣顯示一個(gè)自定義字符呢?
  首先我們要清楚LCD1602顯示字符的點(diǎn)陣大小,眼力好的可以看出來(lái),LCD1602一個(gè)顯示字符的位置是5*8的點(diǎn)陣,也就是說(shuō)它所能顯示的點(diǎn)陣圖形的大小是5*8的!要顯示一個(gè)自定義的字符,首先我們要知道所顯示自定義字符的點(diǎn)陣數(shù)據(jù),也就是在一個(gè)5*8的點(diǎn)陣上那個(gè)點(diǎn)是黑的(將該點(diǎn)點(diǎn)黑,就是高電平----1),哪個(gè)點(diǎn)是白的(該點(diǎn)不顯示,為低電平----0),但是我們送入到LCD中的是ASCII碼,它是8位的數(shù)據(jù),而一個(gè)顯示字符的點(diǎn)陣大小只是5*8的,顯然不夠,顯示的辦法是8*8點(diǎn)陣的前三列不用,也就是不顯示,我們只用后面的5列來(lái)顯示。
  然后設(shè)定我們是要定義第幾個(gè)自定義字符,前面已經(jīng)介紹了,LCD1602最多顯示8個(gè)自定義字符;然后要規(guī)定在液晶的什么位置顯示自定義字符,看過(guò)數(shù)據(jù)手冊(cè)我們知道,第一行第一個(gè)位置的地址是0x80,第二行一個(gè)位置的地址是0xC0。最后就是要顯示我們定義的第幾個(gè)字符其對(duì)應(yīng)CGRAM地址的關(guān)系式是:
0x00:第一個(gè)(0x40)                       0x01:第二個(gè)(0x48)   

0x02:第三個(gè)(0x50)                       0x03:第四個(gè)(0x58)
0x04:第五個(gè)(0x60)                       0x05:第六個(gè)(0x68)   
0x06:第七個(gè)(0x70)                       0x07:第八個(gè)(0x78)
算了,還是畫個(gè)流程圖,這樣大家看的更清楚:(第一個(gè)顯示字符的數(shù)組數(shù)據(jù),不小心打錯(cuò)了,呵呵)

接下來(lái)介紹怎樣對(duì)顯示的數(shù)組取模:給大家介紹個(gè)取模軟件,這個(gè)軟件很常見叫做zimo221,玩過(guò)點(diǎn)陣的和液晶的估計(jì)都知道吧,打開軟件,首先我們創(chuàng)建一個(gè)8*8點(diǎn)陣大小的圖形,如下圖所示:

然后呢,在里面打點(diǎn),注意前三列空著不打點(diǎn)。這里我們顯示自定義字符顯示黑白相間的點(diǎn)吧,這個(gè)是我打好的,看下圖:

然后設(shè)定取模的方式:

然后生成代碼:看你是用什么程序?qū),這里我是用C寫的就用C51的格式
OK,字符取模就結(jié)束了,接下來(lái)時(shí)程序:
/**********************
程序:LCD1602的驅(qū)動(dòng)原理及應(yīng)用
內(nèi)容:顯示自定義字符
軟件:Keil uVisoin4
開發(fā)板:proteus仿真圖
作者:大海橡樹  
***********************/
#include

sbit RS=P2^0;
sbit RW=P2^1;
sbit EN=P2^2;//LCD的三個(gè)控制端
unsigned char table[]={0x15,0x0A,0x15,0x0A,0x15,0x0A,0x15,0x0A};

void delay(unsigned int i)
{
    while(--i);
}
void Read_busy()    //忙檢測(cè),DB7為1則busy,不能進(jìn)行讀寫操作 ;每次讀寫前應(yīng)"讀忙"檢測(cè)
{
    P0=0x00;
    RS=0;
    RW=1;
    EN=1;
    while(P0 & 0x80);
    EN=0;
}

void write_LCD_command(unsigned char value)//寫命令函數(shù)
{
    Read_busy();
    RS=0;
    RW=0;  
    EN=1;
    P0=value;
    delay(100);
    EN=0;
}

void write_LCD_data(unsigned char value)//寫命令函數(shù)
{
    Read_busy();
    RS=1;
    RW=0;  
    EN=1;
    P0=value;
    delay(100);
    EN=0;
}

void init_LCD()
{
    write_LCD_command(0x38);
    write_LCD_command(0x0c);//開顯示,不顯示光標(biāo),且不閃爍
    write_LCD_command(0x06);//每次寫入數(shù)據(jù)后地址指針加1
    write_LCD_command(0x01);//清屏

}
void main()
{
    unsigned char num;
    init_LCD();
    write_LCD_command(0x40);    //對(duì)CGRAM第一個(gè)自定義字符操作,若是第二個(gè)則為0x48,其次類推(上面有對(duì)頂?shù)年P(guān)系)
    for(num=0;num<8;num++)
    {
        write_LCD_data(table[num]);
    }
    write_LCD_command(0x80);    //規(guī)定顯示在第一行第一個(gè)位置
    write_LCD_data(0x00);         //顯示第一個(gè)自定義字符 (0x40對(duì)應(yīng)第一個(gè):0x00)
    while(1);
}

仿真圖:

仿真效果和我們預(yù)設(shè)的一樣,至此,自定義顯示字符就結(jié)束了。想必大家已經(jīng)會(huì)了,這個(gè)簡(jiǎn)單的會(huì)了,就來(lái)個(gè)復(fù)雜點(diǎn)的,用1602顯示漢字,其實(shí)這個(gè)也是用自定義顯示的方法,只不過(guò)我們要用幾個(gè)顯示塊合成在一起拼接成一個(gè)漢字!有興趣的自己可以試一下!
下面是我寫個(gè)一個(gè)顯示漢字的,把8個(gè)自定義的字符全都用上了:
顯示:“大”字

               顯示的漢字不是很好看!呵呵,不過(guò)還是能看清的!我們?cè)贚CD1602做數(shù)字鐘的時(shí)候可以用一個(gè)或兩個(gè)CGRAM來(lái)顯示年、月、日;上面的這個(gè)字8個(gè)CGRAM地址都用上了,其實(shí)我們可以用數(shù)碼管動(dòng)態(tài)掃描的原理在LCD1602上顯示四個(gè)大的漢字,因?yàn)槊看物@示一個(gè)漢字是8個(gè)CGRAM都用上了,所以沒(méi)次只顯示一個(gè)!根據(jù)動(dòng)態(tài)掃描的原理就能夠?qū)崿F(xiàn)四個(gè)漢字同時(shí)顯示!有興趣的朋友可以試一下!
顯示單個(gè)5*7點(diǎn)陣大小的漢字也可以,下面是我寫了個(gè)萬(wàn)年歷的程序,用的就是單個(gè)的字符顯示漢字,效果不是很好,不過(guò)還行吧,如下圖所示:


LCD1602就介紹到這里,想必大家都會(huì)了!下一篇給大家介紹LCD12864液晶,帶字庫(kù)的和不帶字庫(kù)的兩種!用12864顯示動(dòng)畫、溫度曲線,正弦曲線等!


評(píng)分

參與人數(shù) 1黑幣 +30 收起 理由
北長(zhǎng)無(wú)識(shí) + 30

查看全部評(píng)分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏17 分享淘帖 頂2 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:143128 發(fā)表于 2016-10-19 14:18 | 只看該作者
仿真圖右邊那個(gè)RP1什么來(lái)的。
回復(fù)

使用道具 舉報(bào)

板凳
ID:73944 發(fā)表于 2016-10-19 18:07 | 只看該作者
fresh 發(fā)表于 2016-10-19 14:18
仿真圖右邊那個(gè)RP1什么來(lái)的。

9針的排阻
回復(fù)

使用道具 舉報(bào)

地板
ID:188580 發(fā)表于 2017-4-11 19:08 | 只看該作者
為什么不能自定義顯示
回復(fù)

使用道具 舉報(bào)

5#
ID:227688 發(fā)表于 2017-12-5 12:23 | 只看該作者
哈哈  謝謝分享  51有你更精彩
回復(fù)

使用道具 舉報(bào)

6#
ID:291815 發(fā)表于 2018-4-4 13:34 | 只看該作者
感謝分享
回復(fù)

使用道具 舉報(bào)

7#
ID:296540 發(fā)表于 2018-4-4 15:20 | 只看該作者
fresh 發(fā)表于 2016-10-19 14:18
仿真圖右邊那個(gè)RP1什么來(lái)的。

下拉電阻
回復(fù)

使用道具 舉報(bào)

8#
ID:337484 發(fā)表于 2018-6-2 11:46 | 只看該作者
有幫助,感謝分享。
回復(fù)

使用道具 舉報(bào)

9#
ID:73182 發(fā)表于 2018-6-30 15:50 | 只看該作者
感謝分享,代碼實(shí)測(cè)好象延時(shí)不夠
回復(fù)

使用道具 舉報(bào)

10#
ID:315599 發(fā)表于 2018-7-23 13:37 來(lái)自手機(jī) | 只看該作者
顯示第一個(gè)字符 0x40對(duì)應(yīng)0x00,    第二個(gè)字符0x48對(duì)應(yīng)啥?
回復(fù)

使用道具 舉報(bào)

11#
ID:411147 發(fā)表于 2018-10-18 15:48 | 只看該作者
非常感謝樓主的分享,有收獲
回復(fù)

使用道具 舉報(bào)

12#
ID:280405 發(fā)表于 2018-12-30 15:48 | 只看該作者
謝謝樓主的分享,保存了。
回復(fù)

使用道具 舉報(bào)

13#
ID:459303 發(fā)表于 2019-1-1 14:26 | 只看該作者
萬(wàn)年歷的程序是哪個(gè)?這上面只有一個(gè)程序,應(yīng)該不是的吧
回復(fù)

使用道具 舉報(bào)

14#
ID:459030 發(fā)表于 2019-2-26 14:00 | 只看該作者
謝謝分享
回復(fù)

使用道具 舉報(bào)

15#
ID:695902 發(fā)表于 2020-3-8 23:36 | 只看該作者
非常感謝,終于明白了
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表