1
显示光电
lcd1602的封装尺寸(单位mm):
封装一般使用16脚排座,下面还可以布一些矮的元件。另外LCD1602的引脚可以用16个的排针或排座代替。
用户所编的显示程序,开始必须进行初始化,否则模块无法正常显示,下面介绍两种初始化方法:
1. 利用内部复位电路进行初始化
下面指令是在初始化过程中执行的。
清屏(DISPLAY CLEAR);
功能设置(FUNCTION SET);
DL = 1: 8Bit 接口数据;
N = 0: 1行显示;
F = 0:5&TImes;7dot字形;
显示开/关控制(DISPLAY ON/OFF CONTROL)
D = 0: 显示关; C = 0: 光标关; B = 0: 消隐关
输入方式设置(ENTRY MODE SET )
I/D = 1:(增量): S = 0: 无移位:
2. 软件复位
如果电路电源不能满足复位电路的要求的话,那么初始化就要用软件来实现,过程如下:
uchar BusyTest(void) //lcd忙碌状态检测
{
bit result;
RS=0;
RW=1;
E=1;
_nop_();
_nop_();
_nop_();
_nop_(); //空操作四个机器周期,给硬件反应时间
result=BF;
E=0;
return result;
}
void WriteInstruction (uchar dictate) //设置模式或地址
{
while(BusyTest()==1);
RS=0; //根据规定,RS和R/W同时为低电平时,可以写入指令
RW=0;
E=0;
_nop_();
_nop_();
P0=dictate; //将数据送入P0口,即写入指令或地址
_nop_();
_nop_();
_nop_();
_nop_();
E=1; //E置高电平
_nop_();
_nop_();
_nop_();
_nop_();
E=0; //当E由高电平跳变成低电平时,液晶模块开始执行命令
}
void WriteAddress(uchar x) //设置实际显示的地址
{
WriteInstruction(x|0x80);
}
void WriteData(uchar y) //向LCD写数据
{
while(BusyTest()==1);
RS=1;
RW=0;
E=0;
P0=y;
_nop_();
_nop_();
_nop_();
_nop_();
E=1;
_nop_();
_nop_();
_nop_();
_nop_();
E=0;
}
void LcdInitiate(void) //初始化操作
{
delay(15); //首次写指令时应给LCD一段较长的反应时间
WriteInstruction(0x38); //显示模式设置:16×2显示,5×7点阵,8位数据接口
delay(5);
WriteInstruction(0x38);
delay(5);
WriteInstruction(0x38);
delay(5);
WriteInstruction(0x0f); //显示模式设置:显示开,有光标,光标闪烁
delay(5);
WriteInstruction(0x06); //显示模式设置:光标右移,字符不移
delay(5);
WriteInstruction(0x01); //清屏幕指令,将以前的显示内容清除
delay(5);
}
void display(uchar hang,uchar lie,uchar *p)
{
uchar a;
if(hang == 1)
{
a = 0x80;
}
if(hang == 2)
{
a = 0xc0;
}
a = a + lie - 1;
while(1)
{
BusyTest();
WriteInstruction(a);
BusyTest();
WriteData(*p);
delay(10);
a++;
p++;
if((*p == ‘\0’)||(a==0x90)||(a==0xd0))
{
break;
}
}
}
小编推荐阅读:
全部0条评论
快来发表一下你的评论吧 !