OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 13498|回复: 21

求教,LCD驱动中LCD->LCD_RAM;是什么意思?

[复制链接]

28

主题

125

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
260
金钱
260
注册时间
2013-4-14
在线时间
1 小时
发表于 2013-4-24 17:22:51 | 显示全部楼层 |阅读模式
u16 LCD_ReadReg(u8 LCD_Reg)
{
  /* Write 16-bit Index (then Read Reg) */
  LCD->LCD_REG = LCD_Reg;
  LCD->LCD_RAM;
  /* Read 16-bit Reg */
  return (LCD->LCD_RAM);
}

中件那句相当于什么?
我可以一辈子都呆在家里不出来么?
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

71

主题

183

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
494
金钱
494
注册时间
2013-1-29
在线时间
1 小时
发表于 2013-4-24 17:57:39 | 显示全部楼层
回复【楼主位】杨帆:
---------------------------------
LCD是一个结构体指针 这个指针的首地址是对应的FSMC的地址 哪么LCD->LCD_REG的地址就是FSMC基地址  而LCD->LCD_RAM就是FSMC地址加2  因为FSMC的某条地址线连接了LCD的RS引脚(例如A0)  哪么当给LCD->LCD_REG 赋值时 A0=0, 则RS=0;相当于写进去了命令   给LCD->LCD_RAM赋值时 A0=1; 则RS=1; 相当于写进去了数据 
详情看手册FSMC章节
回复 支持 反对

使用道具 举报

54

主题

1008

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
2384
金钱
2384
注册时间
2012-11-22
在线时间
403 小时
发表于 2013-4-24 18:38:46 | 显示全部楼层
看原子的视频,有详解。
态度决定一切
回复 支持 反对

使用道具 举报

28

主题

125

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
260
金钱
260
注册时间
2013-4-14
在线时间
1 小时
 楼主| 发表于 2013-4-24 19:04:42 | 显示全部楼层
回复【2楼】langwanglx:
---------------------------------
谢谢,这些我知道的,我只是不懂中间那一句LCD->LCD_RAM;
的意思,在c语言语法看来,这句话什么都不算。
符合C语言语法么?
应该是是为了从寄存器读写设置为数据的读写,但是这句话是如何起作用的。
在C语言中它既不是语句,又不是变量声明,怎么就把地址变成写数据的了?
我可以一辈子都呆在家里不出来么?
回复 支持 反对

使用道具 举报

28

主题

125

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
260
金钱
260
注册时间
2013-4-14
在线时间
1 小时
 楼主| 发表于 2013-4-24 19:09:01 | 显示全部楼层
回复【3楼】冰封嗜魔:
---------------------------------
看过原子大哥的视频后也没有找到答案。
我只是不懂中间那一句LCD->LCD_RAM;
的意思,在c语言语法看来,这句话什么都不算。
符合C语言语法么?
应该是是为了从寄存器读写设置为数据的读写,但是这句话是如何起作用的。
在C语言中它既不是语句,又不是变量声明,怎么就把地址变成写数据的了?
我可以一辈子都呆在家里不出来么?
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-4-24 20:13:23 | 显示全部楼层
回复【5楼】杨帆:
---------------------------------
就是个地址啊.
没那么难理解吧?
LCD结构体就是定义在一个地址,然后里面的成员的地址按类型依次递增.
建议你先了解下LCD 的8080时序.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-4-24 20:14:09 | 显示全部楼层
回复【4楼】杨帆:
---------------------------------
这句话怎么就不符合C语言语法了?
结构体学过没有?
结构体指针,给成员赋值的时候,是怎么赋值的,知不知道?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

28

主题

125

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
260
金钱
260
注册时间
2013-4-14
在线时间
1 小时
 楼主| 发表于 2013-4-24 20:20:25 | 显示全部楼层
回复【6楼】正点原子:
---------------------------------
终于等到你了,原子哥,我看过了8080时序和FSMC的基本资料了,
大部分都理解了,我不理解的是LCD->LCD_RAM; 这句话,既没有写数据,也没有读数据,
翻译过来就是一个地址摆在那里,就是为了把RS从写寄存器转换成读数据吧,但是它符合C语言语法么?
LCD是一个指针,这句话意思是把指针指向LCD_RAM,从而实现RS位由0变1么?
我可以一辈子都呆在家里不出来么?
回复 支持 反对

使用道具 举报

28

主题

125

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
260
金钱
260
注册时间
2013-4-14
在线时间
1 小时
 楼主| 发表于 2013-4-24 20:22:06 | 显示全部楼层
回复【7楼】正点原子:
---------------------------------
可是它没有赋值啊。。。就一个指针摆在那里。
我可以一辈子都呆在家里不出来么?
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-4-24 21:14:36 | 显示全部楼层
回复【8楼】杨帆:
---------------------------------
这里return,就相当于读取一次LCD.
return x,要返回x,x用LCD->LCD_RAM替代,就说明,是要返回LCD->LCD_RAM所在地址的值,而这个值,是属于FSMC管辖范围,所以会引起一次FSMC的读数据操作,将读到的数据返回.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

