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

[复制链接]
 楼主| w3571604 发表于 2008-10-1 18:07 | 显示全部楼层 |阅读模式
&nbsp;&nbsp;&nbsp;&nbsp;请高手看看我的程序,是程序不对还是我的液晶屏坏了,如果感觉没有问题的话给我个回复,谢谢!&nbsp;&nbsp;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;我的MPU是&nbsp;arm7&nbsp;lpc2114,液晶屏的芯片是ST7920,采用的是I/O口进行写操作(以后还要定义同步缓冲区,所以没有设置读),并口传输数据。这是我的程序:&nbsp;<br />#include&nbsp;&quot;config.h&quot;&nbsp;<br />#define&nbsp;RS&nbsp;1&nbsp;&lt&nbsp;&lt22   &nbsp;//数据,指令选择引脚&nbsp;<br /><br />#define&nbsp;RSH IO0SET=RS  &nbsp;//选择数据&nbsp;<br />#define&nbsp;RSL IO0CLR=RS &nbsp;//选择指令&nbsp;<br /><br />#define&nbsp;PSB&nbsp;1&nbsp;&lt&nbsp;&lt24   &nbsp;//选择并口 &nbsp;,这个口后来我悬空了,因为默认是高&nbsp;<br />#define&nbsp;PSB_EN&nbsp;IO0SET&nbsp;=PSB&nbsp;<br /><br />#define&nbsp;E 1&nbsp;&lt&nbsp;&lt23      &nbsp;//使能,高-&gt低有效&nbsp;<br /><br />#define&nbsp;EL &nbsp;IO0CLR=RS&nbsp;<br />#define&nbsp;EH &nbsp;IO0SET=RS&nbsp;<br /><br />#define&nbsp;RST&nbsp;1&nbsp;&lt&nbsp;&lt25      //复位&nbsp;<br />#define&nbsp;RSTH&nbsp;IO0SET=RST&nbsp;<br />#define&nbsp;RSTL IO0CLR=RST&nbsp;<br /><br />#define&nbsp;D0_D7&nbsp;0xFF&nbsp;&lt&nbsp;&lt6     //用P0.6--P0.13&nbsp;数据总线&nbsp;<br />void&nbsp;Senddata(uint8&nbsp;data)      //总控制I/O口,发送数据&nbsp;<br />{&nbsp;<br />IO0CLR=0xFF&nbsp;&lt&nbsp;&lt6;IO0SET=(data&0xFF)&nbsp;&lt&nbsp;&lt6;}&nbsp;<br />void&nbsp;Delay()      //由于我没有采用读忙,所以采用延时函数&nbsp;<br />{&nbsp;<br />  uint8&nbsp;i;&nbsp;<br />  for(i=0;i&nbsp;&lt5000;i++);&nbsp;<br />}&nbsp;<br />void&nbsp;DElay(uint8&nbsp;j)    //大延时函数&nbsp;<br />{&nbsp;<br />  uint32&nbsp;i;&nbsp;<br />  for(;j&gt0;j--)&nbsp;<br />  for(i=0;i&nbsp;&lt50000;i++);&nbsp;<br />}&nbsp;<br />void&nbsp;Wrcom(uint8&nbsp;command)     //写命令函数,rs=0&nbsp;<br /><br />{  PSB_EN;&nbsp;<br />  EL;&nbsp;<br />  RSL;&nbsp;<br />  Delay();  &nbsp;<br />  Senddata(command);&nbsp;<br />  Delay();&nbsp;<br />  EH;&nbsp;<br />  Delay();&nbsp;<br />  EL;&nbsp;<br />  Delay();&nbsp;<br />}&nbsp;<br />void WrData(uint8&nbsp;wrdata)  //写数据,rs=1&nbsp;<br />{PSB_EN;&nbsp;<br />  EL;&nbsp;<br />  RSH;&nbsp;<br />  Delay();  &nbsp;<br />  Senddata(wrdata);&nbsp;<br />  Delay();&nbsp;<br />  EH;&nbsp;<br />  Delay();&nbsp;<br />  EL;&nbsp;<br />  Delay();&nbsp;<br />}&nbsp;<br />void&nbsp;LCD_int(void)   //初始化&nbsp;<br />{  RSTL;&nbsp;<br />  DElay(50);  &nbsp;<br />  RSTH;&nbsp;<br />  DElay(50);&nbsp;<br />  Wrcom(0x30);  //8位接口,基本指令集&nbsp;<br />  DElay(50);  &nbsp;<br />  Wrcom(0x0C);  //显示开关,光标设定&nbsp;<br />  DElay(50);&nbsp;<br />  Wrcom(0x01);  &nbsp;//清屏&nbsp;<br />  DElay(50);&nbsp;<br />  Wrcom(0x06);   //进入设定点&nbsp;<br />  DElay(50);&nbsp;<br />  &nbsp;<br />}&nbsp;<br /><br /><br />  int&nbsp;main&nbsp;(void)&nbsp;<br />{//&nbsp;add&nbsp;user&nbsp;source&nbsp;code&nbsp;<br />  PINSEL0=0x00000000;&nbsp;<br />  PINSEL1=0x00000000;&nbsp;<br />  IO0DIR=RS|E|RST|PSB;&nbsp;<br />  IO0DIR=IO0DIR|D0_D7;&nbsp;<br />  LCD_int();&nbsp;<br />  Wrcom(0x80);//设定现实地址&nbsp;<br />  &nbsp;<br />  WrData(0x41);//发送个半宽字&nbsp;<br />  &nbsp;<br />  &nbsp;<br />  &nbsp;<br />  while(1);&nbsp;<br />  return&nbsp;0;&nbsp;<br />}&nbsp;<br /><br />由于第一次弄,所以程序有点简单,只想让它显示一个半宽字,可是没有任何字显示啊?希望高手指点,谢谢!&nbsp;<br />&nbsp;<br />&nbsp;<br />&nbsp;<br />
fjhcpu 发表于 2008-10-1 19:24 | 显示全部楼层

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

  
yuzhuju 发表于 2008-10-5 14:16 | 显示全部楼层

