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

2019-07-15 16:32发布

#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)
        {
        }
}

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
12条回答
过眼烟云1010
1楼-- · 2019-07-16 13:15
有没有可能是硬件问题
过眼烟云1010
2楼-- · 2019-07-16 14:56
 精彩回答 2  元偷偷看……
望着你发槑
3楼-- · 2019-07-16 17:42
恬碎 发表于 2015-7-22 12:29
加忙检测试试
bit LCD_busy()
{

是引脚加错了。
不过我想问一下测忙的原理是什么。
bit result是什么
恬碎
4楼-- · 2019-07-16 18:11
望着你发槑 发表于 2015-7-22 16:20
是引脚加错了。
不过我想问一下测忙的原理是什么。
bit result是什么

就是lcd内部处理数据时忙标志位为1,此时不能接收单片机给它的新数据,直到检测到lcd内部的忙标志位为0时候送数据,大多数情况忙检测也可以不加,lcd处理数据时间比单片机快的多,基本就是做一下延时就可以了,但是会消耗cpu。
望着你发槑
5楼-- · 2019-07-16 20:55
恬碎 发表于 2015-7-25 21:38
就是lcd内部处理数据时忙标志位为1,此时不能接收单片机给它的新数据,直到检测到lcd内部的忙标志位为0时候送数据,大多数情况忙检测也可以不加,lcd处理数据时间比单片机快的多,基本就是做一下延时就可以了,但是会消耗cpu。 ...


谢谢!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!11
未来De路
6楼-- · 2019-07-16 23:54
谢谢分享,不错

一周热门 更多>