1 硬件介绍
本次使用的屏幕是一个小小的0.96寸的tft屏幕,接口时spi,分辨率 160*80.它显示细腻,虽小但是比较好玩。
2 旋转的概念,从
屏幕是长宽比例比较大,很多人喜欢竖着开发, 有的人横着看比较顺眼。默认的方式基本都是竖着,左上角作为 0.0起始坐标。
旋转屏幕就是可以把其他三个角作为起始坐标机型开发。
3 相关寄存器
一个寄存器:9 MADCTL (36h): Memory Data Access Control
my :默认起始坐标计算0:从0到128;1 从128到0
mx :默认起始坐标计算0:从0到128;1 从128到0
mv:交换xy坐标
ml:垂直刷新方向。0 从头到底; 1: 从底到头。
mv:水平刷新方向。0:从左到右;1: 从右到左。
rgb:0:rgb颜色格式;1:bgr颜色格式,中间的g不动。
4 计算方式
使用到的配置有mx my mv
从写显示数据到屏幕显示出来,中间会有一个gram的空间保存数据,显示的时候,屏幕拿出gram数据用于显示。
所以第一个gram的数据放的位置就是我们的起始坐标。
如下屏幕标识
默认起始坐标1点
现在如果要反转到2点,调整配置如下
mv=1: 交换xy坐标系
my=1:改变y轴的扫描顺序
可以理解成屏幕逆旋转90
寻转到3
mv=1: 交换xy坐标系
mx=1:改变x轴的扫描顺序
可以理解成屏幕旋转90
5 其他问题
1》 有图屏幕设计和硬件接线方式的不同,有时候会出现rgb的格式编程rbg格式
此时需要通过修改软件的像素写入数据格式调整
void TFT_Send16Bit(uint16_t Data){ HAL_GPIO_WritePin(spi3_rs_GPIO_Port, spi3_rs_Pin,GPIO_PIN_SET); //DC = 1 Data = (Data&0xf800)|((Data&0x7e0)>>5) |((Data & 0x1f) << 6); //565转成rbg565 HAL_SPI_Transmit(&hspi3, (uint8_t*)&Data, 2, 0xFFFF); }
2》像素从起始坐标(0.0)写入,屏幕显示确实有了较大偏移
问题:因为gram往往要比屏幕的像素点多一些,就会出现gram的读取位置问题。
方案:如果垂直方向的偏移,可以使用命令:VSCSAD: Vertical Scroll Start Address of RAM (37h)。
实现垂直方向图像回正。
如果水平方向的图像偏移, 那就使用RASET (2Bh): Row Address Set或者 CASET (2Ah): Column Address Set命令进行调整
验证方式可以通过再四个脚画四个方框,看一下正不正
如下
如上,就是本次分享的内容,有错误的话,请各位大佬指正。