lcd1602能显示汉字吗_lcd1602显示汉字程序
lcd1602能否显示汉字
1602液晶是字符型液晶,总共有2行,每行16个字符。每个字符有效的可显示字体是5*8点阵字体。所以通常无法显示中文。中文的显示必须选择图形点阵型液晶。
特别地:是指,显示"年月日",之类的简单的汉字吧?最多支持8个CGRAM字符。可以自己做。调用字模代码0-7。如:"年"的CGRAM单元数据为:0FH,09H,0FH,09H,0FH,09H,13H,00H。这8个字节写入CGRAM单元00H-07H。调用字符代码0。可以看到中文"年"。
lcd1602显示汉字的概念
首先:我们要弄清楚一个概念,其实我们使用1602显示中文汉字,就是利用其内部的自定义字节空间。
第一行的内容对应DDRAM中80H到8FH内容 第二行的内容对应DDRAM中C0H到CFH内容
通过查看LCD1602的用户手册,里面提到当我们需要想CGRAM写入数据时,我们需要先写入CGRAM的地址,从手册上可知,CGRAM的地址为0x40.所以当我们要写入数据时,要先写入一条地址命令 write_com(0x040);
然后把你要写入的数据通过写数据命令写入 write_date( 你要写得数据);
把你要显示汉字的代码存放在CGRAM里,就相当于其他常用字符一样固定在LCD里面了,把你要显示汉字的代码存放在CGRAM里,就相当于其他常用字符一样固定在LCD里面了,就相当于把你要显示汉字的代码存放在CGRAM里,就相当于其他常用字符一样固定在LCD里面了,我们都知道LCD1602内部有一个64字节的自定义CGRAM,那么好,我们就是要利用自定义字节来达到显示汉字的效果。
我们知道一个字符占8个字节,所以在CGRAM能够存放8个字符。 也就是说,这个64字节的CGRAM是给我们提供写入数据的, 那么我们怎么把我们要的汉字写入CGRAM呢?
DDRAM显示用ram,直接和屏幕上的点相对应。屏幕上的一个点和ddram中的一个位对应,字符屏的ddram和图形屏的ddram有一点点区别。
CGROM 中存储了一些标准的 字符的字模编码,是液晶屏出厂时固化在控制芯片中的,用户不能改变其中的存储内容,只能读取调用,包含有标准的ASCII码、日文字符和希腊文字符。
CGRAM 是控制芯片留给用户,用以存储用户自己设计的字模编码。
字模编码都要先被读取到对应的DDRAM中,经中转以后,屏幕的相应位置才显示出字符。对于字符屏,要显示某个字符时,往ddram里写字符的索引(一般都是ascii码)就可以完成显示。
lcd1602显示汉字的程序
汉字的字模:
就是显示出来的汉子字体结构。
要定义字模就需要知道1602的CG RAM地址和显示字符的地址 DD RAM :
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[]={0x00,0x01,0x81,0x12,0x24,0x41,0x81,0x10, …… …… …… }
之后利用命令:
OUTI(0X40);
for (i=0;i《64;i++)
{
OUTD(neu[i]);
}
将这个数组中的数据赋值到1602内部CGRAM中。完成后,再设置数据在1602上的 显示地址,根据图1的结构,设置好位置,如在第一行第一个字符和第二个字符以及第二行
第一个字符和第二个字符处显示:
Command_out (0x80+0x00);
for (i=0;i《4;i++)
{
data_out (i);
}
Command_out(0x80+0x40);
for (i=4;i《8;i++)
{ data_out(i);
}
command_out()的作用是设置显示的
- LCD1602初始化流程图及程序的两种方法(09-08)
- 通用型LCD1602自定义字符的显示(02-12)
- 全方位解析LCD1602特性及单片机显示应用(09-17)
- LCD1602程序代码及显示流程图(09-12)
- 以LCD1602驱动程序为例分析C51单片机编程技巧(08-26)
- lcd1602工作原理是什么?(08-24)