本帖最后由 salore 于 2009-11-29 20:45 编辑
这是我用pSoc做的LCD显示驱动的测试例子(虽然pSoc提供了LCD模块显示的底层库函数,但为了从原理上弄懂LCD显示,我还是没有用库函数),出现了一些我搞不懂的问题,望高手指点!附件中提供了工程代码,接口定义在程序头文件中有说明。
测试条件:pSoc cy8c24794 start kit board, LCD为TS1620-1
经测试,出现以下问题:
1、字符显示函数LCD_DispChar(uchar row, uchar col, uchar uDispData):
调用该函数,如LCD_DispChar(1,1,uDispData),本来意图是在LCD板的1行1列——LCD内部RAM数据寄存器地址是0x00,初始光标处在0x00——处显示uDispData指定的一个字符,测试结果却在1行2列处(0x01)显示,同时光标移向1行3列(0x02);同样测试以下代码:
//注:LCD初始化设置为8位数据接口、2行显示、光标自动加、屏幕不移动、光标显示并闪烁
LCD_WriteCmd(0x00 | 0x80); //设定LCD中的字符显示地址为0x00,即1行1列
LCD_WriteData(0x54); //0x54为字符‘T’的LCD字型码
LCD_WriteData(0x65); //0x65为字符‘e’的LCD字型码
LCD_WriteData(0x73); //0x73为字符‘s’的LCD字型码
LCD_WriteData(0x74); //0x74为字符‘t’的LCD字型码
运行结果显示T(1x2),e(1x4),s(1x6),t(1x8),即首字符在1行2列开始显示,各个字符间出现空格,本来期望显示的是连续的"Test"字符串。
2、LCD中的80字节RAM地址和屏幕显示的位置是什么关系?光标对应的RAM是如何确定的?如果在Display shift或cursor move情况下,这种(对应)关系会发生什么样的变化?
3、当LCD显示没有库函数可用的情况下,所有的显示/驱动函数都需要自己编写,那么使用LCD要注意哪些问题? |