微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 硬件工程师文库 > lcd1602能显示汉字吗_lcd1602显示汉字程序

lcd1602能显示汉字吗_lcd1602显示汉字程序

时间:09-19 来源:互联网 点击:

  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()的作用是设置显示的

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top