C語言基礎(chǔ)算法---從數(shù)組中找最大最小值的實(shí)際應(yīng)用
掃描二維碼
隨時隨地手機(jī)看文章
最近幾天有文章的讀者反饋,本平臺發(fā)布的文章只是講了一些基礎(chǔ)知識,并沒有談到具體應(yīng)用,根據(jù)各位的反饋,我也做了相應(yīng)的思考,所以咱們還是需要理論和實(shí)踐結(jié)合來寫比較好。等時機(jī)成熟,也會將具體的應(yīng)用編寫成一本全新的書籍。
前面寫的測試案例看似有點(diǎn)泛泛,可能各位看完也不知道具體用到哪里,接下來我們來看一個具體的應(yīng)用案例吧!以下程序運(yùn)行在秉火STM32F103霸道的開發(fā)板上,參考官方提供的程序demo,經(jīng)過個人修改而來。
用DS18B20溫度傳感器,設(shè)置4個窗值,找最大值,由于溫度帶有小數(shù),所以類型應(yīng)是浮點(diǎn)型數(shù)據(jù):
#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;
//設(shè)置溫度保存的緩存有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)
{
//當(dāng)計數(shù)等于測試窗值時,則從4個窗值找溫度的最大值
if(i == NR(temp_buffer))
{
temp_max = find_buffer_max(0.0,NR(temp_buffer),temp_buffer);
printf"溫度的最大值為:%.1f\n",temp_max);
//清計數(shù)器
i = 0 ;
}
//將當(dāng)前溫度保存到窗值數(shù)組
temp_buffer[i] = DS18B20_GetTemp_MatchRom (ucDs18b20Id);
Delay_ms(1000);
printf("當(dāng)前溫度值為:%.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 ;
}
運(yùn)行結(jié)果:
根據(jù)現(xiàn)實(shí)的工程應(yīng)用情況,我們可能會對一個傳感器的數(shù)據(jù)進(jìn)行長時間的觀察就需要用到這樣的方法。
又如,像光強(qiáng)值,加熱值,聲音值等模擬量也是可以用這樣的方法。
免責(zé)聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺僅提供信息存儲服務(wù)。文章僅代表作者個人觀點(diǎn),不代表本平臺立場,如有問題,請聯(lián)系我們,謝謝!