ImageVerifierCode 换一换
格式:DOCX , 页数:43 ,大小:1.12MB ,
资源ID:22040312      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/22040312.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(12864液晶显示图片原理完整版Word格式文档下载.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

12864液晶显示图片原理完整版Word格式文档下载.docx

1、 为了使液晶点位置信息与存储地址的对应关系更直观关,将64*64液晶屏从上至下8等分为8个显示块,每块包括8行*64列个点阵。每列中的8行点阵信息构成一个8bits二进制数,存储在一个存储单元中。(注意:二进制的高低有效位顺序与行号对应关系因不同商家而不同)存放一个显示块的RAM区称为存储页。即64*64液晶屏的点阵信息存储在8个存储页中,每页64个字节,每个字节存储一列(8行)点阵信息。因此存储单元地址包括页地址(Xpage,07)和列地址(Yaddress,063)。例如点亮128*64的屏中(20,30)位置上的液晶点,因列地址30小于64,该点在左半屏第29列,所以CS1有效;行地址2

2、0除以8取整得2,取余得4,该点在RAM中页地址为2,在字节中的序号为4;所以将二进制数据00010000(也可能是00001000,高低顺序取决于制造商)写入Xpage=2,Yaddress=29的存储单元中即点亮(20,30)上的液晶点。 芯片的结构一定要清楚!点阵LCD的显示原理 在数字电路中,所有的数据都是以0和1保存的,对LCD控制器进行不同的数据操作,可以得到不同的结果。对于显示英文操作,由于英文字母种类很少,只需要8位(一字节)即可。而对于中文,常用却有6000以上,于是我们的DOS前辈想了一个办法,就是将ASCII表的高128个很少用到的数值以两个为一组来表示汉字,即汉字的内码

3、。而剩下的低128位则留给英文字符使用,即英文的内码。 那么,得到了汉字的内码后,还仅是一组数字,那又如何在屏幕上去显示呢?这就涉及到文字的字模,字模虽然也是一组数字,但它的意义却与数字的意义有了根本的变化,它是用数字的各位信息来记载英文或汉字的形状,如英文的A在字模的记载方式如图1所示:图1 “A”字模图而中文的“你”在字模中的记载却如图2所示: 图2 “你”字模图 图3图4 字符二级单元(图3中阴影部分) 一个汉字的二级单元是一个16*16的区域,因些128*64液晶可以显示4行8列共32个汉字(如图3)。而它的一个二级单元如图4(在无字库时,对汉字的取模有横向跟纵向两种,要注意),对于并

4、行含有子库芯片的显示,只要设定好这个二级单元的地址(如0X80+i,这样设定i的范围为031,这里注意第一行会直接跳到第三行;或者根据自己需要如第二行0X90+i,i范围为07;第三行0X88+i,i范围为07;),然后直接把汉字写入就OK了(串行无字符库的后面再做分析) 图5:垂直坐标:上半屏001F,总共为32水平坐标:上半屏水平坐标分别为0X80+(0007) 下半屏001F,总共为32下半屏水平坐标分别为0X88+(0007) 图片显示芯片结构分块与汉字显示不一样 图象显示过程是这样的:首先设置垂直地址,再设水平地址(连续写入两个字节的资料来完成垂直与水平的坐标地址,然后在每个地址里写

5、入16位数据)。垂直地址范围 AC5.AC0 水平地址范围 AC3AC0 绘图RAM 的地址计数器(AC)只会对水平地址(X 轴)自动加一,当水平地址=0FH 时会重新设为00H 但并不会对垂直地址做进位自动加一,故当连续写入多笔资料时,程序需自行判断垂直地址是否需重新设定。GDRAM的坐标地址与资料排列顺序如图5:分上下屏写入。for(i=0;i32;i+) / 上半屏32个垂直地址write_com(0x80 + i); / 垂直地址 write_com(0x80);/ 水平地址 for(j=0;j16;j+)write_data(*adder);adder+; 带中文字库的128X64显

6、示模块时应注意以下几点: 欲在某一个位置显示中文字符时,应先设定显示字符位置,即先设定显示地址,再写入中文字符编码。 显示ASCII字符过程与显示中文字符过程相同。不过在显示连续字符时,只须设定一次显示地址,由模块自动对地址加1指向下一个字符位置,否则,显示的字符中将会有一个空ASCII字符位置。 当字符编码为2字节时,应先写入高位字节,再写入低位字节。 模块在接收指令前,向处理器必须先确认模块内部处于非忙状态,即读取BF标志时BF需为“0”,方可接受新的指令。如果在送出一个指令前不检查BF标志,则在前一个指令和这个指令中间必须延迟一段较长的时间,即等待前一个指令确定执行完成。指令执行的时间请

7、参考指令表中的指令执行时间说明。“RE”为基本指令集与扩充指令集的选择控制位。当变更“RE”后,以后的指令集将维持在最后的状态,除非再次变更“RE”位,否则使用相同指令集时,无需每次均重设“RE”位。程序并行(串行后面再分析)#include reg52.hintrins.hstring.h#define uchar unsigned char#define uint unsigned intuchar code LCD_data1;uchar code LCD_data2;uchar code LCD_picture1;uchar code LCD_picture2;sbit RS = P2

8、4;sbit RW = P25;sbit EN = P26;sbit PSB = P21;sbit RES = P23;sbit Dataport = P0;sbit Busyport = P07;/void delay_ms(unsigned int n) /延时10n毫秒程序 unsigned int i,j; for(i=0;n;i+) 2000;j+); delay(unsigned int m) /1US延时程序unsigned int i,j;m;10;/判LCM忙子函数 void check_LCD_busy (void) Dataport = 0xff;RS = 0;RW =

