关于LCD 液晶测试程序的问题
我从lumit 的网站上下载了一个LCD 液晶测试程序,但是看了好多天,还是有很多的不明白,斑竹能不能给注释一下啊,谢了 好早以前写的,是参考了一个液晶的 pdf 手册,有些记不清放哪里了,其实就是最普通的那种字符型液晶驱动,初始化时写入一些特定的“控制字”,等后继的 Step 实验里面补上吧。 :lol: 好的,谢谢斑竹 :lol: 斑竹能不能把那个pdf手册给我啊,我想先看看,谢谢 :P 好象是GXM1602C字符型液晶显示模块,但是在google和baidu上搜不到什么有用的信息。 GXM1602C技术手册在http://www.guoxian.com/products/lcd/pdf-gx/GXM1602C.pdf
上下载 抱歉,帖子沉下去了没留意到,现在补上(见附件)! :P 思路:
(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就比较容易了!!! 谢谢斑竹和chw75,我现在在看,呵呵 :P 问斑竹一个问题啊,我们程序中用0x3fd0000这个地址初始化lcd,用0x3fd0002这个来写数据,这几个地址怎么来的呢?谢谢 :P 解答:
(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. 也就是说A0,A1的地址就是给LCDA0和LCDA1的数据。它是通过什么来知道0x0000002就是A0和A1的地址呢?当我写数据时,我看程序是直接把要显示的数据给了0x3fd0002这个地址,好象没有用到那8条DATA线,是怎么回事呢?谢谢 :P 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。 噢,谢谢了,呵呵。还有啊,把数据给了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) ;
} chw75,呵呵,能不能把你的qq给我,我的是50548410,向你学习噢 :P
页:
[1]
2