单片机程序完成了 电路连好了 仿真时候 LCD1602只是亮 但是什么显示没有 怎么看程序运行没有啊

2024-12-02 07:59:19
推荐回答(4个)
回答1:

程序问题的,我给你分享一个测试可以用的吧!显示字符串:

 

#include //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[]={"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显示

 }

}

 

回答2:

keil有仿真的,自己看看分析分橡森正析程序是哪春旅里面出错了,lcd初始化不对,后面的程序根本就梁悔不用看,不可能成功

回答3:

调对比电压的电阻接好了没,接春棚罩好了调节如果还是什么反应都没有,那就是你端口接错了,因为即使程扒闹序错了调节电阻还是会有反应的,刚做了一块这和慎样的板子,有什么问题问

回答4:

亮代表背光灯亮了,没有显示,可能你程序并没有把LCD初始化