ucgui界面设计 实体按键驱动

分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow

也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!

               


ucgui界面设计&实体按键驱动


本文博客链接:http://blog.csdn.net/jdh99,作者:jdh,转载请注明.


环境:

主机:WIN8

开发环境:MDK4.72

ucgui版本:3.90

mcu: stm32f103VE


说明:

本程序基于ucgui对话框机制设计了一个界面,并用6个实体按键对界面进行控制


效果图:


源码:

gui_main.h

/**********************************************************************          主界面模块头文件*      (c)copyright 2014,jdh*        All Right Reserved*新建时间:2014/10/23 by jdh**********************************************************************/#ifndef _GUI_MAIN_H_#define _GUI_MAIN_H_/**********************************************************************       头文件**********************************************************************/#include "world.h"/**********************************************************************       宏定义**********************************************************************//**********************************************************************       工作间隔*单位:ms**********************************************************************/#define INTERVAL_GUI_MAIN   100  /**********************************************************************       函数**********************************************************************//**********************************************************************       模块载入**********************************************************************/void gui_main_load(void);/**********************************************************************       模块运行**********************************************************************/void gui_main_run(void);/**********************************************************************       设置显示状态*参数:enable:0:关闭显示,1:打开显示**********************************************************************/void gui_main_show(uint8_t enable);/**********************************************************************       得到当前的显示状态*返回:0:关闭显示,1:打开显示**********************************************************************/uint8_t gui_main_get_show(void);#endif

gui_main.c

