触摸开关控件 v1.2

项目概述
本项目是基于STC8H8K64U单片机和RA8889/RA6809图形处理芯片(Micro GPU)开发的一款触摸开关控件,适用于TFT显示屏(最高1366*xxxx)和电容触摸屏(GT911)。该控件提供了美观、响应灵敏的开关界面,支持多个开关同时工作,可应用于各类嵌入式人机交互界面,模块化设计,易移植,易维护,欢迎下载参考使用!
硬件配置
- 单片机:STC8H8K64U(RT8H8K001开发板)(也可以采用ARM等各种MCU)
- 图形处理芯片:RA8889/RA6809(RT6809CNN01开发板)
- 显示屏:TFT 1024x600分辨率
- 触摸屏:电容式GT911
- 单片机-图形处理芯片的通信方式:SPI-4
程序流程
初始化流程
- 硬件初始化
- 配置IO口:P0.5为双向口模式(SPI_MISO),其它为推挽输出
- 配置GT911的IIC通信引脚
- 配置触摸中断引脚(INT2/P3.6)
- SPI通信初始化
- 初始化SPI4接口
- RA8889初始化
- 硬件复位RA8889
- 初始化RA8889显示配置
- 中断初始化
- 配置INT2/P3.6为触摸屏中断输入
- GT911触摸控制器初始化
- 初始化GT911配置
- 开关控件初始化
- 初始化开关控件数组
- 添加并配置所需开关
- 绘制所有开关
- 显示开关初始状态
主循环流程
- 触摸检测
- 通过中断方式检测触摸事件
- 当触摸中断发生时,设置触摸标志
- 触摸处理
- 读取触摸点坐标
- 判断触摸位置是否在开关区域内
- 返回触发的开关ID
- 状态更新
- 切换被触发开关的状态
- 重绘被触发的开关
- 更新状态显示
- 等待防抖时间
- 触摸释放处理
- 当无触摸点时,重置触摸状态
- 清除触摸标志
控件使用说明
基本参数配置
- 开关数量 :最多开关数量可通过修改
MAX_SWITCHES_NUM
调整 - 防抖动时间 :默认20ms,可通过修改
DEBOUNCE_TIME
调整 - 开关样式 :可通过修改
default_style
结构体调整颜色、尺寸等样式
开关控件API
初始化函数
c
void Switch_Init(void);
初始化开关数组,清空已有开关。应在使用控件前首先调用。
添加开关
c
void Switch_Add(unsigned int x, unsigned int y, unsigned char initial_state);
添加一个新开关:
x
、y
:开关左上角坐标initial_state
:初始状态(0:关闭,1:打开)
绘制开关
c
void Switch_Draw(unsigned char switch_id);
绘制指定ID的开关。ID从1开始编号。
c
void Switch_DrawAll(void);
绘制所有已添加的开关。
触摸处理
c
unsigned char Switch_HandleTouch(unsigned int touch_x, unsigned int touch_y);
处理触摸事件,判断是否触发开关:
touch_x
、touch_y
:触摸点坐标- 返回值:被触发的开关ID,返回0表示无开关被触发
状态显示(该函数用于检视触摸开关状态值)
c
void Switch_PrintStatus(unsigned char switch_id);
打印指定开关的状态信息。
c
void Switch_PrintAllStatus(void);
打印所有开关的状态信息。
使用示例
c
// 初始化开关控件
Switch_Init();
// 添加三个开关,位置和初始状态
Switch_Add(280, 200, 0); // 开关1:位置(280,200),初始状态:关闭
Switch_Add(280, 300, 1); // 开关2:位置(280,300),初始状态:打开
Switch_Add(280, 400, 0); // 开关3:位置(280,400),初始状态:关闭
// 绘制所有开关
Switch_DrawAll();
// 显示文字说明:所有开关初始状态
Switch_PrintAllStatus();
// 在触摸处理中:
widget_switch_id = Switch_HandleTouch(touch_x, touch_y);
if(widget_switch_id > 0) {
// 切换对应开关的状态
switches[widget_switch_id-1].state = !switches[widget_switch_id-1].state;
// 重绘被触发的开关
Switch_Draw(widget_switch_id);
// 更新状态显示
Switch_PrintStatus(widget_switch_id);
}
外观定制
开关外观可通过修改default_style
结构体进行定制,包括:
- 尺寸:通过
SWITCH_HEIGHT
调整基准高度,宽度自动按比例计算 - 倒角:通过
SWITCH_CORNER
调整按钮圆角 - 偏移量:通过
SWITCH_OFFSET
调整边框宽度 - 颜色:
bgColor
:背景色(关闭状态)selectBgColor
:选中背景色(打开状态)textbgColor
:文字颜色(关闭状态)textselectBgColor
:选中文字颜色(打开状态)switchColor
:滑块颜色borderColor
:边框颜色
注意事项
- 使用前确保已正确初始化SPI、RA8889和GT911
- 开关数量不要超过
MAX_SWITCHES_NUM
定义的最大值 - 放置开关时注意坐标不要超出屏幕范围
- 触摸处理应在中断或主循环中周期性调用
源码下载
请看到视频末尾
参考视频
单片机-RAIO液晶控制芯片-触摸开关控件