1602显示汉字
- 格式:pdf
- 大小:45.35 KB
- 文档页数:3
LCD1602显示汉字研究与程序设计1602是一款最常用也是最便宜的液晶显示屏。
最多可以显示两行标准字符,每行最多可以显示16个字符。
1602可以显示内部常用字符(包括阿拉伯数字,英文字母大小写,常用符号和日文假名等),也可以显示自定义字符(单或多个字符组成的简单汉字,符号,图案等,最多可以产生8个自定义字符)。
一、显示常用字符。
1602液晶模块内部的字符发生存储器(CGROM)已经存储了160个不同的点阵字符图形,如下表所示,这些字符有:阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码,比如大写的英文字母“A”的代码是41H,显示时模块把地址41H中的点阵字符图形显示出来,我们就能看到字母“A”十进制十六进制ASCII字符十进制十六进制ASCII字符十进制十六进制ASCII字符00 00 自定义字符1 56 38 8 96 60 `01 01 自定义字符2 57 39 9 97 61 a02 02 自定义字符3 58 3A : 98 62 b03 03 自定义字符4 59 3B ; 99 63 c04 04 自定义字符5 60 3C < 100 64 d05 05 自定义字符6 61 3D = 101 65 e06 06 自定义字符7 62 3E > 102 66 f07 07 自定义字符8 63 3F ? 103 67 g08 08 自定义字符1 64 40 @ 104 68 h09 09 自定义字符2 65 41 A 105 69 i10 0A 自定义字符3 66 42 B 106 6A j11 0B 自定义字符4 67 43 C 107 6B k12 0C 自定义字符5 68 44 D 108 6C l13 0D 自定义字符6 69 45 E 109 6D m14 0E 自定义字符7 70 46 F 110 6E n15 0F 自定义字符8 71 47 G 111 6F o32 20 空格72 48 H 112 70 p33 21 ! 73 49 I 113 71 q34 22 " 74 4A J 114 72 r35 23 # 75 4B K 115 73 s36 24 $ 76 4C L 116 74 t37 25 % 77 4D M 117 75 u38 26 & 78 4E N 118 76 v39 27 ' 79 4F O 119 77 w40 28 ( 80 50 P 120 78 x41 29 ) 81 51 Q 121 79 y42 2A * 82 52 R 122 7A z43 2B + 83 53 S 123 7B {44 2C , 84 54 T 124 7C |45 2D - 85 55 U 125 7D }46 2E . 86 56 V 126 7E ~47 2F / 87 57 W48 30 0 88 58 X49 31 1 89 59 Y50 32 2 90 5A Z51 33 3 91 5B [52 34 4 92 5C \53 35 5 93 5D ]54 36 6 94 5E ^55 37 7 95 5F _显示操作的过程:首先确认显示的位置,即在第几行,第几个字符开始显示。
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 是一样的,只不过是LCD1602 里面增加了一些你自定义的字符,汉字。
可能到这里,也许会有些疑问,既然自定义字符、汉字的代码需要我们自己输入,那幺我该怎幺编写这些代码,呵呵,不要着急,接下来就要用到下面这个取字模软件。
相信有的朋友应该都用过这个软件。
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自定义显示字符及汉字整理:大海橡树第一篇讲解一下LCD1602,学过单片机的朋友们都知道它了吧,可以说是用的最广,最简单,也是学液晶入门级别的一块液晶了。
LCD1602顾名思义就是两行显示的液晶,每行最多显示16个字符(里面总共有160个字符),其中包括阿拉伯数字、英文字母的大小写,常用符号,及日文的假名!每个字符对应一个ASCII码,我们通过向液晶送相应符号的ASCII码来显示这个字符。
下面看一下Proteus软件中的LCD1602,在Proteus软件的元件库中,LCD1602为LM016L,下面是这块液晶的引脚图:具体的相关引脚和功能设定参看LCD1602的PDF文档资料,由于篇幅问题,这里就不赘述了!还有一点要说的就是大家在仿真LCD1602时,要是用的是DB7~DB0连单片机的P0口的话,一定要加上拉电阻,要不然驱动不了,因为单片机的四组IO口就P0的内部无上拉,驱动能力弱!看下面的图:在P0口加了排阻(RESPACK-8)对于自带字符的显示,只需要将对应的ASCII码写入LCD中显示即可,这个是每个人开始学习液晶最开始要学会的了,看看数据手册,写写程序,想必大家都会了,这里就不做介绍,本篇着重讲解一下怎样自定义显示字符,比如显示自定的字符、显示汉字等等这些!要显示我们自定义的字符,就要用到LCD中的CGRAM存储器(character generate RAM),而我们之前用的显示自带的字符用到的是DDRAM,两个是不同的。
看液晶手册我们知道,CGRAM的地址是0x40~0x7F,共128个字节,而一个字符是8个字节,所以一共能显示8个自定义的字符。
内部常用字符的显示是从0x20开始的,0x00~0x0F是专门留给自定义字符显示用的。
那么怎样显示一个自定义字符呢?首先我们要清楚LCD1602显示字符的点阵大小,眼力好的可以看出来,LCD1602一个显示字符的位置是5*8的点阵,也就是说它所能显示的点阵图形的大小是5*8的!要显示一个自定义的字符,首先我们要知道所显示自定义字符的点阵数据,也就是在一个5*8的点阵上那个点是黑的(将该点点黑,就是高电平----1),哪个点是白的(该点不显示,为低电平----0),但是我们送入到LCD中的是ASCII码,它是8位的数据,而一个显示字符的点阵大小只是5*8的,显然不够,显示的办法是8*8点阵的前三列不用,也就是不显示,我们只用后面的5列来显示。
#include<reg52.h>#define uchar unsigned char#define uint unsigned intsbit lcdrs=P1^0;sbit lcden=P1^2;sbit lcdwr=P1^1;uchar CGCODE[]={0x08,0x0F,0x12,0x0F,0x0A,0x1F,0x02,0x02,//"年"代码0x00 0x0F,0x09,0x0F,0x09,0x0F,0x09,0x13,0x00,//"月"代码0x010x0F,0x09,0x09,0x0F,0x09,0x09,0x0F,0x00,//"日"代码0x020x07,0x04,0x07,0x04,0x07,0x00,0x04,0x07,//"星"左上半部分代码0x030x1F,0x01,0x1F,0x01,0x1F,0x08,0x08,0x1F,//"星"右上半部分代码0x040x08,0x17,0x00,0x1F,0x00,0x00,0x00,0x00,//"星"左下半部分代码0x050x08,0x1F,0x08,0x1F,0x00,0x00,0x00,0x00//"星"右下半部分代码0x06};uchar tab[]={'0','8',0x00,'0','3',0x01,'0','9',0x02};//显示"08年03月09日"void delay(uint t)//延时函数{uint x,y;for(x=0;x<t;x++)for(y=0;y<110;y++);}void write_com(uchar com)//向1602写指令{lcdrs=0;P2=com;delay(5);lcden=1;delay(5);lcden=0;}void write_date(uchar dat)//向1602写数据{lcdrs=1;P2=dat;delay(5);lcden=1;delay(5);lcden=0;}void init()//程序初始化{lcdwr=0;lcden=0;write_com(0x38);write_com(0x0c);write_com(0x06);write_com(0x01);}void main()//主函数{int i;init();lcdrs=0;lcdwr=0;write_com(0x40);//将自定义字符写入CGRAMfor(i=0;i<56;i++)//循环56次写入{write_date(CGCODE[i]);}write_com(0x80);//写入初始地址for(i=0;i<9;i++){write_date(tab[i]);}write_com(0x80+9);//用09H和0AH显示"星"上部分write_date(0x03);write_date(0x04);write_com(0x80+0x40+9);//用49H和4AH显示"星"上部分write_date(0x05);write_date(0x06);while(1);}。
1602液晶模块内部的字符发生存储器(CGROM)已经存储了160个不同的点阵字符图形,这些字符有:阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,但是没有汉字库。
每一个字符都有一个固定的代码,比如大写的英文字母“A”的代码是01000001B(41H),显示时模块把地址41H中的点阵字符图形显示出来,我们就能看到字母“A”。
今天偶然在网上发现有的人利用1602显示简单的汉字,对这个产生了兴趣,上网搜了一些资料,自己慢慢的研究了一下,终于弄懂了怎么回事,自己也写了一个显示“天”,“℃”,“你”,“土”,心形,“明”的程序。
下面就和大家一起分享一下。
查看LCD1602的CGROM字符代码表,可以发现从00000000B~00000111B (00H~07H)地址的内容是没有定义的,它是留给用户自己定义的,用户可以通过先定义LCD1602的CGRAM中的内容,最多可以自定义8个字符,然后就可以同调用CGROM字符一样来调用自定义好的字符。
那么如何设定CGRAM中的内容呢?首先我们要把所要编写的字符对应于5X8点阵的“字模”提取出来,我们可以通过相关的软件来提取,也可以手工提取。
说白了也就是将点阵的某一行中有显示的点用1表示,无显示的点用0表示,以此形成该行对应的字模数据。
设定CGRAM的内容,要一行一行的设定,每一行对应一个CGRAM,5X8点阵,每行5点,共8行,因此要将8行的字模数据都写入CGRAM。
写好后,就可像调用CGROM字符一样来来调用它了(CGRAM是可写可读的,CGROM只可读不可写)。
下面贴出我的程序(见1602LCD文件夹中的1602显示汉字.Uv2文件),实物图和Proteus仿真图,由于一个字符的点数为5X8,点数太少所以显示效果不是很好,经实验发现实物效果比仿真要好,下面为两者的效果图。
用1602显示汉字2009-08-27 01:14:08| 分类:单片机| 标签:|举报|字号大中小订阅1602可以显示汉字啦!不过显示功能有些小bug 查了半天也没查出问题出在哪(郁闷....——)LCD1602已很普遍了,具体介绍我就不多说了,市面上字符液晶绝大多数是基于HD44780液晶芯片的,控制原理是完全相同的,因此HD44780写的控制程序可以很方便地应用于市面上大部分的字符型液晶。
字符型LCD通常有14条引脚线或16条引脚线的LCD,多出来的2条线是背光电源线VCC(15脚)和地线GND(16脚),其控制原理与14脚的LCD完全一样,定义如下表所示:(图1)字符型LCD的引脚定义(图1)HD44780内置了DDRAM、CGROM和CGRAM。
DDRAM就是显示数据RAM,用来寄存待显示的字符代码。
共80个字节,其地址和屏幕的对应关系如下表:(图2)(图2)也就是说想要在LCD1602屏幕的第一行第一列显示一个"A"字,就要向DDRAM的00H地址写入“A”字的代码就行了。
但具体的写入是要按LCD模块的指令格式来进行的,后面我会说到的。
那么一行可有40个地址呀?是的,在1602中我们就用前16个就行了。
第二行也一样用前16个地址。
对应如下:图3。
DDRAM地址与显示位置的对应关系:(图3)我们知道文本文件中每一个字符都是用一个字节的代码记录的。
一个汉字是用两个字节的代码记录。
在PC上我们只要打开文本文件就能在屏幕上看到对应的字符是因为在操作系统里和BIOS里都固化有字符字模。
什么是字模?就代表了是在点阵屏幕上点亮和熄灭的信息数据。
例如“A”字的字模:01110○■■■○10001■○○○■10001■○○○■10001■○○○■11111■■■■■10001■○○○■10001■○○○■上图左边的数据就是字模数据,在取字模软件要用8*8的行列。
前三列不用000,黑色表示显示1高电平右边就是将左边数据用“○”代表0,用“■”代表1。
主要是看懂它CGROM CGRAM的存储空间图,和工作原理用户直接操作DDRAM,DDRAM有80个字节,其位置与1602的显示位置有对应关系,基本思想是向指定的DDRAM地址中写入字符对应的ASCII码,其实是指针,DDRAM通过这个指针在CGROM中找到它对应的字模数组,然后显示在屏幕上。
用户看起来是对DDRAM的操作,实则是通过DDRAM调用了CGROM中的字模数组,显示在LCD上。
图1其奥妙在于它的ASCII码、字符点阵地址、行地址的对应关系上图2(没有复制完整)DDRAM的地址对应LCD上的一个位,其内容是一个指针,指向了点阵中的数组。
以00H为例,(写地址的时候要写成0X80,因为指令规定了高位要为1 ,见DDRAM地址设置指令)向00H中写一个01100010则LCD的处理器会视01100010为指针,然后通过CGROM找到它对应的一组字模代码,如下图,这个指针对应的是一个存储空间,这个存储空间就是8行5列,对应下面的行地址0000到0111.这就是行地址的意思,也就是字模码的行。
,第8行对应的是光标,就是我们在LCD上看到一最后一行,如果是光标闪烁的话,那一闪闪的就是第8行的位在不断的置0置1的结果。
如下图3示行、列描述的是存储空间,字模码的行列就是8行5列的;还有个行地址批的是CGROM 的行,CGROM中的低4位就是行,共16行16列,如图2 示图3下面提用户自定的的解释CGRAM其实是CGROM中的一部分,这部分是没有被写进字模码的存储空间。
前8位没有用到,可以让用户自己写字模码。
用户最多写8个,CGROM中对应行0000行到0111行,当然对就的是第0列。
第个CGRAM对应一个8行5列的存储空间,如下图4示因此写自定义字模时要先设定好这个CGRAM的地址,如00000000,然后要在这个地址中写入8行的数据,如图4示,第一个地址代表字符标号,也就是行DDRAM中写的指针,下面的字符码的低3位,现时也是CGRAM的高3位,位5 4 3。
液晶显示模块可以分为字段,字符点阵,图形点阵 3 种。
一般只有后者可以显示汉字和图形。
LCD 1602 是常见的16 × 2 行,6 × 8 字符点阵液晶模块,广泛应用于智能仪表、通信、办公自动化设备中,其字符发生器 ROM 中自带数字和英文字母及一些特殊符号的字符库,没有汉字。
我们利用 1602 可以建立 8 个 6 × 8 点阵自定义字库的特点,在一个测温的实例中成功显示了少量汉字和特殊符号——℃,下面是显示部分的实施方法。
一、电路构成简图LCD1602 液晶显示模块按图 1 所示连接单片机,其接口的引脚功能介绍如下:BLA :背光源正极,接 +5V ;BLK :背光源负极,接地;VO :液晶显示偏压信号,通过电位器 W1 调节, 1602 偏压接近 0V ;RS :接 P1 . 2 ,决定传输类型是数据或命令, 1- 表示数据, 0- 表示命令;R / W :接 P1 . 6 ,读/写控制, 1 一表示读, O 一表示写;E :接 P13 ,使能端,高电平有效;DB0 ~ DB7 :数据端口,连接 P0 。
液晶显示模块 1602 更详细的信息可以查阅相关的资料,此处不再赘述。
二、自定义字库的建立及关键子程序的软件实现若要显示汉字,关键是先要自己建立欲显示的汉字字库。
1602 提供了,在片内CGRAM 的 00H 一 3FH 共 64 个字节的空间,可以存放 8 个 6 × 8 点阵的自建字符库,其代码分别为 00H 一 07H ,然后在显示时只要用查表法调用汉字的相应代码就可以了。
下面给出相应的子程序,为了更好地理解 1602 液晶显示模块的相关指令,以注释的方式存程序中给出解释 .1 .显示自定义字符内容的流程图图3为 6 × 8点阵形成的“日”字,前面3位补0,其编码为1FH,11H,11H,1FH,11H,1FH,00H。
其他汉字可以以此编出相应的编码。
1602 液晶显示汉字程序利用1602 显示汉字也不是新鲜的内容,今天不想颓废了。
只是需要自己事先定义一下汉字的字模,就是显示出来的汉子字体结构。
要定义字模就需要知道1602 的CG RAM 地址和显示字符的地址DD RAM图1: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 40 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F 第一行第一个字符的地址是( 0x80) ,后面的字符地址以此类推第二行第一个字符的地址为( 0x80 + 0x40) ,需要在第一行的基地址后面加上一个偏移量0x40 ,后面的地址在此基址上再依次加一。
void delay(unsigned int time_i){ int i;for (;tim>0;tim--){for (i=0;i<10;i++); } }void command_out (char out_data) {RW=0;RS=0;EN=1;DB=out_data;EN=0;delay(10);}void OUTD(char out_data){RS=1;RW=0;EN=1;DB= out_data;EN=0;delay(10);}OUTI() 是写入指令的函数,OUTD() 是写入数据的函数。
如:左上角第一个5*7 的显示数据为:0x00,0x01,0x81,0x12,0x24,0x41,0x81,0x10蓝色区域的相应位为1这样就可以写出全部 4 个 5*7 点阵的显示数据了,把它封装在一个数组中,如数组, hanzi[]={OxOO,OxO1,Ox81,Ox12,Ox24,Ox41,Ox81,Ox1O,} 之后利用命令:OUTI(0X40); for (i=0;i<64;i++){ OUTD(neu[i]);} 将这个数组中的数据赋值到 1602 内部 CGRAM 中。
第3卷第3期2010年6月清远职业技术学院学报Journal of Qingyuan Polytechnic Vol.3,No.3June.20101简介1602是一款最常用也是最便宜的液晶显示屏,可以显示两行标准字符,每行显示16个字符,广泛应用于智能仪表、通信、办公自动化设备中。
它的主要作用是显示ASCII 码字符,因此又被称作“字符型显示器件”[1]。
对于内部没有标准汉字库的液晶显示器要显示汉字,第一步要取得想要的中文或者图形的字模数据。
通过字模软件不能直接提取5*8点阵的字模数据,可以通过手动提取的方法从汉字字型取模。
第二步,将取得的汉字字模数据保存到液晶存储器内部。
第三步,将汉字显示到需要位置,用Proteus 仿真或下载调试[2-5]。
2液晶显示器内部存储器1602里的存储器有三种:DDRAM 、CGROM 和CGRAM 。
2.1DDR AM 存储器DDRAM 存储器是和显示屏的内容对应的,1602内部的DDRAM 有80字节,显示屏上第一行的内容对应DDRAM 中80H 到8FH 的内容,第二行的内容对应DDRAM 中C0H 到CFH 的内容,每行16个,共2行,16×2共显示32个字符(图1)。
使用时,将显示的字符写入合适行列即可(详见3.4液晶1602显示子程序)。
图1字符型液晶1602的DDRAM 存储器2.2CGR OM 存储器CGROM 称为字符发生ROM ,其作用是存储各类字符的码,保存了厂家生产时固化在LCM 中的点阵型显示数据。
1602液晶模块内部的字符发生存储器CGROM 已经存储了160个不同的点阵字符图形,有:阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,这部分代码与ASCII 码基本一致,比如小写的英文字母“a ”的代码是61H ,大写的英文字母“A ”的代码是41H 。
2.3CGR AM 存储器CGRAM 称为字符发生RAM ,是厂家留给用户自己定义点阵型显示数据的,作用是存储用户自定义的字符代码。