51单片机 不管怎么驱动 1602只显示上面一排黑块 如图 如果我程序错了请随便发一个能驱动1

2025-02-22 15:01:16
推荐回答(1个)
回答1:

求驱图液晶程序
请帮忙看看程序 ,LCD1602没显示,背光

##include

#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long

uchar code tabel1[]="U:5V";

void delaynms(uint x);

void init();//液晶屏初始化
bit lcd_bz();//LCD忙检测
void LCD_RegWrite(uchar Command);//寄存器进行写操作
void LCD_DataWrite(uchar Data);//写字节显示数据至 LCD

sbit LCD_RS =P3^4;
sbit LCD_RW =P3^5;
sbit LCD_E =P3^6;

void delaynms(uint x) //延1ms程序
{
uchar j;
while(x--)
{
for(j=0;j<120;j++);
}
}

void init()
{
delaynms(50);
LCD_RegWrite(0x38);//功能设置8位双行显示5*7点阵
delaynms(5);
LCD_RegWrite(0x38);//功能设置8位双行显示5*7点阵
delaynms(5);
LCD_RegWrite(0x38);//功能设置8位双行显示5*7点阵
delaynms(5);
LCD_RegWrite(0x08);//关闭显示
LCD_RegWrite(0x01);//清屏
LCD_RegWrite(0x06);//输入式设置光标左向右移显示屏移
LCD_RegWrite(0x0C);//显示显示光标光标闪烁

}

bit lcd_bz()
{ // 测试LCD忙碌状态
bit result;
P0=0xFF;
LCD_RS = 0;
LCD_RW = 1;
LCD_E = 0;
delaynms(1);
LCD_E = 1;
result = (bit)(P0 & 0x80);
delaynms(5);
LCD_E = 0;
return result;
}

//*************写命令***************
void LCD_RegWrite(uchar Command)
{
while(lcd_bz());

LCD_RS = 0; //RS 置低示意进行寄存器操作
LCD_RW = 0; //RW 置低示意进行写入操作
LCD_E= 0;
P0=Command;
delaynms(5);
LCD_E= 1;
delaynms(5);
LCD_E = 0;

}
//**************写数据**************
void LCD_DataWrite(uchar Data)
{
while(lcd_bz());

LCD_RS= 1; //RS 置高示意进行显存数据操作
LCD_RW= 0; //RW 置低示意进行写入操作
LCD_E = 0;
P0=Data; //装载数据置总线
delaynms(5);
LCD_E= 1;
delaynms(5);
LCD_E= 0; //产效跳变沿

}

void LCDxianshi()
{
uchar i;
LCD_RegWrite(0x80+0x01);//设置第行第2列显示
for(i=0;i<4;i++)
{LCD_DataWrite(tabel1[i]);
delaynms(10);
}
}

void main()
{
delaynms(400);
init();
delaynms(50);
LCDxianshi();

}