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 *****
以上纯属个人愚见,如有错误请各位鱼油指正;
学习一下 楼主问一下:打孔板在哪里买的?大概多少钱? 不错 a 想看看 求分享
页:
[1]