当前位置:文档之家› LCD1602显示中文汉字doc资料

LCD1602显示中文汉字doc资料

L CD1 6 0 2 显示中文汉字LCD1602 显示中文汉字LCD1602 相比大家都比较了解,但是我们一般只用来显示字符,数字。

最近在网上看许多人用LCD1602 来显示汉字,觉得有趣于是拜读了一些资料,教程,但感觉大部分相当晦涩难懂,本人认为既然是教程,就不必要相当的复杂,毕竟人家看完许久后还是不能得出实验结果~!!接下我谈谈我得做法,保证你10分钟之内一样可以在LCD1602 上显示你想显示的各种符号,汉字!!!首先:我们要弄清楚一个概念,其实我们使用1602 显示中文汉字,就是利用其内部的自定义字节空间,我们都知道LCD1602 内部有一个64字节的自定义CGRAM ,那么好,我们就是要利用自定义字节来达到显示汉字的效果. 我们知道一个字符占8 个字节,所以在CGRAM 能够存放8 个字符。

也就是说,这个64 字节的CGRAM 是给我们提供写入数据的,那么我们怎么把我们要的汉字写入CGRAM 呢?不要急,大家查看LCD1602 的用户手册,里面提到当我们需要想CGRAM 写入数据时,我们需要先写入CGRAM 的地址,从手册上可知,CGRAM 的地址为0x40所以当我们要写入数据时,要先写入一条地址命令write_com(0x040); 然后把你要写入的数据通过写数据命令写入write_date( 你要写得数据);做完以上步骤了,是不是LCD1602 就会显示你输入的汉字呢?不要急,以上你只是把你要显示汉字的代码存放在CGRAM 里,就相当于其他常用字符一样固定在LCD 里面了,如果你不把它读出来,LCD 是不会显示当你把上面的步骤做完后,接下来要做的与你平常怎么使用 的,只不过是LCD1602里面增加了一些你自定义的字符,汉字。

可能到这里,也许会有些疑问,既然自定义字符、汉字的代码需要我们自己输 入,那么我该怎么编写这些代码,呵呵,不要着急,接下来就要用到下面这个 取字模软件。

4収虫日式*偉改壬慨烁楼咀韋IH*丘出用片4B-S I 询厲 1 .11 g 佃如 ATI相信有的朋友应该都用过这个软件。

那么我们怎么来使用这个软件来获取代码 呢?大家有没有注意到,我们的 LCD1602是5*8点阵(可以数一数)。

但是 5*8不能提取代码,最少只能8*8,所以我们这里只用后前5列,前3列不 用。

新建图像8*8.然后再图像里面点你要显示的字符,汉字,注意是在后5列中点,黑点表示显示,白点不显示,用鼠标左键可以切换,下面是我点得一个坦LCD1602 是- 一样nP : E!i :ED :2:;;:: ;;;;; ;;;;IIIiiiii i m v i i i i 1 'i n m i i i "an==^11三_运吕,:=::-鳳lal ^:=:i Ei 【貝宙•=—=:旨目:=:i闿:?|:==国:==-Ei Jd一nla'」™:^T:==!E 朋=aumj= __________________ 岸出ii・=lMuth:E-r二一云 mlliy 一一E-F»::即 _旨=:::=i±:::3.:i I isl~gis-:E i=;^^:='";!:^^-=='sis :d.mi^^."H! ±EE=r -£f -=££ •.=lwl =,更一::U:::::E::=;=:::= 一::”口“::::E:=n":-z: im 劉司士U4dlum:x:-r 三™目』=:•£:聶n 一■=TRS ..:=:E!=::.ii !H. is. = iE-- EjHggf一偃血::£逞巨出ji._Hg!w :r !g=:n"ifcI=:z:E」=-E:益貝 一 ;=.::3『:=一 -■:.-!?rr ■:■r=:-ssg=葩~:7址"恭::::丄:::=,一=•一 ■三wah^T'p :::.•:l!'!'il!-=;=w:::= =-£宅=三^UF: -:=:la:!!!li=:- -=" saws :=:.能囲i==:uinzH _____________ ■=.一毎!-苗:=龙==. _ -:=:日冋一:=!:—■l :・L =—51-爭:=:"鳖甲 -■=:训isiz一:==i=rf!丄 =£g ・_ 一二“孔=詬 -_d=r-EE^_ …::"話-:=nr5?!!:::E 『:==7:=3KfT=^^nr=nE -=-L=s--=frfc-=- ^=r-=L-r ==卜三三~也一能'三m='r 三理ii:2.:=HI±:::.-:=:f :=:!l!':';ii :=:H ^:=::':!:?S _ 代-::::=!::::2ll NM9 三U1U 三a fc-E •二U4mu±lf: •!=!■:■一 ":3u_Ll_Ln= ______________ i ___________________________ dHH — ___________ :=一一—MBJ 一一WWFmf 三一—H=M1_iE ・=:i _________ :s_md="山IS三=:=腥iE:=^f:=丄:-- = R !-=•運=%•_ 三” EMS- ==■9一通_三iama-工=:匸E :=一徑BU=-=mBH--- 三矗潘-~ --三iJMUEH:=:wji!i 译!I IE」': =:~:羽甫"" 三iSWS-i一i=:iulu!J=-HSW~ =rl!-aa 用” ii=:lulE sirl-…_ MM wiiHalM'B.出ii=:-:;:i^Hi i;:H» £一逵==MI-™:JH *"■:…:::…^:才宁-&i m i 羽三一-MUM•二_4MU=:Euad=b-F ・=UHU=”,E:.::n=H::::SE @IW.L =H9H!~・!1- 卡壬三:E-l=.三g 三.'•EMS _ --=313:::;ii::::=:L::iw ™; ~L 二=•三LI 一一,s:m i±i* : 一H1MIzlElmJ=_ ri ... ....... ...........E2Hiaa-.a-Ii;4aii=-■:=:的huunm::黒凤一g=可iismsi :!r=—诙-!电:::川rlii-8SP&!!:'!!5r =SS一三-*■至:三iEFi三d=花•_一一mt=— j===一g=—=:s r:n=x 三卫:="'=_呦一- .............iE-rEi=^一一HaM4=-:I:一疥_^■■:::E ::::W :=二一-k-E__u4M=也盘-:=na*i._= kf ^=1~=Is三舌一_也一!泊.--mm 业一壬•_一一■swn:=出2°--s==- :::船is::::.:=用=吟一mHnp_一 E 三-•.:s!i^^ =■舟.•三点好后,就可以产生代码了,这软件里面可以选择C51或汇编,这里选择C51。

