首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 单片机 >

1602液晶的一个摩擦可能是BUG

2013-01-28 
1602液晶的一个冲突可能是BUG今天做实验,刚学液晶,调试了很久 发现一个冲突不知道单纯就我的液晶有问题还

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);
}


经过很多次调试发现 在有write_com(0x01);//数据指针清零,所有显示清零
这个的状态下 如果将光标移动改成自动减1 既N = 0则无法显示字符  上面的程序就是
先设置成从右向左显示 然后第二行从左向右显示 第一行没有字符显示
第二行正常显示 
如果将write_com(0x01);换成write_com(0x02);//显示回车数据指针清零或者删除这一行 
则第一行 从左向右显示 则可以正常输出不知道大家的有没有这种情况 
还是说我的液晶有问题
[解决办法]
根据1602具体的型号看看厂家给的文档中的相关指令

热点排行