求助!1602只显示一行方块,怎么折腾都没用
发布网友
发布时间:2022-06-17 03:53
我来回答
共3个回答
热心网友
时间:2023-11-13 22:19
对比度太高 调E脚电压
热心网友
时间:2023-11-13 22:19
我这有一份1602显示的程序,你自己看一下吧。。。
#include<reg51.h>
#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);
}
热心网友
时间:2023-11-13 22:20
是不是你的延时不够