51单片机控制LCD1602,LCD1602只有背光灯亮,不显示数据

#include<reg51.h>
#include<intrins.h>
#include<stdlib.h>
#include<stdio.h>
sbit lcdrs=P1^0 ;
sbit lcdwr=P1^1 ;
sbit lcden=P1^2 ; ////////////三个控制脚的定义
void delayms(int k) ////////////////////////延时函数
{
int i,j;
for(i=0;i<k;i++)
for(j=0;j<110;j++);
}
////////////////////////////////////////////////////////////
//LCD1602显示程序
//////////////////////////////////////////////////////////////

/////////////////////////////LCD写命令
void write_com(uchar com)
{
lcdrs=0;
P0=com;
delayms(5);
lcden=1;
delayms(5);
lcden=0;
}
//////////////////////LCD写数据

void write_date(uchar date)
{
lcdrs=1;
P0=date;
delayms(5);
lcden=1;
delayms(5);
lcden=0;
}
//////LCD初始化
void init_1602()
{
lcden=0;
lcdwr=0;
delayms(15);
write_com(0x38);//设置16x2 显示5x7点阵,8位数据接口
delayms(5);
write_com(0x0f);//设置开显示,显示光标且闪烁
delayms(5);
write_com(0x01);//写一个字符后地址指针加1
delayms(5);
write_com(0x06);//显示清0,数据指针清0
delayms(5);
}

void main ()
{
init_1602() ;////初始化LCD1602 按理说现在应该显示一个闪烁的光标,但是没有,
///各个脚的电压我测试过了是正常的,LCD1602我换了两个,都是同样的问题
////还有网上说的第一排出现黑色格子的现象我这个也没有,第三脚
// 调节对比度的脚电压是2.88V应该没有问题,P0作数据口上拉电阻10K

while(1)
{}
}

你这是仿真还是实物啊,只看程序可不好说什么原因。追问

实物 , 仿真通过了 , 请问只接vss vdd vo 三个脚lcd第一排会显示黑格子吗

追答

仿真与实物是不同的,引脚排列,命令字可能不同的。
只接vss vdd vo 三个脚也是不行,没有数据线和控制脚,不能执行初始化命令,就不能显示的。

追问

我仿真用的Proteus里的那个LCD,网上说跟1602的区别只是背光不一样,请问您能讲一下可能出错的几个地方吗

各个管脚接的是对的 , 输出都正常

追答

你的程序,我调试了,写到实验板上,可以对1602初始化,有闪动的光标块,即你说的“第一排出现黑色格子”,但没有数据显示,因你没有写数据到LCD。

只接vss vdd vo 三个脚肯定是不行,必须全部都接上。

再检查一下电路连接,确认是对的吗?
数据线接在P0口,注意高低位顺序。

重点查3个控制脚
sbit lcdrs=P1^0 ;
sbit lcdwr=P1^1 ;
sbit lcden=P1^2 ;
都对不对。
另外说一句,你这程序编译不能通过呀,你怎么说仿真通过了呢?
在程序的前面要加一行才行的,#define uchar unsigned char
要显示出数据或字符,可以在主程序加两行就看到了字母了。
void main ()
{
init_1602() ;

write_date('A'); //显示字母A
write_date('B'); //显示字母B

while(1)
{}
}

追问

百度知道有字数限制,我发的时候删了几行,管脚也查了是对的,对比度调节也试了没有用,lcd模块是好的,问题实在找不到啊T_TT_TT_T

温馨提示:内容为网友见解,仅供参考
第1个回答  2020-03-15
搜一下:51单片机控制LCD1602,LCD1602只有背光灯亮,不显示数据

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

lcd1602只亮不显示字符
首先,LCD1602只亮不显示字符的问题可能由多种原因导致,主要包括硬件连接问题、初始化设置错误、对比度调整不当或程序控制逻辑错误。在硬件连接方面,LCD1602液晶显示屏需要正确连接到主控板(如Arduino或其他微控制器)。如果连接线路存在松动、虚焊或是接错了引脚,都可能导致显示屏无法正常显示字符。例如,L...

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

lcd1602显示屏只亮不显示数据
根据您提供的问题,很可能是LCD1602显示屏的驱动电路存在问题,导致无法正常显示数据。以下是一些可能的解决方法:首先,检查电源是否正常,确保电源电压在LCD1602显示屏所需的范围内。其次,检查数据线是否连接正确,包括数据线是否完好无损,以及与显示屏的连接是否稳定。此外,还需要检查LCD1602显示屏的控制芯片...

我的lcd1602只有背光亮,而无字符显示,请教高手可能是哪里出了故障_百度...
这种情况一般为与1602的通信没有成功!建议进行仿真,仿真的时候可以很清楚的知道是哪里出了问题!使用protues进行仿真是个不错的选择!另外1602的通信方式一定要搞清楚,这样你的程序才会成功。祝你好运!

单片机运行时LCD1602只有背光,不显示字母,程序中有初始化,硬件检测过...
dat1602_out=ddata;\/\/送出数据到数据总线 set1602_en;\/\/芯片使能位置1 delay_us(5);\/\/保持一定宽度 set1602_di;\/\/芯片使能位清0,命令被1602读到 delay_us(1);\/\/保持一定宽度 } voidinit_disp(void){ dat1602_sel=0;\/\/数据总线口定义为i\/o方式 dat1602_dir=0xff;\/\/口定义为输出方式 ...

万年历51单片机LCD1602不显示是什么原因
给你一个显示的例程,你看看你自己的程序或硬件错在何处。define LCD1602_FLAG#define LCD1602_PORT P0#include<reg51.h>#include<stddef.h>#define uchar unsigned charsbit lcd1602_rs=P2^0;sbit lcd1602_e=P2^2;sbit lcd1602_rw=P2^1;sbit lcd1602_busy=P0^7;uchar str[]="This is Key ...

单片机程序完成了 电路连好了 仿真时候 LCD1602只是亮 但是什么显示没...
功 能:初始化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);\/\/显示模式设置:显示开,无光标,光标不...

为什么LCD1602输入密码不显示?
1602是并口吧,有黑色框出现,估计是你的程序没加读忙判断,建议每次写命令或数据前都进行读忙判断。串口没反应首先检查串口线是不是好的,方法直接短接2、3脚即可看电脑上收发是否一致,然后检查单片机端的硬件接线,最后检查软件;到罗姆 液晶,工业液晶屏系列,查看这款产品规格书,对照规格书的线路...

LCD1602不显示,背光正常,对比度也调好了!以下是我的C程序,proteus仿真是...
既然proteus能仿真通过,那说明不是程序的问题、1602的三脚一般接一个滑动变阻器,滑阻的两端接电源和地,通过调节滑阻,可以改变背光的亮度。你的情况是不是背光太亮了,把字给掩盖了,调节一下滑阻看看,把屏幕往暗了调。

相似回答