1602液晶顯示還可以顯示漢字

原創]1602液晶顯示漢字 昨天從網上看到1602液晶可以顯示漢字,感覺挺有趣的就自己來做一下。

從網上下了一些資料,具體是應用1602的CGRAM,它一共有512bit,並且一個5*7點矩陣字型需8*8bit,所以CGRAM最多可存8個造型(自定義字元)。但是看了好多資料還是看不懂,它是怎麼保存的那,又是怎麼顯示的那?......實在是想不通呀! >_< MY GOD!

下午上的是自動控制,最後一節課老師講的聽不懂,索性就不聽了。拿起一本單片機的書隨便看了看,正好後面有1602液晶的CGRAM的介紹,看了幾遍好像有那麼點意思了,就差調試出來了。

放了學就衝到實驗室里,打開keil ,打開 Proteus,調試......調試......調試,半個小時,哈哈,搞定了,顯示漢字了!YEAH!

原理很簡單,自定義庫保存到CGROM的00——07單元中。1602液晶上是5*7點陣顯示,需要8個2進位數,把漢字(比如『年』)所對應的2進位數組寫入到CGRAM中去,並且保存到CGROM的00單元中,顯示出來就可以了。自己做了幾個漢字和一個攝氏度符號。大家快來分享一下做1602液晶時的一些技巧吧。

我收藏的一個1602顯示漢字程序

//*************************************//lcd頭文件//*************************************#include<reg52.h>#include<string.h>#include <absacc.h>#define lcd_data P0 //定義埠#define uchar unsigned char#define uint unsigned intsbit RS=P2^1;sbit RW=P2^2;sbit E=P2^3;sbit BF=P0^7;

//***************************************//延時函數//***************************************void delay(uint i){while(i--);}//***************************************//寫控制字//***************************************void write_struct(uchar temp){E=0;delay(100);//while(BF==1);RW=0;RS=0;lcd_data=temp;delay(3);E=1;delay(3);E=0;}//**************************************//寫數據//**************************************void write_data(uchar temp){delay(100);//while(BF==1);E=0;RS=1;RW=0;lcd_data=temp;E=1;delay(3);E=0;}

//***************************************//獲得顯示地址//x表示是第幾行顯示(0-1)//y表示某行的第幾個字元(0-15)//***************************************uchar getchar_adress(uchar x,uchar y){ uchar address; if(x==0) address=0x80+y; //第一行 else address=0xc0+y; //第二行 return address;}

//***************************************//lcd初始化//***************************************void lcd_init(){write_struct(0x38);//設置介面DB寬度(8位)和LCM顯示行數(2行)write_struct(0x08);//write_struct(0x0c);//設置游標為移位模式write_struct(0x01);//執行清屏操作write_struct(0x06);//設置游標為加1模式

}//***************************************//向CGRAM寫入數據//***************************************void write_cgram(unsigned char adress,unsigned char *p){char i;for(i=0;i<8;i++){ write_struct(adress+i); write_data(p);}

}

//***************************************//顯示CGRAM數據//x表示是第幾行顯示(0-1)//y表示某行的第幾個字元(0-15)//***************************************void display_cgram(unsigned char x,uchar y,uchar *CgramData){ uchar address,cgram_address,p;address=getchar_adress(x,y); //獲得CGRAM字元顯示位置 cgram_address=0x40+(address&0x07)*8; //CGRAM初始地址

p=address&0x07;

write_cgram(cgram_address,CgramData);write_struct(address); //設置DDRAM地址

write_data(p);

}//顯示字元//***************************************void display(char temp0,char *p){write_struct(temp0);delay(3);write_data(*p);}//****************************************//顯示字元串//****************************************void display_str(uchar x,uchar y,char *p){char i,temp0;temp0=getchar_adress(x,y);write_struct(temp0);for(i=0;i<16;i++){if(*p=="")break; write_data(*p);p++;}}//****************************************//清屏//****************************************void lcd_clr(){write_struct(0x01);}//*****************************************************end

推薦閱讀:

36個三胞胎漢字,你能認識幾個?
《中華字經》4000漢字無一重字,絕了
漢字解密:「姒」│大禹治水十三年功成,被賜姓姒
中國最難寫最難讀的22個漢字,你見過3個嗎?

TAG:漢字 | 液晶 | 顯示 |