如何在C语言中将Pico-ResTouch-LCD-2.8设置为横屏显示?
我使用的是WaveShare Pico ResTouch LCD 2.8英寸显示屏,官方提供的C语言示例程序默认采用竖屏显示模式。我熟悉C语言开发,希望将显示模式切换为横屏,但没找到实现方法。已知该显示屏在Python环境下可以实现横屏显示,以下是我修改后的示例代码:
#include "LCD_Driver.h" #include "LCD_Touch.h" #include "LCD_GUI.h" #include "LCD_Bmp.h" #include "DEV_Config.h" #include <stdio.h> #include "hardware/watchdog.h" #include "pico/stdlib.h" #define BG_COLOR 0x422b #define FG_COLOR 0x7c14 #define OL_COLOR 0x5b10 int main(void) { // OVERCLOCK set_sys_clock_khz(270000, true); uint8_t counter = 0; System_Init(); LCD_SCAN_DIR lcd_scan_dir = L2R_U2D; LCD_Init(lcd_scan_dir,600); GUI_Clear(BG_COLOR); // Set BG Color GUI_DrawRectangle(20, 10, 200, 300, FG_COLOR, 1, DOT_STYLE_DFT); // List Background GUI_DrawRectangle(20, 10, 200, 300, OL_COLOR, 0, DOT_PIXEL_2X2); // List Outline GUI_DisString_EN(25, 15, "Test", &Font24, FONT_BACKGROUND, FONT_BACKGROUND); return 0; }
解决方案
要实现横屏显示,核心是修改LCD_Init函数传入的扫描方向参数:
查看扫描方向枚举定义
打开LCD_Driver.h头文件,找到LCD_SCAN_DIR枚举类型,WaveShare的这类驱动通常会定义以下横屏相关的常量:U2D_L2R:上到下、左到右(屏幕顺时针旋转90度,横屏模式)D2U_R2L:下到上、右到左(屏幕逆时针旋转90度,横屏模式)- 其他可能的命名比如
L2R_D2U,具体以头文件中的实际定义为准
修改扫描方向参数
将代码中的L2R_U2D替换为对应的横屏枚举值,同时调整绘图坐标以适配新的屏幕方向(横屏后x、y轴的范围会交换,原竖屏320x240会变为240x320)。
修改后的示例代码:
#include "LCD_Driver.h" #include "LCD_Touch.h" #include "LCD_GUI.h" #include "LCD_Bmp.h" #include "DEV_Config.h" #include <stdio.h> #include "hardware/watchdog.h" #include "pico/stdlib.h" #define BG_COLOR 0x422b #define FG_COLOR 0x7c14 #define OL_COLOR 0x5b10 int main(void) { // OVERCLOCK set_sys_clock_khz(270000, true); uint8_t counter = 0; System_Init(); // 替换为横屏扫描方向,这里以U2D_L2R为例,需匹配头文件定义 LCD_SCAN_DIR lcd_scan_dir = U2D_L2R; LCD_Init(lcd_scan_dir,600); GUI_Clear(BG_COLOR); // 设置背景色 // 横屏后坐标范围变化,调整绘图参数适配新方向 GUI_DrawRectangle(10, 20, 300, 200, FG_COLOR, 1, DOT_STYLE_DFT); // 列表背景 GUI_DrawRectangle(10, 20, 300, 200, OL_COLOR, 0, DOT_PIXEL_2X2); // 列表边框 GUI_DisString_EN(15, 25, "Test", &Font24, FONT_BACKGROUND, FONT_BACKGROUND); return 0; }
- 特殊情况处理
如果头文件中没有现成的横屏枚举值,可以查看驱动源码里的LCD_SetScanDir函数实现,手动配置屏幕的扫描方向寄存器;或者参考Python示例中的横屏配置逻辑,将对应的寄存器操作移植到C代码中。
内容的提问来源于stack exchange,提问作者hejok254
相关产品推荐
相关产品推荐

