ad模数转换采集电压程序c语言,使用单片机自带AD转换采样电位器,进行PWM调光...

本帖最后由 张全武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]

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;

}

}

}

本帖最后由 张全武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]

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;

}

}

}

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值