28

主题

125

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
260
金钱
260
注册时间
2013-4-14
在线时间
1 小时
 楼主| 发表于 2013-4-24 22:24:10 | 显示全部楼层
回复【10楼】正点原子:
---------------------------------
明白了,原子哥哥,所以中间那一句
u16 LCD_ReadReg(u8 LCD_Reg)
{
    LCD->LCD_REG = LCD_Reg;
    LCD->LCD_RAM;
  return (LCD->LCD_RAM);
}
LCD->LCD_RAM;这一句就是完全没用的了,
我试着注释掉这句话,发现仍旧可以正常读取DeviceCode,
这个程序中写这句话多此一举了。
我可以一辈子都呆在家里不出来么?
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-4-25 00:43:18 | 显示全部楼层
是的
前面这句话确实是多余的.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

3

主题

16

帖子

0

精华

新手上路

积分
47
金钱
47
注册时间
2014-2-11
在线时间
9 小时
发表于 2014-2-11 12:40:21 | 显示全部楼层
回复【10楼】正点原子:
---------------------------------
请问为什么RETURN,是相当于赌一次LCD呢,读LCD应该把LCD的RD线拉低吧,这句RETURN祈祷这个作用了吗?
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-2-11 14:06:13 | 显示全部楼层
回复【13楼】lester1101:
---------------------------------
因为有LCD->LCD_RAM);
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

23

主题

292

帖子

0

精华

高级会员

Rank: 4

积分
501
金钱
501
注册时间
2013-9-17
在线时间
17 小时
发表于 2014-2-12 15:36:52 | 显示全部楼层
回复【13楼】lester1101:
---------------------------------
给 它一个 读指令 其余的 像你说的 RD线拉低  那都是 FSMC的事情了 不然怎么叫做总线   

所以 理解了吧
闷鱼闷闷不乐吃焖鱼
回复 支持 反对

使用道具 举报

69

主题

336

帖子

0

精华

高级会员

Rank: 4

积分
632
金钱
632
注册时间
2013-12-11
在线时间
0 小时
发表于 2014-2-13 14:59:16 | 显示全部楼层
回复【3楼】冰封嗜魔:
---------------------------------
哪个视频?我怎么没有看到
回复 支持 反对

使用道具 举报

69

主题

336

帖子

0

精华

高级会员

Rank: 4

积分
632
金钱
632
注册时间
2013-12-11
在线时间
0 小时
发表于 2014-2-13 15:00:28 | 显示全部楼层
回复【5楼】杨帆:
---------------------------------
 LCD->LCD_REG = LCD_Reg;这句话是什么意思?求解释
回复 支持 反对

使用道具 举报

54

主题

1008

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
2384
金钱
2384
注册时间
2012-11-22
在线时间
403 小时
发表于 2014-2-13 20:08:19 | 显示全部楼层
就是写寄存器呀,直接地址操作。
态度决定一切
回复 支持 反对

使用道具 举报

1

主题

6

帖子

0

精华

新手上路

积分
30
金钱
30
注册时间
2015-5-23
在线时间
0 小时
发表于 2015-9-28 22:20:18 | 显示全部楼层
回复【18楼】冰封嗜魔:
---------------------------------
但是我怎么知道寄存器的地址是什么呢?哪里可以看到
回复 支持 反对

使用道具 举报

54

主题

1008

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
2384
金钱
2384
注册时间
2012-11-22
在线时间
403 小时
发表于 2015-9-29 11:43:01 | 显示全部楼层
回复【19楼】边界层:
---------------------------------
这个要看你FMSC地址线的接法,原子哥视频有详解。
态度决定一切
回复 支持 反对

使用道具 举报

0

主题

10

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
280
金钱
280
注册时间
2014-5-12
在线时间
79 小时
发表于 2015-10-26 21:19:35 | 显示全部楼层
这是读Reg,在对应读LCD_ReadRAM也有此类问题,如nsigned int LCD_ReadRAM(void)
{
unsigned int dummy;

LCD->LCD_REG = R34; 
dummy = LCD->LCD_RAM; 
       dummy++;

}

 dummy++语句,有的有加,有的又没加。它起什么作用呢?
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手上路

积分
21
金钱
21
注册时间
2016-10-18
在线时间
2 小时
发表于 2018-7-19 22:27:31 | 显示全部楼层
正点原子 发表于 2013-4-24 20:13
回复【5楼】杨帆:
---------------------------------
就是个地址啊.
没那么难理解吧?
LCD结构体就是定义在 ...

原子哥,他说的这语句可以理解为代码执行延时么,因为LCD读数据耗费的时间相对要比写更耗时间,可以用delay_ms函数适当延时替换吧?搂住后面又说了去掉也不影响应该就是读取的时间比这两句代码之间的执行时间更小的原因吧,我看到你们后面的版本中的代码都是带5ms延时来替换他的那句LCD->LCD_RAM的
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-17 11:50

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表