找回密码
 立即注册
搜索
热搜: RA8889 RA8876 RA8875
查看: 19|回复: 0

复选框控件

[复制链接]

65

主题

26

回帖

910

积分

管理员

积分
910
QQ
发表于 昨天 13:56 | 显示全部楼层 |阅读模式
复选框控件使用说明


一、控件概述
本复选框控件是一个适用于单片机图形界面的UI组件,基于单片机 + RA8889/RA6809 + TFT显示屏 + GT911触摸屏开发。控件提供了丰富的功能和自定义选项,使用简单方便,易于移植。
主要特点:
  • 支持可配置的尺寸、位置和颜色
  • 支持文本标签显示
  • 支持启用/禁用状态切换
  • 支持显示/隐藏控制
  • 支持回调函数,可响应状态变化
  • 支持触摸事件处理
硬件平台:
  • 主控芯片(MCU):51/ARM均可(测试时使用STC8H8K64U单片机)
  • 图形处理芯片(Micro GPU):RA8889/RA6809
  • 显示屏:TFT(演示时采用分辨率1024x600)
  • 触摸屏:GT911电容触摸屏
  • 通信接口:SPI-4(亦可采用8080/SPI-3/I2C接口)


二、移植指南

1. 文件结构
  1. 滑动条控件/
  2. ├── main.c                    // 主程序示例文件
  3. ├── widget/                   // 控件相关文件
  4. │   ├── checkbox.c            // 控件头文件,包含接口声明和配置定义
  5. │   └── checkbox.h            // 控件头文件
  6. ├── touch/                    // 触摸屏相关文件
  7. │   ├── GT911.c               // GT911触摸驱动实现
  8. │   └── GT911.h               // GT911触摸驱动头文件
  9. ├── RA8889_01_Kernel/         // RA8889/RA6809图形处理芯片相关文件
  10. │   ├── RA8889_51.c           // RA8889基础驱动
  11. │   ├── RA8889_51.h           // RA8889基础头文件
  12. │   ├── RA8889_API_51.c       // RA8889 API实现
  13. │   ├── RA8889_API_51.h       // RA8889 API头文件
  14. │   ├── RA8889_MCU_IF.c       // RA8889与MCU接口实现
  15. │   ├── RA8889_MCU_IF.h       // RA8889与MCU接口头文件
  16. │   ├── UserDef.h             // 用户定义头文件
  17. │   ├── delay.c               // 延时函数实现
  18. │   └── delay.h               // 延时函数头文件
  19. └── 其他项目文件...
复制代码


2. 依赖项
本控件依赖于以下组件:
  • RA8889/RA6809驱动(提供绘图和文本处理等功能)

3. 移植步骤
  • 将checkbox.h和checkbox.c文件添加到您的项目中
  • 在需要使用控件的文件中包含头文件:#include "checkbox.h"
  • 确保您的项目中已经包含了必要的依赖项
  • 根据您的硬件配置,可能需要修改以下定义(在checkbox.h中):
    • 颜色定义:CHECKBOX_BG_COLOR、CHECKBOX_BORDER_NORMAL等
    • 对勾线条粗细:TICK_LINE_THICKNESS
    • 间距设置:PADDING
    • 最大控件数量:MAX_CHECKBOX
    • 标签文本长度:MAX_CHECKBOX_LABEL_LENGTH
    • 字体宽高:CHECKBOX_FONT_WIDTH、CHECKBOX_FONT_HEIGHT


三、API说明

初始化函数
  1. void Checkbox_Init(void);
复制代码

  • 功能:初始化复选框控件系统
  • 参数:无
  • 返回值:无
  • 说明:使用其他API前必须先调用此函数

添加复选框
  1. unsigned char Checkbox_Add(unsigned short x, unsigned short y,
  2.                           unsigned short width, unsigned short height,
  3.                           unsigned char changed_status,
  4.                           unsigned long checkbox_color_selected,
  5.                           unsigned long display_color)
复制代码

  • 功能:添加一个新的复选框
  • 参数:
    • x:复选框X坐标
    • y:复选框Y坐标
    • width:复选框宽度
    • height:复选框高度
    • changed_status:初始状态,0为未选中,1为选中
    • checkbox_color_selected:选中状态的填充颜色
    • display_color:禁用状态的颜色
  • 返回值:新创建的复选框ID

设置标签
  1. void Checkbox_SetLabel(unsigned char id, const char* label, unsigned long label_color);
复制代码
  • 功能:设置复选框的文本标签
  • 参数:
    • id:复选框ID
    • label:标签文本
    • label_color:标签文本颜色
  • 返回值:无

