ADC 单端输入测试 - 中值滤波和均值滤波
#define GLOBLE_VAR #include 'includes.h' //包含总头文件
//---------------------------------------------------------------------- //声明使用到的内部函数 //main.c使用的内部函数声明处 void Delay_ms(uint16_t u16ms); float Regression_Ext_Temp(uint16_t tmpAD); //环境温度AD值转为实际温度 float Regression_MCU_Temp(uint16_t mcu_temp_AD); //MCU温度AD值转为实际温度
//---------------------------------------------------------------------- //主函数,一般情况下可以认为程序从此开始运行(实际上有启动过程,参见书稿) int main(void) { //(1)======启动部分(开头)========================================== //(1.1)声明main函数使用的局部变量 uint32_t mMainLoopCount; //主循环次数变量 uint8_t mFlag; //灯的状态标志 uint32_t mCount; //延时的次数 uint32_t mLightCount; //灯的状态切换次数 uint16_t num_AD1; uint16_t num_AD2; uint16_t num_AD3; //(1.2)【不变】关总中断 DISABLE_INTERRUPTS;
//(1.3)给主函数使用的局部变量赋初值
mMainLoopCount=0; //主循环次数变量
mFlag='A';
mLightCount=0; //灯的闪烁次数
mCount=0;//记次数
//(1.4)给全局变量赋初值
//(1.5)用户外设模块初始化
gpio_init(LIGHT_BLUE,GPIO_OUTPUT,LIGHT_ON); //初始化蓝灯
adc_init(ADC_CHANNEL_1,AD_SINGLE); //初始化ADC通道1,
//adc_init(ADC_CHANNEL_15,AD_SINGLE); //初始化ADC通道15
adc_init(ADC_CHANNEL_TEMPSENSOR,AD_SINGLE); //初始化ADC通道:内部温度
emuart_init(UART_User,115200);
//(1.6)使能模块中断
uart_enable_re_int(UART_User);
//(1.7)【不变】开总中断
ENABLE_INTERRUPTS;
printf("------------------------------------------------------\n");
printf("金葫芦提示: \n");
printf("(1)目的:ADC单端输入测试 \n");
printf("(2)测试方法:手摸芯片表面,A/D值增大,不要摸到引脚, \n");
printf(" 静电可能损坏芯片 \n");
printf("------------------------------------------------------\n");
//(1)======启动部分(结尾)==========================================
//(2)======主循环部分(开头)========================================
for(;;) //for(;;)(开头)
{
//(2.1)主循环次数变量+1
mMainLoopCount++;
//(2.2)未达到主循环次数设定值,继续循环
//延时1秒
if (mMainLoopCount<=3000000) continue;
//(2.3)达到主循环次数设定值,执行下列语句,进行灯的亮暗处理
//(2.3.1)清除循环次数变量
mMainLoopCount=0;
//(2.3.2)如灯状态标志mFlag为'L',灯的闪烁次数+1并显示,改变灯状态及标志
if (mFlag=='L') //判断灯的状态标志
{
mLightCount++;
mFlag='A'; //灯的状态标志
gpio_set(LIGHT_BLUE,LIGHT_ON); //灯“亮”
Delay_ms(1000);
}
//(2.3.3)如灯状态标志mFlag为'A',改变灯状态及标志
else
{
mFlag='L'; //灯的状态标志
gpio_set(LIGHT_BLUE,LIGHT_OFF); //灯“暗”
Delay_ms(1000);
}
num_AD1 = adc_median(ADC_CHANNEL_1,5);
//num_AD2 = adc_median(ADC_CHANNEL_15,5);
num_AD3 = adc_median(ADC_CHANNEL_TEMPSENSOR,5);
printf("通道1(GEC47、46)的A/D值: %d\r\n",num_AD1);
printf("内部温度传感器的A/D值:%d\r\n\n",num_AD3);
mCount++;
}
原文地址: https://www.cveoy.top/t/topic/oaCS 著作权归作者所有。请勿转载和采集!