高——>低 高 低/低——>高 I/O缓冲——>DR DR——>I/O缓冲 无动作 配合/W进行写数据或指令 配合R进行读数据或指令 内部寄存器信号
● 忙标志:BF
BF标志提供内部工作情况,BF=1表示模块在进行内部操作,此时模块不接受外部指令和数据。BF=0时,模块为准备状态,随时可接受外部指令和数据。利用STATUS RD 指令,可以将BF读到DB7总线,从而检验模块之工作状态。 ●字型产生ROM(CGROM)
字型产生ROM(CGROM)提供8192个此触发器是用于模块屏幕显示开和关的控制。DFF=1为开显示(DISPLAY ON),DDRAM的内容就显示在屏幕上,DFF=0为关显示(DISPLAY OFF)。DFF 的状态是指令DISPLAY ON/OFF和D/IT信号控制的。
● 显示数据RAM(DDRAM)
模块内部显示数据RAM提供64×2个位元组的空间,最多可控制4行16字(64个字)的中文字型显示,当写入显示数据RAM时,可分别显示CGROM与CGRAM的字型;此模块可显示三种字型,分别是半角英数字型(16*8)、CGRAM字型及CGROM的中文字型,三种字型的选择,由在DDRAM中写入的编码选择,在此阶段0000H—0006H的编码中(其代码分别是0000、0002、0004、0006共4个)将选择CGRAM的自定义字型,02H—7FH的编码中将选择半角英数字的字型,至于A1以上的编码将自动的结合下一个位元组,组成两个位元组的编码形成中文字型的编码BIG5(A140—D75F),GB(A1A0-F7FFH)。
●字型产生RAM(CGRAM)
字型产生RAM提供图象定义(造字)功能,可以提供四组16×16点的自定义图象空间,使用者可以将内部字型没有提供的图象字型自行定义到CGRAM中,便可和CGROM中的定义一样地通过DDRAM显示在屏幕中。
● 地址计数器AC
地址计数器AC地址计数器是用来贮存DDRAM/CGRAM之一的地址,它可由设定指令暂存器来改变,之后只要读取或是写入DDRAM/CGRAM的值时,地址计数器的值就会自动加一,当D/I为“0”时而R/W为“1”时,地址计数器的值会被读取到DB6——DB0中。 ●光标/闪烁控制电路
此模块提供硬体光标及闪烁控制电路,由地址计数器的值来指定DDRAM中的光标或闪烁位置。 指令操作
模块控制芯片提供两套控制命令,基本指令和扩充指令如下: 指令表1:(RE=0:基本指令)
指令 清除 指 令 码 D/I R/W D7 D6 D5 D4 D3 D2 D1 D0 0 0 0 0 0 0 0 0 0 1 功 能 显示 地址 0 归位 显示状态 开/关 进入点设定 游标或显示移位控制 将DDRAM填满\并且设定DDRAM的地址计数器(AC)到\设定DDRAM的地址计数器(AC)到\并且将0 0 0 0 0 0 0 1 X 游标移到开头原点位置;这个指令不改变DDRAM 的内容 D=1: 整体显示 ON 0 0 0 0 0 1 D C B C=1: 游标ON B=1:游标位置反白允许 指定在数据的读取与写入时,设定游标0 0 0 0 0 0 1 I/D S 的移动方向及指定显示的移位 0 0 0 0 1 S/C R/L X X 设定游标的移动与显示的移位控制位;这个指令不改变DDRAM 的内容 DL=0/1:4/8位数据 0 0 0 功能 设定 0 0 0 0 1 DL X RE X X RE=1: 扩充指令操作 RE=0: 基本指令操作 设定CGRAM地址 设定DDRAM地址 0 0 0 0 1 AC5 AC4 AC3 AC2 AC1 AC0 设定CGRAM 地址 设定DDRAM 地址(显示位址) 0 1 0 AC5 AC4 AC3 AC2 AC1 AC0 第一行:80H-87H 第二行:90H-97H 读取忙标志和地址 写数据1 到RAM 读出1 RAM的值 指令表2:(RE=1:扩充指令)
指 令 码 D/I R/W D7 D6 D5 D4 D3 D2 D1 D0 0 0 0 1 数据 0 数据 0 读取忙标志(BF)可以确认内部动作是否1 BF AC6 AC5 AC4 AC3 AC2 AC1 AC0 完成,同时可以读出地址计数器(AC)的值 将数据D7——D0写入到内部的RAM (DDRAM/CGRAM/IRAM/GRAM) 从内部RAM读取数据D7——D0(DDRAM/CGRAM/IRAM/GRAM) 指令 待命
功 能 0 0 0 0 0 0 1 进入待命模式,执行其他指令都终止
模式 卷动地址0 开关开启 反白 选择 睡眠 模式 0 0 SR=1:允许输入垂直卷动地址 0 0 0 0 0 1 SR SR=0:允许输入IRAM和CGRAM地址 选择2行中的任一行作反白显示,并可决定反白与否。初始值R1R0=00,0 0 0 0 1 R1 R0 第一次设定为反白显示,再次设定变回正常 SL=0:进入睡眠模式 0 0 0 1 SL X X SL=1:脱离睡眠模式 CL=0/1:4/8位数据 扩充功能设定 RE=1: 扩充指令操作 0 0 0 0 1 CL X RE G 0 RE=0: 基本指令操作 G=1/0:绘图开关 设 定 绘图RAM 地 址 设定绘图RAM 先设定垂直(列) 0 0 0 AC3 AC2 AC1 AC0 AC6AC5?AC0 AC6 AC5 AC4 AC3 AC2 AC1 AC0 再设定水平(行)地址AC3AC2AC1AC0 将以上16位地址连续写入即可 注:当IC1在接受指令前,微处理器必须先确认其内部处于非忙碌状态,即读取BF标志时,BF需为零,方可接受新的指令;如果在送出一个指令前并不检查BF标志,那么在前一个指令和这个指令中间必须延长一段较长的时间,即是等待前一个指令确实执行完成。
0 0 0 0 0 0 0 0 1 三、显示应用 1、字符显示
带中文字库的128X64-0402B每屏可显示4行8列共32个16×16点阵的汉字,每个显示RAM可显示1个中文字符或2个16×8点阵全高ASCII码字符,即每屏最多可实现32个中文字符或64个ASCII码字符的显示。带中文字库的128X64-0402B内部提供128×2字节的字符显示RAM缓冲区(DDRAM)。字符显示是通过将字符显示编码写入该字符显示RAM实现的。根据写入内容的不同,可分别在液晶屏上显示CGROM(中文字库)、HCGROM(ASCII码字库)及CGRAM(自定义字形)的内容。三种不同字符/字型的选择编码范围为:0000~0006H(其代码分别是0000、0002、0004、0006共4个)显示自定义字型,02H~7FH显示半宽ASCII码字符,A1A0H~F7FFH显示8192种GB2312中文字库字形。字符显示RAM在液晶模块中的地址80H~9FH。字符显示的RAM的地址与32个字符显示区域有着一一对应的关系,其对应关系如下表所示。
80H 90H 88H
81H 91H 89H 82H 92H 8AH 83H 93H 8BH 84H 94H 8CH 85H 95H 8DH 86H 96H 8EH 87H 97H 8FH
98H 99H 9AH 9BH 9CH 9DH 9EH 9FH 其中,C语言编译器具有直接把中文转换成ASCII码字符功能。对照下面原理图,编译程序示例,并下载到实验板上,观测现象。
4. 寻迹避障程序 #include
#define uchar unsigned char #define uint unsigned int sbit RM1=P0^0;
sbit RM2=P0^1;//右电机
sbit LM1=P0^2;
sbit LM2=P0^3;//左电机
sbit bzh=P2^6;
sbit RAD=P0^6;//红外接收右电机转 sbit LBD=P0^7;//红外接收左电机转
sbit rs=P3^5;// LCD的RS sbit rw=P3^6;// LCD的R/W sbit en=P3^7;// LCD的E
void lcd_string(uchar *strpoint);
void delay(uint a) { uint b,c;
for(b=a;b>0;b--)
for(c=120;c>0;c--);
}
uchar i=0;
void checkbusy()//检查LCD忙 { uchar dat;
rs=0; //rs=1为数据,=0为命令. rw=1; //rw=1为读,=0为写. do {
P1=0x00;
en=1; //E信号下降沿锁存DB7~DBO dat=P1; //读入P1的值 en=0; //锁存
dat=0x80 & dat; //BUSY:1内部在工作,0正常状态 }while(!(dat==0x00));rw=0; }
void sentcom(uchar com) { checkbusy(); //检查Busy rs=0; en=0; P1=com; delay(5); en=1; delay(5); en=0; }
void sentdata(uchar date) //写数据 {
checkbusy(); rs=1; en=0; P1=date; delay(5); en=1;
delay(5);
en=0; }
//初始化 LCM void lcd_init()