程序问题的,我给你分享一个测试可以用的吧!显示字符串:
#include
typedef unsigned int uint;//数据类型重新定义
typedef unsigned char uchar;
sbit LCD_RS=P2^0;//数据/命令选择位
sbit LCD_RW=P2^1;//读/写选择位
sbit LCD_EN=P2^2;//使能信号
uchar lcd_tab[]={"89S52"};//第一行显示的字符串
uchar lcd_tab1[]={"I LOVE MCU"};//第二行显示的字符串
/**********************************************************************
*函数名称:_delay_ms
*输 入:uint x
*输 出:无
*功 能:延时函数
**********************************************************************/
void _delay_ms(uint x)
{
uchar i;
while(x--)
{
for(i=0;i<120;i++);
}
}
/**********************************************************************
*函数名称:LCD_Write_Command
*输 入:uchar cmd
*输 出:无
*功 能:向LCD1602写指令
**********************************************************************/
void LCD_Write_Command(uchar cmd)
{
LCD_RS=0;//根据规定,RS和R/W同时为低电平时,可以写入指令亮迹
LCD_RW=0;
LCD_EN=0;//EN置低电平
P0=cmd;//将数据送入P2口,即写入指令或地址
LCD_EN=1;//EN置高电平
_delay_ms(1);//稍延时,给硬件反应时间
LCD_EN=0;//当EN由高电平跳变成低电平时,液晶模块开始执行命令
}
/**********************************************************************
*函数名称:LCD_Write_Data
*输 入:uchar 敬肆并dat
*输 出:无
*功 能:向LCD1602写数据
**********************************************************************/
void LCD_Write_Data(uchar dat)
{
LCD_RS=1;//RS为高电平,RW为低电平时,可以写入数据
LCD_RW=0;
LCD_EN=0;//EN置低电平
P0=dat;//将数据送入P0口,即将数据写入液晶模块
LCD_EN=1;//EN置高电平
_delay_ms(1);//稍延时,给硬件反应时间
LCD_EN=0;//当EN由高电雹弯平跳变成低电平时,液晶模块开始执行命令
}
/**********************************************************************
*函数名称:Init_LCD
*输 入:无
*输 出:无
*功 能:初始化LCD1602
**********************************************************************/
void Init_LCD(void)
{
LCD_Write_Command(0x38);//显示模式设置:16×2显示,5×7点阵,8位数据接口
_delay_ms(1);
LCD_Write_Command(0x06);//显示模式设置:光标右移,字符不移
_delay_ms(1);
LCD_Write_Command(0x0c);//显示模式设置:显示开,无光标,光标不闪烁
_delay_ms(1);
LCD_Write_Command(0x01);//清屏幕指令,将以前的显示内容清除
_delay_ms(1);
}
/**********************************************************************
*函数名称:LCD_POS
*输 入:uchar pos
*输 出:无
*功 能:字符显示位置
**********************************************************************/
void LCD_POS(uchar pos)
{
LCD_Write_Command(0x80|pos);//显示位置的确定方法规定为"80H+地址码x"
}
/**********************************************************************
*函数名称:Show_String
*输 入:uchar *str
*输 出:无
*功 能:LCD1602显示字符串处理函数
**********************************************************************/
void Show_String(uchar *str)
{
while(*str!='\0')//只要没有写到结束标志,就继续写
LCD_Write_Data(*str++);//将字符常量写入LCD,并指向下一个字符
}
/**********************************************************************
*函数名称:main
*输 入:无
*输 出:无
*功 能:函数主体
**********************************************************************/
void main(void)
{
Init_LCD();
while(1)
{
LCD_POS(0);//第一行第一列开始显示
Show_String(lcd_tab);//将lcd_tab数组字符串写入LCD显示出
LCD_POS(0x40);//第二行第一列开始显示
Show_String(lcd_tab1);//将lcd_tab1数组字符串写入LCD显示
}
}
keil有仿真的,自己看看分析分橡森正析程序是哪春旅里面出错了,lcd初始化不对,后面的程序根本就梁悔不用看,不可能成功
调对比电压的电阻接好了没,接春棚罩好了调节如果还是什么反应都没有,那就是你端口接错了,因为即使程扒闹序错了调节电阻还是会有反应的,刚做了一块这和慎样的板子,有什么问题问
亮代表背光灯亮了,没有显示,可能你程序并没有把LCD初始化