请教个问题:16-bit并口彩屏,写入字数据时的顺序
环境:mcu:8051U
屏幕:16-bit并口,ST7796U彩屏, 320*480*RGB
问题描述:
向16-bit并口屏写入字数据时,不理解传入字数据时的字节序。
一开始我是这样在命令“2CH”之后传入字数据的:
/*
LCM write 16-bit data
args:
WR14: word to write
involved registers: A, WR14, DR28
*/
LCMWRWDATA:
SETB LCMBUSY
MOV DR28, #WORD0 LCMIFDATL
MOVH DR28, #WORD2 LCMIFDATL
MOV @DR28, R14
; write LCMIFDATH register
INC DR28, #1D
MOV @DR28, R15
; write command
MOV A, #85H
MOV DR28, #WORD0 LCMIFCR
MOVH DR28, #WORD2 LCMIFCR
MOV @DR28, R11
JB LCMBUSY, $
RET但是有问题,具体来讲,屏幕始终无法从边缘开始显示,总是从非边缘区域开始显。捣鼓了2个半天,没啥可改的了,就试探性地修改写入字时的字节序,这一改不要紧,竟然从边缘开始显了。但是,颜色不对,这个问题不大。
把上面的代码中,写入R14和R15的顺序颠倒一下就不对了,不理解 :-)
有大佬能指导一下吗,感谢先 :-)
再追问一下:16-bit数据宽度时,先发msb还是lsb? 我曾经也是51用汇编,后来程序复杂后还是用C51便捷,特别是251单片机寄存器太多了,搞得头疼。 21cnsound 发表于 2025-2-15 16:03
我曾经也是51用汇编,后来程序复杂后还是用C51便捷,特别是251单片机寄存器太多了,搞得头疼。 ...
当前问题不大,不知道8052会新增多少个寄存器
用汇编的话,有种种瓜得瓜,种豆得豆的感觉,不会有莫名其妙的潜在的语言问题 啊,没有大佬关注吗 BeHappy 发表于 2025-2-15 15:52
再追问一下:16-bit数据宽度时,先发msb还是lsb?
我认为16bit不存在先发msb或者lsb,因为16位占据了单片机16个端口,几乎同时发出去的数据,一般写法是:
void transfer_data_16(unsigned int data_16bit) //
{
WriteData(data_16bit>>8);
WriteData(data_16bit);
}
晚上回家,我把低位放前面试试。这个不像串口,是1位1位传的,我的理解,比如WR低位获取数据,那么在wr低位的时候,16个数据口的高低位保持住就行了。
页:
[1]