qb12864b显示不出来屏幕只会亮

2019-07-15 20:03发布

我的程序是这样的
#include<reg52.h>
#define uint  unsigned int
#define uchar unsigned char
sbit E=P2^6;
sbit RW=P2^5;
sbit RS=P2^4;
sbit RST=P2^3;
sbit Busy=P0^7;
#define LCDdata P0


void delay(uint xx)   
{
while(xx--);
}
void rdbf(void)  
{
while(1)
   {
   RS=0;
   RW=1;
   E=0;
   LCDdata=0xFF;
   E=1;
   if((LCDdata&Busy)==0)
   break;
    }
}
void wr_data(uchar wrdata)   
{
rdbf();
RS=1;
RW=0;
E=1;
LCDdata=wrdata;
E=0;
}
void wr_cmd(uchar cmd)   
{      
rdbf();     //当BF=0时,模块内部方可接收新的指令
RS=0;
RW=0;
E=1;
LCDdata=cmd;
E=0;
}
void lcd_init(void)   
{
delay(5000);
RST=1;
RST=0;
RST=1;
wr_cmd(0x30);
delay(500);
wr_cmd(0x30);   //2次功能模式设置,不用判忙(基本指令)
delay(500);
wr_cmd(0x0c);   //整体显示,光标及其设置不显示
delay(500);
wr_cmd(0x01);   //清屏
delay(500);
delay(500);
wr_cmd(0x06);   //光标右移
delay(500);
}

   void main(void)
{
lcd_init();
   wr_cmd(0x80);
   wr_data(0x44);
while(1);
}

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
4条回答
z00
1楼-- · 2019-07-15 22:32
在wr_cmd(uchar cmd)   函数里执行每条语句后加一段延时时间
youzizhile
2楼-- · 2019-07-16 04:02
 精彩回答 2  元偷偷看……
依然落叶飘零
3楼-- · 2019-07-16 07:22
不知楼主的液晶是否是特殊的,楼主的程序很有问题啊。有多地方E的设置都不对。高电平的变低电平,低电平的变高电平。例如侧忙函数应该是
  1.    RS=0;
  2.    RW=1;
  3.    E=1;
复制代码
而楼主的是
  1.    RS=0;
  2.    RW=1;
  3.    E=0;
复制代码
楼主还是在再看资料吧。
附:

LCD12864液晶的使用.pdf 下载积分: 积分 -1 分

8.49 MB, 下载次数: 72, 下载积分: 积分 -1 分

woodmice
4楼-- · 2019-07-16 08:09
lcd_init中复位延时应该加在RST=1后,RST=0应该至少保持10uS;
main中 wr_cmd(0x80);    wr_data(0x44);之后都没有判忙或延时;
rdbf没有使用,也没有在程序结束时使E无效;

一周热门 更多>