12864液晶显示图片原理完整版Word下载.docx
- 文档编号:18313251
- 上传时间:2022-12-15
- 格式:DOCX
- 页数:14
- 大小:229.21KB
12864液晶显示图片原理完整版Word下载.docx
《12864液晶显示图片原理完整版Word下载.docx》由会员分享,可在线阅读,更多相关《12864液晶显示图片原理完整版Word下载.docx(14页珍藏版)》请在冰豆网上搜索。
左右半屏驱动电路及存储器分别由片选信号CS1和CS2选择。
显示点在64*64液晶屏上的位置由行号(line,0~63)与列号(column,0~63)确定。
512*8bitsRAM中某个存储单元的地址由页地址(Xpage,0~7)和列地址(Yaddress,0~63)确定。
每个存储单元存储8个液晶点的显示信息。
为了使液晶点位置信息与存储地址的对应关系更直观关,将64*64液晶屏从上至下8等分为8个显示块,每块包括8行*64列个点阵。
每列中的8行点阵信息构成一个8bits二进制数,存储在一个存储单元中。
(注意:
二进制的高低有效位顺序与行号对应关系因不同商家而不同)存放一个显示块的RAM区称为存储页。
即64*64液晶屏的点阵信息存储在8个存储页中,每页64个字节,每个字节存储一列(8行)点阵信息。
因此存储单元地址包括页地址(Xpage,0~7)和列地址(Yaddress,0~63)。
例如点亮128*64的屏中(20,30)位置上的液晶点,因列地址30小于64,该点在左半屏第29列,所以CS1有效;
行地址20除以8取整得2,取余得4,该点在RAM中页地址为2,在字节中的序号为4;
所以将二进制数据00010000(也可能是00001000,高低顺序取决于制造商)写入Xpage=2,Yaddress=29的存储单元中即点亮(20,30)上的液晶点。
芯片的结构一定要清楚!
点阵LCD的显示原理
在数字电路中,所有的数据都是以0和1保存的,对LCD控制器进行不同的数据操作,可以得到不同的结果。
对于显示英文操作,由于英文字母种类很少,只需要8位(一字节)即可。
而对于中文,常用却有6000以上,于是我们的DOS前辈想了一个办法,就是将ASCII表的高128个很少用到的数值以两个为一组来表示汉字,即汉字的内码。
而剩下的低128位则留给英文字符使用,即英文的内码。
那么,得到了汉字的内码后,还仅是一组数字,那又如何在屏幕上去显示呢这就涉及到文字的字模,字模虽然也是一组数字,但它的意义却与数字的意义有了根本的变化,它是用数字的各位信息来记载英文或汉字的形状,如英文的'
A'
在字模的记载方式如图1所示:
?
图1“A”字模图
而中文的“你”在字模中的记载却如图2所示:
图2“你”字模图
图3图4字符二级单元(图3中阴影部分)
一个汉字的二级单元是一个16*16的区域,因些128*64液晶可以显示4行8列共32个汉字(如图3)。
而它的一个二级单元如图4(在无字库时,对汉字的取模有横向跟纵向两种,要注意),对于并行含有子库芯片的显示,只要设定好这个二级单元的地址(如0X80+i,这样设定i的范围为0~31,这里注意第一行会直接跳到第三行;
或者根据自己需要如第二行0X90+i,i范围为0~7;
第三行0X88+i,i范围为0~7;
),然后直接把汉字写入就OK了~(串行无字符库的后面再做分析)
图5:
垂直坐标:
上半屏00~1F,总共为32水平坐标:
上半屏水平坐标分别为0X80+(00~07)
下半屏00~1F,总共为32下半屏水平坐标分别为0X88+(00~07)
图片显示芯片结构分块与汉字显示不一样
图象显示过程是这样的:
首先设置垂直地址,再设水平地址(连续写入两个字节的资料来完成垂直与水平的坐标地址,然后在每个地址里写入16位数据)。
垂直地址范围AC5...AC0
水平地址范围AC3…AC0
绘图RAM的地址计数器(AC)只会对水平地址(X轴)自动加一,当水平地址=0FH时会重新设为00H
但并不会对垂直地址做进位自动加一,故当连续写入多笔资料时,程序需自行判断垂直地址是否需重新设定。
GDRAM的坐标地址与资料排列顺序如图5:
分上下屏写入。
for(i=0;
i<
32;
i++)量选择颜色比较单一的图片,当然一种颜色的效果最好不过了;
2.图片不能选择的太大,要不缩小了就看不清楚了;
3.图片的调整可以这样(仅供参考):
1>
调整图片的宽高比大致为2:
1;
2>
将图片缩小到128*64像素;
3>
保存为单色位图;
图片的大小缩放不太好操作,我通常是这样做的:
你用画图程序打开你要显示的图片后,首先要操作的查看属性(点击菜单栏的图像->
属性,单位选择为像素后,宽高值就出来了),比如:
宽:
603,高:
444,这显然宽高比不是2:
1,你就要调整了,444*2=888,现在为603,所以888/603=,所以宽要放大为147%(点击菜单栏的图像->
拉伸/扭曲,在拉伸里面的水平处改为147),现在就调整为2:
1了;
接下来就要将图片缩小到128*64像素,先计算缩放的比例,128/888=,所以相同的操作(点击菜单栏的图像->
拉伸/扭曲,在拉伸里面的水平处改为14,垂直里面也要改为14);
最后就是保存为单色位图(文件->
另存为->
文件类型选择为:
单色位图(.bmp))试过颜色比较单一的,效果还可以,复杂的彩色图片效果就很不理想了...
说明:
在调整图片的宽高比大致为2:
1的过程中图片会被拉伸变形,不过缩小到128*64像素后也不是太明显...
图片取模
图片代码——————————————————————————————————
ucharcodeLCD_picture1[]=
{
0x00,0x00,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x7F,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,
0x00,0x00,0x07,0xFF,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,
0x03,0x00,0x07,0xEC,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x0E,0x00,0x00,0x37,0x80,
0x03,0x00,0x00,0xEC,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x0E,0x00,0x18,0x3F,0xC0,
0x03,0x00,0x0F,0x6E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x00,0x18,0x79,0x80,
0x03,0x00,0x0F,0x6B,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x00,0x18,0x7F,0x00,
0x1F,0xF4,0x01,0xE9,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0xC6,0xE0,0x18,0xFF,0x80,
0x1F,0xFC,0x00,0xFB,0x30,0x00,0x00,0x00,0x00,0x00,0x01,0xC6,0x70,0x1B,0x1E,0xC0,
0x03,0x38,0x01,0xB3,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x86,0x38,0xDB,0xFF,0xE0,
0x03,0x70,0x07,0x9E,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x26,0x18,0xDB,0x8C,0x70,
0x7F,0xFF,0x87,0x27,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x3E,0x01,0xFF,0xFF,0xB8,
0x7F,0xFF,0x80,0x3F,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x1E,0x00,0x00,0x0C,0x18,
0x07,0x80,0x00,0x39,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x00,0x00,0xFF,0xE0,
0x0F,0x00,0x00,0xFB,0x1F,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0xF0,0xFF,0xE0,
0x1F,0x30,0x01,0xCF,0xFF,0xFF,0x09,0x00,0x00,0x00,0x00,0x03,0xFF,0xFF,0x0C,0x00,
0x3B,0x36,0x03,0x07,0xFF,0xFF,0xE0,0x00,0x00,0x00,0x00,0x0F,0xFF,0xFF,0xCC,0x00,
0x73,0x76,0x03,0x3F,0xFF,0xFF,0xF7,0x00,0x00,0x00,0x00,0x1F,0xFF,0xFF,0xFC,0x00,
0x63,0xE6,0x00,0x3F,0xFF,0xFF,0xDC,0x80,0x00,0x00,0x00,0x7F,0xFF,0xFF,0xFC,0x00,
0x03,0xFE,0x00,0x7F,0xFF,0xFF,0xAF,0x60,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFC,0x00,
0x03,0xFE,0x00,0xFF,0xFF,0xFF,0xF5,0xC0,0x00,0x00,0x01,0xFF,0xFF,0xFF,0xFC,0x00,
0x00,0x00,0x01,0xFF,0xFF,0xFF,0x23,0x20,0x00,0x00,0x03,0xFF,0xFF,0xFF,0xFE,0x00,
0x00,0x00,0x03,0xFF,0x8F,0xE3,0xEC,0xA0,0x00,0x00,0x03,0xFF,0x1F,0xC7,0xFF,0x00,
0x00,0x00,0x03,0xFF,0x07,0xC1,0x92,0xC0,0x00,0x00,0x07,0xFE,0x0F,0x83,0xFF,0x80,
0x00,0x00,0x07,0xFF,0x03,0xC0,0xE9,0xC0,0x00,0x00,0x0F,0xFE,0x07,0x81,0xFF,0x80,
0x00,0x00,0x07,0xFE,0x03,0x80,0xED,0xE0,0x00,0x00,0x0F,0xFC,0x07,0x01,0xFF,0xC0,
0x00,0x00,0x0F,0xFE,0x1B,0xB0,0xDD,0xE0,0x00,0x00,0x1F,0xFC,0x37,0x61,0xFF,0xC0,
0x00,0x00,0x0F,0xFE,0x1B,0xB0,0xFF,0xE0,0x00,0x00,0x1F,0xFC,0x37,0x61,0xFF,0xC0,
0x00,0x00,0x0F,0xFE,0x1B,0xB0,0xFF,0xF0,0x00,0x00,0x1F,0xFC,0x37,0x61,0xFF,0xE0,
0x00,0x00,0x1F,0xFE,0x1B,0xB0,0xFF,0xF0,0x00,0x00,0x3F,0xFC,0x37,0x61,0xFF,0xE0,
0x00,0x00,0x1F,0xFF,0x03,0xC0,0xFF,0xF0,0x00,0x00,0x3F,0xFE,0x07,0x81,0xFF,0xE0,
0x00,0x00,0x1F,0xFF,0x07,0xC1,0xFF,0xF0,0x00,0x00,0x3F,0xFE,0x0F,0x83,0xFF,0xE0,
0x00,0x00,0x1F,0xFF,0x8C,0x63,0xFF,0xF0,0x00,0x00,0x3F,0xFF,0x1F,0xC7,0xFF,0xE0,
0x00,0x00,0x1F,0xDF,0xFC,0x7F,0xF7,0xF0,0x00,0x00,0x3F,0xFF,0xF0,0x7F,0xFF,0xE0,
0x00,0x00,0x1F,0x07,0xFF,0xFF,0xD1,0xF0,0x00,0x00,0x3F,0xFF,0xE0,0x3F,0xFF,0xE0,
0x00,0x00,0x1E,0x03,0xFF,0xFF,0x80,0xF0,0x00,0x00,0x3F,0xC0,0x00,0x00,0x07,0xE0,
0x00,0x00,0x1E,0x03,0xFE,0xFF,0xC0,0xF0,0x00,0x00,0x3F,0xE0,0x00,0x00,0x0F,0xE0,
0x00,0x00,0x0C,0x01,0xF8,0x3F,0x80,0xE0,0x00,0x00,0x1F,0xE0,0x00,0x00,0x1F,0xC0,
0x00,0x00,0x0E,0x03,0xF0,0x1F,0xC0,0xE0,0x00,0x00,0x1F,0xF0,0x0F,0xC0,0x1F,0xC0,
0x00,0x00,0x1E,0x03,0xF0,0x1F,0x80,0xE0,0x00,0x00,0x1F,0xFC,0x0B,0x40,0x7F,0xC0,
0x00,0x00,0x7F,0x1F,0xF0,0x1F,0xC3,0xE0,0x00,0x00,0xFF,0xFF,0x0B,0x41,0xFF,0xC0,
0x00,0x00,0xFF,0xFF,0xF0,0x1F,0xF7,0xF0,0x00,0x01,0xFF,0xFF,0xC0,0x0F,0xFF,0xF0,
0x00,0x01,0xFF,0xFF,0xF8,0x3F,0xFF,0xFC,0x00,0x03,0xFF,0xFF,0xF8,0x7F,0xFF,0xF8,
0x00,0x03,0xFE,0x7F,0xFE,0xFF,0xFF,0xFE,0x00,0x07,0xFC,0xFF,0xFF,0xFF,0xFF,0xFC,
0x00,0x07,0xFC,0x1F,0xFF,0xFF,0xF8,0xFE,0x00,0x0F,0xF8,0x3F,0xFF,0xFF,0xF1,0xFC,
0x00,0x0F,0xF8,0x07,0xFF,0xFF,0xE0,0xFF,0x00,0x1F,0xF0,0x0F,0xFF,0xFF,0xC0,0xFE,
0x00,0x0F,0xF8,0x00,0xFF,0xFF,0x00,0x7F,0x80,0x1F,0xF0,0x01,0xFF,0xFE,0x00,0xFF,
0x00,0x1F,0xF0,0x00,0x02,0x00,0x00,0x7F,0x80,0x3F,0xE0,0x00,0x00,0x00,0x00,0x7F,
0x00,0x1F,0xF0,0x00,0x00,0x00,0x00,0x3F,0xC0,0x3F,0xE0,0x00,0x00,0x00,0x00,0x7F,
0x00,0x3F,0xF0,0x00,0x00,0x00,0x00,0x3F,0xC0,0x7F,0xE0,0x00,0x00,0x00,0x00,0x7F,
0x00,0x3F,0xE0,0x00,0x00,0x00,0x00,0x1F,0xE0,0x7F,0xC0,0x00,0x00,0x00,0x00,0x3F,
0x00,0x7F,0xE0,0x01,0xC0,0xE0,0x00,0x1F,0xE0,0xFF,0xC0,0x00,0x70,0xE0,0x00,0x3F,
0x00,0x7F,0xE0,0x03,0xF3,0xF0,0x00,0x1F,0xE0,0xFF,0xC0,0x00,0xF9,0xF0,0x00,0x3F,
0x00,0x7F,0xE0,0x07,0xFF,0xF8,0x00,0x1F,0xE0,0xFF,0xC0,0x01,0xFF,0xF8,0x00,0x3F,
0x00,0x7C,0xE0,0x07,0xFF,0xF8,0x00,0x1B,0xE0,0xF9,0xC0,0x01,0xFF,0xF8,0x00,0x37,
0x00,0x38,0xF0,0x03,0xFF,0xF0,0x00,0x39,0xE0,0xF1,0xE0,0x00,0xFF,0xF0,0x00,0x73,
0x00,0x30,0x70,0x01,0xFF,0xE0,0x00,0x30,0xC0,0x60,0xE0,0x00,0x7F,0xE0,0x00,0x61,
0x00,0x00,0x78,0x00,0xFF,0xC0,0x00,0x30,0x00,0x00,0xF0,0x00,0x3F,0xC0,0x00,0x60,
0x00,0x00,0x38,0x00,0x7F,0x80,0x00,0x60,0x00,0x00,0x70,0x00,0x1F,0x80,0x00,0xC0,
0x00,0x00,0x1C,0x00,0x3F,0x00,0x00,0xC0,0x00,0x00,0x38,0x00,0x0F,0x00,0x01,0x80,
0x00,0x00,0x0E,0x00,0x1E,0x00,0x00,0x80,0x00,0x00,0x1C,0x00,0x06,0x00,0x01,0x00,
0x00,0x00,0x07,0x00,0x0C,0x00,0x01,0x80,0x00,0x00,0x0E,0x00,0x06,0x00,0x03,0x00,
};
12864液晶原理分析2
2010-02-2414:
58:
05阅读165评论5字号:
大中小
[转自本人QQ空间发表于2009年09月04日21:
52]
一、接口引脚(注意并口与串口)
二、接线方式
1、并口直接访问
2、并口间接访问
3、串口访问
三、文本(汉字,字符)输入
1、文本显示RAM(DDRAM)
文本显示RAM提供8个×
4行的汉字空间,当写入文本显示RAM时,可以分别显示CGROM、HCGROM与CGRAM的字型;
根据汉字显示坐标可以很容易地显示汉字以及其它字符~
四、图象输入
1、绘图RAM(GDRAM)
绘图显示RAM提供128×
8个字节的记忆空间,在更改绘图RAM时,先连续写入水平与垂直的坐标值,再写入两个字节的数据到绘图RAM,而地址计数器(AC)会对水平地址(X地址)自动加一,当水平地址为0XFH时会重新设为00H;
不会对垂直地址做进位自动加1.。
在写入绘图RAM的期间,绘图显示必须关闭,整个写入绘图RAM的步骤如下:
1、关闭绘图显示功能。
2、先将水平的位元组坐标(X)写入绘图RAM地址;
再将垂直的坐标(Y)写入绘图RAM地址;
将D15——D8写入到RAM中;
将D7——D0写入到RAM中;
打开绘图显示功能。
绘图显示的缓冲区对应分布请参考“GDRAM坐标”
GDRAM地址坐标对于图象显示,这个地址表才是王道
水平方向X—以字节单位(2字节16位)
垂直方向Y—以位为单位
屏幕分上下两屏,垂直坐标上下屏都为Y:
00—1F(也即0X80+Y),以位为单位;
水平坐标上半屏为X1:
00—07(也即0X80+X1);
下半屏为X2:
08—0F(也0X80+X2)
由图可以看到水平坐标一个单位是两字节(即16位D15~D0),X地址会自动加1,是直接加一个单位(即两字节16位),比如00—》01(也即0X80+00—》0X80+01),从第一行第一列跳到第一行第二列。
(1)、整屏图象显示
程序:
voiddisppicture(ucharcode*adder)
uinti,j;
注意:
根据最后显示到液晶上的结果,是两个RAM中数据的异或结果,我们可以知道,con_disp()反白(或显示图象)函数只能对文本字符进行反白,而不能对图形进行反白,因为con_disp()反白(或显示图象)函数本身是一个绘图函数,数据是写到GDRAM中去,只能与DDRAM(文本)异或,而不能与GDRAM(图象)异或。
那么图象如何反白呢我们在绘入图象时可以用按位取反符号“~”,如write_data(~date),这样就可以对你要绘入的图象进行取反了!
如果用con_disp()反白(或显示图象)函数对GDRAM进行反白,就会出现重叠覆盖现象,如下图:
。
第一幅图被反白函数覆盖了
~~
……好吧,暂时告一段落先……理解到这程度已经死了好大一批脑细胞了……
看到工具箱旁边那个LCD12864很久没用了(当初买回来用的时候只是简单地测试了一下),于是萌生了重新写一次接口程序的想法(而且这次要给它加个图片显示的功能),好,说做就做,就用Atmega16和ICCAVR来做吧,最近这MCU和平台用得比较熟练。
马上从书堆里把当初打印出来的中文datasheet给翻了出来,依葫芦画瓢地写了个初始化程序。
好,OK。
编译通过。
于是又写了一个可以自定义从XY坐标值开始输出显示的函数,再次编译,也通过,OK。
于是呼马上写了四行简单的字符烧到单片机上试了一下,嘿嘿,一次通过。
如下图:
,左思右想地弄了一个多小时后,终于把问题给解决了,就是把初始化程序的延时适当增加了些,真是奇怪。
刚开始一直想不通为什么在烧写器供电的情况下就正常显示,而换到USB供电后就出了问题。
后来再想想,估计是跟供电有关。
在使用USBISP烧写器供电的时候,LCD的背光灯明显比用USB供电的时候来得亮,而且对比度也高很多,看来是因为换到USB供电后,供电不怎么充足,以至于LCD在上电初始化的时候花上了更多的时间去初始化(因为供电低了,功率小了,跑起来有点力不从心,用的时间就久了嘛……我是觉得
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 12864 液晶显示 图片 原理 完整版
![提示](https://static.bdocx.com/images/bang_tan.gif)