求助!1602只显示一行方块,怎么折腾都没用

2024年11月20日 16:33
有3个网友回答
网友(1):

对比度太高 调E脚电压

网友(2):

我这有一份1602显示的程序,你自己看一下吧。。。
#include
#define uint unsigned int
#define uchar unsigned char
#define dat P0
sbit rs=P1^0; //定义LCD1602的RS,RW和E引脚连接
sbit rw=P1^1;
sbit e=P1^2;
sbit psb=P1^3;
sbit reset=P1^5;
sbit button=P2^4;

uchar busy; //1602判忙标志//
void delay_1ms(void); //延时程序
void display(void); //显示程序
void busy_1602(void); //液晶查忙程序
void shj_1602(uchar a); //液晶写数据程序
void int_1602(void); //液晶初始化
void zhl_1602(uchar a); //液晶写指令程序

void main(void)//主程序
{
int ii=0;
psb=1;
reset=1;
display();
for(;;)
{
if(button)
zhl_1602(0x1c);
else
zhl_1602(0x18);
for(ii=0;ii<500;ii++)
delay_1ms();
//zhl_1602(0x1c);
zhl_1602(0x0e);
}
}

void delay_1ms(void)//延时程序
{
uchar i,j;
for(i=0;i<10;i++)
for(j=0;j<20;j++);
}

void display(void)//液晶显示程序
{
uchar i;
uchar table0[16]={"Hello 51 MCU "}; //设置需要显示的字符
uchar table1[16]={"--Xinteng Elec. "};
int_1602();
zhl_1602(0x80); //选择显示第一行
for(i=0;i<16;i++) //发送第一行字符
{
shj_1602(table0[i]);
}
zhl_1602(0xc0); //选择显示第二行
for(i=0;i<16;i++) //发送第二行字符
{
shj_1602(table1[i]);
}
}

void busy_1602(void)//查询忙碌标志信号程序
{
do
{
e=0;
rw=1;
rs=0;
e=1;
busy=dat;
e=0;
delay_1ms();
} while(busy&&0x80==1);
}

void zhl_1602(uchar a)//写指令到LCM程序
{
busy_1602();
e=0;
rw=0;
rs=0;
e=1;
dat=a;
e=0;
}

void shj_1602(uchar a)//写数据到LCM程序
{
busy_1602();
e=0;
rw=0;
rs=1;
e=1;
dat=a;
e=0;
}

void int_1602(void)//启动LCM程序
{
zhl_1602(0x38); //8线控制模式
zhl_1602(0x0e);
zhl_1602(0x06);
}

网友(3):

是不是你的延时不够