硬汉嵌入式论坛

 找回密码
 立即注册
查看: 2669|回复: 3
收起左侧

[emWin] 在case WM_TIMER中读取DS18B20的数据变化幅度过大

[复制链接]

39

主题

127

回帖

244

积分

高级会员

积分
244
发表于 2016-11-20 10:54:46 | 显示全部楼层 |阅读模式
在case WM_TIMER中读取DS18B20的数据变化幅度过大

请输入描述

请输入描述
现在室内温度大约23或24摄氏度,但过几秒就调到60摄氏度,在程序中多加入一句temperature=DS18B20_Get_Temp()效果会好一些(还是会出现较大的波动)。请问这是什么原因啊?
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117586
QQ
发表于 2016-11-21 08:46:29 | 显示全部楼层
极有可能是你的驱动有问题,或者你的程序有问题,正常情况下,这种写法是没事的。
回复

使用道具 举报

39

主题

127

回帖

244

积分

高级会员

积分
244
 楼主| 发表于 2016-11-21 18:20:07 | 显示全部楼层

回 eric2013 的帖子

eric2013:极有可能是你的驱动有问题,或者你的程序有问题,正常情况下,这种写法是没事的。 (2016-11-21 08:46)
DS18B20是直接和I\\O口连接的;DS18B20的程序是用的ARM例程(直接在EMWIN中调用,没有做修改),
#define ID_IMAGE_0    (GUI_ID_USER + 0x08)
#define ID_IMAGE_1    (GUI_ID_USER + 0x09)
extern IMAGE_Handle  SET_hImage[3];
extern FIL  BMPFile[2];

static void cb_BkWindow(WM_MESSAGE * pMsg) {
     WM_HWIN hItem;
     int     NCode;
   int     Id;
     int i;
   switch (pMsg->MsgId) {
     case WM_PAINT:
     GUI_SetBkColor(GUI_WHITE);
   GUI_Clear();
     break;
     case WM_INIT_DIALOG:
   break;
     case WM_NOTIFY_PARENT:
   Id = WM_GetId(pMsg->hWinSrc);
     NCode = pMsg->Data.v;
     switch(Id)
     {
          case ID_IMAGE_1: //ID_IMAGE_0知代码,控制LED1
      switch(NCode)
            {
        case WM_NOTIFICATION_CLICKED:
        break;
        case WM_NOTIFICATION_RELEASED:
                LED1=~LED1;        //LED1反转
                for(i=0;i<4;i++)
                WM_DeleteWindow(SET_hImage);
                zhujiemian_demo();   
            break;
        }
            break;
    }
     break;
   default:
   WM_DefaultProc(pMsg);
   break;
  }
}

void shijian_demo(void)
{  
    WM_SetCallback(WM_HBKWIN,cb_BkWindow); //设置桌面窗口WM_HBKWIN的回调函数
    WM_CreateTimer(WM_GetClientWindow(WM_HBKWIN), 0, 1000, 0);
    SET_hImage[0] = IMAGE_CreateEx(75,20,90,95,WM_HBKWIN,WM_CF_SHOW,IMAGE_CF_TILE,ID_IMAGE_0);
    f_open(&BMPFile[0],&quotICTURE/oneshijian/oneshijian.bmp",FA_READ);    //打开文件
    IMAGE_SetBMPEx(SET_hImage[0],BmpGetData,(void *)&BMPFile[0]); //这里重绘第一个IMAGE图

    SET_hImage[2] = IMAGE_CreateEx(200,285,32,32,WM_HBKWIN,WM_CF_SHOW,IMAGE_CF_TILE,ID_IMAGE_1);
    f_open(&BMPFile[1],&quotICTURE/RETURN/RETURN.bmp",FA_READ);    //打开文件
    IMAGE_SetBMPEx(SET_hImage[2],BmpGetData,(void *)&BMPFile[1]); //这里重绘第一个IMAGE图
}

总程序是类似上面图片程序界面的来回调用。


回复

使用道具 举报

14

主题

78

回帖

120

积分

初级会员

积分
120
发表于 2016-12-1 17:18:13 | 显示全部楼层
楼主问题解决了没有?
我没有用RTOS,在emwin下读ds18b20温度有时会乱跳,
emwin有没有类似临界区控制的函数?
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-8-18 07:01 , Processed in 0.039534 second(s), 27 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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