打印

lcd12864 驱动问题 (弄了很久没显示,严重打击我的信心)

[复制链接]
3076|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
w3571604|  楼主 | 2008-10-1 18:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    请高手看看我的程序,是程序不对还是我的液晶屏坏了,如果感觉没有问题的话给我个回复,谢谢!  

    我的MPU是 arm7 lpc2114,液晶屏的芯片是ST7920,采用的是I/O口进行写操作(以后还要定义同步缓冲区,所以没有设置读),并口传输数据。这是我的程序: 
#include "config.h" 
#define RS 1 < <22    //数据,指令选择引脚 

#define RSH IO0SET=RS   //选择数据 
#define RSL IO0CLR=RS  //选择指令 

#define PSB 1 < <24    //选择并口  ,这个口后来我悬空了,因为默认是高 
#define PSB_EN IO0SET =PSB 

#define E 1 < <23       //使能,高->低有效 

#define EL  IO0CLR=RS 
#define EH  IO0SET=RS 

#define RST 1 < <25      //复位 
#define RSTH IO0SET=RST 
#define RSTL IO0CLR=RST 

#define D0_D7 0xFF < <6     //用P0.6--P0.13 数据总线 
void Senddata(uint8 data)      //总控制I/O口,发送数据 

IO0CLR=0xFF < <6;IO0SET=(data&0xFF) < <6;} 
void Delay()      //由于我没有采用读忙,所以采用延时函数 

  uint8 i; 
  for(i=0;i <5000;i++); 

void DElay(uint8 j)    //大延时函数 

  uint32 i; 
  for(;j>0;j--) 
  for(i=0;i <50000;i++); 

void Wrcom(uint8 command)     //写命令函数,rs=0 

{  PSB_EN; 
  EL; 
  RSL; 
  Delay();   
  Senddata(command); 
  Delay(); 
  EH; 
  Delay(); 
  EL; 
  Delay(); 

void WrData(uint8 wrdata)  //写数据,rs=1 
{PSB_EN; 
  EL; 
  RSH; 
  Delay();   
  Senddata(wrdata); 
  Delay(); 
  EH; 
  Delay(); 
  EL; 
  Delay(); 

void LCD_int(void)   //初始化 
{  RSTL; 
  DElay(50);   
  RSTH; 
  DElay(50); 
  Wrcom(0x30);  //8位接口,基本指令集 
  DElay(50);   
  Wrcom(0x0C);  //显示开关,光标设定 
  DElay(50); 
  Wrcom(0x01);   //清屏 
  DElay(50); 
  Wrcom(0x06);   //进入设定点 
  DElay(50); 
   



  int main (void) 
{// add user source code 
  PINSEL0=0x00000000; 
  PINSEL1=0x00000000; 
  IO0DIR=RS|E|RST|PSB; 
  IO0DIR=IO0DIR|D0_D7; 
  LCD_int(); 
  Wrcom(0x80);//设定现实地址 
   
  WrData(0x41);//发送个半宽字 
   
   
   
  while(1); 
  return 0; 


由于第一次弄,所以程序有点简单,只想让它显示一个半宽字,可是没有任何字显示啊?希望高手指点,谢谢! 
 
 
 

相关帖子

沙发
fjhcpu| | 2008-10-1 19:24 | 只看该作者

先看看硬件问题...负压

使用特权

评论回复
板凳
yuzhuju| | 2008-10-5 14:16 | 只看该作者

ST7920没有负压

ST7920本来有内建一个2倍压电路,外面接2个升压电容.
这个时候VDD用3V左右就可以.

但是现在很多模组厂可能没做这个电路,而是外面给了用户一个V0 PIN.

如果是这样的话,请在V0加个5V电压,看屏幕有没有起底色.

很多人没点亮是因为没有给模组一个足够高的LCD驱动电压.

使用特权

评论回复
地板
fantesy| | 2008-10-15 22:50 | 只看该作者

电平是不是不够高???

2114的高电平是3.3V,有没有可能是电平不够高啊

使用特权

评论回复
5
xhtxzxw| | 2008-10-19 19:48 | 只看该作者

嘿嘿

如果不是复制粘贴错误的话,那么
#define RS 1 < <22           //??? 应该是RS     (1<<22)
#define PSB 1 < <24          //??? 应该是PSB    (1<<24)
#define E 1 < <23           //??? 应该是E      (1<<23)
#define RST 1 < <25          //??? 应该是RST    (1<<25)
#define D0_D7 0xFF < <6      //??? 应该是D0_D7  (0xff<<6)

LZ现在的写法,一个“左移运算符”变成了两个“小于运算符”!
最好加一对括号!保证不出问题。

使用特权

评论回复
6
xhtxzxw| | 2008-10-19 20:06 | 只看该作者

嘿嘿

估计是复制粘贴的错误,呵呵
看了一下:
1、你的EL,EH定义错了,从RSL、RSH那里复制粘贴的吧?
2、关键关键::E信号不象你想象的跟一般的芯片那样低有效,而是相反,高有效!E为高,才可以对这个LCD模块进行读写操作,你现在倒好,都是EL之后写的,肯定写不进去啊!
3、其他的没仔细看,嘿嘿

使用特权

评论回复
7
1dqmoon| | 2008-10-21 16:42 | 只看该作者

应该有升压命令吧?

感觉初始化部分缺少开启倍压的命令
如果是外部电压则可以不用

使用特权

评论回复
8
sunwind45| | 2008-10-21 21:55 | 只看该作者

我也在弄这个,买了个12864lcd,也没显示

我也不知道它的管脚定义,它网站上的资料感觉不符。
YJ12864D2,背板上这样写的,有哪位高人晓得?

我现在也显示不了,初始化连光标也看不见。
感觉程序也没错,有些郁闷!

我买的是带负压输出的,-5V。加个变阻器与Vo连上,是可以调节对比度的。

你们显示时,光标有多大?

是不是st7920控制器都有字库?
我买的时候,说没字库。没字库是不是就不是st7920?呵呵

明天打电话问问那卖我的。买的时候没经验,好多事情也没问清楚。在她那里试了试,还可以;拿回来自己弄就玩完了。

使用特权

评论回复
9
usecoolful| | 2008-11-15 23:29 | 只看该作者

这个的很简单的啊

使用特权

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

本版积分规则

11

主题

16

帖子

0

粉丝