1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > c语言均值滤波程序 10种简单的数字滤波算法(C语言源程序)

c语言均值滤波程序 10种简单的数字滤波算法(C语言源程序)

时间:2019-02-06 03:16:00

相关推荐

c语言均值滤波程序 10种简单的数字滤波算法(C语言源程序)

贴一个我的代码给大家

电路有市电 过零点检测

每次过零 启动150us的 TIMER1_ISR 中断 在3750 us开始,每隔150us采集一次市电的 ADC 以检测用的市电是110v还是220V 同时检测一个0.1R的ADC ,市电的 ADC *16 /0.R的ADC 连续采样10次 去掉最大值和最小值。

void TIMER1_ISR (void) interrupt 3 //using 1

{

//150us

//GPIO2 ^= BIT3;//GPIO19

//GPIO0 ^= BIT2;

//++electrical_level_timer;//t2_count2

switch(++electrical_level_timer)

{

case 1:

TRIAC_OFF;//bidirectional triode thyristor

break;

case 24:

electric_supply_0p1R_adc_max = 0x0000;

electric_supply_0p1R_adc_min = 0xFFFF;

electric_supply_0p1R_adc_sum = 0x0000;

break;

case 25://150*25=3750

case 26://150*26=3900

case 27://150*27=4050

case 28://150*28=4200

case 29://150*29=4350

case 30://150*30=4500

case 31://150*31=4650

case 32://150*32=4800

case 33://150*33=4950

electric_supply_voltage_adc = ADC1_GetConversionValue(2);//adc 220v or 110v

electric_supply_voltage_adc = (electric_supply_voltage_adc << 4);

electric_0p1R_adc = ADC1_GetConversionValue(0);//0.1R

electric_supply_0p1R_adc = (electric_supply_voltage_adc) / electric_0p1R_adc;

if(electric_supply_0p1R_adc_max < electric_supply_0p1R_adc)

{

electric_supply_0p1R_adc_max = electric_supply_0p1R_adc;

}

else if(electric_supply_0p1R_adc_min > electric_supply_0p1R_adc)

{

electric_supply_0p1R_adc_min = electric_supply_0p1R_adc;

}

electric_supply_0p1R_adc_sum += electric_supply_0p1R_adc;

#if 0

Debug_UartSendByte(0x55);

Debug_UartSendByte(electric_supply_voltage_adc >> 8);

Debug_UartSendByte((u8_t)electric_supply_voltage_adc);

Debug_UartSendByte(0x56);

Debug_UartSendByte(electric_0p1R_adc >> 8);

Debug_UartSendByte((u8_t)electric_0p1R_adc);

#endif

Debug_UartSendByte(0x5A);

Debug_UartSendByte(electric_supply_0p1R_adc >> 8);

Debug_UartSendByte((u8_t)electric_supply_0p1R_adc);

Debug_UartSendByte(0xA5);

Debug_UartSendByte(electric_supply_0p1R_adc_sum >> 8);

Debug_UartSendByte((u8_t)electric_supply_0p1R_adc_sum);

break;

case 34://150*34=5100us

electric_supply_voltage_adc = ADC1_GetConversionValue(2);//adc 220v or 110v

electric_supply_voltage_adc = (electric_supply_voltage_adc << 4);

electric_0p1R_adc = ADC1_GetConversionValue(0);//0.1R

electric_supply_0p1R_adc = (electric_supply_voltage_adc) / electric_0p1R_adc;

if(electric_supply_0p1R_adc_max < electric_supply_0p1R_adc)

{

electric_supply_0p1R_adc_sum -= electric_supply_0p1R_adc_min;

electric_supply_0p1R_adc_max = electric_supply_0p1R_adc;

}

else if(electric_supply_0p1R_adc_min > electric_supply_0p1R_adc)

{

electric_supply_0p1R_adc_sum -= electric_supply_0p1R_adc_max;

electric_supply_0p1R_adc_min = electric_supply_0p1R_adc;

}

else

{

electric_supply_0p1R_adc_sum -= electric_supply_0p1R_adc_min;

electric_supply_0p1R_adc_sum -= electric_supply_0p1R_adc_max;

electric_supply_0p1R_adc_sum += electric_supply_0p1R_adc;

}

//3.3ms

TF1 = 0;

TR1 = 0; //disable T1

ET1 = 0;

Debug_UartSendByte(0x5A);

Debug_UartSendByte(electric_supply_0p1R_adc >> 8);

Debug_UartSendByte((u8_t)electric_supply_0p1R_adc);

Debug_UartSendByte(0xA5);

Debug_UartSendByte(electric_supply_0p1R_adc_sum >> 8);

Debug_UartSendByte((u8_t)electric_supply_0p1R_adc_sum);

Debug_UartSendByte(0x8A);

Debug_UartSendByte(electric_supply_0p1R_adc_min >> 8);

Debug_UartSendByte((u8_t)electric_supply_0p1R_adc_min);

Debug_UartSendByte(0x9A);

Debug_UartSendByte(electric_supply_0p1R_adc_max >> 8);

Debug_UartSendByte((u8_t)electric_supply_0p1R_adc_max);

Debug_UartSendByte(0xAA);

Debug_UartSendByte(electric_supply_0p1R_adc_sum >> 8);

Debug_UartSendByte((u8_t)electric_supply_0p1R_adc_sum);

electrical_level_timer = 0;

break;

default:

break;

}

}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。