前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C语言基础算法---从数组中找最大最小值的实际应用

C语言基础算法---从数组中找最大最小值的实际应用

作者头像
杨源鑫
发布2019-07-04 15:53:56
1.7K0
发布2019-07-04 15:53:56
举报
文章被收录于专栏:嵌入式开发圈嵌入式开发圈

最近几天有文章的读者反馈,本平台发布的文章只是讲了一些基础知识,并没有谈到具体应用,根据各位的反馈,我也做了相应的思考,所以咱们还是需要理论和实践结合来写比较好。等时机成熟,也会将具体的应用编写成一本全新的书籍。

前面写的测试案例看似有点泛泛,可能各位看完也不知道具体用到哪里,接下来我们来看一个具体的应用案例吧!以下程序运行在秉火STM32F103霸道的开发板上,参考官方提供的程序demo,经过个人修改而来。

用DS18B20温度传感器,设置4个窗值,找最大值,由于温度带有小数,所以类型应是浮点型数据:

代码语言:javascript
复制
#include "stm32f10x.h"
#include "bsp_usart.h"
#include "bsp_SysTick.h"
#include "bsp_ds18b20.h"
#define NR(x) (sizeof(x)/sizeof(x[0]))
static float find_buffer_max(float buffer_value_max,u32 size,float *buffer);
int main(void)
{ 
 int i = 0;
 float temp_max;
 //设置温度保存的缓存有4个窗值,可以更改 
 float temp_buffer[4] ;
 uint8_t uc, ucDs18b20Id [ 8 ];
 SysTick_Init();
 USART_Config();
 while( DS18B20_Init() ) 
 printf("\r\n no ds18b20 exsit \r\n");
 DS18B20_ReadId ( ucDs18b20Id  );          
 for ( uc = 0; uc < 8; uc ++ )            
  printf ( "%.2x", ucDs18b20Id [ uc ] );
 while(1)
 { 
 //当计数等于测试窗值时,则从4个窗值找温度的最大值 
 if(i == NR(temp_buffer))
 {
 temp_max = find_buffer_max(0.0,NR(temp_buffer),temp_buffer);
 printf"温度的最大值为:%.1f\n",temp_max);
 //清计数器 
 i = 0 ;
 }
 //将当前温度保存到窗值数组
 temp_buffer[i] = DS18B20_GetTemp_MatchRom (ucDs18b20Id); 
 Delay_ms(1000); 
 printf("当前温度值为:%.1f\n",temp_buffer[i]);
 i++ ;
 }  
        return 0 ;
}
//找最大值 
static float find_buffer_max(float buffer_value_max,u32 size,float *buffer)
{
 u8 count = 0 ; 
 float max = buffer_value_max ;
 for(count = 0 ; count < size ; count++)
 {
 if(buffer[count] > max)
 max = buffer[count];
 }
 return max ; 
}

运行结果:

根据现实的工程应用情况,我们可能会对一个传感器的数据进行长时间的观察就需要用到这样的方法。

又如,像光强值,加热值,声音值等模拟量也是可以用这样的方法。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-02-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 嵌入式开发圈 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档