中国Linux公社论坛's Archiver

flyxyh 发表于 2005-7-7 18:07

关于LCD 液晶测试程序的问题

[b]我从lumit 的网站上下载了一个LCD 液晶测试程序,但是看了好多天,还是有很多的不明白,斑竹能不能给注释一下啊,谢了  [/b]

limingth 发表于 2005-7-8 23:31

好早以前写的,是参考了一个液晶的 pdf 手册,有些记不清放哪里了,其实就是最普通的那种字符型液晶驱动,初始化时写入一些特定的“控制字”,等后继的 Step 实验里面补上吧。 :lol:

flyxyh 发表于 2005-7-10 09:55

好的,谢谢斑竹 :lol:

flyxyh 发表于 2005-7-11 15:51

斑竹能不能把那个pdf手册给我啊,我想先看看,谢谢 :P

chw75 发表于 2005-7-19 10:09

好象是GXM1602C字符型液晶显示模块,但是在google和baidu上搜不到什么有用的信息。

chw75 发表于 2005-7-19 10:31

GXM1602C技术手册在
http://www.guoxian.com/products/lcd/pdf-gx/GXM1602C.pdf
上下载

limingth 发表于 2005-7-19 11:25

抱歉,帖子沉下去了没留意到,现在补上(见附件)! :P

chw75 发表于 2005-7-19 11:33

思路:
(1)通过GXM1602C技术手册了解16接口的意义。
(2)参看lumit4510的电路图了解到nECS1_LCD是最samsung4510b(pin 68)和LCD之间最重要的接口,
(3)参看um_sam4510b_rev1.pdf手册得知pin 68是nECS1。
(4)参看um_sam4510b_rev1.pdf手册得知EXTACON0端口是nECS1的控制端口。
(5)在参看李明写的tftp14源代码的lcd.h和lcd.c就比较容易了!!!

flyxyh 发表于 2005-7-19 15:53

谢谢斑竹和chw75,我现在在看,呵呵 :P

flyxyh 发表于 2005-7-20 08:54

问斑竹一个问题啊,我们程序中用0x3fd0000这个地址初始化lcd,用0x3fd0002这个来写数据,这几个地址怎么来的呢?谢谢 :P

chw75 发表于 2005-7-20 12:08

解答:
(1)REFEXTCON的reset/value是0x00083fd.
(2)在lcd.h中
#define LCD_Addr_Base          ( ((REFEXTCON & 0x3FF) << 16 ) + 0x00004000 )
可得到0x3fd0000
(3)关于0x3fd0002写数据是根据lcd.h如下几行得到:
#define Lcd_Inst_Reg        0x0
#define Lcd_Data_Reg        0x2
#define Lcd_Reg_Write         0x0
#define Lcd_Reg_Read         0x1
#define LDATAWR  (LCD_Addr_Base+Lcd_Data_Reg+Lcd_Reg_Write)
为什么是0x3fd0002是因为0x3fd0000是base,0x0000002是与A0,A1地址
相连的LCDA0,LCDA0两根线。在LCD电路中,LCDA0功能上读写选择R/W,LCDA1功能是数据命令选择端RS.

flyxyh 发表于 2005-7-20 16:25

也就是说A0,A1的地址就是给LCDA0和LCDA1的数据。它是通过什么来知道0x0000002就是A0和A1的地址呢?当我写数据时,我看程序是直接把要显示的数据给了0x3fd0002这个地址,好象没有用到那8条DATA线,是怎么回事呢?谢谢 :P

chw75 发表于 2005-7-20 19:42

sorry,可能是我没讲清楚。
lcd和S3c4510有八根数据线相连(DB0-DB7).
lcd和S3c4510有两根地址线相连(A0-A1).
因为lumit4510板上A0与读写选择R/W相连,而A1与数据命令选择端RS相连

可得到如下:
#define Lcd_Inst_Reg 0x0
#define Lcd_Data_Reg 0x2
#define Lcd_Reg_Write 0x0
#define Lcd_Reg_Read 0x1
可知道若向LCD写数据,则A0=0,A1=1,这就是为什么地址是0x0000002。


由以下可知道:
在snds.h中定义:
#define EXTDBWTH        (VPint(Base_Addr+0x3010))

在lcd.h中定义:
#define DSX1        (0x01 << 22)

在lcd.c中代码:
EXTDBWTH &= 0xff3fffff ;
EXTDBWTH |= DSX1 ;

设定lcd的传输数据宽度为8位,也就是用到DB7-DB0。

flyxyh 发表于 2005-7-20 20:18

