刷新界面后时间等示数可以正常跳转,但温湿度却不会改变
/*********************************************************************
* *
* SEGGER Microcontroller GmbH & Co. KG *
* Solutions for real time microcontroller applications *
* *
**********************************************************************
* *
* C-file generated by: *
* *
* GUI_Builder for emWin version 5.30 *
* Compiled Jul 1 2015, 10:50:32 *
* (c) 2015 Segger Microcontroller GmbH & Co. KG *
* *
**********************************************************************
* *
* Internet:
www.segger.com Support:
support@segger.com *
* *
**********************************************************************
*/
// USER START (Optionally insert additional includes)
// USER END
#include "apphj.h"
#include "DIALOG.h"
#include "WindowDLG.h"
#include "EmWinHZFont.h"
#include "rtc.h"
#include "tftlcd.h"
#include "ap3216c.h"
#include "dht11.h"
#include "pcf8574.h"
/*********************************************************************
*
* Defines
*
**********************************************************************
*/
#define ID_WINDOW_0 (GUI_ID_USER + 0x014)
#define ID_TEXT_0 (GUI_ID_USER + 0x015)
#define ID_TEXT_1 (GUI_ID_USER + 0x016)
#define ID_TEXT_2 (GUI_ID_USER + 0x017)
#define ID_TEXT_3 (GUI_ID_USER + 0x018)
#define ID_TEXT_4 (GUI_ID_USER + 0x019)
#define ID_TEXT_5 (GUI_ID_USER + 0x01B)
#define ID_TEXT_6 (GUI_ID_USER + 0x01C)
#define ID_BUTTON_0 (GUI_ID_USER + 0x01A)
u8 temperature;
u8 humidity;
// USER START (Optionally insert additional defines)
// USER END
/*********************************************************************
*
* Static data
*
**********************************************************************
*/
// USER START (Optionally insert additional static data)
// USER END
/*********************************************************************
*
* _aDialogCreate
*/
static const GUI_WIDGET_CREATE_INFO _aDialogCreate3[] = {
{ WINDOW_CreateIndirect, "Window", ID_WINDOW_0, 0, 0, 320, 240, 0, 0x0, 0 },
{ TEXT_CreateIndirect, "Text", ID_TEXT_0, 20, 30, 80, 20, 0, 0x0, 0 },
{ TEXT_CreateIndirect, "Text", ID_TEXT_1, 20, 60, 80, 20, 0, 0x0, 0 },
{ TEXT_CreateIndirect, "Text", ID_TEXT_2, 30, 90, 80, 20, 0, 0x0, 0 },
{ TEXT_CreateIndirect, "Text", ID_TEXT_3, 30, 120, 80, 20, 0, 0x0, 0 },
{ TEXT_CreateIndirect, "Text", ID_TEXT_4, 30, 150, 80, 20, 0, 0x0, 0 },
{ TEXT_CreateIndirect, "Text", ID_TEXT_5, 140, 30, 80, 20, 0, 0x0, 0 },
{ TEXT_CreateIndirect, "Text", ID_TEXT_6, 140, 60, 80, 20, 0, 0x0, 0 },
{ BUTTON_CreateIndirect, "Button", ID_BUTTON_0, 220, 200, 80, 20, 0, 0x0, 0 },
// USER START (Optionally insert additional widgets)
// USER END
};
/*********************************************************************
*
* Static code
*
**********************************************************************
*/
// USER START (Optionally insert additional static code)
// USER END
/*********************************************************************
*
* _cbDialog
*/
static void _cbDialog3(WM_MESSAGE * pMsg) {
RTC_TimeTypeDef RTC_TimeStruct;
RTC_DateTypeDef RTC_DateStruct;
WM_HWIN hItem;
int NCode;
int Id;
u16 ir,als,ps;
char text[30];
u8 tbuf[40];
// USER START (Optionally insert additional variables)
// USER END
switch (pMsg->MsgId) {
case WM_PAINT:
GUI_SetBkColor(GUI_LIGHTGREEN);
GUI_Clear();
GUI_SetColor(GUI_RED);
GUI_SetFont(GUI_FONT_20_ASCII);
//显示日期
HAL_RTC_GetDate(&RTC_Handler,&RTC_DateStruct,RTC_FORMAT_BIN);//获取日期
sprintf((char*)tbuf,"20%02d-%02d-%02d",RTC_DateStruct.Year,RTC_DateStruct.Month,RTC_DateStruct.Date);
GUI_DispStringAt((const char*)tbuf,200,30);//显示日期
//显示时间
HAL_RTC_GetTime(&RTC_Handler,&RTC_TimeStruct,RTC_FORMAT_BIN);//获取时间
sprintf((char*)tbuf,"%02d:%02d:%02d",RTC_TimeStruct.Hours,RTC_TimeStruct.Minutes,RTC_TimeStruct.Seconds);
GUI_DispStringAt((const char*)tbuf,80,30);//显示时间
//显示光强度
AP3216C_ReadData(&ir,&ps,&als); //读取数据
sprintf(text,"%d",ir);
GUI_DispStringAt(text,110,120);//显示红外强度
sprintf(text,"%d",als);
GUI_DispStringAt(text,110,90);//显示环境光强度
PCF8574_ReadBit(BEEP_IO);
DHT11_Read_Data(&temperature,&humidity); //读取温湿度值
sprintf(text,"%d",temperature);
GUI_DispStringAt(text,90,60);//显示温度
GUI_DispStringAt("C",115,60);//显示温度单位
sprintf(text,"%d",humidity);
GUI_DispStringAt(text,220,60);//显示湿度
GUI_DispStringAt("%",245,60);//显示湿度单位
break;
case WM_INIT_DIALOG:
//初始化BUTTONO
hItem = WM_GetDialogItem(pMsg->hWin, ID_BUTTON_0);
BUTTON_SetFont(hItem,&GUI_FontHZ16);
BUTTON_SetText(hItem,"返回");
//初始化TEXT
hItem=WM_GetDialogItem(pMsg->hWin,ID_TEXT_0);
TEXT_SetTextAlign(hItem,GUI_TA_HCENTER|GUI_TA_VCENTER);
TEXT_SetFont(hItem,GUI_FONT_16_ASCII);
TEXT_SetFont(hItem,&GUI_FontHZ12);
TEXT_SetTextColor(hItem,GUI_BLACK);
TEXT_SetText(hItem, "时间:");
//初始化TEXT
hItem=WM_GetDialogItem(pMsg->hWin,ID_TEXT_1);
TEXT_SetTextAlign(hItem,GUI_TA_HCENTER|GUI_TA_VCENTER);
TEXT_SetFont(hItem,GUI_FONT_16_ASCII);
TEXT_SetFont(hItem,&GUI_FontHZ12);
TEXT_SetTextColor(hItem,GUI_BLACK);
TEXT_SetText(hItem, "温度:");
//初始化TEXT
hItem=WM_GetDialogItem(pMsg->hWin,ID_TEXT_2);
TEXT_SetTextAlign(hItem,GUI_TA_HCENTER|GUI_TA_VCENTER);
TEXT_SetFont(hItem,GUI_FONT_16_ASCII);
TEXT_SetFont(hItem,&GUI_FontHZ12);
TEXT_SetTextColor(hItem,GUI_BLACK);
TEXT_SetText(hItem, "环境光强度:");
//初始化TEXT
hItem=WM_GetDialogItem(pMsg->hWin,ID_TEXT_3);
TEXT_SetTextAlign(hItem,GUI_TA_HCENTER|GUI_TA_VCENTER);
TEXT_SetFont(hItem,GUI_FONT_16_ASCII);
TEXT_SetFont(hItem,&GUI_FontHZ12);
TEXT_SetTextColor(hItem,GUI_BLACK);
TEXT_SetText(hItem, "红外线强度:");
//初始化TEXT
hItem=WM_GetDialogItem(pMsg->hWin,ID_TEXT_4);
TEXT_SetTextAlign(hItem,GUI_TA_HCENTER|GUI_TA_VCENTER);
TEXT_SetFont(hItem,GUI_FONT_16_ASCII);
TEXT_SetFont(hItem,&GUI_FontHZ12);
TEXT_SetTextColor(hItem,GUI_BLACK);
TEXT_SetText(hItem, "短信");
//初始化TEXT
hItem=WM_GetDialogItem(pMsg->hWin,ID_TEXT_5);
TEXT_SetTextAlign(hItem,GUI_TA_HCENTER|GUI_TA_VCENTER);
TEXT_SetFont(hItem,GUI_FONT_16_ASCII);
TEXT_SetFont(hItem,&GUI_FontHZ12);
TEXT_SetTextColor(hItem,GUI_BLACK);
TEXT_SetText(hItem, "日期:");
//初始化TEXT
hItem=WM_GetDialogItem(pMsg->hWin,ID_TEXT_6);
TEXT_SetTextAlign(hItem,GUI_TA_HCENTER|GUI_TA_VCENTER);
TEXT_SetFont(hItem,GUI_FONT_16_ASCII);
TEXT_SetFont(hItem,&GUI_FontHZ12);
TEXT_SetTextColor(hItem,GUI_BLACK);
TEXT_SetText(hItem, "湿度:");
break;
case WM_NOTIFY_PARENT:
Id = WM_GetId(pMsg->hWinSrc);
NCode = pMsg->Data.v;
switch(Id) {
case ID_BUTTON_0: // Notifications sent by 'Button'
switch(NCode) {
case WM_NOTIFICATION_CLICKED:
// USER START (Optionally insert code for reacting on notification message)
// USER END
break;
case WM_NOTIFICATION_RELEASED:
CreateWindow();
// USER START (Optionally insert code for reacting on notification message)
// USER END
break;
// USER START (Optionally insert additional code for further notification handling)
// USER END
}
break;
// USER START (Optionally insert additional code for further Ids)
// USER END
}
break;
// USER START (Optionally insert additional message handling)
// USER END
default:
WM_DefaultProc(pMsg);
break;
}
}
/*********************************************************************
*
* Public code
*
**********************************************************************
*/
/*********************************************************************
*
* CreateWindow
*/
//背景窗口WM_HBKWIN回调函数
static void _cbBkWindow(WM_MESSAGE* pMsg)
{
switch(pMsg->MsgId)
{
case WM_PAINT:
GUI_SetBkColor(GUI_BLUE);
GUI_Clear();
break;
default:
WM_DefaultProc(pMsg);
}
}
WM_HWIN CreateWindow3(void);
WM_HWIN CreateWindow3(void) {
WM_HWIN hWin;
u8 tbuf[40];
WM_SetCallback(WM_HBKWIN,_cbBkWindow);//设置背景窗口回调函数
hWin = GUI_CreateDialogBox(_aDialogCreate3, GUI_COUNTOF(_aDialogCreate3), _cbDialog3, WM_HBKWIN, 0, 0);
while(1)
{
GUI_Delay(200);
WM_InvalidateWindow(hWin); //对话框窗口无效
}
return hWin;
}
// USER START (Optionally insert additional public code)
// USER END
/*************************** End of file ****************************/
int main(void)
{
OS_ERR err;
CPU_SR_ALLOC();
Write_Through(); //Cahce强制透写
MPU_Memory_Protection(); //保护相关存储区域
Cache_Enable(); //打开L1-Cache
Stm32_Clock_Init(432,25,2,9); //设置时钟,216Mhz
HAL_Init(); //初始化HAL库
delay_init(216); //延时初始化
uart_init(115200); //串口初始化
KEY_Init(); //按键初始化
PCF8574_Init(); //初始化PCF8574
LED_Init(); //初始化LED
SDRAM_Init(); //SDRAM初始化
TFTLCD_Init(); //初始化LCD
TP_Init(); //触摸屏初始化
TIM3_PWM_Init(500-1,108-1); //108M/108=1M的计数频率,自动重装载为500,那么PWM频率为1M/500=2kHZ
RTC_Init(); //初始化RTC
while(AP3216C_Init()); //检测不到AP3216C
PCF8574_ReadBit(BEEP_IO); //由于DHT11和PCF8574的中断引脚共用一个IO,
while(DHT11_Init()); //DHT11初始化
my_mem_init(SRAMIN); //初始化内部内存池
my_mem_init(SRAMEX); //初始化外部内存池
my_mem_init(SRAMDTCM); //初始化DTCM内存池
exfuns_init(); //为fatfs相关变量申请内存
f_mount(fs[0],"0:",1); //挂载SD卡
f_mount(fs[1],"1:",1); //挂载FLASH.
f_mount(fs[2],"2:",1); //挂载NAND FLASH.
while(font_init()) //初始化字库
{
LCD_ShowString(30,70,200,16,16,"Font Error!");
while(SD_Init()) //检测SD卡
{
LCD_ShowString(30,90,200,16,16,"SD Card Failed!");
delay_ms(200);
LCD_Fill(30,90,200+30,70+16,WHITE);
delay_ms(200);
}
update_font(30,90,16,"0:"); //如果字库不存在就更新字库
delay_ms(2000);
LCD_Clear(WHITE); //清屏
break;
}
OSInit(&err); //初始化UCOSIII
OS_CRITICAL_ENTER(); //进入临界区
//创建开始任务
OSTaskCreate((OS_TCB * )&StartTaskTCB, //任务控制块
(CPU_CHAR * )"start task", //任务名字
(OS_TASK_PTR )start_task, //任务函数
(void * )0, //传递给任务函数的参数
(OS_PRIO )START_TASK_PRIO, //任务优先级
(CPU_STK * )&START_TASK_STK[0], //任务堆栈基地址
(CPU_STK_SIZE)START_STK_SIZE/10, //任务堆栈深度限位
(CPU_STK_SIZE)START_STK_SIZE, //任务堆栈大小
(OS_MSG_QTY )0, //任务内部消息队列能够接收的最大消息数目,为0时禁止接收消息
(OS_TICK )0, //当使能时间片轮转时的时间片长度,为0时为默认长度,
(void * )0, //用户补充的存储区
(OS_OPT )OS_OPT_TASK_STK_CHK|OS_OPT_TASK_STK_CLR, //任务选项
(OS_ERR * )&err); //存放该函数错误时的返回值
OS_CRITICAL_EXIT(); //退出临界区
OSStart(&err); //开启UCOSIII
while(1);
}
//开始任务函数
void start_task(void *p_arg)
{
OS_ERR err;
CPU_SR_ALLOC();
p_arg = p_arg;
CPU_Init();
#if OS_CFG_STAT_TASK_EN > 0u
OSStatTaskCPUUsageInit(&err); //统计任务
#endif
#ifdef CPU_CFG_INT_DIS_MEAS_EN //如果使能了测量中断关闭时间
CPU_IntDisMeasMaxCurReset();
#endif
#if OS_CFG_SCHED_ROUND_ROBIN_EN //当使用时间片轮转的时候
//使能时间片轮转调度功能,设置默认的时间片长度
OSSchedRoundRobinCfg(DEF_ENABLED,1,&err);
#endif
__HAL_RCC_CRC_CLK_ENABLE(); //使能CRC时钟
//WM_SetCreateFlags(WM_CF_MEMDEV); //启动所有窗口的存储设备
GUI_Init(); //STemWin初始化
WM_MULTIBUF_Enable(1); //开启STemWin多缓冲,RGB屏可能会用到
OS_CRITICAL_ENTER(); //进入临界区
//STemWin Demo任务
OSTaskCreate((OS_TCB* )&EmwindemoTaskTCB,
(CPU_CHAR* )"Emwindemo task",
(OS_TASK_PTR )emwindemo_task,
(void* )0,
(OS_PRIO )EMWINDEMO_TASK_PRIO,
(CPU_STK* )&EMWINDEMO_TASK_STK[0],
(CPU_STK_SIZE)EMWINDEMO_STK_SIZE/10,
(CPU_STK_SIZE)EMWINDEMO_STK_SIZE,
(OS_MSG_QTY )0,
(OS_TICK )0,
(void* )0,
(OS_OPT )OS_OPT_TASK_STK_CHK|OS_OPT_TASK_STK_CLR,
(OS_ERR* )&err);
//触摸屏任务
OSTaskCreate((OS_TCB* )&TouchTaskTCB,
(CPU_CHAR* )"Touch task",
(OS_TASK_PTR )touch_task,
(void* )0,
(OS_PRIO )TOUCH_TASK_PRIO,
(CPU_STK* )&TOUCH_TASK_STK[0],
(CPU_STK_SIZE)TOUCH_STK_SIZE/10,
(CPU_STK_SIZE)TOUCH_STK_SIZE,
(OS_MSG_QTY )0,
(OS_TICK )0,
(void* )0,
(OS_OPT )OS_OPT_TASK_STK_CHK|OS_OPT_TASK_STK_CLR,
(OS_ERR* )&err);
//LED0任务
OSTaskCreate((OS_TCB* )&Led0TaskTCB,
(CPU_CHAR* )"Led0 task",
(OS_TASK_PTR )led0_task,
(void* )0,
(OS_PRIO )LED0_TASK_PRIO,
(CPU_STK* )&LED0_TASK_STK[0],
(CPU_STK_SIZE)LED0_STK_SIZE/10,
(CPU_STK_SIZE)LED0_STK_SIZE,
(OS_MSG_QTY )0,
(OS_TICK )0,
(void* )0,
(OS_OPT )OS_OPT_TASK_STK_CHK|OS_OPT_TASK_STK_CLR,
(OS_ERR* )&err);
//字库更新任务
OSTaskCreate((OS_TCB* )&FontupdataTaskTCB,
(CPU_CHAR* )"Fontupdata task",
(OS_TASK_PTR )fontupdata_task,
(void* )0,
(OS_PRIO )FONTUPDATA_TASK_PRIO,
(CPU_STK* )&FONTUPDATA_TASK_STK[0],
(CPU_STK_SIZE)FONTUPDATA_STK_SIZE/10,
(CPU_STK_SIZE)FONTUPDATA_STK_SIZE,
(OS_MSG_QTY )0,
(OS_TICK )0,
(void* )0,
(OS_OPT )OS_OPT_TASK_STK_CHK|OS_OPT_TASK_STK_CLR,
(OS_ERR* )&err);
OS_TaskSuspend((OS_TCB*)&StartTaskTCB,&err); //挂起开始任务
OS_CRITICAL_EXIT(); //退出临界区
}
//EMWINDEMO任务
void emwindemo_task(void *p_arg)
{
GUI_CURSOR_Show();
CreateWindow();
// HZFontDemo();
while(1)
{
GUI_Delay(100);
}
}
//字库更新任务
//KEY_UP键长按2s更新字库
void fontupdata_task(void *pdata)
{
OS_ERR err;
while(1)
{
if(WK_UP == 1) //KEY_UP键按下
{
OSTimeDlyHMSM(0,0,2,0,OS_OPT_TIME_PERIODIC,&err);//延时2s
if(WK_UP == 1) //还是KEY_UP键
{
HzFontupdataCreate(); //升级字库
}
}
OSTimeDlyHMSM(0,0,0,10,OS_OPT_TIME_PERIODIC,&err);//延时10ms
}
}
//TOUCH任务
void touch_task(void *p_arg)
{
OS_ERR err;
while(1)
{
GUI_TOUCH_Exec();
OSTimeDlyHMSM(0,0,0,5,OS_OPT_TIME_PERIODIC,&err);//延时5ms
}
}
//LED0任务
void led0_task(void *p_arg)
{
OS_ERR err;
while(1)
{
LED0_Toggle;
OSTimeDlyHMSM(0,0,0,500,OS_OPT_TIME_PERIODIC,&err);//延时500ms
}
}
一周热门 更多>