历史上的今天
返回首页

历史上的今天

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

正在发生

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

2020-10-15 来源:eefocus

环境:

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

//初始化按键

推荐阅读

史海拾趣

Gowanda Electronics公司的发展小趣事

对于连续可调直流稳压电源电路,网友可能会有多个方面的问题,以下是一些常见问题及其解答:

一、技术原理与性能参数

  1. 问:连续可调直流稳压电源电路的工作原理是什么?
    : 连续可调直流稳压电源电路的工作原理主要是通过扩展开关电源的电压和电流容量,采用高频调制技术,将输入的交流电转换为直流电,并通过调节电路使输出电压稳定在一个可调范围内。其内部包含整流、滤波、稳压等多个环节,以提供稳定且可调的直流电压输出。

  2. 问:如何选择合适的连续可调直流稳压电源?
    : 选择连续可调直流稳压电源时,需要考虑的主要因素包括所需电压范围、电流容量、稳压精度、纹波噪声、保护功能等。同时,也需要根据应用场景考虑电源的体积、重量、散热性能等因素。

二、使用与维护

  1. 问:在使用过程中,输出电压不稳定怎么办?
    : 如果输出电压不稳定,可以首先检查电源输入电压是否稳定,使用稳压电源或变压器等辅助设备来保持输入电压的稳定。其次,检查输出端电压设置是否正确,确保输出电压值在设定范围内。最后,检查电源输出端负载是否符合规定,避免负载过重或过轻导致输出电压波动。

  2. 问:如何对连续可调直流稳压电源进行日常维护?
    : 日常维护主要包括检查电源输入输出线路的连接是否牢固,清洁电源外壳和散热风扇上的灰尘,以及定期检查电源的工作状态和性能指标。如果发现异常或故障,应及时进行处理或更换损坏的部件。

三、故障排查与解决

  1. 问:电源无法输出电压或电流怎么办?
    : 如果电源无法输出电压或电流,可以首先检查电源输入电压是否正常,电源本身是否损坏。其次,检查电源输出端连接是否正确,是否存在开路或短路的情况。最后,检查电源是否过载或短路,确保电源在正常工作范围内。

  2. 问:电源输出电压波动大怎么办?
    : 输出电压波动大可能是由于电源输入电压不稳定、输出端负载不匹配或存在电磁干扰等原因造成的。解决方法包括稳定输入电压、匹配适当的负载、检查并消除电磁干扰源等。

四、扩展与升级

  1. 问:如何扩展连续可调直流稳压电源的电压和电流范围?
    : 扩展电压和电流范围通常需要根据具体的电源设计来进行。一般来说,可以通过更换更高功率的整流管、滤波电容和稳压元件等方式来提升电源的电压和电流容量。同时,也可以通过增加并联或串联电路的方式来实现电压和电流的分档调节。

  2. 问:如何进行电路的升级和改造?
    : 电路的升级和改造需要根据实际需求和技术能力来进行。在升级过程中,需要注意保持原有电路的稳定性和可靠性,避免引入新的故障点。同时,也需要关注新技术的发展和应用,以便在升级过程中采用更先进、更高效的电路设计方案。

以上是针对连续可调直流稳压电源电路的一些常见问题及其解答。希望这些信息能够对网友有所帮助。

海芯科技(AVIA)公司的发展小趣事

面对电子行业的快速变化和市场竞争的加剧,海芯科技始终保持着对技术创新的追求和投入。公司不断引进新技术、新工艺和新材料,对现有产品进行升级和改进,同时也在不断探索和研发新的产品和技术。这些技术升级和创新发展不仅提升了公司的核心竞争力,也为公司在未来市场竞争中保持领先地位提供了有力保障。

这五个故事展示了海芯科技在电子行业中的发展历程和取得的成就。通过不断的努力和创新,海芯科技已经逐渐成为了电子行业中的佼佼者,为行业的发展做出了积极的贡献。

Antiference公司的发展小趣事

在追求经济效益的同时,Antiference公司始终不忘履行社会责任。公司积极参与环保事业,推动绿色生产,努力降低生产过程中的能耗和排放。此外,Antiference还积极投身公益事业,支持教育事业和扶贫工作,为社会做出了积极贡献。

ERA Transformers公司的发展小趣事

随着市场需求的不断增长,ERA Transformers公司面临着扩大生产规模的挑战。为了满足客户需求并保持市场竞争力,公司决定投资建设一个新的生产基地。经过精心规划和筹备,新的生产基地顺利建成并投入使用。这不仅大大提高了公司的生产能力,还进一步提升了产品质量和生产效率。新基地的建成标志着ERA Transformers公司在电子行业中的地位更加稳固。

