lcd1602显示错误
我用的是1602,用proteus仿真可以,但是放在开发开发板上就显示一行的方格,求助啊,我觉得自己程序也没错,接线也没错。。这是我的开发板原理图和程序,谢谢。#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
uchar code table[]="HAHAHA";
uchar num;
*** it lcden=P2^2;
*** it lcdrw=P2^1;
*** it lcdrs=P2^0;
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void write_com(uchar com)
{
lcdrs=0;
P0=com;
delay(15);
lcden=1;
delay(15);
lcden=0;
}
void write_data(uchar date)
{
lcdrs=1;
P0=date;
delay(15);
lcden=1;
delay(15);
lcden=0;
}
void init()
{
lcden=0;
write_com(0x38);
write_com(0x0e);
write_com(0x06);
write_com(0x01);
}
void main()
{
lcdrw=0;
init();
for(num=0;num<6;num++){
write_data(table[num]);
delay(20);
}
while(1);
}

你好:
仿真只管程序和引脚接对没,可不管对比度调节、电压是否合适等条件。
你先调一下对比度,调弱点,应该能显示。
希望我的回答能帮助到你。
关于lcd1602显示问题
void display(unsigned char x, unsigned char y){
if(y==0) //之一行
LCD_Write(LCD_COMMAND,0x80|x); //写命令,即光标位置
if(y==1) //第二行
LCD_Write(LCD_COMMAND,0x80|(0x40-x)); //写命令,即光标位置
delay500us();}
最不懂类似0x80|x的部分 求解答全面点 谢谢 可加分
0x80是数据地址指针的起始地址,1602也就是16×2,一行16字符,可显示两行。看成矩阵:那0行0列的数据指针地址就是0x80,你如果想在y行x列显示数据,就需要先设置数据地址指针到指定的行列地址,从手册查到,之一行地址范围是0x80+(0到0x27),第二行地址范围是0x80+(0x40到0x67)
所以你上边那个函数是否在处理第二行的时候有误?应该是0x40+x,不过我不清楚x具体是指什么,所以,只能说到这里了。
分享相关内容的知识扩展阅读:
我想用51单片机,矩阵键盘,lcd1602写个简易计算器程序
如何把如float 类型的12.5转化成字符串格式以便在1602上显示12.5?求高手告知,更好能具体给个简单的例子。c语言的谢谢
//---------------------------------------------------
void W_LCD_X1_Dat(uint sec)
{
W_LCD_Com(0xc0 + 6);
W_LCD_Dat(0x30 + sec / 10000);
W_LCD_Dat(0x30 + (sec % 10000) / 1000);
W_LCD_Dat(0x30 + (sec % 1000) / 100);
W_LCD_Dat(0x30 + (sec % 100) / 10);
W_LCD_Dat('.');
W_LCD_Dat(0x30 + sec % 10);
}
//---------------------------------------------------
void main()
{
float aaa;
uint bbb;
init();
aaa = 12.5;
bbb = aaa * 10;
W_LCD_X1_Dat(bbb);
while(1);
}
//=========================================
初始化等函数,可见:
http://hi.baidu.com/%D7%F6%B6%F8%C2%DB%B5%C0/blog/item/e9a4f10963e835c463d98677.html ;
显示画面如下:

大佬们解释一下lcd1602从e=0到e=1是什么意思
E是1602的一个控制脚,这个引脚虽然用E表示,意思是使能控制,但实质上是相当时钟引脚。对1602写数据和写命令,把数据或命令字送到数据线后,E引脚要有一个下降沿,才能把数据线上数据,命令送入1602,可以看成是用E的下降沿锁存。其实,并不是从0变为1,而是从1变成0。关键在于后面的e=1,先为高电平,再e=0,变为低电,就产生一个下降沿了,要的是高到低的变化过程。在lcd1602上加可调电阻是做什么用?是背光吗?如果是,为什么不放在15,16管脚上,而放在1,2,3管脚上?
那时对比度调节用的。若不接或接Vcc将看不到显示(对比度更低),接地对比度更高(显示为方块,也看不到),只有调节到一定电位才最清晰