You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在C语言中将Pico-ResTouch-LCD-2.8设置为横屏显示?

解决WaveShare Pico ResTouch LCD 2.8英寸显示屏C语言横屏切换问题

我使用的是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函数传入的扫描方向参数:

  1. 查看扫描方向枚举定义
    打开LCD_Driver.h头文件,找到LCD_SCAN_DIR枚举类型,WaveShare的这类驱动通常会定义以下横屏相关的常量:

    • U2D_L2R:上到下、左到右(屏幕顺时针旋转90度,横屏模式)
    • D2U_R2L:下到上、右到左(屏幕逆时针旋转90度,横屏模式)
    • 其他可能的命名比如L2R_D2U,具体以头文件中的实际定义为准
  2. 修改扫描方向参数
    将代码中的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;
}
  1. 特殊情况处理
    如果头文件中没有现成的横屏枚举值,可以查看驱动源码里的LCD_SetScanDir函数实现,手动配置屏幕的扫描方向寄存器;或者参考Python示例中的横屏配置逻辑,将对应的寄存器操作移植到C代码中。

内容的提问来源于stack exchange,提问作者hejok254

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 18:12:47