找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 14646|回复: 5
打印 上一主题 下一主题
收起左侧

单片机+LCD1602只亮不显示

[复制链接]
跳转到指定楼层
楼主
ID:508945 发表于 2019-5-7 16:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
最开始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);
        }
}

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:530180 发表于 2019-5-7 23:59 | 只看该作者
是不是没接上拉电阻
回复

使用道具 举报

板凳
ID:530187 发表于 2019-5-8 00:19 | 只看该作者
连接P0口要加上拉电阻,如果最开始在1602液晶屏上能够显示16个5*7的黑块,则说明一开始的连接没有错,能够正常初始化的,因为write_com(0x38);初始化后就是在第一行显示黑块的。后面只亮屏不显示的话,你可以查看一下接线有没错误,如果没错,可以换块液晶屏排查一下。另外对1602不熟悉的时候,你可以一步一步慢慢调试,熟悉后再进行自己的编程操作
回复

使用道具 举报

地板
ID:530187 发表于 2019-5-8 00:30 | 只看该作者
如果连接P0口需要加上拉电阻。只要一开始能够在第一行显示一排5*7的黑块,就是能够正常初始化,后来焊了排针却只亮的话,先查看下接线有没接错,或者有什么线路接触不良。也有可能是因为对比度没调节好,你可以调一下那个可变电阻试一下。如果还不行,换一块显示屏试一下,看下是不是显示屏坏了
回复

使用道具 举报

5#
ID:213173 发表于 2019-5-8 06:35 | 只看该作者
你的这个程序本来就不完整,不可能正常显示。开始显示一排方块表明1602初始化失败,说明程序有问题。被你折腾后只亮不显示任何东西说明不单纯只是程序问题了。
回复

使用道具 举报

6#
ID:530228 发表于 2019-5-8 07:00 | 只看该作者
连接P0口要加上拉电阻
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表