12864液晶原理分析1
液晶1602和12864显示原理及程序

} */
void lcd_init()
{
dula=0;
lcd_psb=1;
write_cmd(0x30);
delay(5);
write_cmd(0x0c);
delay(5);
write_cmd(0x01);
delay(5);
}
void main()
{
uchar i;
lcden=1;
delay(3);
lcden=0;
}
void write_data(uchar date)
{
lcdrs=1;
P0=date;
delay(3);
lcden=1;
delay(3);
lcden=0;
}
void init()
{
lcden=0;
write_com(0x38);//设置16x2显示,5x7点阵,8位数据接口
delay(3);
}
while(1)
{
write_com(0x80+10);
for(num=0;num<17;num++)
{
write_data(table1[num]);
delay(3);
}
for(num=0;num<17;num++)
{
write_com(0x1c);
delay(100);
}
}
}
dis1[3]=ran%100/10+0x30;
dis1[4]=ran%10+0x30;
ran=rand();
dis1[5]=ran/10000+0x30;
带字库12864液晶详解

带字库12864液晶详解12864液晶⼀、概述带中⽂字库的128X64是⼀种具有4位/8位并⾏、2线或3线串⾏多种接⼝⽅式,内部含有国标⼀级、⼆级简体中⽂字库的点阵图形液晶显⽰模块;其显⽰分辨率为128×64,内置8192个16*16点汉字,和128个16*8点ASCII 字符集.利⽤该模块灵活的接⼝⽅式和简单、⽅便的操作指令,可构成全中⽂⼈机交互图形界⾯。
可以显⽰8×4⾏16×16点阵的汉字.也可完成图形显⽰.低电压低功耗是其⼜⼀显著特点。
由该模块构成的液晶显⽰⽅案与同类型的图形点阵液晶显⽰模块相⽐,不论硬件电路结构或显⽰程序都要简洁得多,且该模块的价格也略低于相同点阵的图形液晶模块。
基本特性:l 低电源电压(VDD:+3.0--+5.5V)l 显⽰分辨率:128×64点l 内置汉字字库,提供8192个16×16点阵汉字(简繁体可选)l 内置 128个16×8点阵字符l 2MHZ时钟频率l 显⽰⽅式:STN、半透、正显l 驱动⽅式:1/32DUTY,1/5BIASl 视⾓⽅向:6点l 背光⽅式:侧部⾼亮⽩⾊LED,功耗仅为普通LED的1/5—1/10l 通讯⽅式:串⾏、并⼝可选l 内置DC-DC转换电路,⽆需外加负压l ⽆需⽚选信号,简化软件设计l ⼯作温度: 0℃ - +55℃ ,存储温度: -20℃ - +60℃模块接⼝说明*注释1:如在实际应⽤中仅使⽤串⼝通讯模式,可将PSB接固定低电平,也可以将模块上的J8和“GND”⽤焊锡短接。
*注释2:模块内部接有上电复位电路,因此在不需要经常复位的场合可将该端悬空。
*注释3:如背光和模块共⽤⼀个电源,可以将模块上的JA、JK⽤焊锡短接。
2.2并⾏接⼝管脚号管脚名称电平管脚功能描述1 VSS 0V 电源地2 VCC 3.0+5V 电源正3 V0 - 对⽐度(亮度)调整4RS(CS)H/LRS=“H”,表⽰DB7——DB0为显⽰数据RS=“L”,表⽰DB7——DB0为显⽰指令数据5R/W(SID) H/L R/W=“H”,E=“H”,数据被读到DB7——DB0R/W=“L”,E=“H→L”, DB7——DB0的数据被写到IR或DR6 E(SCLK) H/L 使能信号7 DB0 H/L 三态数据线8 DB1 H/L 三态数据线9 DB2 H/L 三态数据线10 DB3 H/L 三态数据线11 DB4 H/L 三态数据线12 DB5 H/L 三态数据线13 DB6 H/L 三态数据线14 DB7 H/L 三态数据线15 PSB H/L H:8位或4位并⼝⽅式,L:串⼝⽅式(见注释1)16 NC - 空脚17 /RESET H/L 复位端,低电平有效(见注释2)18 VOUT - LCD驱动电压输出端19 A VDD 背光源正端(+5V)(见注释3)20 K VSS 背光源负端(见注释3)*注释1:如在实际应⽤中仅使⽤并⼝通讯模式,可将PSB接固定⾼电平,也可以将模块上的J8和“VCC”⽤焊锡短接。
液晶12864

