历史上的今天

今天是:2024年10月15日(星期二)

正在发生

2020年10月15日 | ucgui界面设计&实体按键驱动

发布者:温馨小屋 来源: eefocus关键字:ucgui  界面设计  实体按键驱动 手机看文章 扫描二维码
随时随地手机看文章

环境:

主机: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;

//初始化按键

[1] [2]
关键字:ucgui  界面设计  实体按键驱动 引用地址:ucgui界面设计&实体按键驱动

上一篇:w5100实现dns解析功能
下一篇:基于GSM的超远程水泵控制系统电路设计

推荐阅读

之前单片机刚入门开始学89C51,开发环境为keil4,后来升级到keil5,现在准备学STM32,STM32开发环境为keilMDK,于是找到keilMDK安装包下载之后,才发现他和Atmel、STC的单片机不兼容,于是在百度中寻求让他们兼容的方法,有人说什么更改TOOL文件里的东西,本人尝试了一下也没成功。最近又看到一种方法,十分简单,亲测已经成功完成兼容。于是将此方法写在...
(文章来源:中科罗伯特机器人学院) 根据这几年有关于人力资源市场运行的数据和走势来分析,在智能生产设备在制造业企业中的应用不断深入拓展的时候,一些像是工业机器人服务专员、工业机器人系统工程师、机器人研发工程师和维修工程师等机器人“周边”新的职业需求相继出现。 据统计,近七成的用人需求来自制造业、批发和零售业、住宿和餐饮业,随...
10月15日,大族激光发布业绩预告称,公司预计2020年前三季度归属于上市公司股东的净利润为99,033.42万元–105,035.45万元,同比增长65%-75%,上年同期盈利为60,020.25万元。其中,第三季度(7-9月)实现归属于上市公司股东的净利润预计为36,696.75万元–42,698.78 万元,同比增长66%-93%,上年同期盈利为22,071.15万元。关于业绩增长,大族激光表示,得益...
本人之前其实也用STM32做过一些小东西,但因为时钟的初始化一般是直接在SystemInit时钟系统初始化函数里直接配置为72MHz,所以对于STM32的时钟框图并没有怎么理会,今天刚好有空就重新看了一下并写一篇博客记录一下吧,以免以后又忘了。STM32 有5个时钟源:HSI、HSE、LSI、LSE、PLL。 ①、HSI(High Speed Internal Clock signal)是高速内部时钟,RC...

史海拾趣

问答坊 | AI 解惑

处理完5个记录的总时间是多少?谢谢!!

有5个记录A、B、C、D、E存放在某磁盘的某一磁道上,假定这个磁道划分为5块,每块存放一个记录,现在要顺序处理这5个记录,如果磁盘旋转速度为20ms转1周,处理程序每读出一个记录后花6ms进行处理。试问(1)处理完5个记录的总时间是多少?(2)为减 ...…

查看全部问答∨

WindowsMobile 自带的camera应用能接收jpg type的数据吗

底层驱动直接传上来.jpg数据,用WindowsMobile 自带的camera应用测试,能得到数据并直接保存吗? 有哪位试过?…

查看全部问答∨

写一个虚拟打印驱动有多少工作量?

1、创建一个新的打印端口类型 2、可以将系统现有的打印机的端口修改成新端口 3、可以监管此端口上的打印任务 4、创建新的打印属性页 就是这个虚拟端口 无论对于网络上的其它PC来说还是本机来说都是一个打印端口 客户机发送打印文档到该端 ...…

查看全部问答∨

MSP130spi通信

有没有人做过msp430F149单片机的spi通信的 为什么我们的UCLK出来的不是正常的方波; 有源代码更好;能不能把主机和从机调好再给我 下面是我们的程序(主机):但是不能正常的通信; #include <msp430x14x.h> void delay(void); void main ...…

查看全部问答∨

基于STM32的NRF905模块遇到的问题

按照905的手册,当设置为发送模式时,如果发送数据成功,DR位会被置高,但是我一直检测不到为高的信号,这跟延时有关吗?还是信号根本就没有发出去呀? 那个数据通过SPI口写入寄存器,调用一直SPI_SendData()函数发送一个数据后寄存器会被清空吗?…

查看全部问答∨

STM32SPI写的问题

STM32写华邦w25X16时读正确,却写不进去,用自己的程序可以读出例程写进去的的字符串,但是自己的程序写不进去内容 /*要写入到W25X16的字符串数组*/ const u8 TEXT_Buffer[]={"神州三号 SPI 读写访问程序"}; #define SIZE sizeof(TEXT_Buffe ...…

查看全部问答∨

PIC单片机超声波测距数码管显示

各位大侠,有哪位用PIC单片机编码过HC-SR04超声波模块的数码管显示程序。小弟求助一下,求赐教…

查看全部问答∨

STM32L

STM32L系列如何读取GPIO的数据,与STM32F系列有何不同? …

查看全部问答∨
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved