打印

用ADC采样并取其最值时出现的问题

[复制链接]
650|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主

我写了一个程序,用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("\r\n显示电压\r\n");

                                Delay(500);

                                 printf("\r\n采样值1=%.3fv\r",ADC_ConvertedValueLocal[0]);

                                Delay(500);

                                 printf("\r 采样值2=%.3fv\r",ADC_ConvertedValueLocal[1]);

                                Delay(500);

                                 printf("\r 采样值3=%.3fv\r",ADC_ConvertedValueLocal[2]);

                                Delay(500);

                                 printf("\r 采样值4=%.3fv\r",ADC_ConvertedValueLocal[3]);

                                Delay(500);

                                 printf("\r 采样值5=%.3fv\r\n",ADC_ConvertedValueLocal[4]);

                                Delay(500);

                                 printf("\r\n和  值=%.3f\r",sum);

                                Delay(500);

                                 printf("\r 平均值=%.3f\r",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("\r 最小值 = %.3f\r",ADC_ConvertedValueLocal[0]);

                                 Delay(500);

                                 printf("\r 最大值 = %.3f\r\n",ADC_ConvertedValueLocal[N-1]);

                                 Delay(1500);

                        }

                           }

当我在定义数组时,定义为__I int16_t ADC_ConvertedValue[];

float ADC_ConvertedValueLocal[];时,若把最后取最值的语句屏蔽,则前面采样值和平均值都能通过串口在电脑上显示,但是如果不屏蔽,电脑上什么也不显示。如果数组按上面程序里那样定义就没有问题,这是为什么啊?

使用特权

评论回复

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

376

主题

377

帖子

0

粉丝