📄 tempin.c
字号:
#include "TempIn.h"
/***************************************************************
* 函数原型: void ADC_init(void)
* 功 能: 配置A/D转换器,使能ADC
****************************************************************/
void ADCInInit(void)
{
REF0CN = 0X07; //使能温度传感器片内偏置发生器和偏置输出缓冲器
AMX0SL = 0X0F; //选择温度传感器为ADC多路开关的输出
ADC0CF = 0X59; //ADC转换时钟为SYSCLK/10,增溢为2
ADC0CN = 0X81; //使能ADC,数据左对齐
}
/***************************************************************
* 函数原型: float Get_temp()
* 功 能: 计算温度值,返回以百分之一摄氏度为单位的温度值
在此读ADC采样值,将其放入到16个采样值的缓冲区内,
求所有采样值的平均值,并将其转换为以十分之一
摄氏度为单位的温度值
****************************************************************/
long GetInTemp()
{
int i;
long temperature = 0L; //以十分之一度表示的温度值
long temp[16]; //温度采样值的循环缓冲区
for(i = 0; i < 16; i++)
{
AD0BUSY = 1;
while(!AD0INT); //判断一次转换结束
AD0INT = 0; //清除ADC转换结束中断标志
temperature = (ADC0H << 8) | ADC0L; //装入16位ADC结果
temp[i] = temperature;
}
temperature = 0L;
for(i = 0; i < 16; i++)
temperature = temperature + temp[i];
temperature = temperature / 16; //总和除以16求得平均值
/*
temperature = temperature - 0x80a4; //将偏差校正到0度0V
temperature = temperature * 0x01e0; //0.0025V/度
temperature = temperature * 10; //显示结果以十分之一摄氏度表示
temperature = temperature >> 16; //除以2的16次方
*/
temperature = temperature - 41857;
temperature = (temperature * 10L) / 154;
return temperature;
}
/*
//Test
main()
{
int tt,inte,frac;
WDTCN=0xde;
WDTCN=0xad;
ADCInInit();
while(1)
{
tt = GetInTemp();
inte = tt / 10;
frac = tt - (inte * 10);
}
}
*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -