12864液晶显示图片原理(完整版)

合集下载

12864点阵型液晶显示屏的基本原理与使用方法(很详细)

12864点阵型液晶显示屏的基本原理与使用方法(很详细)

12864点阵型液晶显示屏的基本原理与使用方法(很详细)点阵LCD的显示原理在数字电路中,所有的数据都是以0和1保存的,对LCD控制器进行不同的数据操作,可以得到不同的结果。

对于显示英文操作,由于英文字母种类很少,只需要8位(一字节)即可。

而对于中文,常用却有6000以上,于是我们的DOS前辈想了一个办法,就是将ASCII表的高128个很少用到的数值以两个为一组来表示汉字,即汉字的内码。

而剩下的低128位则留给英文字符使用,即英文的内码。

那么,得到了汉字的内码后,还仅是一组数字,那又如何在屏幕上去显示呢?这就涉及到文字的字模,字模虽然也是一组数字,但它的意义却与数字的意义有了根本的变化,它是用数字的各位信息来记载英文或汉字的形状,如英文的'A'在字模的记载方式如图1所示:图1“A”字模图而中文的“你”在字模中的记载却如图2所示:图2“你”字模图12864点阵型LCD简介12864是一种图形点阵液晶显示器,它主要由行驱动器/列驱动器及128×64全点阵液晶显示器组成。

可完成图形显示,也可以显示8×4个(16×16点阵)汉字。

管脚号管脚名称LEVER管脚功能描述1VSS0电源地2VDD+5.0V电源电压3V0-液晶显示器驱动电压4D/I(RS)H/L D/I=“H”,表示DB7∽DB0为显示数据D/I=“L”,表示DB7∽DB0为显示指令数据5R/W H/L R/W=“H”,E=“H”数据被读到DB7∽DB0R/W=“L”,E=“H→L”数据被写到IR或DR 6E H/L R/W=“L”,E信号下降沿锁存DB7∽DB0R/W=“H”,E=“H”DDRAM数据读到DB7∽DB0 7DB0H/L数据线8DB1H/L数据线9DB2H/L数据线10DB3H/L数据线11DB4H/L数据线12DB5H/L数据线13DB6H/L数据线14DB7H/L数据线15CS1H/L H:选择芯片(右半屏)信号16CS2H/L H:选择芯片(左半屏)信号17RET H/L复位信号,低电平复位18VOUT-10V LCD驱动负电压19LED+-LED背光板电源20LED--LED背光板电源表1:12864LCD的引脚说明在使用12864LCD前先必须了解以下功能器件才能进行编程。

12864液晶图像显示图文教程——最全版

12864液晶图像显示图文教程——最全版

