- 打卡等级:以坛为家III
- 打卡总天数:603
- 最近打卡:2025-08-23 08:04:16
荣誉版主
- 积分
- 4172
|
发表于 2025-8-1 11:02:27
|
显示全部楼层
这是一个关于屏幕旋转显示的问题.
不知道你"我换320跟240互换也没起到作用"是怎样换的?
一般而言, 先看显示屏的初始化函数中,关于X方向和Y方向的设置, 这就决定了显示屏坐标与内存地址的扫描关系. 其次要注意各显示函数使用时的坐标范围.
就你所提供的截图看, 你是在竖屏的方式下, 实验了本实验的程序.
那么, 当执行清屏函数时, 原程序X方向0...319, Y方向0...239, 现在用在竖屏,X方向0...239, Y方向0...319, 所以扫描不到Y方向的240...319范围, 所以下面部分就是原始杂乱数据...花屏了.
显然,要改变显示屏初始化函数中,关于屏方向坐标的设置了.
在我的程序源码中, 是有关于屏幕转换预设宏的:
在LCD9341.H文件中:
//支持横竖屏快速定义切换
#define LCD_DIR 3 //液晶屏顺时针旋转方向0:0度旋转,1:90度旋转,2:180度旋转,3:270度旋转
理论上讲, 只要改变为
#define LCD_DIR 0
或者
#define LCD_DIR 2
就可以让屏程序竖屏显示了.
但是就本实验而言, 并非可以简单地使用, 而是要对具体的图像定位等着做相应的改变才行, 否则有些显示还会失真的, 比如,原先的图片数据是按横向扫描的, 当屏幕旋转后, 图像就乱了.因此要重新制作图像数据.
因此, 给两个建议选择:
一是改为横屏显示, 实验本实验程序.
二是确定竖屏显示,其它有关显示函数以及具体坐标定位作相应修改.
另外,要注意, 市售的显示屏模块,或是经过厂商二次开发的, 即使同型号驱动,也可能存在一些差异, 这就要细看对应手册了. 要弄清楚显示屏内寄存器各位的作用.
这方面, 可参考本实验程序中LCD_Init()的源码. 基本上每行代码都有注释的,
可特别关注:
LCD_WR_CMD(0x36); .....
LCD_WR_CMD(0x2A); .....
LCD_WR_CMD(0x2B); .....
等几行的设置...
预祝实验顺利. |
|