OpenEdv-开源电子网

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

想听下原子哥的写参数函数的解析:LCD_WR_DATA(Ypos>>8); LCD_WR_DATA(Ypos&0XFF);

[复制链接]

4

主题

13

帖子

0

精华

新手上路

积分
49
金钱
49
注册时间
2013-10-22
在线时间
0 小时
发表于 2015-4-19 23:27:06 | 显示全部楼层 |阅读模式
5金钱
原子哥你好:

我看了,LCD实验很多写参数都用到要将数据右移8位,写入,然后又与0XFF想与再写入
我看了写参数的时候是高位在前,右移8位是不是提取高位写入?
低位的话不用动,和0XFF相与不就是本身吗?这样做的含义是什么?

可能原子哥马上能明白,小弟刚刚接触这个还不是很懂,看了一天有点云里雾里!
希望能得到原子哥的帮忙!



规格书的写参数格式:
Command  0  1  ↑ XX  0  0  1  0  1  0  1  0  2Ah 
1st
Parameter  1  1  ↑ XX  SC15  SC14  SC13  SC12  SC11  SC10  SC9  SC8 
2nd
Parameter  1  1  ↑ XX  SC7  SC6  SC5  SC4  SC3  SC2  SC1  SC0 
Note1
3rd
Parameter  1  1  ↑ XX  EC15  EC14  EC13  EC12  EC11  EC10  EC9  EC8 
4th
Parameter  1  1  ↑ XX  EC7  EC6  EC5  EC4  EC3  EC2  EC1  EC0 
Note1




下面都是原子哥用到的代码:
LCD_WR_DATA(Xpos>>8); 
LCD_WR_DATA(Xpos&0XFF);  
LCD_WR_REG(lcddev.setycmd); 
LCD_WR_DATA(Ypos>>8); 
LCD_WR_DATA(Ypos&0XFF);

LCD_WR_DATA((lcddev.width-1)>>8);LCD_WR_DATA((lcddev.width-1)&0XFF);
LCD_WR_REG(lcddev.setycmd); 
LCD_WR_DATA(0);LCD_WR_DATA(0);
LCD_WR_DATA((lcddev.height-1)>>8);LCD_WR_DATA((lcddev.height-1)&0XFF);  

最佳答案