启用/禁用控制
  1. void Checkbox_Enable(unsigned char id, unsigned char enable);
复制代码
  • 功能:设置复选框是否启用
  • 参数:
    • id:复选框ID
    • enable:是否启用,0为禁用,1为启用
  • 返回值:无

显示/隐藏控制
  1. void Checkbox_Visible(unsigned char id, unsigned char visible);
复制代码
  • 功能:设置复选框是否可见
  • 参数:
    • id:复选框ID
    • visible:是否可见,0为隐藏,1为显示
  • 返回值:无

绘制复选框
  1. void Checkbox_Draw(unsigned char id);
复制代码
  • 功能:绘制指定ID的复选框
  • 参数:
    • id:复选框ID
  • 返回值:无
  1. void Checkbox_DrawAll();
复制代码
  • 功能:绘制所有复选框
  • 参数:无
  • 返回值:无

触摸处理
  1. void Checkbox_Process(unsigned char id);
复制代码
  • 功能:处理复选框的状态变化
  • 参数:
    • id:复选框ID
  • 返回值:无
  • 说明:将切换复选框状态并调用回调函数
  1. unsigned char Checkbox_HandleTouch(unsigned int touch_x, unsigned int touch_y);
复制代码
  • 功能:处理触摸事件,检查是否触发了某个复选框
  • 参数:
    • touch_x:触摸X坐标
    • touch_y:触摸Y坐标
  • 返回值:触发的复选框ID,如果没有触发则返回0

回调函数设置
  1. void Checkbox_SetCallback(unsigned char id, CHECKBOX_CALLBACK onChange);
复制代码
  • 功能:设置复选框状态改变时的回调函数
  • 参数:
    • id:复选框ID
    • onChange:回调函数指针,原型为void (*CHECKBOX_CALLBACK)(void* checkbox, unsigned char status)
  • 返回值:无


四、使用示例
以下是一个简单的使用示例:
  1. #include "checkbox.h"

  2. // 定义复选框ID
  3. unsigned char checkbox_id1;

  4. // 回调函数
  5. void Checkbox_Changed(void* checkbox, unsigned char status)
  6. {
  7.     CheckboxTypeDef* pCheckbox = (CheckboxTypeDef*)checkbox;
  8.     // 执行状态变化后的操作
  9.     if(status == 1) {
  10.         // 选中状态的处理
  11.     } else {
  12.         // 未选中状态的处理
  13.     }
  14. }

  15. void main()
  16. {
  17.     // 其他初始化代码...
  18.    
  19.     // 初始化复选框控件
  20.     Checkbox_Init();
  21.    
  22.     // 添加一个复选框
  23.     checkbox_id1 = Checkbox_Add(300, 200, 28, 28, FALSE, 0x0000FF, 0x808080);
  24.    
  25.     // 设置标签
  26.     Checkbox_SetLabel(checkbox_id1, "启用功能", 0x000000);
  27.    
  28.     // 启用复选框
  29.     Checkbox_Enable(checkbox_id1, TRUE);
  30.    
  31.     // 显示复选框
  32.     Checkbox_Visible(checkbox_id1, TRUE);
  33.    
  34.     // 设置回调函数
  35.     Checkbox_SetCallback(checkbox_id1, Checkbox_Changed);
  36.    
  37.     // 绘制所有复选框
  38.     Checkbox_DrawAll();
  39.    
  40.     // 主循环中的触摸处理
  41.     while(1) {
  42.         // 获取触摸坐标...
  43.         
  44.         // 检查是否触发了复选框
  45.         unsigned char triggered = Checkbox_HandleTouch(touch_x, touch_y);
  46.         
  47.         // 如果触发了复选框
  48.         if(triggered > 0) {
  49.             // 处理复选框状态变化
  50.             Checkbox_Process(triggered);
  51.         }
  52.     }
  53. }
复制代码



五、注意事项
  • 最多支持创建MAX_CHECKBOX个复选框(默认为10个,根据需求进行修改)
  • 标签文本长度不应超过MAX_CHECKBOX_LABEL_LENGTH(默认为50个英文字符)
  • 使用回调函数时需要注意函数原型匹配:void (*CHECKBOX_CALLBACK)(void* checkbox, unsigned char changed_status)
  • 在禁用状态下,复选框仍然可以显示,但不会响应触摸事件



六、源码下载
请至论坛菜单:组件与控件中心

七、视频介绍

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|Lcdvision Technology ( 苏ICP备10203891号 )

GMT+8, 2025-4-26 20:18 , Processed in 0.066824 second(s), 30 queries .

快速回复 返回顶部 返回列表