F面的8个代码就是要产生这个字符的数据。

也就是要输入到自定义字符CGRAM里面的我们知道常用字符是从0x20开始显示,而0x00—OxOf都是没有用的,其实这好的,怎么把获取汉字代码,怎么把代码输入到CGRAM里面都知道了,F面就是要把我们的自定义汉字、字符显示在LCD1602屏幕上了个正式为我们自定义显示字符准备的。

当你把上面的代码输入到CGRAM中,LCD1602机会把汉字或字符赋予地址,这个地址是从0x00开始,因为最多只能8个字符,所以当在CGRAM里面输入8个字符代码时,这8个字符的代码的数据地址就是0x00开始到0x07。

所以当你要在LCD1602上显示自定义字符时,只需要把这个地址用数据输入就OK。

Write_date(0x00—0x07);也就是说现在你要显示自定义字符和你显示常用字符一样的做法了,先写地址,然后写数据自定义字符的数据就是0x00—0x07。

也就是你自定义的8个字符。

这里用Proteus仿真软件演示附程序编写时间:2011-11-25功能:LCD显示自定义字符、汉字#i nclude"reg52.h"#define uchar unsigned char#define uint unsigned intsbit lcdrs=P2A4;sbit lcdrw=P2A5;sbit lcden=P2A6;uchar code table[]={OxOO,OxOO,OxOO,Ox1F,OxOO,OxOO,OxOO,OxOO,/一OxOO,OxOO,OxOE,OxOO,Ox1F,OxOO,OxOO,OxOO,/二OxOO,Ox1F,OxOO,OxOE,OxOO,Ox1F,OxOO,OxOO,/三OxO2,OxO4,OxOF,Ox12,OxOF,OxOA,Ox1F,OxO2,〃年OxOF,OxO9,OxOF,OxO9,OxOF,OxO9,OxO9,Ox11,//月Ox1F,Ox11,Ox11,Ox1F,Ox11,Ox11,Ox1F,OxOO,〃日OxOO,OxOO,OxOO,OxOA,Ox15,OxOA,OxO4,OxOO,〃心型OxOO,OxO4,Ox15,OxOE,Ox1F,OxOE,Ox11,OxOO//坦克};uchar code table1[]={OxOO,OxO1,OxO2,OxO3,OxO4,OxO5,OxO6,OxO7}; //自定义字符数据地址uchar code table2[]="QQ:598852247";/******************************ms延时函数******************************/void delay(uchar z) {uint x,y; for(x=z;x>O;x--)for(y=122;y>O;y--);}/******************************lcd16O2写命令函数void write_cmd(uchar cmd){lcdrs=0;lcdrw=0;// 选择指令寄存器lcden=1;P0=cmd;//写了命令delay(5);lcden=0;//使能拉低lcden=1;}/******************************lcd1602写数据函数******************************/ void write_date(uchar date){lcdrs=1;lcdrw=0;// 选择数据寄存器lcden=1;P0=date;//写了命令delay(5);lcden=0;//使能拉低lcden=1;}/******************************lcd1602初始化******************************/void init_lcd1602(){write_cmd(0x01); // 清屏write_cmd(0x38); // 功能设置write_cmd(0x0c); // 显示设置write_cmd(0x06); // 输入方式从左到右delay(1); }/******************************主函数******************************/void main(){uchar i;init_lcd1602();delay(1);while(1){write_cmd(0x40); // 开始写入你要显示的自定义字符、汉字代码for(i=0;i<64;i++){write_date(table[i]); delay(5);}write_cmd(0x80); // 从第一行第一列开始显示for(i=0;i<8;i++) //显示自定义字符{write_date(table1[i]); delay(5);}write_cmd(0xc0); // 显示QQ:598852247for(i=0;i<12;i++){ write_date(table2[i]); delay(5);。

相关主题