微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > LCD1602非常的不正常

LCD1602非常的不正常

时间:10-02 整理:3721RD 点击:
代码如下:

  1. #include<reg51.h>
  2. #include"LCD1602.h"
  3. void mian()
  4. {
  5.     LCD1602init();
  6.     while(1)
  7.     {
  8.         LCD1602write('T');
  9.         LCD1602write('T');
  10.         LCD1602write('T');
  11.         LCD1602write('T');
  12.         //LCD1602write('T');//老紫真特么醉了,5个T可以显示为毛4个T显示不出来!

  13.         while(1);
  14.     }
  15. }

复制代码

连续显示5个T完全正常,但是要它只显示4个,屏幕什么都不显示,3个、2个、1个T都不行。但是5个以上的T就可以显示。求大神解答,实在感激不尽!
使用的头文件如下:
*.h文件:

  1. #include<reg51.h>
  2. #ifndef __LCD1602_h_
  3. #define __LCD1602_h_

  4. sbit RW=P2^5;
  5. sbit RS=P2^6;
  6. sbit LCDE=P2^7;

  7. void LCD1602com(unsigned char com);   //头文件中声明函数 如果有形参,则形参不能省略  
  8. void LCD1602write(unsigned char Byte);   
  9. void LCD1602init();    //初始设置
  10. void delay1ms();      //延时
  11. #endif

复制代码

*.c文件:
#include"LCD1602.h"
void delay1ms()   
{
    unsigned char a,b;
    for(b=102;b>0;b--)
        for(a=3;a>0;a--);
}
void LCD1602com(unsigned char com)
{
    RS=0;
    RW=0;
    P0=com;
    delay1ms();
    LCDE=1;
    delay1ms();
    LCDE=0;
}
void LCD1602write(unsigned char Byte)
{
    RS=1;
    RW=0;
    P0=Byte;
    delay1ms();
    LCDE=1;
    delay1ms();
    LCDE=0;
}
void LCD1602init()
{
    LCD1602com(0x38);
    LCD1602com(0x0c);
    LCD1602com(0x06);
    LCD1602com(0x80);
    LCD1602com(0x01);
    delay1ms();
}

具体可能我不是很清楚,但是你认真看下LCD1602的操作时序,看看初始化有没有问题,看你都没有注释,还是注释一下比较好

操作时序有问题,或者是你用P0口作数据口,那个P0要加上拉电阻,不然也可能导致显示不正常

你在写数据之前要检测一下液晶是否已经处于空闲状态。

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

网站地图

Top