|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 沉思的牛 于 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 code image[]={
//坦克
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[i]);
//现在我们字符就有了地址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);
}
取字模软件
以上纯属个人愚见,如有错误请各位鱼油指正;
|
-
|