查看完整内容[请看2#楼]

对16位数据来说,不用&0XFF都OK。 但是对于32位数据,就有必要了。 这只是一种程序员的习惯,在lcd这里你可以去掉&0XFF
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-4-19 23:27:07 | 显示全部楼层
对16位数据来说,不用&0XFF都OK。
但是对于32位数据,就有必要了。
这只是一种程序员的习惯,在lcd这里你可以去掉&0XFF
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
21
金钱
21
注册时间
2015-5-10
在线时间
0 小时
发表于 2015-5-10 12:24:33 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
为什么LCD实验很多写参数都用到要将数据右移8位,写入。
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-5-10 22:57:09 | 显示全部楼层
回复【3楼】1888:
---------------------------------
因为需要,具体的你看lcd 驱动ic的数据手册。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

0

主题

6

帖子

0

精华

新手入门

积分
16
金钱
16
注册时间
2016-1-26
在线时间
5 小时
发表于 2016-1-26 20:58:03 | 显示全部楼层
正点原子 发表于 2015-4-19 23:27
对16位数据来说,不用&0XFF都OK。
但是对于32位数据,就有必要了。
这只是一种程序员的习惯,在lcd这里你可 ...

LCD_WR_DATA();就是写十六位宽度数据的函数,为嘛还要分两次写(先写高8位,再写低8位),直接LCD_WR_DATA(Ypos)不就一次性把16位宽度数据写进去了吗?请教原子哥!
回复

使用道具 举报

15

主题

114

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
243
金钱
243
注册时间
2014-7-1
在线时间
28 小时
发表于 2016-4-7 16:57:34 | 显示全部楼层
xiaxingxing 发表于 2016-1-26 20:58
LCD_WR_DATA();就是写十六位宽度数据的函数,为嘛还要分两次写(先写高8位,再写低8位),直接LCD_WR_DAT ...

LCD_WR_DATA();就是写十六位宽度数据的函数,为嘛还要分两次写(先写高8位,再写低8位),直接LCD_WR_DATA(Ypos)不就一次性把16位宽度数据写进去了吗?请教原子哥!
回复

使用道具 举报

15

主题

114

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
243
金钱
243
注册时间
2014-7-1
在线时间
28 小时
发表于 2016-4-7 16:58:48 | 显示全部楼层
正点原子 发表于 2015-5-10 22:57
回复【3楼】1888:
---------------------------------
因为需要,具体的你看lcd 驱动ic的数据手册。

LCD_WR_DATA();就是写十六位宽度数据的函数,为嘛还要分两次写(先写高8位,再写低8位),直接LCD_WR_DATA(Ypos)不就一次性把16位宽度数据写进去了吗?请教原子哥!
回复

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
13
金钱
13
注册时间
2016-9-1
在线时间
1 小时
发表于 2016-9-1 07:02:47 | 显示全部楼层
我也遇到这个问题了 研究了一下来回答一下.
读数据手册可以看到列,页位置设置命令0x2A,0x2B都带4个参数, 其实就是把1个start位置,1个end位置各拆开成2个部分. 然后可以看到D17-D8始终是未定义状态,  所以就必须用低地址写两次了.
回复

使用道具 举报

0

主题

3

帖子

0

精华

初级会员

Rank: 2

积分
122
金钱
122
注册时间
2016-8-3
在线时间
42 小时
发表于 2016-9-12 15:03:53 | 显示全部楼层
正点原子 发表于 2015-4-19 23:27
对16位数据来说,不用&0XFF都OK。
但是对于32位数据,就有必要了。
这只是一种程序员的习惯,在lcd这里你可 ...

原子哥,为啥32位数据就有必要了,不理解
回复

使用道具 举报

106

主题

418

帖子

0

精华

高级会员

Rank: 4

积分
764
金钱
764
注册时间
2016-7-26
在线时间
123 小时
发表于 2016-10-6 11:25:42 | 显示全部楼层
取个名真费劲 发表于 2016-9-1 07:02
我也遇到这个问题了 研究了一下来回答一下.
读数据手册可以看到列,页位置设置命令0x2A,0x2B都带4个参数, ...

请问还在吗?难道就不能直接写8位吗?为什么要16位的?
回复

使用道具 举报

17

主题

329

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2532
金钱
2532
注册时间
2016-3-6
在线时间
393 小时
发表于 2017-7-27 21:14:39 | 显示全部楼层
liyuanxh 发表于 2016-9-12 15:03
原子哥,为啥32位数据就有必要了,不理解

兄弟搞明白了吗?现在在看,有点疑惑
路漫漫其修远兮,吾将上下而求索。
回复

使用道具 举报

13

主题

48

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
233
金钱
233
注册时间
2017-3-23
在线时间
52 小时
发表于 2017-12-20 10:19:16 | 显示全部楼层
楼主搞明白了吗?我也想知道
回复

使用道具 举报

0

主题

6

帖子

0

精华

新手上路

积分
28
金钱
28
注册时间
2018-9-27
在线时间
8 小时
发表于 2018-10-14 00:16:45 | 显示全部楼层
右移8位是因为一次只能写入8位,只有GRAM可以写入16位,所以先右移写入高八位,再写入低八位
回复

使用道具 举报

0

主题

3

帖子

0

精华

新手上路

积分
29
金钱
29
注册时间
2019-6-20
在线时间
7 小时
发表于 2019-12-11 15:00:28 | 显示全部楼层
取个名真费劲 发表于 2016-9-1 07:02
**** 作者被禁止或删除 内容自动屏蔽 ****

我感觉你说的很有道理。
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手上路

积分
22
金钱
22
注册时间
2019-11-23
在线时间
7 小时
发表于 2020-1-2 14:23:36 | 显示全部楼层
yuwezyu 发表于 2018-10-14 00:16
右移8位是因为一次只能写入8位,只有GRAM可以写入16位,所以先右移写入高八位,再写入低八位

右移了还是16位呀,只是高8变成了00000000
回复

使用道具 举报

0

主题

4

帖子

0

精华

新手入门

积分
8
金钱
8
注册时间
2019-5-4
在线时间
6 小时
发表于 2020-3-30 00:07:43 | 显示全部楼层
stm32f10321 发表于 2020-1-2 14:23
右移了还是16位呀,只是高8变成了00000000

对啊,只能把你这个移过的低8位写进去,00000000废掉了,然后再写Xpos的低8位
回复

使用道具 举报

20

主题

48

帖子

0

精华

初级会员

Rank: 2

积分
170
金钱
170
注册时间
2014-7-22
在线时间
18 小时
发表于 2020-4-27 09:50:37 | 显示全部楼层
void LCD_SetCursor(u16 Xpos, u16 Ypos)
{         
        if(lcddev.id==0X9341||lcddev.id==0X5310)
        {                    
                LCD_WR_REG(lcddev.setxcmd);
                LCD_WR_DATA(Xpos>>8);
                LCD_WR_DATA(Xpos&0XFF);         
                LCD_WR_REG(lcddev.setycmd);
                LCD_WR_DATA(Ypos>>8);
                LCD_WR_DATA(Ypos&0XFF);

这样只有XposYpos的高8为写进去了,低8位被移掉了啊
回复

使用道具 举报

20

主题

48

帖子

0

精华

初级会员

Rank: 2

积分
170
金钱
170
注册时间
2014-7-22
在线时间
18 小时
发表于 2020-4-27 09:51:32 | 显示全部楼层
luolingy 发表于 2020-4-27 09:50
void LCD_SetCursor(u16 Xpos, u16 Ypos)
{         
        if(lcddev.id==0X9341||lcddev.id==0X5310)

请原子老师指导一下
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-27 22:39

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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