硬件
本设计使用PT100热敏电阻作为温度传感器,利用其感温效应,将随被测温度变化的电压经运算放大电路将信号放大后,通过ADC0804转换芯片,将电压信号转换为数字信号,用单片机采集下来,将被测温度在显示器上显示出来;如图:

设计功能
(1)测量温度范围−50℃~110℃。
(2)精度误差小于0.5℃。
(3)LED数码直接显示。
设计原理图
Protues仿真图如下:

软件设计
/************主程序源码**********/
void data_shout(uint ad_data)
{
float temp;
uint T;
if(ad_data<79)
{
temp=614.422-7.811*ad_data;
T=(uint)temp;
dat_AD[0]=10;
} //负温度 dat_AD[0]中为温度符号数据
else if(ad_data<=204)
{
temp=7.990*ad_data-628.491;
T=(uint)temp;
dat_AD[0]=T/1000;
} //正温度
else if(ad_data>204)
{
temp=8.124*ad_data-655.742;
T=(uint)temp;
dat_AD[0]=T/1000;
} //ad_data=T;
dat_AD[1]=T%1000/100; //温度值的十位
dat_AD[2]=T%100/10; //2温度值的个位
dat_AD[3]=T%10; //温度值的小数位
}
//显示函数
void disp(){
switch(i){
case 0: P0=0xfe;P3=led[dat_AD[0]];i++;break; //显示符号位
case 1: P0=0xfd;P3=led[dat_AD[1]];i++;break;
case 2: P0=0xfb;P3=led[dat_AD[2]]|0x80;i++;break;
case 3: P0=0xf7;P3=led[dat_AD[3]];i=0;break;
}
}
//定时器初始化
//用作数码管显示的刷新
void t0init(){
TMOD=0x01;
TH0=(65535-2000)/256; //定时20ms时间
TL0=(65535-2000)%256;
EA=1;
ET0=1;
TR0=1;
}
//定时器中断函数,在中断中刷新数码管显示
void Time0( ) interrupt 1{
TH0=(65535-2000)/256;
TL0=(65535-2000)%256;
disp();
}
//主函数
void main(void){
t0init(); //初始化
while(1){
start_ad(); //开始AD
data_shout(read_ad()); //数据处理
}
}

988

被折叠的 条评论
为什么被折叠?



