求驱图液晶程序
请帮忙看看程序 ,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();
}