9、1;EN = 1;while (Busyport);EN = 0;/写命令子函数 void write_com(uchar Command) check_LCD_busy();RW=0;RS=0;delay(1);P0=Command;EN=1;EN=0;/写数据子函数 void write_data(uchar Data) RS=1;P0=Data;/LCM清屏函数 void lcdClear (void) write_com(0x01);/LCM复位函数 void reset ()RES=0; /复位 /延时RES=1; /复位置高delay(10);/显示汉字 void dispStri

10、ng (uchar X, Y,uchar *msg) /X为哪一行,Y为哪一列。msg为汉字 if(X=0) X = 0x80; /第一行,汉字显示坐标 else if(X=1) X = 0x90; /第二行else if(X=2) X = 0x88; /第三行else X = 0x98; /第四行Y = X + Y;/Y为1往右移一位write_com(Y); /写入坐标 while (*msg) write_data(*msg+); /显示汉字 /显示图象void disppicture(uchar code *adder)uint i,j;/*显示上半屏内容设置 for(i=0; / 上

11、半屏32个列地址 write_com(0x80 + i); /SET 垂直地址 VERTICAL ADD write_com(0x80);/SET 水平地址 HORIZONTAL ADD for(j=0;j+) write_data(*adder); adder+; /*显示下半屏内容设置 /SET 垂直地址 VERTICAL ADD write_com(0x88); /SET 水平地址 HORIZONTAL ADD for(j=0; write_data(*adder); adder+; /LCD字库初始化函数 void lcdinit_str(void)delay(40); /大于40MS

12、的延时程序 PSB=1; /设置为8BIT并口工作模式 delay(1);reset();/复位write_com(0x30); /Extended Function Set :8BIT设置,RE=0: basic instruction set, G=0 :graphic display OFFdelay(100);/大于100uS的延时程序 /Function Setdelay(37);/大于37uS的延时程序write_com(0x08);/Display on Controldelay(100); /大于100uS的延时程序write_com(0x10); /Cursor Displa

13、y Control光标设置write_com(0x0C);/Display Control,D=1,显示开 /大于100uS的延时程序/Display Clear /大于10mS的延时程序write_com(0x06);/Enry Mode Set,光标从右向左加1位移动/LCD图片(扩展)初始化函数 void lcdinit_pic(void) /大于40MS的延时程序PSB=1; /设置为8BIT并口工作模式/延时write_com(0x36); /Extended Function Set RE=1: extended instruction write_com(0x36); /Exte

14、nded Function Set:RE=1: extended instruction setwrite_com(0x3E); /EXFUNCTION(DL=8BITS,RE=1,G=1) /CLEAR SCREENvoid main()while(1)lcdinit_str();delay_ms(10); /此延时如果没有的话第一行会一直在第一列dispString(0, 1,祖国江山好);dispString(1, 1,爱情少不了delay_ms(10);dispString(2, 1,为了下一代dispString(3, 1,赶紧谈恋爱delay_ms(200);delay_ms(20

15、0);lcdClear();dispString(0, 1,大名吴建峰dispString(1, 1,性别为非女dispString(2, 1,芳龄二十二dispString(3, 1,海拔一百六lcdinit_pic();disppicture(LCD_picture1);delay_ms(300);delay_ms(300);图象代码库见最后!成果图形取模方法(转):128*64的像素能显示的内容就有限,也无法要求它能多清楚,如果将一个彩色的图片转换为单色位图,效果就更差了,个人不建议用它来显示彩色的图片,如果真要用128*64的液晶显示,建议如下:1.尽量选择颜色比较单一的图片,当然一种

16、颜色的效果最好不过了;2.图片不能选择的太大,要不缩小了就看不清楚了;3.图片的调整可以这样(仅供参考): 1调整图片的宽高比大致为2:1; 2将图片缩小到128*64像素; 3保存为单色位图; 图片的大小缩放不太好操作,我通常是这样做的:你用画图程序打开你要显示的图片后,首先要操作的查看属性(点击菜单栏的图像-属性,单位选择为像素后,宽高值就出来了),比如:宽:603,高:444,这显然宽高比不是2:1,你就要调整了,444*2=888,现在为603,所以888/603=1.47,所以宽要放大为147%(点击菜单栏的图像-拉伸/扭曲,在拉伸里面的水平处改为147),现在就调整为2:1了;接下来就要将图片缩小到128*64像素,先计算缩放的比例,128/888=0.144,所以相同的操作(点击菜单栏的图像-拉伸/扭曲,在拉伸里面的水平处改为14,垂直里面也要改为14);最后就是保存为单色位图(文件-另存为-文件类型选择为:单色位图(.bmp)?试过颜色比较单一的,效果还可以,复杂的彩色图片效果就很不理想了. 说明:在调整图片的宽高比大致为2:1的过程中图片会被拉伸变形,不过缩小到128*64像素后也不是太明显.图片取模图片代码

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1