1602液晶的一个冲突可能是BUG
今天做实验,刚学液晶,调试了很久 发现一个冲突
不知道单纯就我的液晶有问题还是大家的也这样
输入数据指令有个0x01数据指令功能为数据指针清0和所有显示清零
还有个显示开关及光标设置
000001NS
N = 1当读或写一个字符后地址增加1,且光标增加1
N = 0当读或写一个字符后地址减1,且光标减1
S =1当写一个字符的时候,整屏显示左移(N = 1)或右移(N = 0)
S = 0当写一个字符的时候正屏显示不移动
#include<reg52.h>
#define uchar unsigned char
uchar code *table = "I LOVE MCU";
sbit lcden = P2^5;
sbit lcdrs = P1^0;
sbit lcdrw = P1^1;
sbit dula = P2^6;
sbit wela = P2^7;
void delay(uchar z)//延时函数
{
uchar x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void write_com(uchar com){//读指令函数
lcdrs = 0;
P0 = com;
delay(5);
lcden = 1;
delay(5);
lcden = 0;
}
void write_data(uchar date){//读数据函数
lcdrs = 1;
P0 = date;
delay(5);
lcden = 1;
delay(5);
lcden = 0;
}
void init()
{
dula = 0;
wela = 0;
lcden = 0;
lcdrw = 0;
write_com(0x38);//1062液晶
write_com(0x0f);//开显示,显示光标,光标闪烁
write_com(0x04);//默认从右向左输入字符,既光标减一
write_com(0x01);//数据指针清零,所有显示清零
delay(255);
}
void main(){
uchar *p;
init();
write_com(0x80+0x8);//
for(p = table;*p;p++) {//应该从右向左显示
delay(255);
delay(255);
write_data(*p);
}
write_com(0x06);//设置成从左向右显示
write_com(0x80 + 0x40);//第二行开始
for(;*table;table++)
write_data(*table);
while(1);
}