打印

求教51单片机接12864液晶不能点亮

[复制链接]
1818|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lbb_1112|  楼主 | 2014-4-10 15:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
用AT89C52驱动ST7920的液晶,写了个很简单的程序无法工作。无液晶的时候工作电流是50mA加了液晶后成了10mA,很奇怪。
程序:
#include "Reg52.h"

#define uint  unsigned int
#define uchar unsigned char
sbit lcd_rs = P2^0;   //H=data; L=command;
sbit lcd_rw = P2^1;   //H=read; L=write;
sbit  lcd_e = P2^2;   //input enable;
#define LCD_Data P1


void delay(uint        a )

{
uchar i;
while(--a)
{
for(i=0;i<125;i++) ;
}
}



void wd(uchar dat)
{
lcd_rs=1;
lcd_rw=0;
lcd_e=0;
delay(2);
LCD_Data=dat;

lcd_e=1;
delay(5);
lcd_e=0;
delay(5);
}

void wc(uchar  udat)
{
        lcd_rs=0;
        lcd_rw=0;
        lcd_e=0;
        delay(2);
        LCD_Data=udat;
        delay(2);
        lcd_e=1;
        delay(5);
        lcd_e=0;
        delay(5);}

void init_lcd (void)
{
//rst=1;
// psb=1;
  wc (0x30);  /*30---基本指令动作*/   
  wc (0x01);  /*清屏,地址指针指向00H*/
  wc (0x06);  /*光标的移动方向*/
  wc(0x0c);  /*开显示,关游标*/
  }

void clrram (void)
{
  wc (0x01);
  wc(0x34);
  wc(0x30);
}

void main()
{ char i;
delay(50);
init_lcd();
  clrram();
//  wc(0x80);
while (1)
{for (i=0;i<9;i++)
  {wc(0x80+i);
  wd(0x31+i);
   delay(1000);
   
   }
  }
}
求教各位哪里可能出问题了。

相关帖子

沙发
123654789| | 2014-4-10 15:42 | 只看该作者
12864仅仅表示这个液晶屏幕的规格是横行128个点 竖向64个点
这个规格对应很多个厂家,每个厂家的控制芯片都不一样
因此控制程序也不一样

因此,购买液晶的时候可以问厂家商家要个程序

使用特权

评论回复
板凳
lbb_1112|  楼主 | 2014-4-10 16:01 | 只看该作者
谢谢回答。
ST7920的控制芯片,也用了他们给的一个程序也不行。是不是驱动能力不行,一般工作器件多电流会大吧,怎么变小了很多,很奇怪

使用特权

评论回复
地板
dai277530706| | 2014-4-11 10:39 | 只看该作者
初始化中间貌似要有延时的  比如
void lcd_init()                 //初始化LCD
{
    LCD_PSB = 1;         //选择并行模式   
    lcd_wcmd(0x30);      //初级指令集
    delay_ms(5);
    lcd_wcmd(0x0C);      //开显示
    delay_ms(5);
    lcd_wcmd(0x01);      //清屏
    delay_ms(5);
}

使用特权

评论回复
5
lbb_1112|  楼主 | 2014-4-11 11:37 | 只看该作者
dai277530706 发表于 2014-4-11 10:39
初始化中间貌似要有延时的  比如
void lcd_init()                 //初始化LCD
{

我用proteus仿真的时候用了个LM041L的屏,仿真正常。在自己接的ST7920液晶上就不行,很无语

使用特权

评论回复
6
lbb_1112|  楼主 | 2014-4-11 11:38 | 只看该作者
123654789 发表于 2014-4-10 15:42
12864仅仅表示这个液晶屏幕的规格是横行128个点 竖向64个点
这个规格对应很多个厂家,每个厂家的控制芯片都 ...

他们的程序也要了,也不行。

使用特权

评论回复
7
linfeng24| | 2014-4-11 13:59 | 只看该作者
检查接线,很多时候不是程序问题而是小细节上没注意好

使用特权

评论回复
8
dai277530706| | 2014-4-11 15:48 | 只看该作者
lbb_1112 发表于 2014-4-11 11:37
我用proteus仿真的时候用了个LM041L的屏,仿真正常。在自己接的ST7920液晶上就不行,很无语 ...

不要说仿真,这是实物。初始化就是要有等待时间的,一定是你时序有问题或者硬件连接错误。

使用特权

评论回复
9
dirtwillfly| | 2014-4-11 16:31 | 只看该作者
找个示波器或者逻辑分析仪看看时序,和手册上的对比一下

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

17

主题

54

帖子

1

粉丝