| 本帖最后由 tiercel 于 2014-8-2 15:45 编辑 
 
        这是ADC-to-LCD的一个程序,是psoc creator里面的示例程序。把AD转换的结果送LCD显示之前有一大堆对转换结果的处理,我看不太懂,但是我把那部分程序删除后,下载到板子上结果没变化,请哪位大神帮我看一下这是原来的程序:红色部分是看不懂的那部分
 #include <device.h> #include "stdio.h" #include "math.h" 
 /* Number of samples to be taken before averaging the ADCvalue */ #define MAX_SAMPLE                 ((uint8)128) 
 /* Threshold value to reset the filter for sharp changein signal */ #define SIGNAL_SLOPE               1000 
 /* Number of shifts for calculating the sum and averageof MAX_SAMPLE */ #define DIV                        7 
 int main(void) {     uint8 i;          /* Array tostore ADC count for moving average filter */     int32 adcCounts[MAX_SAMPLE] = {0};          /* Variable to hold ADCconversion result */     int32 result = 0;          /* Variable to store accumulatedsample for filter array */     int32 sum = 0;          /* Variable for testing sharpchange in signal slope */     int16 diff = 0;          /* Variable to hold the result in microvolts converted from filtered       * ADC counts */     int32 microVolts = 0;             /* Variable to hold the movingaverage filtered value */     int32 averageCounts = 0;             /* Index variable to work on the filterarray */     uint8 index = 0;          /* Characterarray to hold the micro volts*/     char displayStr[15] = {'\0'};        
     CYGlobalIntEnable; 
     /* Start ADC and start conversion */     ADC_Start();     ADC_StartConvert(); 
     /* Start LCD and set position */     LCD_Start();     LCD_Position(0,0);     LCD_PrintString("ADC inputvolt"); 
     /* Print μV unit on the LCD */     LCD_Position(1,8);     LCD_WriteData(0xE4);     LCD_PutChar('V');          /* Read one sample from the ADCand initialize the filter */     ADC_IsEndConversion(ADC_WAIT_FOR_RESULT);     result = ADC_GetResult32();          for(i = 0; i < MAX_SAMPLE;i++)     {         adcCounts = result;     }          /* Store sum of128 samples*/     sum = result << DIV;          /* Average countis equal to one single sample for first ADC reading */     averageCounts = result;               while(1)     {        ADC_IsEndConversion(ADC_WAIT_FOR_RESULT);         result = ADC_GetResult32();                  diff = abs(averageCounts -result);           /* Ifsharp change in the signal then reset the filter with the new           * signal value */         if(diff > SIGNAL_SLOPE)         {             for(i = 0; i< MAX_SAMPLE; i++)             {                adcCounts = result;             }                          /*Store sum of 128 samples*/             sum = result<< DIV;                  /* Averagecount is equal to new sample */             averageCounts =result;             index = 0;         }                  /* Get moving average */         else         {             /* Remove theoldest element and add new sample to sum and get               * theaverage */             sum = sum -adcCounts[index];             sum = sum +result;             averageCounts =sum >> DIV;                          /* Removethe oldest sample and store new sample */            adcCounts[index] = result;             index++;             if (index ==MAX_SAMPLE)             {                index = 0;             }         }         microVolts =ADC_CountsTo_uVolts(averageCounts);                      /*Convert micro volts to string and display on the LCD */        sprintf(displayStr,"%7ld",microVolts);           LCD_Position(1,0);         LCD_PrintString(displayStr);       } } 这是修改后的程序 #include <device.h> #include "stdio.h"   void main() {           /* Variable to hold ADC conversionresult */     int32 result = 0;          /* Variable to hold the result in microvolts converted from filtered       * ADC counts */     int32 microVolts = 0;             /* Character array to hold the microvolts*/     char displayStr[15] = {'\0'};              /* Start ADC and startconversion */     ADC_Start();     ADC_StartConvert();       /* Start LCD andset position */     LCD_Start();     LCD_Position(0,0);     LCD_PrintString("ADC inputvolt");       /* Print μV unit on the LCD */     LCD_Position(1,8);     LCD_WriteData(0xE4);     LCD_PutChar('V');          /* Read one sample from the ADC andinitialize the filter */     ADC_IsEndConversion(ADC_WAIT_FOR_RESULT);     result = ADC_GetResult32();                microVolts =ADC_CountsTo_uVolts(result);           sprintf(displayStr,"%7ld",microVolts);        LCD_Position(1,0);        LCD_PrintString(displayStr);          }   |