标题: 单片机+LCD1602只亮不显示 [打印本页]

作者: 薄荷味徐福记    时间: 2019-5-7 16:27
标题: 单片机+LCD1602只亮不显示
最开始1602第一排只显示一排方块,在1602上加了排针之后(因为焊接原因1602需要高一点)就只亮不显示任何东西了。下面是1602部分的程序:
#include<at89x51.h>
#include <intrins.h>
#define uint  unsigned int
#define uchar unsigned char
void delay(uint z)
{
   uint a,b;
   for(a=z;a>0;a--)
     for(b=640;b>0;b--);
}
sbit LcdRs                = P2^5;
sbit LcdRw                = P2^6;
sbit LcdEn          = P2^7;
#define  DBPort P0               
#define LCD_COMMAND                        0      
#define LCD_DATA                        1      
#define LCD_CLEAR_SCREEN        0x01      
#define LCD_HOMING                  0x02  
void LCD_Write(bit style, unsigned char input)
{
        LcdEn=0;
        LcdRs=style;
        LcdRw=0;                _nop_();
        DBPort=input;        _nop_();
        LcdEn=1;                _nop_();
        LcdEn=0;                _nop_();
_nop_();
        delay(1);//
}
#define LCD_SHOW                        0x04   
#define LCD_HIDE                        0x00   
#define LCD_CURSOR                        0x02
#define LCD_NO_CURSOR                0x00        
#define LCD_FLASH                        0x01   
#define LCD_NO_FLASH                0x00   
void LCD_SetDisplay(unsigned char DisplayMode)
{
        LCD_Write(LCD_COMMAND, 0x08|DisplayMode);        
}
#define LCD_AC_UP                        0x02
#define LCD_AC_DOWN                        0x00      
#define LCD_MOVE                        0x01   
#define LCD_NO_MOVE                        0x00      
void LCD_SetInput(unsigned char InputMode)
{
        LCD_Write(LCD_COMMAND, 0x04|InputMode);
}
void LCD_Initial()
{
        LcdEn=0;
        LCD_Write(LCD_COMMAND,0x38);         
        delay(15);
        LCD_Write(LCD_COMMAND,0x38);
        delay(15);
        LCD_Write(LCD_COMMAND,0x38);
        delay(15);
        LCD_Write(LCD_COMMAND,0x38);
        delay(15);
        LCD_SetDisplay(LCD_SHOW|LCD_NO_CURSOR);  
        delay(15);
        LCD_Write(LCD_COMMAND,LCD_CLEAR_SCREEN);   
        delay(15);
        LCD_SetInput(LCD_AC_UP|LCD_NO_MOVE);   
        delay(15);
}
void GotoXY(unsigned char x, unsigned char y)
{
        if(y==0)
                LCD_Write(LCD_COMMAND,0x80|x);
        if(y==1)
                LCD_Write(LCD_COMMAND,0x80|(x-0x40));
        delay(2);
}
void Print(unsigned char *str)
{
        while(*str!='\0')
        {
                LCD_Write(LCD_DATA,*str);
                str++;
                delay(2);
        }
}


作者: 889754946dhz    时间: 2019-5-7 23:59
是不是没接上拉电阻
作者: nangecy_5    时间: 2019-5-8 00:19
连接P0口要加上拉电阻,如果最开始在1602液晶屏上能够显示16个5*7的黑块,则说明一开始的连接没有错,能够正常初始化的,因为write_com(0x38);初始化后就是在第一行显示黑块的。后面只亮屏不显示的话,你可以查看一下接线有没错误,如果没错,可以换块液晶屏排查一下。另外对1602不熟悉的时候,你可以一步一步慢慢调试,熟悉后再进行自己的编程操作
作者: nangecy_5    时间: 2019-5-8 00:30
如果连接P0口需要加上拉电阻。只要一开始能够在第一行显示一排5*7的黑块,就是能够正常初始化,后来焊了排针却只亮的话,先查看下接线有没接错,或者有什么线路接触不良。也有可能是因为对比度没调节好,你可以调一下那个可变电阻试一下。如果还不行,换一块显示屏试一下,看下是不是显示屏坏了
作者: wulin    时间: 2019-5-8 06:35
你的这个程序本来就不完整,不可能正常显示。开始显示一排方块表明1602初始化失败,说明程序有问题。被你折腾后只亮不显示任何东西说明不单纯只是程序问题了。
作者: soul=    时间: 2019-5-8 07:00
连接P0口要加上拉电阻




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1