嵌入式作业6.2 ADC 编程
在ADC实验中,结合热敏电阻,分别通过触摸芯片表面和热敏电阻,引起A/D值变化,显示芯片内部温度和当前温度。
程序代码
//主函数
int main(void)
{
uint16_t num_AD1;
uint16_t num_AD2;
uint16_t num_AD3;
uint32_t mMainLoopCount; //主循环次数变量
//关总中断
DISABLE_INTERRUPTS;
mMainLoopCount=0; //主循环次数变量
adc_init(ADC_CHANNEL_1,AD_DIFF); //初始化ADC通道1,
adc_init(ADC_CHANNEL_15,AD_DIFF); //初始化ADC通道15
adc_init(ADC_CHANNEL_TEMPSENSOR,AD_SINGLE); //初始化ADC通道:内部温度
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");
for(;;)
{
//主循环次数变量+1
mMainLoopCount++;
//未达到主循环次数设定值,继续循环
//延时1秒
if (mMainLoopCount<=30000000) continue;
//达到主循环次数设定值,执行下列语句,进行灯的亮暗处理
//清除循环次数变量
mMainLoopCount=0;
num_AD1 = adc_ave(ADC_CHANNEL_1,8);
num_AD2 = adc_ave(ADC_CHANNEL_15,8);
num_AD3 = adc_ave(ADC_CHANNEL_TEMPSENSOR,8);
printf("通道1(GEC47、46)的A/D值: %d\r\n",num_AD1);
printf("通道1(GEC47、46)的温度值: %f\r\n",Regression_Ext_Temp(num_AD1));
printf("通道15(GEC12、11)的A/D值:%d\r\n",num_AD2);
printf("通道15(GEC12、11)的温度值:%f\r\n",Regression_Ext_Temp(num_AD2));
printf("内部温度传感器的A/D值:%d\r\n",num_AD3);
printf("内部温度传感器的温度值:%f\r\n\n",Regression_MCU_Temp(num_AD3));
}
}
运行效果
使热敏电阻升温:
![](https://img2023.cnblogs.com/blog/2638054/202406/2638054-20240613000849763-1028559164.png)
使 mcu 升温:
![](https://img2023.cnblogs.com/blog/2638054/202406/2638054-20240613000850302-258281612.png)