/**********************************************************************          主界面模块主文件*      (c)copyright 2014,jdh*        All Right Reserved*新建时间:2014/10/23 by jdh**********************************************************************//**********************************************************************       头文件**********************************************************************/#include "gui_main.h"/**********************************************************************       宏定义**********************************************************************/#define ID_FRAMEWIN              (GUI_ID_USER + 0x10)#define ID_BUTTON_OK             (GUI_ID_USER + 0x11)#define ID_BUTTON_CANCEL            (GUI_ID_USER + 0x12)#define ID_BUTTON_UP             (GUI_ID_USER + 0x13)#define ID_BUTTON_DOWN             (GUI_ID_USER + 0x14)#define ID_BUTTON_LEFT             (GUI_ID_USER + 0x15)#define ID_BUTTON_RIGHT             (GUI_ID_USER + 0x16)#define ID_TEXT_MATCH            (GUI_ID_USER + 0x17)#define ID_TEXT_RSSI             (GUI_ID_USER + 0x18)#define ID_LISTBOX_FUNC            (GUI_ID_USER + 0x19)/**********************************************************************       数据结构**********************************************************************//**********************************************************************       按键状态**********************************************************************/struct _Key_State{ uint8_t ok; uint8_t cancel; uint8_t up; uint8_t down; uint8_t left; uint8_t right;};/**********************************************************************       静态变量**********************************************************************//**********************************************************************       界面句柄**********************************************************************/static WM_HWIN Handle_Gui;/**********************************************************************       资源表**********************************************************************/static const GUI_WIDGET_CREATE_INFO _aDialogCreate[] = {  { FRAMEWIN_CreateIndirect,  "Frame3",  ID_FRAMEWIN,    0, 0, 240, 320, 0, 0x0},  { BUTTON_CreateIndirect,   "OK",   ID_BUTTON_OK,   5, 255, 40, 20, 0, 0x0},  { BUTTON_CreateIndirect,   "Button",  ID_BUTTON_DOWN,  95, 280, 40, 20, 0, 0x0},  { BUTTON_CreateIndirect,   "UP",   ID_BUTTON_UP,   95, 255, 40, 20, 0, 0x0},  { BUTTON_CreateIndirect,   "CANCEL",  ID_BUTTON_CANCEL,  185, 255, 40, 20, 0, 0x0},  { BUTTON_CreateIndirect,   "RIGHT",  ID_BUTTON_RIGHT,  140, 270, 40, 20, 0, 0x0},  { BUTTON_CreateIndirect,   "LEFT",  ID_BUTTON_LEFT,  50, 270, 40, 20, 0, 0x0},  { TEXT_CreateIndirect,   "Match",  ID_TEXT_MATCH,   140, 15, 80, 20, 0, 0x0},  { TEXT_CreateIndirect,   "RSSI",  ID_TEXT_RSSI,   140, 40, 80, 20, 0, 0x0},  { LISTBOX_CreateIndirect,  "Listbox",  ID_LISTBOX_FUNC,  5, 10, 120, 220, 0, 0x0},  // USER START (Optionally insert additional widgets)  // USER END};/**********************************************************************       上次工作时间**********************************************************************/static struct _Time Time_Last = {    .s = 0,    .ms = 0,    .us = 0};/**********************************************************************       按键状态**********************************************************************/static struct _Key_State Key_State = { .ok = 0, .cancel = 0, .up = 0, .down = 0, .left = 0, .right = 0};/**********************************************************************       当前显示状态*0:未显示,1显示**********************************************************************/static uint8_t State_Show = 1;/**********************************************************************       静态函数**********************************************************************//**********************************************************************       回调函数**********************************************************************/static void _cbDialog(WM_MESSAGE * pMsg);/**********************************************************************       定时工作**********************************************************************/static void slot_tick(void);/**********************************************************************       按键处理**********************************************************************/static void deal_key(void);/**********************************************************************       函数**********************************************************************//**********************************************************************       模块载入**********************************************************************/void gui_main_load(void)//新建界面 Handle_Gui = GUI_CreateDialogBox(_aDialogCreate, GUI_COUNTOF(_aDialogCreate),           _cbDialog, WM_HBKWIN, 0, 0);}/**********************************************************************       模块运行**********************************************************************/void gui_main_run(void)struct _Time time;  //判断当前是否显示 if (State_Show == 0) {  return; }        //得到当前时间    get_time(&time);    //判断是否到工作时间 if (sub_time(time,Time_Last) >= INTERVAL_GUI_MAIN * 1000)    {        //更新时间        Time_Last = time;                //定时工作        slot_tick();    }}/**********************************************************************       设置显示状态*参数:enable:0:关闭显示,1:打开显示**********************************************************************/void gui_main_show(uint8_t enable){ State_Show = enable; if (enable) {  WM_ShowWindow(Handle_Gui); } else {  WM_HideWindow(Handle_Gui); }}/**********************************************************************       得到当前的显示状态*返回:0:关闭显示,1:打开显示**********************************************************************/uint8_t gui_main_get_show(void){ return State_Show;}/**********************************************************************       定时工作**********************************************************************/static void slot_tick(void)//按键处理 deal_key();}/**********************************************************************       按键处理**********************************************************************/static void deal_key(void){ WM_HWIN hItem;  //按键扫描    //inf_key_scan();  //判断关机键是否按下 if (inf_key_detect_hold(KEY_CANCEL)) {  if (Key_State.cancel == 0)  {   Key_State.cancel = 1;      //按下状态   hItem = WM_GetDialogItem(Handle_Gui, ID_BUTTON_CANCEL);   BUTTON_SetState(hItem,BUTTON_STATE_HASFOCUS | BUTTON_STATE_PRESSED);      //关机   inf_power_set(OFF);  } } else {  if (Key_State.cancel == 1)  {   Key_State.cancel = 0;      //初始化按键   hItem = WM_GetDialogItem(Handle_Gui, ID_BUTTON_CANCEL);   BUTTON_SetState(hItem,BUTTON_STATE_HASFOCUS);      //开机   inf_power_set(ON);  } }  //判断下键是否按下 if (inf_key_detect_hold(KEY_DOWN)) {  if (Key_State.down == 0)  {   Key_State.down = 1;      //初始化按键   hItem = WM_GetDialogItem(Handle_Gui, ID_BUTTON_DOWN);   BUTTON_SetState(hItem,BUTTON_STATE_HASFOCUS | BUTTON_STATE_PRESSED);      //发送按键信号   WM_NotifyParent(hItem,WM_NOTIFICATION_CLICKED);  } } else {  if (Key_State.down == 1)  {   Key_State.down = 0;      //初始化按键   hItem = WM_GetDialogItem(Handle_Gui, ID_BUTTON_DOWN);   BUTTON_SetState(hItem,BUTTON_STATE_HASFOCUS);  } }  //判断上键是否按下 if (inf_key_detect_hold(KEY_UP)) {  if (Key_State.up == 0)  {   Key_State.up = 1;      //初始化按键   hItem = WM_GetDialogItem(Handle_Gui, ID_BUTTON_UP);   BUTTON_SetState(hItem,BUTTON_STATE_HASFOCUS | BUTTON_STATE_PRESSED);      //发送按键信号   WM_NotifyParent(hItem,WM_NOTIFICATION_CLICKED);  } } else {  if (Key_State.up == 1)  {   Key_State.up = 0;      //初始化按键   hItem = WM_GetDialogItem(Handle_Gui, ID_BUTTON_UP);   BUTTON_SetState(hItem,BUTTON_STATE_HASFOCUS);  } }  //判断测试键是否按下 if (inf_key_detect_hold(KEY_OK)) {  if (Key_State.ok == 0)  {   Key_State.ok = 1;      //初始化按键   hItem = WM_GetDialogItem(Handle_Gui, ID_BUTTON_OK);   BUTTON_SetState(hItem,BUTTON_STATE_HASFOCUS | BUTTON_STATE_PRESSED);      //发送按键信号   WM_NotifyParent(hItem,WM_NOTIFICATION_CLICKED);  } } else {  if (Key_State.ok == 1)  {   Key_State.ok = 0;      //初始化按键   hItem = WM_GetDialogItem(Handle_Gui, ID_BUTTON_OK);   BUTTON_SetState(hItem,BUTTON_STATE_HASFOCUS);  } }}/**********************************************************************       回调函数**********************************************************************/static void _cbDialog(WM_MESSAGE * pMsg) { WM_HWIN hItem; int     NCode; int     Id; // USER START (Optionally insert additional variables) // USER END char str[20] = {0}; switch (pMsg->MsgId)  { case WM_INIT_DIALOG:  {   //初始化窗体   //增加小按键   FRAMEWIN_AddCloseButton(pMsg->hWin, FRAMEWIN_BUTTON_RIGHT, 0);   FRAMEWIN_AddMaxButton(pMsg->hWin, FRAMEWIN_BUTTON_RIGHT, 1);   FRAMEWIN_AddMinButton(pMsg->hWin, FRAMEWIN_BUTTON_RIGHT, 2);   FRAMEWIN_SetFont(pMsg->hWin, &GUI_FontHZ12);   sprintf(str,"脚镣测试系统Ver%d by jdh",VERSION_SOFT);   FRAMEWIN_SetText(pMsg->hWin,str);      //初始化列表框   hItem = WM_GetDialogItem(pMsg->hWin, ID_LISTBOX_FUNC);   //设置为焦点   WM_SetFocus(hItem);   //设置内容   LISTBOX_SetFont(hItem, &GUI_FontHZ12);   LISTBOX_AddString(hItem, "对码绑定");   LISTBOX_AddString(hItem, "频点选择");   LISTBOX_AddString(hItem, "通话测试");   LISTBOX_AddString(hItem, "GPRS测试");   LISTBOX_AddString(hItem, "GPS测试");   LISTBOX_AddString(hItem, "125K测试");   SCROLLBAR_CreateAttached(hItem, SCROLLBAR_CF_VERTICAL);      //初始化按键   hItem = WM_GetDialogItem(pMsg->hWin, ID_BUTTON_OK);   BUTTON_SetFont(hItem, &GUI_FontHZ12);   BUTTON_SetText(hItem,"测试");      hItem = WM_GetDialogItem(pMsg->hWin, ID_BUTTON_CANCEL);   BUTTON_SetFont(hItem, &GUI_FontHZ12);   BUTTON_SetText(hItem,"关机");      hItem = WM_GetDialogItem(pMsg->hWin, ID_BUTTON_UP);   BUTTON_SetFont(hItem, &GUI_FontHZ12);   BUTTON_SetText(hItem,"上");      hItem = WM_GetDialogItem(pMsg->hWin, ID_BUTTON_DOWN);   BUTTON_SetFont(hItem, &GUI_FontHZ12);   BUTTON_SetText(hItem,"下");      hItem = WM_GetDialogItem(pMsg->hWin, ID_BUTTON_LEFT);   BUTTON_SetFont(hItem, &GUI_FontHZ12);   BUTTON_SetText(hItem,"");      hItem = WM_GetDialogItem(pMsg->hWin, ID_BUTTON_RIGHT);   BUTTON_SetFont(hItem, &GUI_FontHZ12);   BUTTON_SetText(hItem,"");      //初始化文本   hItem = WM_GetDialogItem(pMsg->hWin, ID_TEXT_MATCH);   TEXT_SetFont(hItem, &GUI_FontHZ12);   TEXT_SetText(hItem,"未绑定脚镣");      hItem = WM_GetDialogItem(pMsg->hWin, ID_TEXT_RSSI);   TEXT_SetFont(hItem, &GUI_FontHZ12);   TEXT_SetText(hItem,"");      break;  } case WM_NOTIFY_PARENT:  {   Id = WM_GetId(pMsg->hWinSrc);   NCode = pMsg->Data.v;   switch(Id)    {   case ID_BUTTON_OK:     {     switch(NCode)      {     case WM_NOTIFICATION_CLICKED:      {       //获得当前列表数目       hItem = WM_GetDialogItem(pMsg->hWin, ID_LISTBOX_FUNC);       int a = LISTBOX_GetSel(hItem);       sprintf(str,"%d",a);              hItem = WM_GetDialogItem(pMsg->hWin, ID_TEXT_RSSI);       TEXT_SetText(hItem,str);                     hItem = WM_GetDialogItem(pMsg->hWin, ID_LISTBOX_FUNC);       LISTBOX_GetItemText(hItem,a,str,20);              hItem = WM_GetDialogItem(pMsg->hWin, ID_TEXT_MATCH);       TEXT_SetText(hItem,str);       break;      }     case WM_NOTIFICATION_RELEASED:      {       break;      }     }          break;    }   case ID_BUTTON_DOWN:    {     switch(NCode)      {     case WM_NOTIFICATION_CLICKED:      {       //发送按键信号       GUI_SendKeyMsg(GUI_KEY_DOWN, 1);       break;      }     case WM_NOTIFICATION_RELEASED:      {       break;      }     }     break;    }   case ID_BUTTON_UP:     {     switch(NCode)      {     case WM_NOTIFICATION_CLICKED:      {       //发送按键信号       GUI_SendKeyMsg(GUI_KEY_UP, 1);       break;      }     case WM_NOTIFICATION_RELEASED:      {       break;      }     }     break;    }   case ID_BUTTON_CANCEL:    {     switch(NCode)      {     case WM_NOTIFICATION_CLICKED:      {       break;      }     case WM_NOTIFICATION_RELEASED:      {       break;      }     }     break;    }   case ID_BUTTON_RIGHT:    {     switch(NCode)      {     case WM_NOTIFICATION_CLICKED:      {       break;      }     case WM_NOTIFICATION_RELEASED:      {       break;      }     }     break;    }   case ID_BUTTON_LEFT:    {     switch(NCode)      {     case WM_NOTIFICATION_CLICKED:      {       break;      }     case WM_NOTIFICATION_RELEASED:      {       break;      }     }     break;    }   case ID_LISTBOX_FUNC:    {     switch(NCode)      {     case WM_NOTIFICATION_CLICKED:      {       break;      }     case WM_NOTIFICATION_RELEASED:      {       break;      }     }     break;    }   }   break;  } default:  {   WM_DefaultProc(pMsg);   break;  } }}

           

给我老师的人工智能教程打call!http://blog.csdn.net/jiangjunshow

这里写图片描述

猜你喜欢

转载自blog.csdn.net/qq_43667028/article/details/84102298