一直显示白色方块
程序如下
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit E=P0^7; //1602使能引脚
//1602读写引脚
sbit RS=P0^6;
uchar tab1[]=" www.51hei.com "; //要显示什么就在这儿改
uchar tab2[]="LCD1602 test ok!"; //[size=15.5555562973022px]要显示什么就在这儿改
void delay(uint del) //延时1ms
{
uint i,j;
for(i=0;i<del;i++)
for(j=0;j<=168;j++);
}
//---------------------------------------------------------
void writecmd(uchar com)
{
E=0; //为什么要写这一条呢,看看时序图就清楚了
RS=0;
P2 = com;
delay(2); //延时一下会稳定很多,后面一条也是一样的
E=1;
delay(2);
E=0;
}
//--------------------------------------------------------
void writedata(uchar dat)
{
E=0; //为什么要写这一条呢,看看时序图就清楚了
RS=1;
P2 = dat;
delay(2); //延时一下会稳定很多,后面一条也是一样的
E=1;
delay(2);
E=0;
}
//-----------------------------------------------------
void init(void)
{
delay(15);
writecmd(0x38);
delay(5);
writecmd(0x38);
delay(5);
writecmd(0x38);
writecmd(0x38);
writecmd(0x08);
writecmd(0x01);
writecmd(0x06);
writecmd(0x0c);
}
//----------------------------------------------------------
void main()
{
uchar j;
init();
writecmd(0x80); //告诉液晶在哪个地方显示 (设置地址指针)//80H+00
for(j=0;j<16;j++) //有16个字符,要循环16次
{
writedata(tab1[j]);
delay(2);
}
writecmd(0x80+0x40); //再设置第二行的起始位置80H+40H
for(j=0;j<16;j++) //有16个字符,要循环16次
{ writedata(tab2[j]);
delay(2);
}
while(1); //让液晶显示就一直停在这里。
}
|