对于RGB16来说,一个像素占2个字节,这样2个像素组合成1个字. 假如LCD面板上的某一行像素排列是P1 P2 P3 P4 P5 P6 P7 P8. 且我们定义unsigned int LCD_BUFFER[8]来存放像素数据. 那么LCD_BUFFER[0],LCD_BUFFER[1].....LCD_BUFFER[7]就是对应这8个点的数据. 这样LCD控制器拿到地址LCD_BUFFER后会以LCD_BUFFER为起始地址取出一个字即4个字节去刷屏幕,这时候它犯难了, 1)到底是这个字的高16位还是低16位是第一个像素??? 所以这时候我们得设置HWSWP = 0,即不进行半字交换,这样高16位就表示是第一个像素的,低16位是第二个像素的.这样做的原因是我们的程序是用大端格式编译的,比如0x12345678,在大端格式下就是 B31 B24 B23 B16 B15 B8 B7 B0 0x12 0x34 0x56 0x78 2)当LCD控制器知道高16位是第一个像素的时候,又犯难了 这16位数据,高8bit和低8bit是怎么安排的, RGB16,我们采用的是 565的方式,红色有5bit,绿色6bit,蓝色5bit. B15 B11 B10 B5 B4 B0 R G B 也就是没有字节交换,所以要设置BSWP = 0,即字节交换为0.