OpenEdv-开源电子网

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

关于温度变化率的程序怎么写?

[复制链接]

9

主题

24

帖子

0

精华

初级会员

Rank: 2

积分
85
金钱
85
注册时间
2016-5-21
在线时间
16 小时
发表于 2017-5-1 17:26:43 | 显示全部楼层 |阅读模式
1金钱
做毕业设计,想写一个关于温度变化率的程序,当温度在3分钟内变化大于2.0度的时候,返回1,程序结束不满足条件返回0。想问一下,怎么可以让这个函数在后台运行,,在主程序调用这个函数的时候,不用等待3分钟结束后才返回值。
u8 Temp_Change(void)  //温度变化
{
int i;
float Temp1,Temp2;
Temp1=DS18B20_Get_Temp();
for(i=0;i<300;i++)  //延时5分钟
{
  delay_ms(1000);
  Temp2=DS18B20_Get_Temp();
  if((Temp2-Temp1)>2.0)
  {
   return 1;
  }
}
return 0;  
}


最佳答案

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

用定时器可以,用系统,也可以。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2017-5-1 17:26:44 | 显示全部楼层
用定时器可以,用系统,也可以。
回复

使用道具 举报

51

主题

2166

帖子

2

精华

论坛元老

Rank: 8Rank: 8

积分
10656
金钱
10656
注册时间
2017-4-14
在线时间
2780 小时
发表于 2017-5-1 19:06:25 | 显示全部楼层
弄个定时器不就可以了
回复

使用道具 举报

98

主题

253

帖子

1

精华

高级会员

Rank: 4

积分
939
金钱
939
注册时间
2011-12-16
在线时间
59 小时
发表于 2017-5-2 00:17:52 | 显示全部楼层
正点原子 发表于 2017-5-1 17:26
用定时器可以,用系统,也可以。

原子哥早点休息吧!我困死了。。。
回复

使用道具 举报

9

主题

24

帖子

0

精华

初级会员

Rank: 2

积分
85
金钱
85
注册时间
2016-5-21
在线时间
16 小时
 楼主| 发表于 2017-5-6 12:40:34 | 显示全部楼层
正点原子 发表于 2017-5-1 17:26
用定时器可以,用系统,也可以。

思路是怎么样的啊,,用定时器的话,
回复

使用道具 举报

9

主题

24

帖子

0

精华

初级会员

Rank: 2

积分
85
金钱
85
注册时间
2016-5-21
在线时间
16 小时
 楼主| 发表于 2017-5-6 12:41:34 | 显示全部楼层
275891381 发表于 2017-5-1 19:06
弄个定时器不就可以了

用定时器的话,应该怎么写呢?把延时改为定时器吗?
回复

使用道具 举报

9

主题

24

帖子

0

精华

初级会员

Rank: 2

积分
85
金钱
85
注册时间
2016-5-21
在线时间
16 小时
 楼主| 发表于 2017-5-6 16:50:26 | 显示全部楼层
正点原子 发表于 2017-5-1 17:26
用定时器可以,用系统,也可以。

原子哥,我用定时器,在定时中断里面加延时后,当延时大于定时器设置的时间后就进不了主程序的while循环。能教下怎么做吗?
定时器设置的为500ms开启中断,
TIM3_Int_Init(4999,7199);//10Khz的计数频率,计数到5000为500ms

void TIM3_IRQHandler(void)   //TIM3中断
{
        float Temp1,Temp2;
        int i;
        if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET)  //检查TIM3更新中断发生与否
        {
                TIM_ClearITPendingBit(TIM3, TIM_IT_Update  );  //清除TIMx更新中断标志
                Temp1=DS18B20_Get_Temp();
                for(i=0;i<10;i++)                //延时5分钟
                {
                        delay_ms(1000);       
                        Temp2=DS18B20_Get_Temp();
                        if((Temp2-Temp1)>20)
                        {
                                Temp_Change=1;
                                break;
                        }       
                }
        }
}
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-8-21 14:38

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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