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

51单片机驱动lcd1602,显示屏不显示

时间:10-02 整理:3721RD 点击:
#include <REGX52.H>
#define LCD_DB P0
sbit LCD_RS=P2^6;
sbit LCD_RW=P2^7;
sbit LCD_E=P2^6;
unsigned char PuZh[]="Prechin  Science";
void delay1ms(unsigned int c)   //误差 0us
{
    unsigned char a,b;
        for (; c>0; c--)
        {
                 for (b=199;b>0;b--)
                 {
                          for(a=1;a>0;a--);
                 }      
        }
           
}
void delay(unsigned int t)
{
   unsigned int a;
   a=t;
   while(a--);
}
void LCDWriteCom(unsigned int com)
{
  LCD_E=0;
  LCD_RS=0;
  LCD_RW=0;
  LCD_DB=com;
  delay1ms(10);
  LCD_E=1;
  delay1ms(10);
  LCD_E=0;
}
void LCDWriteData(unsigned int dat)
{
  LCD_E=0;
  LCD_RS=1;
  LCD_RW=0;
  LCD_DB=dat;
  delay1ms(10);
  LCD_E=1;
  delay1ms(10);
  LCD_E=0;
}
void LCDInit()
{
   LCDWriteCom(0x38);  //设置显示模式
   delay1ms(1);
   LCDWriteCom(0x0c);  //开显示,不显示光标,光标不闪烁
   delay1ms(1);
   LCDWriteCom(0x06);  //写一个指针加1
   delay1ms(1);
   LCDWriteCom(0x01);  //清屏
   delay1ms(1);
   LCDWriteCom(0x80);  //设置数据指针起点
   delay1ms(1);
}
void main ()
{
          unsigned char i;
        LCDInit();
        for(i=0;i<16;i++)
        {
                LCDWriteData(PuZh[i]);
                delay1ms(1);       
        }
        while(1)
        {
        }
}

http://bbs.elecfans.com/forum.php?mod=viewthread&tid=497965
请对照查好看
http://bbs.elecfans.com/forum.ph ... p;highlight=lcd1602

查看了lcd相关部分。两个的不同是有一篇先给使能再给数据,另一篇先给数据再给使能。我都试过,但是lcd依然不显示

卧槽!原来是引脚给错了

程序没有问题,谢谢大家!

加忙检测试试
bit LCD_busy()
{
        bit result;
        LCD_RS=0;
        LCD_RW=1;
        LCD_E=1;
        delay(1);
        result=(bit)(P0&0x80);
        LCD_E=0;
        return result;
}
然后在写指令和写数据函数中调用忙检测函数while(bit LCD_busy());

有没有可能是硬件问题

有没有可能是硬件问题

有没有可能是硬件问题

是引脚加错了。
不过我想问一下测忙的原理是什么。
bit result是什么

就是lcd内部处理数据时忙标志位为1,此时不能接收单片机给它的新数据,直到检测到lcd内部的忙标志位为0时候送数据,大多数情况忙检测也可以不加,lcd处理数据时间比单片机快的多,基本就是做一下延时就可以了,但是会消耗cpu。


谢谢!!11

谢谢分享,不错

。。

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

网站地图

Top