Fillfactory Nv公司的发展小趣事

2015年,FIDELIX迎来了一个重要的转折点。在这一年,东芯半导体有限公司(以下简称“东芯半导体”)正式收购了FIDELIX 25.3%的股权,成为其第一大股东及实际控制人。这一收购标志着FIDELIX开始进入一个新的发展阶段。

通过与东芯半导体的合作,FIDELIX获得了更多的资金支持和市场资源。东芯半导体是一家专注于中小容量存储芯片研发、设计和销售的中国企业,在半导体领域拥有丰富的经验和资源。双方的合作不仅为FIDELIX带来了更多的发展机会,同时也加速了FIDELIX在国际市场上的扩张步伐。

在上述两个故事的基础上,可以根据FIDELIX公司的具体发展历程、重要事件、技术创新、市场策略等方面进行进一步的拓展和补充,以形成完整、详细的故事内容。

Carlo Gavazzi公司的发展小趣事

随着技术的不断进步和市场需求的不断变化,Carlo Gavazzi公司始终保持着创新的活力。公司不断推出新产品,从最初的电气元件到后来的控制和自动化解决方案,再到能源管理和节能方案,产品线日益丰富。这种多元化的产品策略不仅满足了客户的多样化需求,也为公司带来了更广阔的市场空间。

问答坊 | AI 解惑

智能电话报警系统

本帖最后由 paulhyde 于 2014-9-15 09:50 编辑 我的毕业设计题目是\"智能电话报警系统\",现在准备交了,可MT8888自动拨号这部分程序还没调得,有哪位高手可以指点小妹下,万分感谢! 邮箱:dodo716@163.com  …

查看全部问答>

双向汽车防盗器设计(毕业设计系列)

本帖最后由 paulhyde 于 2014-9-15 08:54 编辑  …

查看全部问答>

深度解析与探讨:嵌入式系统的高低温故障的根源

呵呵,ARM7、ARM9 还有PXA3XX 等等嵌入式ARM都存在高低温时容易爆发故障?尤其是主频越高的CPU,越容易爆发高低温故障? 这是为什么? 这是因为我们疏忽了对于整个系统中的很多关键信号的完整性的研究、分析与设计; 我们的硬件、软硬件协调设计 ...…

查看全部问答>

问个小问题

     我买的一块上面有CPLD的开发板,查了附带的光盘资料,没写清每个管脚的作用,以前没用过CPLD ,难道每个管脚都一样,都是通用的吗??难道时钟引脚也随便用吗,每次写完VHDL都不知道该怎么分配管脚,请大家指点一下,只说 ...…

查看全部问答>

MessageBeep()通过蜂鸣器实现问题

我的设备中没有加声卡,只有一个蜂器鸣,写了个蜂鸣器的驱动,WINCE中的函数MessageBeep()如何去实现呢?MessageBeep()都调用了哪些函数和信息?请指点一下,谢谢!…

查看全部问答>

cannot open file 'ceddk.lib'(急寻解决办法)

别人考我一个工程EVC的 在他那可以运行 在我电脑上运行报错如下: LINK : fatal error LNK1104: cannot open file \'ceddk.lib\' 是要将这个库加到工程中吗? 哪位有这个库的发我一个 万分感谢! mickeyhao66@163.com…

查看全部问答>

WINCE问题(得答案后马上结帖)

WinCE中,在主对话框中有一子对话框,在子对话框中我用 CreateWindow(TEXT(\"DISPLAYCLASS\")……) 创建了一个IE控件,请问如何使当我鼠标指针只要一移到IE控件中就弹出一个消息框???…

查看全部问答>

我有技术,他有市场,但其他都不了解,如何合作?

我有技术,他有市场,但其他都不了解,如何合作?关键是公司运作,财务监督等,因为失败了两次,我对世人的诚信不敢恭维。…

查看全部问答>

FPGA+USB通信

我现在需要用ISP1362芯片实现USB通信,但是对上位机程序不是很了解,希望得到帮助,我的QQ是1261446649,加我QQ详谈要求和报酬。感激不尽!…

查看全部问答>

花了2天,SWIM底层接口终于搞定

8mA的sink电流比较变态。。。。。。 STM8S没有Chip_ID比较变态。。。。。。 其他都是浮云。。。。。。 swim.jpg (11.35 KB) 下载次数:32 2009-12-31 15:54 …

查看全部问答>