我写了一个程序,用ADC5 个通道取5个数,然后通过冒泡排序法取最大值和最小值,结果出现了一个问题。程序如下
#include "stm32f10x.h"
#include "includes.h"
#define N 5
__I int16_t ADC_ConvertedValue[15];
float ADC_ConvertedValueLocal[15];
float sum=0,temp;
int32_t j,k,t,m,n=0;
int main()
{
USART1_Config();
ADC1x_Init(5);
while(1)
{
int t;
for(t=0;t<5;t++)
{
ADC_ConvertedValueLocal[t]=3.300*ADC_ConvertedValue[t]/0X0FFF;
}
/***求和***/
sum=0;
for(m=0;m<N;m++)
{
sum+=ADC_ConvertedValueLocal[m];
}
printf(&quot;\r\n显示电压\r\n&quot;);
Delay(500);
printf(&quot;\r\n采样值1=%.3fv\r&quot;,ADC_ConvertedValueLocal[0]);
Delay(500);
printf(&quot;\r 采样值2=%.3fv\r&quot;,ADC_ConvertedValueLocal[1]);
Delay(500);
printf(&quot;\r 采样值3=%.3fv\r&quot;,ADC_ConvertedValueLocal[2]);
Delay(500);
printf(&quot;\r 采样值4=%.3fv\r&quot;,ADC_ConvertedValueLocal[3]);
Delay(500);
printf(&quot;\r 采样值5=%.3fv\r\n&quot;,ADC_ConvertedValueLocal[4]);
Delay(500);
printf(&quot;\r\n和 值=%.3f\r&quot;,sum);
Delay(500);
printf(&quot;\r 平均值=%.3f\r&quot;,sum/m);
Delay(500);
/***排序***/
for (j=0;j<N-1;j++)
{
for (k=0;k<N-j;k++)
{
if(ADC_ConvertedValueLocal[k]>ADC_ConvertedValueLocal[k+1])
{
temp = ADC_ConvertedValueLocal[k];
ADC_ConvertedValueLocal[k] = ADC_ConvertedValueLocal[k+1];
ADC_ConvertedValueLocal[k+1] = temp;
}
}
}
printf(&quot;\r 最小值 = %.3f\r&quot;,ADC_ConvertedValueLocal[0]);
Delay(500);
printf(&quot;\r 最大值 = %.3f\r\n&quot;,ADC_ConvertedValueLocal[N-1]);
Delay(1500);
}
}
当我在定义数组时,定义为__I int16_t ADC_ConvertedValue[];
float ADC_ConvertedValueLocal[];时,若把最后取最值的语句屏蔽,则前面采样值和平均值都能通过串口在电脑上显示,但是如果不屏蔽,电脑上什么也不显示。如果数组按上面程序里那样定义就没有问题,这是为什么啊?
|
|