專注電子技術學習與研究
當前位置:單片機教程網(wǎng) >> MCU設計實例 >> 瀏覽文章

用1602液晶模塊顯示漢字和圖形

作者:佚名   來源:本站原創(chuàng)   點擊數(shù):  更新時間:2014年08月16日   【字體:

使用1602液晶顯示漢字和圖形只需要2步操作。

而且只要你能用1602顯示字符'a',那么就能立即實現(xiàn)漢字和圖形的顯示、而不需要寫新的操作函數(shù)。

 

首先、先先對我們要進行的操作做一下簡單的說明:

液晶的字庫在CGROM中、每一個字符占用8字節(jié)。
每個字符對應一個地址,調(diào)用的時候直接引用該地址。
而字符在CGROM中的地址就是字符的ASCLL碼值。
所以我們調(diào)用的時候就直接寫該字符的ASCLL碼值(或是其字符形式如'a')、就能顯示該字符。

 

CGRAM的情形和這一樣、不同的是CGRAM中的內(nèi)容掉電就丟失,
同時地址值使用索引值代替、但還是地址的功能。
CGRAM有64字節(jié),可供我們放入8個自定義的字符、每個字符需要8字節(jié)的數(shù)據(jù)來描述:

 CGRAM地址
0x40 - 0x47 : 對應第1個字符區(qū)、索引值是0或8
0x48 - 0x4f : 對應第2個字符區(qū)、索引值是1或9
0x50 - 0x57 : 對應第3個字符區(qū)、索引值是2或10
0x58 - 0x5f : 對應第4個字符區(qū)、索引值是3或11
0x60 - 0x67 : 對應第5個字符區(qū)、索引值是4或12
0x68 - 0x6f : 對應第6個字符區(qū)、索引值是5或13
0x70 - 0x77 : 對應第7個字符區(qū)、索引值是6或14
0x78 - 0x7f : 對應第8個字符區(qū)、索引值是7或15

 

現(xiàn)在我們來進行具體的操作了,只需2步、過程如下:
1、將自定義的字符數(shù)據(jù)寫入CGRAM

    如5*8的漢字'年'的字符數(shù)據(jù)為:table_year[8]={0x08,0x1f,0x12,0x0f,0x0a,0x1f,0x02,0x00};

    使用我們寫液晶的寫函數(shù)將這8個字節(jié)數(shù)據(jù)寫入CGRAM中的第1個字符位置:

    writecommand(0x40);           //第1個字符對應的首地址
    writedata(table_year[0]);     //寫入8個數(shù)據(jù)
    writedata(table_year[1]);     //當然、我們設置的是地址AC自動加1的模式
    writedata(table_year[2]);
    writedata(table_year[3]);
    writedata(table_year[4]);
    writedata(table_year[5]);
    writedata(table_year[6]);
    writedata(table_year[7]);

    寫入完畢、接著就可以將它調(diào)出來顯示在液晶上。

2、調(diào)用自定義字符對應的索引值來顯示該字符

    我們將數(shù)據(jù)寫入CGRAM的第1個字符區(qū)、索引值是0

    顯示這個字符的方法和我們調(diào)用字符庫里面的字符來顯示的方式一樣:
    writecommand(0x81);    //指定顯示的位置
    writedata(0);          //寫入該字符的索引值就是調(diào)出該字符來顯示

    顯示完畢。
顯示效果:

    只要這些函數(shù)對字庫的操作OK、那么對CGRAM的操作也就OK。
    液晶的時鐘很慢、如果MCU使用的晶振頻率太高就要注意。

 

自定義的也可以是任意的圖形、跟使用LED點陣一樣:

漢字或圖形的字符數(shù)據(jù)可以用字符提取軟件提取、或自己提取。
液晶上要顯示的點為1、不顯示的點為0。
而且點陣第一行的數(shù)據(jù)對應數(shù)據(jù)中的第一個數(shù)據(jù)。

如用來顯示8個高度或表示8種等級的圖形(5*8點陣):

table_grade[]={

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1f,  //.

0x00,0x00,0x00,0x00,0x00,0x00,0x1f,0x1f,  //.

0x00,0x00,0x00,0x00,0x00,0x1f,0x1f,0x1f,  //.

0x00,0x00,0x00,0x00,0x1f,0x1f,0x1f,0x1f,  //.

0x00,0x00,0x00,0x1f,0x1f,0x1f,0x1f,0x1f,  //.

0x00,0x00,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,  //.

0x00,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,  //.

0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,  //.

};

顯示效果:

將上下兩行都用來顯示、就可以顯示16個等級了:

關閉窗口