ST7920没有负压

ST7920本来有内建一个2倍压电路,外面接2个升压电容.<br />这个时候VDD用3V左右就可以.<br /><br />但是现在很多模组厂可能没做这个电路,而是外面给了用户一个V0&nbsp;PIN.<br /><br />如果是这样的话,请在V0加个5V电压,看屏幕有没有起底色.<br /><br />很多人没点亮是因为没有给模组一个足够高的LCD驱动电压.
fantesy 发表于 2008-10-15 22:50 | 显示全部楼层

电平是不是不够高???

2114的高电平是3.3V,有没有可能是电平不够高啊
xhtxzxw 发表于 2008-10-19 19:48 | 显示全部楼层

嘿嘿

如果不是复制粘贴错误的话,那么<br />#define&nbsp;RS&nbsp;1&nbsp;&lt&nbsp;&lt22&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//???&nbsp;应该是RS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(1&lt&lt22)<br />#define&nbsp;PSB&nbsp;1&nbsp;&lt&nbsp;&lt24&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//???&nbsp;应该是PSB&nbsp;&nbsp;&nbsp;&nbsp;(1&lt&lt24)<br />#define&nbsp;E 1&nbsp;&lt&nbsp;&lt23&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//???&nbsp;应该是E&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(1&lt&lt23)<br />#define&nbsp;RST&nbsp;1&nbsp;&lt&nbsp;&lt25&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//???&nbsp;应该是RST&nbsp;&nbsp;&nbsp;&nbsp;(1&lt&lt25)<br />#define&nbsp;D0_D7&nbsp;0xFF&nbsp;&lt&nbsp;&lt6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//???&nbsp;应该是D0_D7&nbsp;&nbsp;(0xff&lt&lt6)<br /><br />LZ现在的写法,一个“左移运算符”变成了两个“小于运算符”!<br />最好加一对括号!保证不出问题。<br />
xhtxzxw 发表于 2008-10-19 20:06 | 显示全部楼层

嘿嘿

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

应该有升压命令吧?

感觉初始化部分缺少开启倍压的命令<br />如果是外部电压则可以不用
sunwind45 发表于 2008-10-21 21:55 | 显示全部楼层

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

我也不知道它的管脚定义,它网站上的资料感觉不符。<br />YJ12864D2,背板上这样写的,有哪位高人晓得?<br /><br />我现在也显示不了,初始化连光标也看不见。<br />感觉程序也没错,有些郁闷!<br /><br />我买的是带负压输出的,-5V。加个变阻器与Vo连上,是可以调节对比度的。<br /><br />你们显示时,光标有多大?<br /><br />是不是st7920控制器都有字库?<br />我买的时候,说没字库。没字库是不是就不是st7920?呵呵<br /><br />明天打电话问问那卖我的。买的时候没经验,好多事情也没问清楚。在她那里试了试,还可以;拿回来自己弄就玩完了。<br /><br />
usecoolful 发表于 2008-11-15 23:29 | 显示全部楼层

这个的很简单的啊

  
您需要登录后才可以回帖 登录 | 注册

本版积分规则

11

主题

16

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部

11

主题

16

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部