OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4280|回复: 6

关于emwin定时器的使用问题

[复制链接]

9

主题

48

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
322
金钱
322
注册时间
2020-7-7
在线时间
113 小时
发表于 2020-11-24 14:30:25 | 显示全部楼层 |阅读模式
1金钱
怎么用按钮来控制定时器啊,就是我想点击按钮创建一个定时器,再按另一个删除这个定时器

最佳答案

查看完整内容[请看2#楼]

在按键消息里面Create定时器啊,然后把定时器的句柄用全局变量记录下来。然后在另外一个按键的消息处理里面删除定时器就行了,参数就是定时器的句柄
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

9

主题

48

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
322
金钱
322
注册时间
2020-7-7
在线时间
113 小时
 楼主| 发表于 2020-11-25 10:10:55 | 显示全部楼层
本帖最后由 zxc199701 于 2020-11-25 10:12 编辑
姚先起 发表于 2020-11-24 14:30
在按键消息里面Create定时器啊,然后把定时器的句柄用全局变量记录下来。然后在另外一个按键的消息处理里面 ...

大神,这样不行啊,我一点击按钮就卡死了,代码如下:WM_HWIN hControl
//点灯程序
void Fill(WM_MESSAGE * pMsg)
{

                LED2_Toggle;
                GUI_Delay(3000);
                LED2_Toggle;
                LED4_Toggle;
                GUI_Delay(3000);
                LED4_Toggle;
                LED3_Toggle;
                GUI_Delay(3000);
                LED3_Toggle;
                LED5_Toggle;
                GUI_Delay(3000);
                LED5_Toggle;

}
//主界面对话框        
static void _cbDialogPage1(WM_MESSAGE * pMsg)
{
                int          NCode;
                int          Id;
                WM_HWIN      hItem =pMsg->hWin;
                unsigned int i;
                        
        
                u8 tbuf[20];
                switch (pMsg->MsgId) {
                        
                //窗口重绘消息
                case WM_PAINT:
                        GUI_SetBkColor(GUI_WHITE);
                        GUI_Clear();
                        DSO_Init(0);                                                //示波器界面初始化
                        break;
               
                //对话框初始化消息
                case WM_INIT_DIALOG:
                        
               
                        WM_CreateTimer(hItem,ID_TimerData,1000,0);
                        WM_CreateTimer(hItem,ID_TimerTime,1000,0);
               
                        //TEXT控件初始化
                        hItem = WM_GetDialogItem(pMsg->hWin, ID_TEXT_0);
                        TEXT_SetFont(hItem,&GUI_FontHZ32);
                        TEXT_SetTextColor(hItem,GUI_WHITE);
                        TEXT_SetText(hItem,"测试信息");
                        hItem = WM_GetDialogItem(pMsg->hWin, ID_TEXT_1);
                        TEXT_SetFont(hItem,&GUI_FontHZ32);
                        TEXT_SetTextColor(hItem,GUI_WHITE);
                        TEXT_SetText(hItem,"产品条码");
                        hItem = WM_GetDialogItem(pMsg->hWin, ID_TEXT_2);
                        TEXT_SetFont(hItem,&GUI_FontHZ32);
                        TEXT_SetTextColor(hItem,GUI_WHITE);
                        TEXT_SetText(hItem,"检测压力");
                        hItem = WM_GetDialogItem(pMsg->hWin, ID_TEXT_3);
                        TEXT_SetFont(hItem,&GUI_FontHZ32);
                        TEXT_SetTextColor(hItem, GUI_WHITE);
                        TEXT_SetText(hItem,"当前压差");
                        hItem = WM_GetDialogItem(pMsg->hWin, ID_TEXT_4);
                        TEXT_SetFont(hItem,&GUI_FontHZ32);
                        TEXT_SetTextColor(hItem,GUI_WHITE);
                        TEXT_SetText(hItem,"检测数量");
                        hItem = WM_GetDialogItem(pMsg->hWin, ID_TEXT_5);
                        TEXT_SetFont(hItem,&GUI_FontHZ32);
                        TEXT_SetTextColor(hItem,GUI_WHITE);
                        TEXT_SetText(hItem,"合格品率");
                        hItem = WM_GetDialogItem(pMsg->hWin, ID_TEXT_6);
                        TEXT_SetFont(hItem,&GUI_FontHZ32);
                        TEXT_SetTextColor(hItem,GUI_WHITE);
                        TEXT_SetText(hItem,"Kpa");
                        hItem = WM_GetDialogItem(pMsg->hWin, ID_TEXT_7);
                        TEXT_SetFont(hItem,&GUI_FontHZ32);
                        TEXT_SetTextColor(hItem,GUI_WHITE);
                        TEXT_SetText(hItem,"Pa");
                        hItem = WM_GetDialogItem(pMsg->hWin, ID_TEXT_8);
                        TEXT_SetFont(hItem,&GUI_FontHZ32);
                        TEXT_SetTextColor(hItem,GUI_WHITE);
                        TEXT_SetText(hItem,"PCS");
                        hItem = WM_GetDialogItem(pMsg->hWin, ID_TEXT_9);
                        TEXT_SetFont(hItem,&GUI_FontHZ32);
                        TEXT_SetTextColor(hItem,GUI_WHITE);
                        TEXT_SetText(hItem,"%");
                        hItem = WM_GetDialogItem(pMsg->hWin, ID_TEXT_10);
                        TEXT_SetFont(hItem,&GUI_FontHZ32);
                        TEXT_SetTextColor(hItem,GUI_WHITE);
                        TEXT_SetText(hItem,"泄露量");
                        hItem = WM_GetDialogItem(pMsg->hWin, ID_TEXT_11);
                        TEXT_SetFont(hItem,&GUI_FontHZ24);
                        TEXT_SetTextColor(hItem,GUI_WHITE);
                        TEXT_SetText(hItem,"Pa");
                        hItem = WM_GetDialogItem(pMsg->hWin, ID_TEXT_12);
                        TEXT_SetFont(hItem, &GUI_FontHZ32);
                        TEXT_SetTextColor(hItem,GUI_WHITE);
                        TEXT_SetText(hItem,"0.0");
                        
                        
                        
                        hItem = WM_GetDialogItem(pMsg->hWin, ID_TEXT_17);
                        TEXT_SetFont(hItem, &GUI_FontHZ24);
                        TEXT_SetTextColor(hItem,GUI_WHITE);
                        TEXT_SetTextAlign(hItem, GUI_TA_VCENTER|GUI_TA_CENTER);
                        TEXT_SetText(hItem, "00:00");

                        hItem = WM_GetDialogItem(pMsg->hWin, ID_TEXT_18);
                        TEXT_SetFont(hItem, &GUI_FontHZ24);
                        TEXT_SetTextColor(hItem,GUI_WHITE);
                        TEXT_SetTextAlign(hItem, GUI_TA_VCENTER|GUI_TA_CENTER);
                        TEXT_SetText(hItem, "2020/11/24");
                        
                        //按钮控件初始化
                        hItem = WM_GetDialogItem(pMsg->hWin, ID_BUTTON_0);                        
                        BUTTON_SetFont(hItem,&GUI_FontHZ24);
                        BUTTON_SetTextColor(hItem,BUTTON_CI_UNPRESSED,GUI_WHITE);
                        BUTTON_SetText(hItem,"测试记录");
                        WM_SetHasTrans(hItem);
                        WM_SetCallback(hItem,_cbButton);
                        
                        hItem = WM_GetDialogItem(pMsg->hWin, ID_BUTTON_1);
                        BUTTON_SetFont(hItem,&GUI_FontHZ24);
                        BUTTON_SetTextColor(hItem,BUTTON_CI_UNPRESSED,GUI_WHITE);
                        BUTTON_SetText(hItem,"参数设置");
                        WM_SetHasTrans(hItem);
                        WM_SetCallback(hItem,_cbButton);

                        
                        hItem = WM_GetDialogItem(pMsg->hWin, ID_BUTTON_2);
                        BUTTON_SetFont(hItem,&GUI_FontHZ24);
                        BUTTON_SetTextColor(hItem,BUTTON_CI_UNPRESSED,GUI_WHITE);
                        BUTTON_SetText(hItem,"起  动");
                        WM_SetHasTrans(hItem);
                        WM_SetCallback(hItem,_cbButton);
                        
                        hItem = WM_GetDialogItem(pMsg->hWin, ID_BUTTON_3);
                        BUTTON_SetFont(hItem,&GUI_FontHZ24);
                        BUTTON_SetTextColor(hItem,BUTTON_CI_UNPRESSED,GUI_WHITE);
                        BUTTON_SetText(hItem,"停  止");
                        WM_SetHasTrans(hItem);
                        WM_SetCallback(hItem,_cbButton);

                        hItem = WM_GetDialogItem(pMsg->hWin, ID_EDIT_0);          // 编辑框
                        EDIT_SetFont(hItem,  &GUI_FontHZ32);
                        EDIT_EnableBlink(hItem, 500, 1);
                        EDIT_SetTextAlign(hItem,GUI_TA_LEFT | GUI_TA_VCENTER);
                        
                        hItem = WM_GetDialogItem(pMsg->hWin, ID_EDIT_1);          // 编辑框
                        EDIT_SetFont(hItem,  &GUI_FontHZ32);
                        EDIT_EnableBlink(hItem, 500, 1);
                        EDIT_SetTextAlign(hItem,GUI_TA_LEFT | GUI_TA_VCENTER);
                        
                        hItem = WM_GetDialogItem(pMsg->hWin, ID_EDIT_2);          // 编辑框
                        EDIT_SetFont(hItem,  &GUI_FontHZ32);
                        EDIT_EnableBlink(hItem, 500, 1);
                        EDIT_SetTextAlign(hItem,GUI_TA_LEFT | GUI_TA_VCENTER);
                        
                        hItem = WM_GetDialogItem(pMsg->hWin, ID_EDIT_3);          // 编辑框
                        EDIT_SetFont(hItem,  &GUI_FontHZ32);
                        EDIT_EnableBlink(hItem, 500, 1);
                        
                        
                        
                        break;
                        
                        //定时器消息
                        case WM_TIMER:
                                if(WM_GetTimerId(pMsg->Data.v) == ID_TimerData)
                                {
                                        hItem = WM_GetDialogItem(pMsg->hWin,ID_EDIT_1);
                                        EDIT_SetText(hItem,Detectpressure);
                                        WM_RestartTimer(pMsg->Data.v,1000);
                                }
                                else if(WM_GetTimerId(pMsg->Data.v) == ID_TimerTime)
                                {
                                        Caculate_RTC(pMsg);
                                        WM_RestartTimer(pMsg->Data.v,1000);
                                }
                                else if(WM_GetTimerId(pMsg->Data.v) == ID_TimerControl)
                                {
                                        Fill(pMsg);
                                }
                                
                                break;
                                
                        //通知父窗口,其子窗口中发生了某些改变。        
                        case WM_NOTIFY_PARENT:
                        Id    = WM_GetId(pMsg->hWinSrc);
                        NCode = pMsg->Data.v;
                        switch(Id) {
                        case ID_EDIT_0:
                        switch(NCode) {
                        case WM_NOTIFICATION_CLICKED:
                        break;
                        case WM_NOTIFICATION_RELEASED:
                        break;
                        }
                        break;
                        case ID_EDIT_1:
                        switch(NCode) {
                        case WM_NOTIFICATION_CLICKED:
                        break;
                        case WM_NOTIFICATION_RELEASED:
                        break;
                        }
                        break;
                        case ID_EDIT_2:
                        switch(NCode) {
                        case WM_NOTIFICATION_CLICKED:
                        break;
                        case WM_NOTIFICATION_RELEASED:
                        break;
                        }
                        break;
                        case ID_EDIT_3:
                        switch(NCode) {
                        case WM_NOTIFICATION_CLICKED:
                        break;
                        case WM_NOTIFICATION_RELEASED:
                        break;
                        }
                        break;
                        case ID_EDIT_4:
                        switch(NCode) {
                        case WM_NOTIFICATION_CLICKED:
                        break;
                        case WM_NOTIFICATION_RELEASED:
                        break;
                        }
                        break;
                        //打开测试记录界面按钮
                        case ID_BUTTON_0:
                        switch(NCode) {
                        case WM_NOTIFICATION_CLICKED:
                        break;
                        case WM_NOTIFICATION_RELEASED:
                        GUI_EndDialog(hItem, 1);
                        CreateWindow2();
                        break;
                        }
                        break;
                        //打开参数设置界面按钮
                        case ID_BUTTON_1:
                        switch(NCode) {
                        case WM_NOTIFICATION_CLICKED:
                        break;
                        case WM_NOTIFICATION_RELEASED:
                        GUI_EndDialog(hItem, 1);
                        CreateWindow3();
                        break;
                        }
                        break;
                        //开始循环按钮
                        case ID_BUTTON_2:
                        switch(NCode) {
                        case WM_NOTIFICATION_CLICKED:
                        break;
                        case WM_NOTIFICATION_RELEASED:
                        hControl = WM_CreateTimer(hItem,ID_TimerControl,0,0);

                        break;
                        }
                        break;
                        //停止循环按钮
                        case ID_BUTTON_3:
                        switch(NCode) {
                        case WM_NOTIFICATION_CLICKED:
                        break;
                        case WM_NOTIFICATION_RELEASED:
                        WM_DeleteTimer(hControl);
                        break;
                        }
                        break;
                        
                }
                        break;
                        default:
                        WM_DefaultProc(pMsg);
                        break;
        }
        }

WM_HWIN CreateWindow1(void) {
         WM_HWIN hWin;
         hWin = GUI_CreateDialogBox(_aDialogCreatePage1, GUI_COUNTOF(_aDialogCreatePage1), _cbDialogPage1, WM_HBKWIN, 0, 0);
         return hWin;
}

//主函数
void f_MainTask(void) {        
        
        WM_HWIN hItemPage1;
        
        GUI_Init();
        
        WM_SetCallback(WM_HBKWIN,_cbDialogPage1);
        
        WM_MULTIBUF_Enable(1);
        
        /* 第3步:绘制各种背景到存储设备 ***************************************************/
        hMemDSO = GUI_MEMDEV_CreateFixed(0,
                                         0,
                                         600,
                                         400,
                                                                         GUI_MEMDEV_HASTRANS,
                                                                         GUI_MEMDEV_APILIST_16,
                                                                         GUICC_M565);
        
        /* 绘制示波器窗口背景 */
        GUI_MEMDEV_Select(hMemDSO);
    DSO_DrawBakFrame(0,0,599,399);
        GUI_MEMDEV_Select(0);
        
        WM_HideWindow(WM_HBKWIN);
        
        DSO_Init(1);
        
        WM_ShowWindow(WM_HBKWIN);
        
        GUI_Exec();
        
        DSO_Graph();
        
        hItemPage1 = GUI_CreateDialogBox(_aDialogCreatePage1,GUI_COUNTOF(_aDialogCreatePage1),_cbDialogPage1,WM_HBKWIN,0,0);

}
回复

使用道具 举报

2

主题

446

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4133
金钱
4133
注册时间
2018-5-14
在线时间
902 小时
发表于 2020-11-24 14:30:26 | 显示全部楼层
在按键消息里面Create定时器啊,然后把定时器的句柄用全局变量记录下来。然后在另外一个按键的消息处理里面删除定时器就行了,参数就是定时器的句柄
回复

使用道具 举报

2

主题

446

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4133
金钱
4133
注册时间
2018-5-14
在线时间
902 小时
发表于 2020-11-25 12:14:30 | 显示全部楼层
zxc199701 发表于 2020-11-25 10:10
大神,这样不行啊,我一点击按钮就卡死了,代码如下:WM_HWIN hControl
//点灯程序
void Fill(WM_MESSA ...

明显,参数不对,而且创建的定时器是单次的,到了时间以后要在回调中使用Restart函数重启定时器
回复

使用道具 举报

9

主题

48

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
322
金钱
322
注册时间
2020-7-7
在线时间
113 小时
 楼主| 发表于 2020-11-25 14:13:22 | 显示全部楼层
姚先起 发表于 2020-11-25 12:14
明显,参数不对,而且创建的定时器是单次的,到了时间以后要在回调中使用Restart函数重启定时器

这个点灯只是我模拟项目的流程弄的,我就是不明白定时器消息要怎么写,,而且实际使用中是点击一次运行一次,所以我不打算让他一直运行啊,就是想通过按键来控制这个点灯流程
回复

使用道具 举报

9

主题

48

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
322
金钱
322
注册时间
2020-7-7
在线时间
113 小时
 楼主| 发表于 2020-12-1 09:59:51 | 显示全部楼层
姚先起 发表于 2020-11-25 12:14
明显,参数不对,而且创建的定时器是单次的,到了时间以后要在回调中使用Restart函数重启定时器

大神是哪个参数不对啊,具体该怎么写
回复

使用道具 举报

2

主题

446

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4133
金钱
4133
注册时间
2018-5-14
在线时间
902 小时
发表于 2020-12-1 13:10:05 | 显示全部楼层
zxc199701 发表于 2020-12-1 09:59
大神是哪个参数不对啊,具体该怎么写

你开调试器看一下不就知道了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-22 12:01

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表