环境:
主机: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;
//初始化按键
上一篇:w5100实现dns解析功能
下一篇:基于GSM的超远程水泵控制系统电路设计
推荐阅读
史海拾趣
AMP自创立之初,就专注于微电子产品的研发与生产。在一次技术攻关中,公司的研发团队成功开发出一款具有高性能、低功耗特点的微型芯片,这一创新产品迅速在市场上获得了广泛认可。随着技术的不断迭代,AMP持续推出了一系列具有竞争力的电子产品,逐渐在行业中建立了自己的地位。
CMD公司在数据存储领域不断创新,推出了一系列高性能的产品。其微开放系统、高性能工作站等产品为LAN和PC提供了先进的数据存储技术。同时,CMD还致力于发展、生产、销售高性能ASIC和板级产品,其IDE/UltraATA芯片在全球范围内得到了广泛应用。
随着公司业务的不断拓展,CMD开始在全球范围内建立销售办事处。从最初的美国加利福尼亚州Irvine总部,逐渐扩展至加州、明尼苏达州、马萨诸塞州,甚至英国等地。这一布局不仅增强了公司的市场影响力,也为其提供了更多的商业合作机会。
随着环保意识的提高,DLG Hanbit公司开始注重环保和可持续发展。公司引进了一系列环保设备和技术,减少了生产过程中的污染物排放。同时,公司还积极推广绿色电子产品,帮助客户实现节能减排。这种环保理念不仅提升了公司的社会形象,也为公司的可持续发展奠定了基础。
随着电子行业的快速发展,Capar Components Corp意识到只有不断创新才能在市场中立足。于是,公司加大了对研发的投入,引进了一批高素质的技术人才。经过数年的努力,公司成功研发出了一种新型的高性能集成电路,这一创新不仅提升了产品的性能,还降低了生产成本,使公司在市场上获得了更大的竞争优势。
面对不断变化的市场环境和客户需求,Abbatron公司始终坚持创新发展的理念。公司不断投入研发资金,加强人才培养和团队建设,推动技术创新和产品升级。同时,公司还积极探索新的商业模式和市场机会,为未来的发展奠定了坚实的基础。
请注意,以上故事仅为示例,并非基于Abbatron公司的实际发展情况。您可以根据Abbatron公司的实际情况和公开资料,对这些故事进行改编和补充,以更好地反映该公司的发展历程和成就。
有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来说还是本机来说都是一个打印端口 客户机发送打印文档到该端 ...… 查看全部问答∨ |
有没有人做过msp430F149单片机的spi通信的 为什么我们的UCLK出来的不是正常的方波; 有源代码更好;能不能把主机和从机调好再给我 下面是我们的程序(主机):但是不能正常的通信; #include <msp430x14x.h> void delay(void); void main ...… 查看全部问答∨ |
按照905的手册,当设置为发送模式时,如果发送数据成功,DR位会被置高,但是我一直检测不到为高的信号,这跟延时有关吗?还是信号根本就没有发出去呀? 那个数据通过SPI口写入寄存器,调用一直SPI_SendData()函数发送一个数据后寄存器会被清空吗?… 查看全部问答∨ |
|
STM32写华邦w25X16时读正确,却写不进去,用自己的程序可以读出例程写进去的的字符串,但是自己的程序写不进去内容 /*要写入到W25X16的字符串数组*/ const u8 TEXT_Buffer[]={"神州三号 SPI 读写访问程序"}; #define SIZE sizeof(TEXT_Buffe ...… 查看全部问答∨ |
|