環(huán)境:
主機:WIN10
開發(fā)環(huán)境:MDK5.13
MCU:STM32F103
說明:
前面的文章已經(jīng)介紹了本GUI的基本功能,目前有的控件有文本控件,圖片控件,以及進度條控件,這是我項目中所需要的,讀者可以參考這些代碼增加自己所需的控件。本文展示一個綜合實例,顯示一個完整的界面。文中用到調(diào)度框架pt-thread。
實現(xiàn)效果:
源代碼:
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"
/*********************************************************************
*函數(shù)
**********************************************************************/
/**
*@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"
/*********************************************************************
*函數(shù)
**********************************************************************/
/**
*@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
/*********************************************************************
*函數(shù)
**********************************************************************/
/**
*@brief模塊載入
*/
voidgui_mode_fence_load(void);
/**
*@brief模塊運行
*/
voidgui_mode_fence_run(void);
/**
*@brief設置顯示狀態(tài)
*@paramenable:0:關閉顯示,1:打開顯示
*/
voidgui_mode_fence_show(uint8_tenable);
/**
*@brief得到當前的顯示狀態(tài)
*@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"
/*********************************************************************
*數(shù)據(jù)結構
**********************************************************************/
/**
*@brief按鍵狀態(tài)
*/
struct_Key_State
{
uint8_tok;
uint8_tcancel;
uint8_tleft;
uint8_tright;
};
/*********************************************************************
*靜態(tài)變量
**********************************************************************/
/**
*@briefpt任務變量
*/
staticstructptpt_task;
/**
*@brief當前顯示狀態(tài).0:未顯示,1顯示
*/
staticuint8_tState_Show=0;
/**
*@brief控件
*/
//警報距離
staticWidget_Text_HandleWidget_Text_Alarm_Distance;
//狀態(tài)
staticWidget_Text_HandleWidget_Text_State;
//距離
staticWidget_Text_HandleWidget_Text_Distance;
/**
*@brief按鍵狀態(tài)
*/
staticstruct_Key_StateKey_State=
{
.ok=0,
.cancel=0,
.left=0,
.right=0
};
/**
*@brief從機信息
*/
staticstruct_Slave_InfoSlave_Info_Show;
/*********************************************************************
*靜態(tài)函數(shù)
**********************************************************************/
/**
*@brief任務運行
*@retval任務狀態(tài)
*/
staticintpt_run(structpt*pt);
/**
*@brief按鍵處理
*/
staticvoiddeal_key(void);
/**
*@brief更新界面
*/