单片机中 LCD1602不能显示字符

同样的程序 我烧在一个板子上面他能正确显示出字符,而在另外i在一个板子上面只有一个光标在闪烁了。这个有一些什么原因? 是硬件上面的原因还是软件上面的原因呢
有知道的麻烦给我讲讲



#include <reg52.h>//51单片机相关库
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[]={"www.mcuc.com.cn"};//第一行显示的字符串
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显示
}
}
/*
代码讲解:本程序是以51单片机的LCD1602液晶屏显示字符串,第一行将显示

,第二行将显示I LOVE MCU,本程序主要是掌握LCD1602液晶屏的时序操作,
*/

温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2018-03-08
有光标闪烁表明显示正常阿,你想想,光标要闪烁,显示器初始化没问题,传输的数据也就没问题,显示也就没有问题了。因为其闪烁是由命令控制的。
现在你可以根据闪烁光标查下看是不是对比度或亮度问题。先从硬件上查,不行就量下两块板的接口电压,对比找追问

我刚刚测了一下 那个一个板子的RW是4.96 RS E是0.02 VO是0.89, 另外一个的RS 为4.96 RW E 是0.03 VO是1.28 其它的都一样 这个有什么问题没有。 还有一个我两个板子的RW 和E管脚定义的接口不一样,但是我烧录的时候都在软件里面给改过来了的。 能留个QQ给我么 想咨询一下你 谢谢

追答

你用的什么单片机?
如果是在P0口上需要上拉
另外如果是单周期单片机的话最好在端口状态改变后加几个NOP,否则输出的数据不稳定.

本回答被网友采纳
第2个回答  推荐于2016-02-09
LCD1602通常为14引脚或16引脚,LCD1602的问题通常出现在端口连接和软件代码上,应用LCD1602需注意各引脚的功能说明,正确连线。LCD不正常显示,在硬件方面主要考虑引脚连接问题、硬件接触是否良好、是否出现虚焊等情况。软件上的问题比较复杂,注意规范代码和时序问题。proteus 软件可以构建单片机的外围电路,可用其看一下仿真效果,以检查程序代码是否可行。
第3个回答  2020-04-08
我觉得可能是两个单片机的引脚或者时钟频率存在差别,你可以改一下延时或者换一下口试一下

单片机中 LCD1602不能显示字符
有光标闪烁表明显示正常阿,你想想,光标要闪烁,显示器初始化没问题,传输的数据也就没问题,显示也就没有问题了。因为其闪烁是由命令控制的。现在你可以根据闪烁光标查下看是不是对比度或亮度问题。先从硬件上查,不行就量下两块板的接口电压,对比找 ...

51单片机 LCD1602只亮不显示东西
对于LCD1602不显示字符,一是先检查仿真电路对不对,再检查程序中定义的控制引脚与仿真图是否相符。因很多人都是从网上找的程序,与自己的仿真图并不相符,需要改程序的引脚定义,但没有改。二就是检查程序是不是写错了,虽然引脚定义对,但显示字符的程序不对。你没有发仿真图,所以,看程序是找不到...

单片机运行时LCD1602只有背光,不显示字母,程序中有初始化,硬件检测过...
voidcmd1602(unsignedcharddata){ ctl1602_out=0\/\/rs\/rw\/en=0;\/\/禁止1602(e=0),选择1602为命令方式(rs=0),将读写口改为写状态(rw=0)delay_us(50);\/\/等待busy位变低 dat1602_out=ddata;\/\/送出数据到数据总线 set1602_en;\/\/芯片使能位置1 delay_us(5);\/\/保持一定宽度 set1602_di;\/...

初学单片机方面的硬件,做了块板子,其中遇到LCD1602能亮,调节对比度,但 ...
1.检查硬件管脚是否接错 2.仿真和实际是有差别的,以前我做过实际的可以而仿真的不行,仿真时写函数中等待LCD1602响应用延时函数代替则仿真可行,程序上注意写函数的时序

单片机LCD1602错误显示
在每输入数据之前,你得先确定当前的Address Counter(AC)记录的是不是你所想的,也就是第一个字符的DDRAM是不是对的,之后每输入一个数据,AC是自加1的。建议你下载HD44780的资料仔细看一遍,它是LCD的驱动IC,比直接看1602的资料在原理上会更清楚一些。

lcd1602有时候单片机下程序能显示有时不能显示是什么原因?求助!谢谢...
1.硬件连接接触不良、虚焊。2.LCD初始化函数写的不好,偶尔上电后初始化失败,就不能显示。建议上电延时一段时间,待LCD稳定后在执行初始化函数。3.程序上要注意读写时序,加入适当的延时时间。4.调节LCD第三脚V0的电压,调节到一个合适的值才可以显示。先查硬件,确定没问题再在软件上找原因,...

单片机LCD1602显示错误
错误可能是你的软件或者是硬件引起的,也可能二者都有错误,把错误改正了就能正确显示。

LCD1602液晶显示出现乱码,求高手解惑!急!!!谢谢
LCD1602_RS = 0;LCD1602_RW = 1;LCD1602_EN = 1;LCD1602_delay();busy_flag = (bit)(P0 & 0x80);LCD1602_EN = 0;return busy_flag;} \/ 名称 : LCD1602_wcmd(uchar del)功能 : 1602命令函数 输入 : 输入的命令值 输出 : 无 \/ void LCD1602_wcmd(uchar del){ while(Busy());LCD160...

单片机和LCD1602显示时间时,久了会出现乱码
很大的可能是1302的问题,比如1302的32K晶振停振(运行的时候不要用手触摸晶振引脚,出现乱码的时候用示波器观察下晶振的波形),1302读取错误等等,先试试不用1302,只用单片机让1602显示字符,看看有没有问题,然后再检查程序和1302

...显示屏用的是lcd1602 焊接好后不能显示数字,电路没什么问题_百度知 ...
连接问题,单片机在仿真时 有些引脚 不接能仿真,在实际电路中 就必须按照数据手册说明的 连接,如复位电路等等,显示屏也一样。

相似回答