沉思的牛 发表于 2014-6-7 23:35:29

LCD1602显示汉字,图形 教程

本帖最后由 沉思的牛 于 2014-6-14 12:28 编辑

看这个教程之前要确保你之前用过1602,并且知道1602的基本操作;
而且以前没有用来显示过汉字或图形;


老规矩先看图:






看到了把又有图形又有中文;



下面我们来谈谈是如何实现的:

预备知识:

[*]DDRAM:通常意义就是我们说的显存,对于图形液晶的它和屏幕是映射的关系。也就是你往DDRAM写什么它就显示什么;对于字符液晶你写进去的就是字符索引;
[*]CGROM:就是常说的字库,比如带字库1602液晶,它的字库就存放在CGROM里面,一般为ASCII码。索引地址从0x20开始,你向DDRAM写入0X30,液晶控制芯片是在CGROM里面寻找字符,然后液晶就显示字符‘0’;
[*]CGRAM:用户自建字模区,就用它来存放我们的汉字和图形;


大家知道1602的是8*5的点阵显示吧;你可以自己数数通常对于正常显示一个汉字最少需要16*16的点阵;
就像小甲鱼的说的,一个字节岂能承载我大中华上下5000年的文化!当然8*5的点阵也不能承载我大中华的汉字,只能显示很少的简单汉字;


接下来如何操作1602液晶:

1、写入CGRAM的地址地址是0x40;   函数操作: Write_Command(0x40);

2、写入自定义图形数据数据是八个字节因为有8行 (8*5的点阵)正因为是8*5所以高3位没有用;
数据手册的说明:

那么显示这个S就需要八个字节的数据

第一行 00001111   0x0f
第二行 00001000   0x08
第三行 00001000   0x08
第四行 00001110   0x0e
第五行 00000001   0x01
第六行 00000001   0x01
第七行 00011110   0x1e
第八行 00000000   0x00图上没有

那么字模数组就是
unsigned char code image[]={0x0f,0x08,0x08,0x0e,0x01,0x01,0x1e,0x00};
函数操作:
for(i=0;i<8;i++) Write_Data(image);
现在我们就把数据存入了CGRAM,并且产生了'S'这个字模;

当然这些数据不需要你自己去算,用取字模软件就可以了;附件上传;

3、注意啦我们要开始显示啦;
写入DDRAM的地址 0x80指针就指向DDRAM第一个字节,就是在第一行第一列的位置显示
函数操作:Write_Command(0x80);

4、索引到刚才我们写入到CGRAM的数据,刚才我们把数据写入到CGRAM大家知道地址是多少吗?   CGROM字符索引是从0X20开始的,那么前面的地址跑哪里去了,没错就是留给CGRAM的;
比如刚才我们写入了8个字节到CGRAM,产生了一个字模,那么我们的字模索引地址就是0x00,;
如果你要是再写8个数据,那么地址就是0x01;以此类推;

5、显示出自己的图形函数操作:Write_Data(0x00),我们就显示出了那个'S'


看源代码分析:
#include <STC.H>
#include "lcd1602.h"


//字模
UCHAR codeimage[]={
//坦克
0x04,0x04,0x0E,0x1F,0x1F,0x1B,0x0A,0x00,

//三叉戟
0x04,0x04,0x04,0x15,0x15,0x15,0x0E,0x04,

//中
0x04,0x04,0x1F,0x15,0x1F,0x04,0x04,0x04,
//文
0x00,0x04,0x1F,0x0A,0x04,0x0A,0x11,0x00
};


void main()
{
      char i;

      Init_LCD_1602();   //初始化显示

      Write_Command_1602(0x40);//CGRAM地址
      //向CGRAM写入字符数据
      
      for(i=0;i<sizeof(image);i++)
                Write_Data_1602(image);

//现在我们字符就有了地址0x00开始


      Write_Command_1602(0x80);//数据指针 DDRAM地址

      //写数据就是CGRAM的索引地址
      Write_Data_1602(0x00);//CGRAM的第一个字符地址
      Write_Data_1602(0x01);//CGRAM的第二个字符地址

      Set_Pos_1602(2,7);      //设置显示坐标
      Write_Data_1602(0x02);
      Write_Data_1602(0x03);      


      while(1);      
}

取字模软件
**** Hidden Message *****



以上纯属个人愚见,如有错误请各位鱼油指正;



turpo 发表于 2020-6-6 16:26:28

学习一下

Cool_Breeze 发表于 2020-8-20 09:01:54

楼主问一下:打孔板在哪里买的?大概多少钱?

ly216 发表于 2020-9-23 16:49:03

不错

ljy000 发表于 2021-11-27 19:39:17

a

昼与夜 发表于 2022-1-21 15:57:45

想看看

风还好看 发表于 2024-4-11 17:56:26

求分享
页: [1]
查看完整版本: LCD1602显示汉字,图形 教程