找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 21878|回复: 11
收起左侧

为什么LCD1602不显示?

[复制链接]
ID:301728 发表于 2018-4-30 21:01 | 显示全部楼层 |阅读模式
这个程序的目的是显示出welcome Harbin China
我先是使用的查忙程序,但是LCD没有显示
后来用的这个程序没有使用差忙的程序,而是使用的延时函数,但是1602液晶屏还是没有显示,谁知道是怎么回事吗?
#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define out P0
sbit RS=P2^0;//将P2口的0,1,2号口作为RS RW E的接口
sbit RW=P2^1;//
sbit E=P2^2;//
void LCD_initialize();//初始化函数
void check_busy();//查忙函数,但是这次没有用到
void write_command(uchar com);//写命令函数
void write_data(uchar dat);//写数据函数
void string(uchar ad,uchar*p,uchar n);//使Lcd显示字符的函数
void delay(uchar i);//延时函数
void main()
{
  LCD_initialize();//LCD初始化
  while(1)
  {
    string(0x85,"welcome",7);//写入welcome
  string(0xc2,"Harbin China",12);//写入Harbin China
  delay(100);
  write_command(0x01);//清屏
  delay(100);
   }
}
void delay(uchar i)//延时函数
{
  uchar t;
  while(i--)
  {
    for(t=0;t<120;t++);
  }
}
void write_command(uchar com)//写命令函数
{
delay(1);
E=0;
RS=0;
RW=0;
out=com;
delay(1);
E=1;
_nop_();
E=0;
delay(1);
}
void LCD_initialize()//初始化函数
{
  write_command(0x38);
  _nop_();
  write_command(0x0c);
  _nop_();
  write_command(0x0b);
  _nop_();
  write_command(0x01);
  delay(1);
}
void write_data(uchar dat)//写数据函数
{
delay(1);
E=0;
RS=1;
RW=0;
out=dat;
delay(1);
E=1;
_nop_();
E=0;
delay(1);
}
void string(uchar ad,uchar *p,uchar n)//显示字符函数
{
  uchar i;
  write_command(ad);
  for(i=0;i<n;i++)
  {
    write_data(*p++);
  delay(100);
  }
}

T@(7QC0)[TGTT$@@%6FEQPO.png
回复

使用道具 举报

ID:111634 发表于 2018-5-2 12:52 | 显示全部楼层
实例67  LCD1602显示屏显示
Proteus仿真一下,确认有效。
实例61 LCD1602显示屏显示.rar (49.26 KB, 下载次数: 289)
回复

使用道具 举报

ID:213173 发表于 2018-5-2 16:27 | 显示全部楼层
无标题.jpg
改了一下,实物验证正常。
#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define out P0
sbit RS=P2^0;//将P2口的0,1,2号口作为RS RW E的接口
sbit RW=P2^1;//
sbit E=P2^2;//
//void LCD_initialize();//初始化函数
//void check_busy();//查忙函数,但是这次没有用到
//void write_command(uchar com);//写命令函数
//void write_data(uchar dat);//写数据函数
//void string(uchar ad,uchar*p,uchar n);//使Lcd显示字符的函数
//void delay(uchar i);//延时函数

void delay(uchar i)//延时函数
{
  uchar t;
  while(i--)
  {
    for(t=0;t<120;t++);
  }
}
void write_command(uchar com)//写命令函数
{
//        delay(1);
        E=0;
        RS=0;
//        RW=0;
        out=com;
        delay(1);
        E=1;
        delay(1);
        E=0;
//        delay(1);
}

void write_data(uchar dat)//写数据函数
{
//        delay(1);
//        E=0;
        RS=1;
//        RW=0;
        out=dat;
        delay(1);
        E=1;
        delay(1);
        E=0;
//        delay(1);
}
void LCD_initialize()//初始化函数
{
        RW=0;
        write_command(0x38);
        write_command(0x01);
        write_command(0x0c);
        write_command(0x06);
//        write_command(0x0b);
        write_command(0x80);
}

void string(uchar ad,uchar *p,uchar n)//显示字符函数
{
        uchar i;
        write_command(ad);
        for(i=0;i<n;i++)
        {
                write_data(*p++);
                delay(100);
        }
}

void main()
{
        LCD_initialize();//LCD初始化
        while(1)
        {
                string(0x85,"welcome",7);//写入welcome
                string(0xc2,"Harbin China",12);//写入Harbin China
                delay(100);
                write_command(0x01);//清屏
                delay(100);
        }
}

回复

使用道具 举报

ID:301728 发表于 2018-5-4 07:47 | 显示全部楼层
wulin 发表于 2018-5-2 16:27
改了一下,实物验证正常。
#include
#include

行,已经改好了,多谢帮助!
回复

使用道具 举报

ID:301728 发表于 2018-5-4 07:48 | 显示全部楼层
zl2168 发表于 2018-5-2 12:52
实例67  LCD1602显示屏显示
先Proteus仿真一下,确认有效。
以上摘自张志良编著《80C51单片机仿真设计实 ...

已经改好了,多谢帮助!
回复

使用道具 举报

ID:316256 发表于 2018-5-4 09:41 | 显示全部楼层
时序问题或者电位器
回复

使用道具 举报

ID:586957 发表于 2019-8-3 12:30 | 显示全部楼层
void string(uchar ad,uchar *p,uchar n)//显示字符函数
{
        uchar i;
        write_command(ad);
        for(i=0;i<n;i++)
        {
                write_data(*p++);
                delay(100);
        }
}
请问这个*号是什么呢?为什么去掉之后就不对了,而显示乱码
回复

使用道具 举报

ID:511461 发表于 2019-8-3 14:13 | 显示全部楼层
*是指针
回复

使用道具 举报

ID:586957 发表于 2019-8-4 10:49 | 显示全部楼层

谢谢蟹蟹,还有个问题,这两个*都不可省略嘛????
回复

使用道具 举报

ID:586957 发表于 2019-8-4 12:50 | 显示全部楼层
* 指针运算符 //*p为p所指向的存储单元的内容
p就相当于存储单元地址
回复

使用道具 举报

ID:586680 发表于 2019-8-4 13:45 | 显示全部楼层
检查一下是a6还是a18
回复

使用道具 举报

ID:594980 发表于 2019-8-4 13:56 | 显示全部楼层
void LCD_initialize()//初始化函数
{
  write_command(0x38);
  _nop_();
  write_command(0x0c);
  _nop_();
  write_command(0x0b);
  _nop_();
  write_command(0x01);
  delay(1);
}
这个你把0xb改为0x6就可以显示,但是显示是一次显示的。我用自己的实验板演示了以下。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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