为OLED屏增加GUI支持7:综合实例
扫描二维码
随时随地手机看文章
环境:
主机:WIN10
开发环境:MDK5.13
MCU:STM32F103
说明:
前面的文章已经介绍了本GUI的基本功能,目前有的控件有文本控件,图片控件,以及进度条控件,这是我项目中所需要的,读者可以参考这些代码增加自己所需的控件。本文展示一个综合实例,显示一个完整的界面。文中用到调度框架pt-thread。
实现效果:
源代码:
gui.h:gui头文件
/**
*Copyright(c),2015-2025
*@filegui.h
*@briefgui头文件
*@authorjdh
*@version1.0
*@date2015/9/6
*/
#ifndef_GUI_H_
#define_GUI_H_
/*********************************************************************
*头文件
**********************************************************************/
#include"gui_interface.h"
#include"gui_text_lib.h"
#include"gui_2d_lib.h"
#include"gui_widget_text.h"
#include"gui_widget_image.h"
#include"gui_widget_progbar.h"
/*********************************************************************
*函数
**********************************************************************/
/**
*@brief初始化gui
*/
voidgui_init(void);
/**
*@brief销毁控件
*@paramhandle:控件句柄
*/
voidgui_widget_delete(void*handle);
#endif
gui.c:gui主文件
/**
*Copyright(c),2015-2025
*@filegui.c
*@briefgui主文件
*@authorjdh
*@date2015/9/6
*/
/*********************************************************************
*头文件
**********************************************************************/
#include"gui.h"
#include"stdlib.h"
/*********************************************************************
*函数
**********************************************************************/
/**
*@brief初始化gui
*/
voidgui_init(void)
{
////初始化字库
//font_init();
}
/**
*@brief销毁控件
*@paramhandle:控件句柄
*/
voidgui_widget_delete(void*handle)
{
free(handle);
handle=(void*)0;
}
实例:
gui_mode_fence.h
/**
*Copyright(c),2015-2025
*@filegui_mode_fence.h
*@brief围栏界面模块头文件
*@authorjdh
*@date2015/11/22
*/
#ifndef_GUI_MODE_FENCE_H_
#define_GUI_MODE_FENCE_H_
/*********************************************************************
*头文件
**********************************************************************/
#include"world.h"
/*********************************************************************
*宏定义
**********************************************************************/
/**
*@brief工作间隔,单位:ms
*/
#defineINTERVAL_GUI_MODE_FENCE100
/*********************************************************************
*函数
**********************************************************************/
/**
*@brief模块载入
*/
voidgui_mode_fence_load(void);
/**
*@brief模块运行
*/
voidgui_mode_fence_run(void);
/**
*@brief设置显示状态
*@paramenable:0:关闭显示,1:打开显示
*/
voidgui_mode_fence_show(uint8_tenable);
/**
*@brief得到当前的显示状态
*@retval0:关闭显示,1:打开显示
*/
uint8_tgui_mode_fence_get_show(void);
#endif
gui_mode_fence.c
/**
*Copyright(c),2015-2025
*@filegui_mode_fence.c
*@brief围栏模式界面模块主文件
*@authorjdh
*@date2015/11/22
*@update2015/12/11
*/
/*********************************************************************
*头文件
**********************************************************************/
#include"gui_mode_fence.h"
#include"status_bar.h"
#include"gui_schedule.h"
#include"para_manage.h"
#include"slave_manage.h"
/*********************************************************************
*数据结构
**********************************************************************/
/**
*@brief按键状态
*/
struct_Key_State
{
uint8_tok;
uint8_tcancel;
uint8_tleft;
uint8_tright;
};
/*********************************************************************
*静态变量
**********************************************************************/
/**
*@briefpt任务变量
*/
staticstructptpt_task;
/**
*@brief当前显示状态.0:未显示,1显示
*/
staticuint8_tState_Show=0;
/**
*@brief控件
*/
//警报距离
staticWidget_Text_HandleWidget_Text_Alarm_Distance;
//状态
staticWidget_Text_HandleWidget_Text_State;
//距离
staticWidget_Text_HandleWidget_Text_Distance;
/**
*@brief按键状态
*/
staticstruct_Key_StateKey_State=
{
.ok=0,
.cancel=0,
.left=0,
.right=0
};
/**
*@brief从机信息
*/
staticstruct_Slave_InfoSlave_Info_Show;
/*********************************************************************
*静态函数
**********************************************************************/
/**
*@brief任务运行
*@retval任务状态
*/
staticintpt_run(structpt*pt);
/**
*@brief按键处理
*/
staticvoiddeal_key(void);
/**
*@brief更新界面
*/