微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > lcd1602怎么不显示呢

lcd1602怎么不显示呢

时间:10-02 整理:3721RD 点击:
void LCD1602(void)
{
EN = 0;
RS = 1;
RW = 1;
LCD_DATA = 0xFF;
}
void Read_Busy(void)
{  
   RS=0;
   RW=1;
   EN=1;
   while(LCD_DATA & 0x80);
   EN=0;
}//读状态
void Write_Lcd(unsigned char Value, bit i) //i = 0写指令.i = 1写数据;
{
Read_Busy();
RS = i;
RW = 0;
EN = 1;
    LCD_DATA = Value;
EN = 0;
}
void Init_Lcd(void)
{
Delay(15000);
Write_Lcd(0x38,0);
Delay(5000);
Write_Lcd(0x38,0);
Delay(5000);
Write_Lcd(0x38,0);
Write_Lcd(0x08,0);
Write_Lcd(0x01,0);

}
void Delay(unsigned int i)
{
while(-- i);
}//延时
void main(void)
{   LCD1602();
    Init_Lcd();
    Write_Lcd(0x80,0);
Write_Lcd('K',1);
while(1);
}

给出完整程序,你要显示什么

在你的主程序中应该把你的LCD初始化写在最前面也就是你的Init_Lcd();函数。1602液晶首先初始化要弄好,其次是写数据函数,在此是写指令函数,最后判断一下盲信号。注意各个函数的时序,这要对照着液晶的PDF资料来看,在此很重要的一点就是写地址的时候要或上0X08;

头文件之类的都没有吗?程序中,有先调用函数,然后再写函数体的,也某声明!问题貌似不少呢,尽量写规范一点!

看数据手册

#include<reg51.h>
#include"hai.h"
void LCD1602(void)
{
EN = 0;
RS = 1;
RW = 1;
LCD_DATA = 0xFF;
}
void Read_Busy(void)
{  
   RS=0;
   RW=1;
   EN=1;
   while(LCD_DATA & 0x80);
   EN=0;
}//读状态
void Write_Lcd(unsigned char Value, bit i) //i = 0写指令.i = 1写数据;
{
Read_Busy();
RS = i;
RW = 0;
EN = 1;
    LCD_DATA = Value;
EN = 0;
}
void Init_Lcd(void)
{
Delay(15000);
Write_Lcd(0x38,0);
Delay(5000);
Write_Lcd(0x38,0);
Delay(5000);
Write_Lcd(0x38,0);
Write_Lcd(0x08,0);
Write_Lcd(0x01,0);

}
void Delay(unsigned int i)
{
while(-- i);
}//延时
void main(void)
{   LCD1602();
    Init_Lcd();
    Write_Lcd(0x80,0);
Write_Lcd('K',1);
while(1);
}

hai.h中是这样写的

#ifndef _LCD_H_
#define _LCD_H_
#define LCD_DATA P0
sbit RS=P1^0;
sbit RW=P1^1;
sbit EN=P1^2;
void LCD1602(void);
void Read_Busy(void);
void Write_Lcd(unsigned char Value, bit i);
void Init_Lcd(void);
void Delay(unsigned int i);
#endif
就是显示器上一点反映都没有

你的K要显示是需要一系列16进制代码的

如果实在觉得没有错的话,试一下电路图里面I/o口与Date口有没有接电阻,阻值是否合适

貌似要先送数据,然后EN置为1,再延时一下,再把EN拉低吧

是忙信号吗?

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top