代码拉取完成,页面将自动刷新
#include "uiHome.h"
#include "uiZigbee.h"
#include "uiWifi.h"
int main(void)
{
sysInit();
LD_ADD_PAGE(uiHome);//Home页面序号为0
LD_ADD_PAGE(uiZigbee);//Zigbee页面序号为1
LD_ADD_PAGE(uiWifi);//Wifi页面序号为2
arm_irq_safe {
arm_2d_init();
}
...
while(1)
{
...
}
}
tools文件夹中有工具生成数据
📖 使用说明
自动处理:
修改ldCommon.h中的控件类型,ldWidgetType
ldGui.c中添加新控件的头文件
修改ldGui.c中的函数,ldGuiDelWidget,_widgetLoop
这是一个独立的多功能按键库,可以对GUI按键和实体按键进行行为检测。
该库可以检测以下信号
信号 | 说明 |
---|---|
BTN_PRESS | 按下 |
BTN_HOLD_DOWN | 按住不放 |
BTN_RELEASE | 释放 |
BTN_DOUBLE_CLICK | 双击 |
BTN_REPEAT_COUNT | 获取连击次数 |
BTN_HOLD_TIME | 按住不放的时间 |
BTN_LONG_START | 长按触发一次 |
BTN_LONG_SHOOT | 长按连续触发 |
函数 |
void xBtnInit(uint16_t id,bool (*getBtnStateFunc)(uint16_t));
|
|
说明 | button初始化函数 | |
参数 | id | 按键id或实体按键自定义序号 |
getBtnStateFunc | 获取按键状态的函数指针 |
ℹ️ Note |
实体按键和ldgui触摸按键混合使用的时候,id不可冲突,建议将实体按键序号从1000开始命名 |
getBtnStateFunc参考代码如下
// 实体按键
bool vtGetKeyState(uint16_t value)
{
switch (value)
{
case KEY_NUM_UP:
{
return keyUpState;
break;
}
case KEY_NUM_DOWN:
{
return keyDownState;
break;
}
default:
break;
}
return 0;
}
// ldgui触摸按键
bool getKeyState(uint16_t value)
{
ldButton_t * pBtn=ldBaseGetWidgetById(value);
return pBtn->isPressed;
}
|
函数 |
void xBtnConfig(uint8_t debounceMs,uint16_t longPressMs,uint16_t longShootMs,uint16_t clickTimeOutMs);
|
|
说明 | 按键参数配置,如果不配置则使用预设参数 | |
参数 | debounceMs | 按键滤波时间 |
longPressMs | 长按触发时间 | |
longShootMs | 长按连续触发间隔 | |
clickTimeOutMs | 连击超时时间 |
函数 |
void xBtnTick(uint8_t cycleMs);
|
|
说明 | 指定时间间隔内定时执行的函数,ldgui内部已经集成 | |
参数 | cycleMs | 定时周期 |
函数 |
uint16_t xBtnGetState(uint16_t id, uint8_t state);
|
|
说明 | 检测目标按键是否符合对应状态 | |
参数 | id | ldgui触摸按键填写nameId,外部实体按键填写自定义的按键编号 |
state | 期望状态类型 | |
返回 | 状态值或需要的数据 |
函数 |
void xBtnClean(void);
|
|
说明 | 清除按键检测的过程数据,一般切换页面的时候使用 |
//自定义实体按键序号
#define KEY_NUM_UP 1000
//ldgui内部已经集成
//void SysTick_Handler(void)
//{
// xBtnTick(10);//10ms
//}
//根据按键序号,获取按键状态
bool vtGetKeyState(uint16_t value)
{
switch (value)
{
case KEY_NUM_UP:
{
return keyUp;
}
default:
break;
}
return 0;
}
//初始化按键
xBtnInit(KEY_NUM_UP,vtGetKeyState);
//循环处理函数
void loopFunc(void)
{
//判断按键按下
if(xBtnGetState(KEY_NUM_UP,BTN_PRESS))
{
//按键按下的用户处理代码
}
}
ℹ️ Note | |
---|---|
注意 | 获取按键状态的函数,可以每个按键对应一个函数,也可以多个按键共用一个函数,即上述例子中的bool vtGetKeyState(uint16_t value) |
这是一个简单的队列软件库
typedef struct{
uint16_t senderId;
uint8_t signalType;
size_t value;
}emitInfo_t;
xQueue_t *emitQueue=NULL;
emitInfo_t emitInfo;
//创建队列
emitQueue=xQueueCreate(EMIT_QUEUE_SIZE,sizeof (emitInfo_t));
//写入数据,入队
emitInfo.senderId=0;
emitInfo.signalType=1;
emitInfo.value=10;
xQueueEnqueue(emitQueue,&emitInfo,sizeof (emitInfo_t));
//判断数据数量
if(xQueueGetLength(emitQueue)>0)
{
//读取数据,出队
if(xQueueDequeue(emitQueue,&emitInfo,sizeof (emitInfo)))
}
USE_LOG_COLOR
=0 普通打印
=1 彩色打印(需要控制台支持,推荐MobaXterm)
SET_LOG_LEVEL
=LOG_LEVEL_NONE
=LOG_LEVEL_ERROR
=LOG_LEVEL_WARNING
=LOG_LEVEL_INFO
=LOG_LEVEL_DEBUG
LOG_PRINT
默认为printf,可自定义串口硬件
LOG_DEBUG("click widget id:%d\n",pWidget->nameId);
对字符串进行简单的转换处理
int32_t value;
value = xStrToI32("123");
// value = 123
uint8_t text[16];
float fValue=3.1415926;
text = xFloatToStr(fValue,2,text);
// text = "3.14"
基于arm2d的基础上衍生的软件定时器
//计数变量
int64_t sysTimer=0;
//循环处理函数
void loopFunc(void)
{
if(ldTimeOut(10,&sysTimer,true))
{
//10ms处理一次的用户代码
}
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。