噢,谢谢了,呵呵。还有啊,把数据给了0x3fd0002也就是下面这个函数中的LcdDataWrAddr,是不是就是给了XDATA0——XDATA7?Addr和XDATA有对应关系吧?并且DATA是一个无符号字符型的,是不是要有一个字符——>8位数据的转换?才能给XDATA0——XDATA7?谢谢 :P
void lPut_byte(U8 DATA)
{
        U8 *LcdDataWrAddr ;
        LcdDataWrAddr = (U8 *)LDATAWR ;
        *LcdDataWrAddr=  DATA ;
        WaitLcd(3) ;
}

flyxyh 发表于 2005-7-21 14:56

chw75,呵呵,能不能把你的qq给我,我的是50548410,向你学习噢 :P

chw75 发表于 2005-7-22 20:52

sorry,我没有qq。我也才开始学嵌入式编程,水平很差。其实我也通过你的问题,把lcd驱动搞明白的。
有什么问题大家可以在bbs上交流!

关于上面问题我的理解:
(1)把数据给了0x3fd0002是下面这个函数中的LcdDataWrAddr,是给了XDATA0——XDATA7。
(2)DATA是一个无符号字符型,我理解不需要字符——>8位数据的转换。

limingth 发表于 2005-7-23 09:47

感谢 chw75 的深入分析,我把液晶驱动调出来后就没怎么仔细看了,惭愧惭愧,向 chw75 学习! :oops:

flyxyh 发表于 2005-8-16 09:37

多谢多谢,前几天出去了 :P ,现在正在继续看,呵呵

limingth 发表于 2005-8-16 10:32

现在 chw75 很红啊, 号召大家都更 chw75 一些...   :P

chw75 发表于 2005-8-16 11:01

斑竹过奖了,我只是业余时间多一点,而且对这一块比较感兴趣罢了.
对斑竹多次对我无私的帮助再次表示由衷的谢意!!
我现在正在看SCSI等相关的资料,相关工作正在进行中...

limingth 发表于 2005-8-16 11:24

加油加油,有进展及时来论坛上发布,有问题可以大家一起解决。

flyxyh 发表于 2005-8-23 10:31

我想编写一个能够放在uClinux系统里面的 一个LCD驱动程序,和uClinux内核编译在一起,要修改那些地方呢 :P ,谢谢

flyxyh 发表于 2005-8-27 09:10

斑竹帮帮忙阿,呵呵,具体要修改那些地方呢 :P

limingth 发表于 2005-8-27 12:00

可以不写成linux驱动形式,直接用应用程序做,那样就和写 hello world 差不多,可以参考 lumit4510 User Guide 1.4 里面的关于 uclinux 部分内容。

flyxyh 发表于 2005-8-27 15:54

噢,谢谢斑竹,呵呵,我再看看 :P

xiexuehui 发表于 2006-1-18 21:09

偶是新手,拿到板后,测试LCD,发现问题,向版主及各位大虾求救:
将Learn-lumit-Step-19.字符液晶显示实验\debug\demo_lcd.uue
download到板上,执行go,LCD上没反应.
对照着看HD44780资料,板上调节R27可改变显示对比,因此又调了R27,
LCD也没反应。
急!!~多谢了

另外还有,程序里有一句
#define LCD_Addr_Base          ( ((REFEXTCON & 0x3FF) << 16 ) + 0x00004000 )
是否应该说这是由于GXM1602C的E脚接到pin68 (nECS1)的原因?由此类推,
是不是可以说,若程序相应部分里写成以下代码:
#define LCD_Addr_Base           ((REFEXTCON & 0x3FF) << 16 )
那么GXM1602C的E脚应接到pin68(nECS1)

xiexuehui 发表于 2006-1-18 21:28

sorry,更正:
... ...
是不是可以说,若程序相应部分里写成以下代码:
#define LCD_Addr_Base ((REFEXTCON & 0x3FF) << 16 )
那么GXM1602C的E脚应接到pin68(nECS1)
                                                    ^^^^^(nECS0)

limingth 发表于 2006-1-21 13:46

最近几天 linuxfans.org 一直连接不上,回复晚了抱歉。  :-(
网站上的程序都是经过验证的,肯定没有问题。
如果你的lcd没亮,可以从以下几个方面试试:
1、bootloader 用 1.6.0 版
2、lcd 插入方向,对比度调节电阻设置是否合适?
3、直接用 1.6.0 的 bootloader ,reset 后输入回车,也可以点亮 lcd 并输出,可以按照 http://www.linuxfans.org/nuke/modules.php?name=Forums&file=viewtopic&t=130844 测试一下。

如果解决了,希望能回复一下。

页: [1]

Powered by Discuz! Archiver 6.1.0F  © 2001-2007 Comsenz Inc.