使用单片机自带AD转换采样电位器,进行PWM调光

2019-07-15 16:47发布

本帖最后由 张全武5 于 2015-6-26 18:36 编辑

请问各位一下,AD转换结果,需要经过什么处理,,然后用if语句判断输出不同占空比的PWM..........
写了这样的一段程序,,为什么会在if语句的连续判断点处,,,灯光会闪。。。。应该怎么写呢?请赐教希望大家多多交流
unsigned int Average()
{
        unsigned int sum=0,min,max=min=ADC_data[0];
        unsigned int m;
        for(m=0;m<10;m++)
        {
                sum+=ADC_data[m];
                if(ADC_data[m]<min)                min=ADC_data[m];
                if(ADC_data[m]>max)                max=ADC_data[m];
        }
        sum=(sum-min-max)>>3;
        return sum;
}
void adc_it() interrupt 5//分辨率2.44mv
{
        ADC_CONTR&=~ADC_FLAG;
        //if(t==0)
        ADC_data=(ADC_RES*4+ADC_RESL);//adhl2=(ADC_RES*4+ADC_RESL);//读取10位通道4的AD转换结果
        i++;
        
        if(i>=10)
        {        EADC=0;
                i=0;
                adhl2=Average();
                EADC=1;
                }
        ADC_RES=0;ADC_RESL=0;
        ADC_CONTR=ADC_POWER|ADC_SPEEDHH|ADC_START|ch;        
}


void main()
{        //P1=0x00;
        //CCP0=0;
        InitADC();        
        pwm_init();        
        while(1)
        {
            getadv=5*adhl2*12/1024;

            if(getadv<=41)  c=0;
                if(getadv>41&&getadv<=44)        c=1;
                if(getadv>44&&getadv<=47)        c=2;
                if(getadv>47&&getadv<=50)        c=3;
                if(getadv>50&&getadv<=53)        c=4;
                if(getadv>53&&getadv<=56)        c=5;
                if(getadv>56)                                c=6;
              switch(c)
                {
                case 0:pwm_set(PWM[0]);PCA_PWM0=0x01;break;
                case 1:PCA_PWM0=0x00;pwm_set(PWM[1]);break;
                case 2:PCA_PWM0=0x00;pwm_set(PWM[2]);break;
                case 3:PCA_PWM0=0x00;pwm_set(PWM[3]);break;
                case 4:PCA_PWM0=0x00;pwm_set(PWM[4]);break;
                   case 5:PCA_PWM0=0x00;pwm_set(PWM[5]);break;
                case 6:PCA_PWM0=0x00;pwm_set(PWM[6]);break;
                case 7:PCA_PWM0=0x00;pwm_set(PWM[7]);break;
                }
        }
}

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。