由图可以看到水平坐标一个单位是两字节(即 16 位 D15~D0),X 地址会自动加 1,是直接加一个单位 (即两字节 16 位),比如 0001(也即 0X80+000X80+01),从第一行第一列跳到第一行第二列。 代码: void display_image(uchar *p) { uchar i,j; write_cmd(0x34);//扩充指令集动作 write_cmd(0x34);//关绘图显示功能 /*上半屏显示设置*/ for(i=0;i<32;i++)//上半屏 { write_cmd(0x80+i);//垂直地址 write_cmd(0x80); //水平地址 for(j=0;j<16;j++) { write_data(*p);//连续写入 16 个字节 p++; } } /*下半屏半屏显示设置*/ for(i=0;i<32;i++)//下半屏 { write_cmd(0x80+i);//垂直地址 write_cmd(0x88);//水平地址 for(j=0;j<16;j++)//连续写入 16 个字节 { write_data(*p); p++; } } write_cmd(0x36);//开绘图显示 write_cmd(0x30);//回到基本指令集 } 源程序: #include <reg52.h> #include "12864.h" X 坐标(水平)方向以 2 字节 Byte 为单位,Y 坐标(垂直) 方向以 1 位 Bit 为单位,先连续写入垂直与水平坐标,再写入 两字节数据到 GDRAM。 这里是这样进行的:i=0 时,j=0,1 时,写入两字节到垂直 (0X80+00)水平(0X80+00)这格(D15~D0)里;然后 X 坐标地址自增 1, 地址变为垂直 (0X80+00) , 水平 (0X80+01) 这格,在 j=2,3 时写入两字节,………一直到垂直(0X80+00) 水平(0X80+07)这格,在 j=14,15 时写入两字节,此时循环 for(j=0;j<16;j++)结束跳出,刚好第一行 128 位写完数据;然后 i++,开始写第二行……

12864LCD液晶显示原理及使用方法

12864LCD液晶显示原理及使用方法

12864LCD液晶显示原理及使用方法
一、液晶显示原理
1.液晶材料的性质
液晶是介于固体和液体之间的一种物质状态。

它具有流动性和定向性,通过控制电场可以改变其流动性。

液晶分子呈现出各种不同的排列方式,
包括向列排列、向行排列、扭曲排列等。

2.电场的作用
当液晶材料处于电场作用下时,液晶分子会发生定向排列。

电场的存
在导致液晶分子的定向,形成一定的直流电场效应。

通过改变电场的强度
和方向,可以改变液晶分子的排列状态。

3.光的传输
液晶分子的定向排列对入射光的传播具有影响。

根据液晶分子的不同
排列状态,可以选择性地传递或阻挡入射光。

通过控制电场的强度和方向,可以调节液晶分子的排列状态,从而改变光的传输效果。

4.显示原理
二、液晶显示的使用方法
1.连接电源
2.初始化
在液晶屏开始显示之前,需要进行初始化设置。

通过向液晶屏发送命令,配置液晶屏的各种参数,如显示模式、显示偏移量、对比度等。

3.显示图像
初始化完成后,可以通过向液晶屏发送数据以显示图像。

可以通过控制每个像素点的液晶分子排列状态,从而显示出对应的图像。

可以通过编写程序或者使用液晶屏驱动库来控制显示内容。

4.其他控制
除了显示图像外,液晶显示屏还具有其他一些控制功能。

例如,可以通过发送命令来设置光标位置、清除屏幕内容、切换显示区域等。

总结:。

12864液晶的说明

12864液晶的说明

液晶12864(KS0108主控)12864市面上比较流行的有两种,一种是以KS0108为主控芯片的,不带字库的,说白了就是只能靠打点才能显示出字符或图形的,当然要借助取模软件;另一种是以ST7920为主控芯片的,带ASCII码和中文字库。

至于两种的区别下一篇再讨论,这篇先讲述KS0108为主控芯片的12864的原理。

这是网上找的一个管脚图,当然不同品牌的可能略有差异,但是主要的还是一样的重点要讲一下CS1和CS2,KS0108控制的12864内部有两个控制器,分别控制左半屏和右半屏,如下图所示左半屏和右半屏操作时写的地址其实是一样的,那么只能通过片选CS1和CS2来选择哪半个屏了,如果两个都选通,则相当于两块64x64的液晶了,而且显示的内容是一样的,取模方式是纵向8点下高位。

好了,来说下原理,列的范围是0~63,我已经标出了,行是不能按位来写的,而是写“页”,一个页相当于8个点,也就是8位,即一个字符,高位在下面,那么页的范围是0~7,共8页,8页x8个点正好64个点。

这是我用取模软件截的一个“们”字,可以看出它是16x16大小的,实际上占用了两个“页”,16个列,而我们操作时先固定一个页,比如这个就先写上面那页,假设为n好了,从列0写到16,然后页n+1,再从列0写到16,这样一个“们”字就出来了,下面是其代码0x40,0x20,0xF8,0x07,0x00,0xF8,0x02,0x04, 0x08,0x04,0x04,0x04,0x04,0xF E,0x04,0x00,0x00,0x00,0xFF,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x40,0x80,0x7F ,0x00,0x00,可见16x16的字符占了32个字节(上面n页16个字节加n+1页16个),那么如果一幅满幅的图片,就是128x64,占用128x8=1K个字节,可见还是非常占空间的。

12864点阵型液晶显示屏的基本原理与使用方法(很详细)

12864点阵型液晶显示屏的基本原理与使用方法(很详细)

0
0
1
1
1
0
0
1
1
X
X
X
0
0
1
0
1
1
1
0
0
0
1
X
X
X
1
0 BUSY 0 ON/OFF RST 0
0
1
写数据
1
1
读数据
DB2 1 X X X 0
DB1 1 X X X 0
DB0 1/0
X X X 0
表 2:12864LCD 指令表
各功能指令分别介绍如下。
显示开/关指令
R/WRS 00
DB7 DB6 DB5 DB4 DB3DB2DB1 DB0 00111111/0
设置了页地址和列地址,就唯一确定了显示 RAM 中的一个单元,这样 MPU 就可以
用读、写指令读出该单元中的内容或向该单元写进一个字节数据。
5、读状态指令
R/WRS 10
DB7 DB6 DB5 DB4 DB3DB2DB1 DB0 BUSY0ON/OFFREST0000
该指令用来查询液晶显示模块内部控制器的状态,各参量含义如下:
图 2 “你”字模图
12864 点阵型 LCD 简介
12864 是一种图形点阵液晶显示器,它主要由行驱动器/列驱动器及 128×64 全点阵液晶显示器组成。 可完成图形显示,也可以显示 8×4 个(16×16 点阵)汉字。
管脚号 1 2 3 4
管脚名称 VSS VDD V0
D/I(RS)
LEVER 0
12864LCD 的指令系统及时序
该类液晶显示模块(即 KS0108B 及其兼容控制驱动器)的指令系统比较简单,总共只有七种。其指 令表如表 2 所示:

YM-12864显示原理

YM-12864显示原理

12864点阵液晶显示模块的原理2008-02-1713:2712864点阵液晶显示模块的原理(c h e n c h e n g原创,基于T S12864A1)12864点阵液晶显示模块(L C M)就是由128*64个液晶显示点组成的一个128列*64行的阵列。

每个显示点对应一位二进制数,1表示亮,0表示灭。

存储这些点阵信息的R A M称为显示数据存储器。

要显示某个图形或汉字就是将相应的点阵信息写入到相应的存储单元中。

图形或汉字的点阵信息当然由自己设计,问题的关键就是显示点在液晶屏上的位置(行和列)与其在存储器中的地址之间的关系。

由于多数液晶显示模块的驱动电路是由一片行驱动器和两片列驱动器构成,所以12864液晶屏实际上是由左右两块独立的64*64液晶屏拼接而成,每半屏有一个512*8b i t s显示数据R A M。

左右半屏驱动电路及存储器分别由片选信号C S1和C S2选择。

(少数厂商为了简化用户设计,在模块中增加译码电路,使得128*64液晶屏就是一个整屏,只需一个片选信号。

)显示点在64*64液晶屏上的位置由行号(l i n e,0~63)与列号(c o l u m n,0~63)确定。

512*8b i t s R A M中某个存储单元的地址由页地址(X p a g e,0~7)和列地址(Y a d d r e s s,0~63)确定。

每个存储单元存储8个液晶点的显示信息。

为了使液晶点位置信息与存储地址的对应关系更直观关,将64*64液晶屏从上至下8等分为8个显示块,每块包括8行*64列个点阵。

每列中的8行点阵信息构成一个8b i t s二进制数,存储在一个存储单元中。

(需要注意:二进制的高低有效位顺序与行号对应关系因不同商家而不同)存放一个显示块的R A M区称为存储页。

即64*64液晶屏的点阵信息存储在8个存储页中,每页64个字节,每个字节存储一列(8行)点阵信息。

因此存储单元地址包括页地址(X p a g e,0~7)和列地址(Y a d d r e s s,0~63)。

12864液晶程序和原理图

12864液晶程序和原理图
{0xFE,0x02,0x32,0x4A,0x86,0x0C,0x24,0x24,0x25,0x26,0x24,0x24,0x24,0x0C,0x04,0x00,
0xFF,0x00,0x02,0x04,0x83,0x41,0x31,0x0F,0x01,0x01,0x7F,0x81,0x81,0x81,0xF1,0x00},/*"院",9*/
{
setpos(line,colum);//显示第i列上面8个点
write_dat(*(add+i));
setpos(line+1,colum++);//显示第i列下面8个点,然后列加1
write_dat(*(add+16+i));
delay(1000);//延时,达到汉字从左到右扫描显示的效果
}
}
{0x00,0x00,0x02,0x02,0x02,0x02,0x02,0xFE,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x00,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3F,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x00},/*"工",12*/
void write_com(uchar);//写指令
void write_dat(uchar);//写数据
void setpos(uchar,uchar); //设置显示的起始位置
void main()
{
init();
for(i=0;i<6;i++)
{
if(i<3)
{
select(0);

12864液晶原理

12864液晶原理

12864液晶原理+程序+ 照片+电路图2007/0726∙已有0条评论∙文章分类:单片机技术LCD_X EQU 30HLCD_Y EQU 31HCOUNT EQU 32HCOUNT1 EQU 33HCOUNT2 EQU 34HCOUNT3 EQU 35H;-----------------------------------------------LCD_DATA EQU 36HLCD_DATA1 EQU 37HLCD_DATA2 EQU 38HSTORE EQU 39H;-----------------------------------------------ORG 0000HLJMP MAINORG 0100H;-----------------------------------------------MAIN:MOV SP,#5FHCLR RST ;复位LCALL DELAY4SETB RSTNOPSETB PSB ;通讯方式为8位数据并口;********************初始化********************** LGS0: MOV A,#34H ;34H--扩充指令操作LCALL SEND_IMOV A,#30H ;30H--基本指令操作LCALL SEND_IMOV A,#01H ;清除显示LCALL SEND_IMOV A,#06H ;指定在资料写入或读取时,光标的移动方向LCALL SEND_I ;DDRAM 的地址计数器(AC)加1MOV A,#0CH ;开显示,关光标,不闪烁LCALL SEND_I;=============================================== TU_PLAY1:MOV DPTR,#TU_TAB1 ;显示图形LCALL PHO_DISPLCALL DELAY3;================================================= ;;显示汉字和字符;加入80ms的延时,使你能够看清楚显示的过程;根据汉字显示坐标分段写入(顺序写入);================================================= HAN_WR2:LCALL CLEAR_PHAN_WR2A:MOV DPTR,#TAB1A ;显示汉字和字符MOV COUNT,#10H ;地址计数器设为16。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

51单片机综合学习12864液晶原理分析1辛勤学习了好几天,终于对12864液晶有了些初步了解~没有视频教程学起来真有些累,基本上内部程序写入顺序都是根据程序自我变动,然后逆向反推出原理……芯片:YM12864R P-1 控制芯片:ST7920A 带中文字库初步小结:1、控制芯片不同,寄存器定义会不同2、显示方式有并行和串行,程序不同3、含字库芯片显示字符时不必对字符取模了4、对芯片的结构地址一定要理解清楚5、显示汉字时液晶芯片写入数据的顺序(即显示的顺序)要清楚6、显示图片时液晶芯片写入数据的顺序(即显示的顺序)要清楚7、显示汉字时的二级单元(一级为八位数据写入单元)要清楚8、显示图片时的二级单元(一级为八位数据写入单元)要清楚 12864点阵液晶显示模块(LCM)就是由128*64个液晶显示点组成的一个128列*64行的阵列。

每个显示点对应一位二进制数,1表示亮,0表示灭。

存储这些点阵信息的RAM 称为显示数据存储器。

要显示某个图形或汉字就是将相应的点阵信息写入到相应的存储单元中。

图形或汉字的点阵信息由自己设计,问题的关键就是显示点在液晶屏上的位置(行和列)与其在存储器中的地址之间的关系。

由于多数液晶显示模块的驱动电路是由一片行驱动器和两片列驱动器构成,所以12864液晶屏实际上是由左右两块独立的64*64液晶屏拼接而成,每半屏有一个512*8 bits显示数据RAM。

左右半屏驱动电路及存储器分别由片选信号CS1和CS2选择。

显示点在64*64液晶屏上的位置由行号(line,0~63)与列号(column,0~63)确定。

512*8 bits RAM中某个存储单元的地址由页地址(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++) // 上半屏32个垂直地址{write_com(0x80 + i); // 垂直地址write_com(0x80); // 水平地址for(j=0;j<16;j++){ write_data(*adder);adder++;} }带中文字库的128X64显示模块时应注意以下几点:①欲在某一个位置显示中文字符时,应先设定显示字符位置,即先设定显示地址,再写入中文字符编码。

②显示ASCII字符过程与显示中文字符过程相同。

不过在显示连续字符时,只须设定一次显示地址,由模块自动对地址加1指向下一个字符位置,否则,显示的字符中将会有一个空ASCII字符位置。

③当字符编码为2字节时,应先写入高位字节,再写入低位字节。

④模块在接收指令前,向处理器必须先确认模块内部处于非忙状态,即读取BF标志时BF需为“0”,方可接受新的指令。

如果在送出一个指令前不检查BF标志,则在前一个指令和这个指令中间必须延迟一段较长的时间,即等待前一个指令确定执行完成。

指令执行的时间请参考指令表中的指令执行时间说明。

⑤“RE”为基本指令集与扩充指令集的选择控制位。

当变更“RE”后,以后的指令集将维持在最后的状态,除非再次变更“RE”位,否则使用相同指令集时,无需每次均重设“RE”位。

程序———————并行(串行后面再分析)——————————————————————————#include <stdio.h>#include <reg52.h>#include <intrins.h>#include <string.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^4;sbit RW = P2^5;sbit EN = P2^6;sbit PSB = P2^1;sbit RES = P2^3;sbit Dataport = P0; sbit Busyport = P0^7;///////////////////////////////////// /////////////////////////void delay_ms(unsigned int n) //延时10×n毫秒程序{ unsigned int i,j; for(i=0;i<n;i++) for(j=0;j<2000;j++);} void delay(unsigned int m) //1US延时程序{ unsigned int i,j; for(i=0;i<m;i++) for(j=0;j<10;j++);}///////////////////////////////////// ////////////////////////////判LCM忙子函数void check_LCD_busy (void){ Dataport = 0xff; RS = 0; RW = 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; delay(1); EN=0;}///////////////////////////////////////写数据子函数void write_data(uchar Data){ check_LCD_busy(); RW=0; RS=1; delay(1); P0=Data; EN=1; delay(1); EN=0;}///////////////////////////////////// //////////////////////////////LCM清屏函数void lcdClear (void){ write_com(0x01);}///////////////////////////////////////LCM复位函数void reset (){ RES=0; //复位 delay(1); //延时 RES=1; //复位置高 delay(10);}///////////////////////////////////// ////////////////////////////显示汉字void dispString (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;i<32;i++) // 上半屏32个列地址{ write_com(0x80 + i); //SET 垂直地址 VERTICAL ADD write_com(0x80); // SET 水平地址 HORIZONTAL ADD for(j=0;j<16;j++) { write_data(*adder); adder++; }}//*******显示下半屏内容设置for(i=0;i<32;i++) //{ write_com(0x80 + i); //SET 垂直地址 VERTICAL ADD write_com(0x88); // SET 水平地址 HORIZONTAL ADD for(j=0;j<16;j++) { write_data(*adder); adder++; }}}///////////////////////////////////// ////////////////////////////LCD字库初始化函数void lcdinit_str(void){ delay(40); //大于40MS的延时程序 PSB=1; //设置为8BIT并口工作模式 delay(1); //延时 reset(); //复位 write_com(0x30); //Exte nded Function Set :8BIT设置,RE=0: basic instruction set, G=0 :graphic display OFF delay(100); //大于100uS的延时程序 write_com(0x30); //Func tion Set delay(37); ////大于37uS的延时程序 write_com(0x08); //Disp lay on Control delay(100); //大于100uS的延时程序 write_com(0x10); //Curs or Display Control光标设置 delay(100); //大于100uS的延时程序 write_com(0x0C); //Displ ay Control,D=1,显示开 delay(100); //大于100uS的延时程序 write_com(0x01); //Disp lay Clear delay(10); //大于10mS的延时程序 write_com(0x06); //EnryMode Set,光标从右向左加1位移动 delay(100); //大于100uS的延时程序}///////////////////////////////////// ///////////////////////////////LCD图片(扩展)初始化函数void lcdinit_pic(void){ delay(40); //大于40MS的延时程序 PSB=1; //设置为8BIT并口工作模式 delay(1); //延时 reset(); write_com(0x36); //Ext ended Function Set RE=1: extended instruction delay(100); / /大于100uS的延时程序 write_com(0x36); //Extended Function Set:RE=1: extended instruction set delay(37); ////大于37uS的延时程序 write_com(0x3E); / /EXFUNCTION(DL=8BITS,RE=1,G=1) delay(100); //大于100uS的延时程序 write_com(0x01); //CLE AR SCREEN delay(100); //大于100uS的延时程序}///////////////////////////////////// ////////////////////////////void main(){ while(1) { lcdinit_str(); delay_ms(10); //此延时如果没有的话第一行会一直在第一列 dispString(0, 1,"祖国江山好"); delay_ms(10); dispString(1, 1,"爱情少不了"); delay_ms(10); dispString(2, 1,"为了下一代"); delay_ms(10); dispString(3, 1,"赶紧谈恋爱"); delay_ms(200); delay_ms(200); lcdClear(); delay_ms(10); dispString(0, 1,"大名吴建峰"); delay_ms(10); dispString(1, 1,"性别为非女"); delay_ms(10); dispString(2, 1,"芳龄二十二"); delay_ms(10); dispString(3, 1,"海拔一百六"); delay_ms(200); delay_ms(200); lcdinit_pic(); lcdClear(); delay_ms(10); disppicture(LCD_picture1); delay_ms(300); delay_ms(300); }}图象代码库见最后!~成果——————————————————————————————————图形取模方法(转): 128*64的像素能显示的内容就有限,也无法要求它能多清楚,如果将一个彩色的图片转换为单色位图,效果就更差了,个人不建议用它来显示彩色的图片,如果真要用128*64的液晶显示,建议如下:1.尽量选择颜色比较单一的图片,当然一种颜色的效果最好不过了;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像素后也不是太明显... 图片取模图片代码——————————————————————————————————uchar code LCD_picture1[]={0x00,0x00,0x00,0x0C,0x00,0x00,0x00,0x 00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ,0x00,0x00,0x00,0x00,0x7F,0xC0,0x00,0x00,0x 00,0x00,0x00,0x00,0x00,0x00,0x00,0x18 ,0x00,0x00,0x00,0x07,0xFF,0xC0,0x00,0x00,0x 00,0x00,0x00,0x00,0x00,0x00,0x00,0x18 ,0x00,0x03,0x00,0x07,0xEC,0xC0,0x00,0x00,0x 00,0x00,0x00,0x00,0x0E,0x00,0x00,0x37 ,0x80,0x03,0x00,0x00,0xEC,0xC0,0x00,0x00,0x 00,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,0x 00,0x00,0x00,0x00,0x06,0x00,0x18,0x7F ,0x00,0x1F,0xF4,0x01,0xE9,0xE0,0x00,0x00,0x 00,0x00,0x00,0x00,0xC6,0xE0,0x18,0xFF ,0x80,0x1F,0xFC,0x00,0xFB,0x30,0x00,0x00,0x 00,0x00,0x00,0x01,0xC6,0x70,0x1B,0x1E ,0xC0,0x03,0x38,0x01,0xB3,0x00,0x00,0x00,0x 00,0x00,0x00,0x03,0x86,0x38,0xDB,0xFF ,0xE0,0x03,0x70,0x07,0x9E,0x7F,0xFF,0xFF,0x FF,0xFF,0xFF,0xFF,0x26,0x18,0xDB,0x8C ,0x70,0x7F,0xFF,0x87,0x27,0xFE,0x00,0x00,0x 00,0x00,0x00,0x00,0x3E,0x01,0xFF,0xFF ,0xB8,0x7F,0xFF,0x80,0x3F,0xC0,0x00,0x00,0x 00,0x00,0x00,0x00,0x1E,0x00,0x00,0x0C,0x18,0x07,0x80,0x00,0x39,0x00,0x00,0x00,0x 00,0x00,0x00,0x00,0x06,0x00,0x00,0xFF ,0xE0,0x0F,0x00,0x00,0xFB,0x1F,0xF8,0x00,0x 00,0x00,0x00,0x00,0x00,0x7F,0xF0,0xFF ,0xE0,0x1F,0x30,0x01,0xCF,0xFF,0xFF,0x09,0x 00,0x00,0x00,0x00,0x03,0xFF,0xFF,0x0C ,0x00,0x3B,0x36,0x03,0x07,0xFF,0xFF,0xE0,0x 00,0x00,0x00,0x00,0x0F,0xFF,0xFF,0xCC ,0x00,0x73,0x76,0x03,0x3F,0xFF,0xFF,0xF7,0x 00,0x00,0x00,0x00,0x1F,0xFF,0xFF,0xFC ,0x00,0x63,0xE6,0x00,0x3F,0xFF,0xFF,0xDC,0x 80,0x00,0x00,0x00,0x7F,0xFF,0xFF,0xFC ,0x00,0x03,0xFE,0x00,0x7F,0xFF,0xFF,0xAF,0x 60,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFC ,0x00,0x03,0xFE,0x00,0xFF,0xFF,0xFF,0xF5,0x C0,0x00,0x00,0x01,0xFF,0xFF,0xFF,0xFC ,0x00,0x00,0x00,0x01,0xFF,0xFF,0xFF,0x23,0x 20,0x00,0x00,0x03,0xFF,0xFF,0xFF,0xFE ,0x00,0x00,0x00,0x03,0xFF,0x8F,0xE3,0xEC,0x A0,0x00,0x00,0x03,0xFF,0x1F,0xC7,0xFF ,0x00,0x00,0x00,0x03,0xFF,0x07,0xC1,0x92,0x C0,0x00,0x00,0x07,0xFE,0x0F,0x83,0xFF ,0x80,0x00,0x00,0x07,0xFF,0x03,0xC0,0xE9,0x C0,0x00,0x00,0x0F,0xFE,0x07,0x81,0xFF ,0x80,0x00,0x00,0x07,0xFE,0x03,0x80,0xED,0x E0,0x00,0x00,0x0F,0xFC,0x07,0x01,0xFF ,0xC0,0x00,0x00,0x0F,0xFE,0x1B,0xB0,0xDD,0x E0,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,0x F0,0x00,0x00,0x1F,0xFC,0x37,0x61,0xFF ,0xE0,0x00,0x00,0x1F,0xFE,0x1B,0xB0,0xFF,0x F0,0x00,0x00,0x3F,0xFC,0x37,0x61,0xFF ,0xE0,0x00,0x00,0x1F,0xFF,0x03,0xC0,0xFF,0x F0,0x00,0x00,0x3F,0xFE,0x07,0x81,0xFF ,0xE0,0x00,0x00,0x1F,0xFF,0x07,0xC1,0xFF,0x F0,0x00,0x00,0x3F,0xFE,0x0F,0x83,0xFF ,0xE0,0x00,0x00,0x1F,0xFF,0x8C,0x63,0xFF,0x F0,0x00,0x00,0x3F,0xFF,0x1F,0xC7,0xFF ,0xE0,0x00,0x00,0x1F,0xDF,0xFC,0x7F,0xF7,0x F0,0x00,0x00,0x3F,0xFF,0xF0,0x7F,0xFF ,0xE0,0x00,0x00,0x1F,0x07,0xFF,0xFF,0xD1,0x F0,0x00,0x00,0x3F,0xFF,0xE0,0x3F,0xFF,0xE0,0x00,0x00,0x1E,0x03,0xFF,0xFF,0x80,0x F0,0x00,0x00,0x3F,0xC0,0x00,0x00,0x07 ,0xE0,0x00,0x00,0x1E,0x03,0xFE,0xFF,0xC0,0x F0,0x00,0x00,0x3F,0xE0,0x00,0x00,0x0F ,0xE0,0x00,0x00,0x0C,0x01,0xF8,0x3F,0x80,0x E0,0x00,0x00,0x1F,0xE0,0x00,0x00,0x1F ,0xC0,0x00,0x00,0x0E,0x03,0xF0,0x1F,0xC0,0x E0,0x00,0x00,0x1F,0xF0,0x0F,0xC0,0x1F ,0xC0,0x00,0x00,0x1E,0x03,0xF0,0x1F,0x80,0x E0,0x00,0x00,0x1F,0xFC,0x0B,0x40,0x7F ,0xC0,0x00,0x00,0x7F,0x1F,0xF0,0x1F,0xC3,0x E0,0x00,0x00,0xFF,0xFF,0x0B,0x41,0xFF ,0xC0,0x00,0x00,0xFF,0xFF,0xF0,0x1F,0xF7,0x F0,0x00,0x01,0xFF,0xFF,0xC0,0x0F,0xFF ,0xF0,0x00,0x01,0xFF,0xFF,0xF8,0x3F,0xFF,0x FC,0x00,0x03,0xFF,0xFF,0xF8,0x7F,0xFF ,0xF8,0x00,0x03,0xFE,0x7F,0xFE,0xFF,0xFF,0x FE,0x00,0x07,0xFC,0xFF,0xFF,0xFF,0xFF ,0xFC,0x00,0x07,0xFC,0x1F,0xFF,0xFF,0xF8,0x FE,0x00,0x0F,0xF8,0x3F,0xFF,0xFF,0xF1 ,0xFC,0x00,0x0F,0xF8,0x07,0xFF,0xFF,0xE0,0x FF,0x00,0x1F,0xF0,0x0F,0xFF,0xFF,0xC0 ,0xFE,0x00,0x0F,0xF8,0x00,0xFF,0xFF,0x00,0x 7F,0x80,0x1F,0xF0,0x01,0xFF,0xFE,0x00 ,0xFF,0x00,0x1F,0xF0,0x00,0x02,0x00,0x00,0x 7F,0x80,0x3F,0xE0,0x00,0x00,0x00,0x00 ,0x7F,0x00,0x1F,0xF0,0x00,0x00,0x00,0x00,0x 3F,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,0x 1F,0xE0,0x7F,0xC0,0x00,0x00,0x00,0x00 ,0x3F,0x00,0x3F,0xE0,0x00,0x00,0x00,0x00,0x 1F,0xE0,0x7F,0xC0,0x00,0x00,0x00,0x00 ,0x3F,0x00,0x7F,0xE0,0x01,0xC0,0xE0,0x00,0x 1F,0xE0,0xFF,0xC0,0x00,0x70,0xE0,0x00 ,0x3F,0x00,0x7F,0xE0,0x03,0xF3,0xF0,0x00,0x 1F,0xE0,0xFF,0xC0,0x00,0xF9,0xF0,0x00 ,0x3F,0x00,0x7F,0xE0,0x07,0xFF,0xF8,0x00,0x 1F,0xE0,0xFF,0xC0,0x01,0xFF,0xF8,0x00 ,0x3F,0x00,0x7F,0xE0,0x07,0xFF,0xF8,0x00,0x 1F,0xE0,0xFF,0xC0,0x01,0xFF,0xF8,0x00 ,0x3F,0x00,0x7C,0xE0,0x07,0xFF,0xF8,0x00,0x 1B,0xE0,0xF9,0xC0,0x01,0xFF,0xF8,0x000x00,0x38,0xF0,0x03,0xFF,0xF0,0x00,0x 39,0xE0,0xF1,0xE0,0x00,0xFF,0xF0,0x00 ,0x73,0x00,0x30,0x70,0x01,0xFF,0xE0,0x00,0x 30,0xC0,0x60,0xE0,0x00,0x7F,0xE0,0x00 ,0x61,0x00,0x00,0x78,0x00,0xFF,0xC0,0x00,0x 30,0x00,0x00,0xF0,0x00,0x3F,0xC0,0x00 ,0x60,0x00,0x00,0x38,0x00,0x7F,0x80,0x00,0x 60,0x00,0x00,0x70,0x00,0x1F,0x80,0x00 ,0xC0,0x00,0x00,0x1C,0x00,0x3F,0x00,0x00,0x C0,0x00,0x00,0x38,0x00,0x0F,0x00,0x01 ,0x80,0x00,0x00,0x0E,0x00,0x1E,0x00,0x00,0x 80,0x00,0x00,0x1C,0x00,0x06,0x00,0x01 ,0x00,0x00,0x00,0x07,0x00,0x0C,0x00,0x01,0x 80,0x00,0x00,0x0E,0x00,0x06,0x00,0x03二、接线方式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.。

相关文档
最新文档