0
0
1
1
0
0
0
0
0
0
◆页(PAGE)设置指令(0xb8)
RW RS DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
0
0
1
0
1
1
1
0
0
0
◆列地址(Y Address)设置指令(0x40)
RW
RS
DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
0
0
1
0
1
1
1
0
0
0
◆读状态指令
LCD驱动负电压 LED背光板电源
20
LED-
LED背光板电源
12864的DDRAM地址
XY地址计数器实际上是作为DDRAM的地址指针,X地址计数器为 DDRAM的页指针,Y地址计数器为DDRAM的Y(列)地址指针。 X地址计数器没有记数功能,只能用指令设置。Y地址计数器具有循环 记数功能,各显示数据写入后,Y地址自动加1,Y地址指针从0到63。
◆写数据指令
RW RS
DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
0
1
要写的数据
注:EN的下降沿
◆写命令指令
RW RS
DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
0
0
要写的数据
注:EN的下降沿
◆读数据指令
RW 1
RS 1
DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 读显示的数据
数据线 数据线 数据线 数据线 数据线
12 13
DB5 DB6
12864讲解

四.汉字显示坐标
•
上图中是字符显示的RAM地址与32个字符显示区域一 一对应的关系。
五.使用时注意事项:
•
欲在一个位置显示中文字符时应先设定显示 字符位置,即先设定显示地址,再写入中文字符 编码。
•
模块在接受指令前,向处理器必须先确认模 块内部处于非忙状态,即读取BF标志时BF需 等于零。但是由于单片机的操作速度低于液晶控 制器的反应速度,因此简单延时即可。
二.主要技术参数
显示容量
芯片工作电压 模块最佳工作电压 与MCU接口 工作温度(常温型) 工作温度(常温型)
128×64
3.3-5.5 5.0V 8位或4位并行/3位串行 -10℃----+60℃ -20℃-----+70℃
三.管脚及其功能说明
二.
*重点管脚及其功能
• CS (RS)液晶的片选信号线,每次在进行数据 操作时都给高电平。 • SCLK(E)串行同步时钟线,每次SCLK由低电 平变为高电平的瞬间,液晶控制器将SID上的数 据读入或输出。 • SID(R/W)串行数据,每次操作由三个字节 数据组成.第一字节向控制器发送命令控制字, 说明控制器接下来的操作(若为写指令则发送 11111000,若为写数据则发送1111010.)第二字 节,第三字节分别发送高位和低位数据。
一.12864液晶的简单介绍:
其显示分辨率为128×64, 内置8192 个 16*16 点汉字,和128 个16*8 点ASCII 字符 集。 可以显示8×4 行16×16 点 阵的汉字. 也可完 成图形显示
•
•
一.12864液晶的简单介绍:
由该模块构成的液晶显示方案与同类型的图形点阵液 晶显示模块相比,不论硬件电路结构或显示程序都要简洁 得多,且该模块的价格也略低于相同点阵的图形液晶模块 。 • 低电压低功耗是其又一显著特点。 •
12864液晶程序和原理图

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液晶原理分析3他山之石2010-07-21 20:52:05 阅读7 评论0 字号:大中小小峰的12864液晶原理分析3一、ST7920控制IC的LCD12864实现反白显示从使用手册上可知,扩展指令里的0x03+行号即可实现反白对应行。
但是ST7920 控制器的128×64 点阵液晶其实原理上等同256×32 点阵,第三行对应的DDRAM 地址紧接第一行;第四行对应的DDRAM 地址紧接第二行。
所以128×64 点阵的液晶执行反白功能时实用意义不大,因为用户对第一行执行反白显示操作时,第三行必然也反白显示;第二行反白,第四行也必然反白。
其实还是有办法做到单行反白的,解决方法就是混用图形显示和字符显示。
其理论支持在于:在ST7920中,字符显示的DDRAM和图形的GDRAM是相互独立的,而最后显示到液晶上的结果,是两个RAM中数据的异或。
具体来说:假如某个点上,绘图RAM的没有绘图(数据为0),而字符RAM上有点阵(数据为1),那么异或的结果就是1,也就是说正常显示字符;当字符上RAM没有点阵的时候,异或的结果是0,自然也就不显示了。
假如该点上绘图RAM绘图了(数据为1),当字符RAM上有点阵(数据为1时),异或的结果为0,效果就是反白显示;如果字符RAM没有点阵(数据为0时),异或结果为1,效果就是显示绘图的背景。
所以,如果要在某个地方反白显示,那么就在该点绘图并且写字,如果要取消反白,就重新用全0擦掉那个地方的绘图!这样一来可以实现任何地方、任意大小的反白显示,反而比原指令中的单行反白的功能更好更强大。
二、对于整屏既有图象又有文本,则可以用两种方式实现:1、首先文本DDRAM写入要写的字符,其余全部空格(即0X00),然后再在没有字符的地方(即非点亮的晶格中,0X00)绘入图象。
DDRAM与GDRAM异或后就可以整屏实现图象与文本。
参见程序实例1。
12864液晶
6. 自制单片机之六……LCD12864的驱动LCD12864的驱动LCD12864在市面上主要分为两种,一种是采用st7920控制器的,它一般带有中文字库字模,价格略高一点。
另一种是采用KS0108控制器,它只是点阵模式,不带字库。
很可惜,我的这块就是KS0108控制器不带汉字库的,不过不打算用它专门显示文本,也就无所谓了。
LCD12864模块的20个引脚定义如下:1。
Vss 逻辑电源地2。
VDD 逻辑电源正5v3。
V0 LCD驱动电压4。
RS 数据/指令选择:高电平为数据,低电平为指令5。
R/W 读/写选择:高电平为读数据,低电平为写数据6。
E 读写使能,高电平有效,下降沿锁定数据7。
DB0 数据输入输出引脚8。
DB1 数据输入输出引脚9。
DB2 数据输入输出引脚10。
DB3 数据输入输出引脚11。
DB4 数据输入输出引脚12。
DB5 数据输入输出引脚13。
DB6 数据输入输出引脚14。
DB7 数据输入输出引脚15。
CS1 片选择号,低电平时选择前64列16。
CS2 片选择号,低电平时选择后64列17。
RET 复位信号,低电平有效。
18。
VEE 输出-15v电源给V0提供驱动电源19。
A 背光电源LED正极20。
K 背光电源LED负极具体电路图如下:制做如下:接口说明:装上12864具体的电路还是两个电阻。
一个背光限流电阻。
一个液晶驱动电压调节电阻。
背光电阻还是任何时候在19、20脚与电源之间串上个100欧电位器接上电源。
调节电位器到合适亮度。
具体值最好是到调试完程序能够正常显示后再将阻值确定换成固定电阻。
液晶驱动电压的调整在数据线、电源线接好的前提下是在Vee(-15v)和地之间接一个电位器。
中间接V0,通过调节电位器来调节V0上的电压。
当V0上为-15V时为全暗(液晶显示为全黑)。
当V0为0V 时为全亮。
调节电位器使屏幕从全暗刚好变到亮时,便可进行程序的调试。
待屏幕显示正常后,进行对比度的细调,然后测量这两边的阻值在地和V0之间、V0和Vee之间换成两个固定电阻焊上就好了。
LCD12864解释
RE 为基本指令集与扩充指令集的选择控制位:RE=1:扩充指令集动作RE=0:基本指令集动作DL 为选择控制接口:DL=1:8-BIT 控制接口DL=0:4-BIT 控制接口G 绘图开关控制位:G=1 :绘图显示ONG=0 :绘图显示OFF在一个指令中不能同时改变“RE”和“DL”位的。
所以要分两次进行定义。
lcd_wcmd(0x34); //扩充指令操作是先确定“DL”“G”位。
“G”位的改变只能在扩充指令操作中进行。
lcd_wcmd(0x30); //基本指令操作是再确定“RE”位的。
SR=1允许输入垂直卷动地址SR=0允许输入IRAM地址SL=1脱离睡眠模式SL=0进入睡眠模式R/L=1右移R/L=1左移I/D-bit1:1 读写一个字符后指针+1,且光标+10 读写一个字符后指针-1,且光标-1// S-bit0:1 当写一个字符后,整屏显示左移(N=1)或右移(N=0),以得到光标不动而屏幕移动的效// S/C-bit3:1 画面平移一个字符位;0 光标平移一个字符位在仔细研究了上面关于它的 X啊 Y啊那些坐标的定位啊写满了哪些地址会自增啊哪些不会啊什么的,最后感觉脑袋里有了一种朦胧的概念……哟西,反正不会弄坏,就先随便写个程序试试。
于是乎,嘀咕嘀咕……捣鼓捣鼓……反反复复又弄了一个多小时后,终于摸清了它显示的规律……LCD12864实现画图功能的思路:首先,画图指令属于扩充指令集,要使用这些指令必须在12864初始化之后写命令字(0x34)进入扩充指令集设定状态。
接着要做的事就是指定我们的图片要从哪里写入(即写入的XY坐标,这个是最关键,也是最难理解的部分)。
因为我们这里是显示一整个画面的图片,所以我们就从12864的第一个点开始显示。
那这个点的坐标是怎么定位的呢?我们往这个点写入数据后,要是接着再写数据,那坐标值会怎样变化呢?首先我们要弄清楚12864究竟是怎么把数据写入到GDRAM(绘图显示RAM)中去的。
LCD12864液晶显示原理电路图程序
号.脚。
H H D7 D6 D5 D4 D3 D2 D1 D0功能:从DD RAM读数据,读指令执行后Y地址计数器自动加1。
从DD RAM读数据前要先执行“设置页地址”及“设置列地址”命令。
六、接口时序1.写操作时序时序11.读操作时序时序2时序参数表:名称符号最小值典型值最大值单位ns1000 Tcyc E周期时间ns Pweh450 高电平宽度E ns Pwel450 E低电平宽度nsTr 25 上升时间Ens E下降时间 Tf 25#0B8MOV R2, #40H#00H ,MOV R1MOV DPTR,#ADDR LOOP:MOV A, R1A MOVC , @A+DPTRLCALL DATA INC R1LOOPR2, DJNZ带中文字库的128X64是一种具有4位/8位并行、2线或3线串行多种接口方式,内部含有国标一级、二级简体中文字库的点阵图形液晶显示模块;其显示分辨率为128×64, 内置8192个16*16点汉字,和128个16*8点ASCII字符集.利用该模块灵活的接口方式和简单、方便的操作指令,可构成全中文人机交互图形界面。
可以显示8×4行16×16点阵的汉字. 也可完成图形显示.低电压低功耗是其又一显著特点。
由该模块构成的液晶显示方案与同类型的图形点阵液晶显示模块相比,不论硬件电路结构或显示程序都要简洁得多,且该模块的价格也略低于相同点阵的图形液晶模块。
基本特性:l 低电源电压(VDD:++)l 显示分辨率:128×64点l 内置汉字字库,提供8192个16×16点阵汉字(简繁体可选)l 内置 128个16×8点阵字符l 2MHZ时钟频率、半透、正显STN显示方式: ll 驱动方式:1/32DUTY,1/5BIASl 视角方向:6点l 背光方式:侧部高亮白色LED,功耗仅为普通LED的1/5—1/10l 通讯方式:串行、并口可选l 内置DC-DC转换电路,无需外加负压l 无需片选信号,简化软件设计l 工作温度: 0℃ - +55℃ ,存储温度: -20℃ - +60℃模块接口说明*注释1:如在实际应用中仅使用串口通讯模式,可将PSB接固定低电平,也可以将模块上的J8和“GND”用焊锡短接。
12864液晶原理
11
DB2
H/L
数据输入输出引脚。
12
DB3
H/L
数据输入输出引脚。
13
DB4
H/L
数据输入输出引脚。
14
DB5
H/L
数据输入输出引脚。
15
DB6
H/L
数据输入输出引脚。
16
DB7
H/L
数据输入输出引脚。
3. 12864-3B 接口说明表
管脚 号
1 2 3 4 5 6
7 8 9 10 11 12 13 14 15 16 17 18
19
BL
AC
背光电源,LED+。
20
BL
AC
背光电源,LED-。
2. 12864-3A 接口说明表
管脚 号
1 2 3 4
管脚
电平
CSA
H/L
CSB
H
GND
0V
VCC
5V
说明
片选择信号,低电平时选择前 64 列。 片选择信号,低电平时选择后 64 列。 逻辑电源地。 逻辑电源。
5
VEE
-10V
LCD 驱动电源。
0 0 0 0 0 0 0 1 I/D S 定游标的移动方向及指定显示
设定
的移位
游标或
设定游标的移动与显示的移位
显示移 0 0 0 0 0 1 S/C R/L X X 控制位;这个指令不改变 DDRAM
位控制
的内容
功能 设定
DL=0/1:4/8 位数据 0 0 0 0 1 DL X RE X X RE=1: 扩充指令操作
80H
81H
82H
83H
84H
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
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 (图3中阴影部分) 字符二级单元
图4 一个汉字的二级单元是一个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 #include #include #include
#define uchar unsigned char #define uint unsigned int uchar 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 for(j=0;j<2000;j++); }
void delay(unsigned int m) //1US延时程序 { unsigned int i,j; for(i=0;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清屏函数