求助关于LCD显示屏驱动程序例程问题

2019-10-15 04:09发布

本帖最后由 邵少少 于 2017-2-8 09:11 编辑

在对LCD写操作的时候,LCD_WR_REG(U16 data)函数,这个函数往LCD写命令,类似0x29,0x2c这样子的,又要写需要读取或者需要写入数据的 寄存器名称,例如R7等等,我是不明白LCD如何区分这两个数据,命令和 寄存器名称是有重叠的部分
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
17条回答
南有乔木
1楼-- · 2019-10-16 01:35
 精彩回答 2  元偷偷看……
邵少少
2楼-- · 2019-10-16 07:26
南有乔木 发表于 2017-2-8 13:30
首先,例程中LCD显示控制器采用的是8080并口方式,需要对8080并行总线有一个了解。
其实各类总线的功能都 ...

非常感谢您回复的这么详细。
这些我明白的。现在是我在例程中注意到写寄存器LCD_WR_REG()函数既写命令,又写寄存器地址,如果寄存器地址和命令一样,LCD怎么来区分,此时两者的时序是一样的,都是在RS低电平下完成,这时候应该理解为写入的是命令。
这个函数写入的是寄存器地址的时候假如和命令是一样的,LCD怎么区分?还是我理解跑偏了?
南有乔木
3楼-- · 2019-10-16 11:01
邵少少 发表于 2017-2-8 13:38
非常感谢您回复的这么详细。
这些我明白的。现在是我在例程中注意到写寄存器LCD_WR_REG()函数既写命令, ...

就像例程中的
void LCD_DisplayOn(void)
{                                          
        if(lcddev.id==0X9341||lcddev.id==0X6804||lcddev.id==0X5310||lcddev.id==0X1963)LCD_WR_REG(0X29);        //开启显示
        else if(lcddev.id==0X5510)LCD_WR_REG(0X2900);        //开启显示
        else LCD_WriteReg(0X07,0x0173);                                          //开启显示
}

每种芯片对应的指令及相应功能都在datasheet中给出了,一种芯片,开发商不可能在开发的时候给自己制定两个一模一样指令来控制不同的功能啊。。
你贴的例程R7应该就是0x07这个指令吧。。
LCD_WriteReg()函数包含了写寄存器编号和数据两个参数,写寄存器编号也是一种指令吧。。就是写命令,都是一回事。。不可能重复啊
这是我的理解
邵少少
4楼-- · 2019-10-16 15:09
南有乔木 发表于 2017-2-8 14:09
就像例程中的
void LCD_DisplayOn(void)
{                                          

我一开始也是和你一样的理解,结果看到了这个真的有些不懂了,因为GRAM排序肯定是和命令有重叠的,从00开始就重叠了。所以厂家考虑到这些,在读写GRAM前必须写入读命令0x2E和写命令0x2C,但是例程在读芯片ID时并没有先写入命令,而是直接读出ID,让我不太明白,例如图中我标注的 QQ截图20170208130030.png
南有乔木
5楼-- · 2019-10-16 16:31
0X2E 0X2C是读写数据指令,和读ID没有关系


圈出来的部分应该是读取其他芯片ID的指令,为了兼容原子的所有LCD芯片,具体你可以从datasheet中去找。。根据9341数据手册,读取ID需要指令0xd3 读ID4指令。。在你所标注程序下方有体现
邵少少
6楼-- · 2019-10-16 17:04
 精彩回答 2  元偷偷看……

一周热门 更多>