|
LCD1602相比大家都比較了解,但是我們一般只用來顯示字符,數(shù)字。 最近在網(wǎng)上看許多人用LCD1602來顯示漢字,覺得有趣于是拜讀了一些資料,教程,但感覺大部分相當(dāng)晦澀難懂,本人認(rèn)為既然是教程,就不必要相當(dāng)?shù)膹?fù)雜,畢竟人家看完許久后還是不能得出實(shí)驗(yàn)結(jié)果~??! 接下我談?wù)勎业米龇?,保證你10分鐘之內(nèi)一樣可以在LCD1602上顯示你想顯示的各種符號,漢字?。?! 首先:我們要弄清楚一個概念,其實(shí)我們使用1602顯示中文漢字,就是利用其內(nèi)部的自定義字節(jié)空間,我們都知道LCD1602內(nèi)部有一個64字節(jié)的自定義CGRAM,那么好,我們就是要利用自定義字節(jié)來達(dá)到顯示漢字的效果. 我們知道一個字符占8個字節(jié),所以在CGRAM能夠存放8個字符。 也就是說,這個64字節(jié)的CGRAM是給我們提供寫入數(shù)據(jù)的, 那么我們怎么把我們要的漢字寫入CGRAM呢? 不要急,大家查看LCD1602的用戶手冊,里面提到當(dāng)我們需要想CGRAM寫入數(shù)據(jù)時(shí),我們需要先寫入CGRAM的地址,從手冊上可知,CGRAM的地址為0x40.所以當(dāng)我們要寫入數(shù)據(jù)時(shí),要先寫入一條地址命令 write_com(0x040); 然后把你要寫入的數(shù)據(jù)通過寫數(shù)據(jù)命令寫入 做完以上步驟了,是不是LCD1602就會顯示你輸入的漢字呢? 不要急,以上你只是把你要顯示漢字的代碼存放在CGRAM里,就相當(dāng)于其他常用字符一樣固定在LCD里面了,如果你不把它讀出來,LCD是不會顯示的。。 當(dāng)你把上面的步驟做完后,接下來要做的與你平常怎么使用LCD1602是一樣的,只不過是LCD1602里面增加了一些你自定義的字符,漢字。 可能到這里,也許會有些疑問,既然自定義字符、漢字的代碼需要我們自己輸入,那么我該怎么編寫這些代碼,呵呵,不要著急,接下來就要用到下面這個取字模軟件。 相信有的朋友應(yīng)該都用過這個軟件。那么我們怎么來使用這個軟件來獲取代碼呢?大家有沒有注意到,我們的LCD1602是5*8點(diǎn)陣(可以數(shù)一數(shù))。但是5*8不能提取代碼,最少只能8*8,所以我們這里只用后前5列,前3列不用。。 新建圖像 8*8.然后再圖像里面點(diǎn)你要顯示的字符,漢字,注意是在后5列中點(diǎn),黑點(diǎn)表示顯示,白點(diǎn)不顯示,用鼠標(biāo)左鍵可以切換,下面是我點(diǎn)得一個坦克~~點(diǎn)好后,就可以產(chǎn)生代碼了,這軟件里面可以選擇C51或匯編,這里選擇C51。 下面的8個代碼就是要產(chǎn)生這個字符的數(shù)據(jù)。。也就是要輸入到自定義字符CGRAM里面的。好的,怎么把獲取漢字代碼,怎么把代碼輸入到CGRAM里面都知道了, 下面就是要把我們的自定義漢字、字符顯示在LCD1602屏幕上了。。 我們知道常用字符是從0x20開始顯示,而0x00—0x0f都是沒有用的,其實(shí)這個正式為我們自定義顯示字符準(zhǔn)備的。當(dāng)你把上面的代碼輸入到CGRAM中,LCD1602機(jī)會把漢字或字符賦予地址,這個地址是從0x00開始,因?yàn)樽疃嘀荒?個字符,所以當(dāng)在CGRAM里面輸入8個字符代碼時(shí),這8個字符的代碼的數(shù)據(jù)地址就是0x00開始到0x07。 所以當(dāng)你要在LCD1602上顯示自定義字符時(shí),只需要把這個地址用數(shù)據(jù)輸入就OK。 也就是說現(xiàn)在你要顯示自定義字符和你顯示常用字符一樣的做法了,先寫地址,然后寫數(shù)據(jù)自定義字符的數(shù)據(jù)就是0x00—0x07。也就是你自定義的8個字符。 附程序 功能:LCD顯示自定義字符、漢字 #include"reg52.h" #define uchar unsigned char #define uint unsigned int sbit lcdrs=P2^4; sbit lcdrw=P2^5; sbit lcden=P2^6; uchar code table[]={ 0x00,0x00,0x00,0x1F,0x00,0x00,0x00,0x00,//一 0x00,0x00,0x0E,0x00,0x1F,0x00,0x00,0x00,//二 0x00,0x1F,0x00,0x0E,0x00,0x1F,0x00,0x00,//三 0x02,0x04,0x0F,0x12,0x0F,0x0A,0x1F,0x02,//年 0x0F,0x09,0x0F,0x09,0x0F,0x09,0x09,0x11,//月 0x1F,0x11,0x11,0x1F,0x11,0x11,0x1F,0x00,//日 0x00,0x00,0x00,0x0A,0x15,0x0A,0x04,0x00,//心型 0x00,0x04,0x15,0x0E,0x1F,0x0E,0x11,0x00//坦克 }; uchar code table1[]={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07}; uchar code table2[]="QQ:598852247"; void delay(uchar z) { } void write_cmd(uchar cmd) { } void write_date(uchar date) { } void init_lcd1602() { } void main() { }
|
|
|