找回密码
 立即注册
查看: 135|回复: 5

请教个问题:16-bit并口彩屏,写入字数据时的顺序

[复制链接]
  • 打卡等级:常住居民III
  • 打卡总天数:172
  • 最近打卡:2025-05-01 10:06:01

44

主题

124

回帖

1437

积分

金牌会员

积分
1437
发表于 2025-2-15 09:45:18 | 显示全部楼层 |阅读模式
环境:

mcu:8051U
屏幕:16-bit并口,ST7796U彩屏, 320*480*RGB
问题描述:
向16-bit并口屏写入字数据时,不理解传入字数据时的字节序。
一开始我是这样在命令“2CH”之后传入字数据的:
  1. /*
  2. LCM write 16-bit data
  3. args:
  4.     WR14: word to write
  5. involved registers: A, WR14, DR28
  6. */
  7. LCMWRWDATA:
  8.     SETB    LCMBUSY
  9.     MOV     DR28, #WORD0 LCMIFDATL
  10.     MOVH    DR28, #WORD2 LCMIFDATL
  11.     MOV     @DR28, R14
  12.     ; write LCMIFDATH register
  13.     INC     DR28, #1D
  14.     MOV     @DR28, R15
  15.     ; write command
  16.     MOV     A, #85H
  17.     MOV     DR28, #WORD0 LCMIFCR
  18.     MOVH    DR28, #WORD2 LCMIFCR
  19.     MOV     @DR28, R11
  20.     JB      LCMBUSY, $
  21.     RET
复制代码
但是有问题,具体来讲,屏幕始终无法从边缘开始显示,总是从非边缘区域开始显。捣鼓了2个半天,没啥可改的了,就试探性地修改写入字时的字节序,这一改不要紧,竟然从边缘开始显了。但是,颜色不对,这个问题不大。
把上面的代码中,写入R14和R15的顺序颠倒一下就不对了,不理解 :-)
有大佬能指导一下吗,感谢先 :-)
回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:172
  • 最近打卡:2025-05-01 10:06:01

44

主题

124

回帖

1437

积分

金牌会员

积分
1437
发表于 2025-2-15 15:52:36 | 显示全部楼层
再追问一下:16-bit数据宽度时,先发msb还是lsb?
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:453
  • 最近打卡:2025-05-02 08:15:40
已绑定手机

13

主题

1257

回帖

2975

积分

金牌会员

积分
2975
发表于 2025-2-15 16:03:37 | 显示全部楼层
我曾经也是51用汇编,后来程序复杂后还是用C51便捷,特别是251单片机寄存器太多了,搞得头疼。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:172
  • 最近打卡:2025-05-01 10:06:01

44

主题

124

回帖

1437

积分

金牌会员

积分
1437
发表于 2025-2-15 16:09:39 | 显示全部楼层
21cns*** 发表于 2025-2-15 16:03
我曾经也是51用汇编,后来程序复杂后还是用C51便捷,特别是251单片机寄存器太多了,搞得头疼。 ...

当前问题不大,不知道8052会新增多少个寄存器

用汇编的话,有种种瓜得瓜,种豆得豆的感觉,不会有莫名其妙的潜在的语言问题
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:172
  • 最近打卡:2025-05-01 10:06:01

44

主题

124

回帖

1437

积分

金牌会员

积分
1437
发表于 2025-2-15 16:29:45 | 显示全部楼层
啊,没有大佬关注吗
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:340
  • 最近打卡:2025-05-01 18:31:16

5

主题

23

回帖

1161

积分

金牌会员

积分
1161
发表于 2025-2-21 11:22:13 | 显示全部楼层
BeHa*** 发表于 2025-2-15 15:52
再追问一下:16-bit数据宽度时,先发msb还是lsb?

我认为16bit不存在先发msb或者lsb,因为16位占据了单片机16个端口,几乎同时发出去的数据,一般写法是:
  1. void transfer_data_16(unsigned int data_16bit) //
  2. {
  3.         WriteData(data_16bit>>8);
  4.         WriteData(data_16bit);
  5. }
复制代码

晚上回家,我把低位放前面试试。这个不像串口,是1位1位传的,我的理解,比如WR低位获取数据,那么在wr低位的时候,16个数据口的高低位保持住就行了。
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-2 09:06 , Processed in 0.125288 second(s), 83 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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