#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; uint16_t num_AD1_filtered; uint16_t num_AD2_filtered; uint16_t num_AD3_filtered; uint16_t num_AD1_diff; uint16_t num_AD2_diff; uint16_t num_AD3_diff; uint16_t num_AD1_last; uint16_t num_AD2_last; uint16_t num_AD3_last; //(1.2)【不变】关总中断 DISABLE_INTERRUPTS;

//(1.3)给主函数使用的局部变量赋初值
mMainLoopCount=0;    //主循环次数变量
mFlag='A'; 
mLightCount=0;       //灯的闪烁次数
mCount=0;//记次数
num_AD1_last = adc_ave(ADC_CHANNEL_1,8); //初始化上一次的ADC值
num_AD2_last = adc_ave(ADC_CHANNEL_15,8);
num_AD3_last = adc_ave(ADC_CHANNEL_TEMPSENSOR,8);
//(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)单端:内部温度传感器,通道号17,无需引脚对应        \n");
printf("     差分:GEC引脚47、46(通道1、2)                  \n");
printf("           GEC引脚12、11(通道15、16                  \n");
printf("(3)测试方法:单端:手摸芯片表面,A/D值增大,不要摸    \n");
printf("                    到引脚,静电可能损坏芯片           \n");
printf("              差分:将引脚47接地、46接3.3V,观察通道1情况\n");
printf("                    将引脚46接地、47接3.3V,观察通道1情况\n");
printf("             类似方法,观察通道15                      \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_ave(ADC_CHANNEL_1,8); //读取ADC值,并进行滤波处理
    num_AD2 = adc_ave(ADC_CHANNEL_15,8);
    num_AD3 = adc_ave(ADC_CHANNEL_TEMPSENSOR,8);
    num_AD1_filtered = median_filter(num_AD1,num_AD1_last,8); //中值滤波
    num_AD2_filtered = median_filter(num_AD2,num_AD2_last,8);
    num_AD3_filtered = median_filter(num_AD3,num_AD3_last,8);
    num_AD1_diff = diff_filter(num_AD1_filtered,num_AD1_last,8); //差值滤波
    num_AD2_diff = diff_filter(num_AD2_filtered,num_AD2_last,8);
    num_AD3_diff = diff_filter(num_AD3_filtered,num_AD3_last,8);
    num_AD1_last = num_AD1_filtered; //更新上一次的ADC值
    num_AD2_last = num_AD2_filtered;
    num_AD3_last = num_AD3_filtered;
    printf("通道1(GEC47、46)的A/D值: %d,滤波后差分值:%d\r\n",num_AD1_filtered,num_AD1_diff);
    printf("通道15(GEC12、11)的A/D值:%d,滤波后差分值:%d\r\n",num_AD2_filtered,num_AD2_diff);
    printf("内部温度传感器的A/D值:%d,滤波后差分值:%d\r\n\n",num_AD3_filtered,num_AD3_diff);
    mCount++;      
}
#define GLOBLE_VAR#include includesh 包含总头文件----------------------------------------------------------------------声明使用到的内部函数mainc使用的内部函数声明处void Delay_msuint16_t u16ms;float Regression_Ext_Tempuint

原文地址: https://www.cveoy.top/t/topic/fi2k 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录