单片机实现数字温度计设计思路

2014-07-31 15:37魏娟
新媒体研究 2014年13期

魏娟

摘 要 介绍如何使用AT89C51单片机、PT100铂电阻、MAX187A/D转换芯片设计一款数字式温度计,能够实时检测和显示冰箱温度,并具有温度报警功能。

关键词 AT89C51;PT100铂电阻;MAX187A/D转换芯片

中图分类号:TH811 文献标识码:A 文章编号:1671-7597(2014)13-0022-02

随着现代信息技术的飞速发展,能够独立工作的温度检测和显示系统应用于诸多领域。传统温度检测以热敏电阻为温度敏感元件,热敏电阻的成本低,但需要后续信号处理电路,而且可靠性相对较差,测温准确度低,检测系统也有一定的误差。与传统温度计相比,这里设计的数字温度计具有读数方便,测温范围广,测温精确,数字显示,适用范围广等优点。

1 设计概述

本设计使用AT89C51单片机、PT100温度传感器等器件,监测冰箱内温度的变化情况,系统功能概述具体如下。

1)温度检测:系统能实时监测冰箱内的温度。温度采集时间间隔为3 s,温度分辨率为0.1℃,范围:-50~+50℃。

2)温度显示:系统能够实时显示冰箱内的温度值,刷新周期为3 s,显示到小数后一位。

3)温度报警:系统对超出范围的温度进行报警处理,需具备声、光提示功能。

4)报警值设置:系统设置上、下限报警温度值,设置精度为0.1℃。

说明:温度报警值由两个,上限报警值、下限报警值。当冰箱温度高于上限报警值则为上限报警;当冰箱温度低于下限报警值则为下限报警;处于两只之间,系统不报警。

2 模块介绍

我们在介绍功能时可以把它分为几种方式介绍,其中包括的模块有:报警、电源、按键、温度、显示以及单片机模块。具体如下图。

系统模块图

从而我们再通过应用键盘模块对共进行相应的设置。

在应用键盘模块时主要是通过在按键上的数字键进行设置,从0至9进行输入值,再加上应用符号按键,所以,一般可以应用4*4的行列矩阵。

我们也可以应用显示模块对其温度进行显示。

通常可以把范围设置成:-50~+50℃。

并且把小数点一直显示到最后一位,应用系统必须要应用相应的数码管,一般是以静态显示为主。此时,应用LED数码管的第一位是用来显示符号的,用二、三位是用来对温度进行显示的,而最后一位是用来进行小数显示的。

而所谓的温度采集主要是用来测量温度值的,具有非常重要的作用。

在对这部分进行测温时一般是通过应用热电偶温差电路进行工作的,其检测的部分则可以对其应用低温热偶。在产生热电偶的部分当中一般是由温差电势以及金属接触的电势相结合组成。从而我们可以把参考点一直维持在相应的温度上同时对其电压进行测量,这样就可以对它的温度来检测。

对数据进行采集时,一般是应用A/D通道单片机,同时也可以测出变化的温度,对电流以及电压进行采集,在转换以后,便可处理它的数据了。进而也可以在显示电路上显示其温度的数值了。

所谓的报警模块主要是用来光报警以及提供声音的。

在发出了蜂鸣器时也就是报警的声音,再应用发光二级管进行上限和下限的报警方式。我们一般表示上限用红色,而下限用绿色。

一般系统会表示+9 V电源主要是指外部,可以用作运算放大器LM324的参考电压。其他的芯片以及单片机可以应用+5V,也可以对其进行转变。

单片机模块定时采集电压值,将其转换成温度值并显示;接收键盘输入,完成设置报警值的功能,因此可选用AT89C51单片机。

以上是对单片机实现数字温度计的功能分析,选择满足要求的电路芯片,然后进行硬件电路的设计即可。

3 硬件电路设计

通过对数字温度计的功能分析,选择满足要求的电路芯片,然后进行硬件电路的设计。系统中主要用的芯片包括A/D转换芯片MAX187、PT100铂电阻检测器。

1)MAX187是一款12位逐次逼近式串行模数转换器,在单5V电源下工作,模拟量的输入范围是0~5 V。

2)PT100温度检测器是由白金做成的电阻,它的电阻值会随温度的变化而改变,而且比较稳定。系统获得PT100温度检测器的电阻值后,可以查电阻与温度的关系表得到当前的温度。

在硬件电路设计中,关键是测温电路的设计。根据测量分辨率,系统采用铂电阻桥式测温电路,电压差经过运放电路进入12位串行A/D转换器。

4 软件设计

软件设计主要是对温度进行采集、显示并判断是否超出设定范围;通过按键操作,输入温度上下限报警值。因此,整个软件可分为按键子程序、显示子程序、温度采集子程序、报警子程序及系统主程序。

4.1 按键子程序

uchar scan_key()

{

uchar keytemp,i;//定义局部变量

keyport=0xf0;//行线输出0,列线输出1

keytemp=keyport;//读按键端口值

if (keytemp==0xf0)

return no_key;//无键按下,返回

delay 15ms();

keyport=keytemp|0x0f;//列线输出,行线输入

keytemp=keyport;//读取按键端口值

for (i=0;i<12;i++)

{

if (keytemp==keycode[i])//根据按键端口扫描值,查找按键值

break;endprint

}

keyport=0xf0;//行线0,列线输出1

while(keyport!=0xf0);//等待按键是否释放

delay 15ms();//延时

return i;

}

}

4.2 温度采集子程序

uchar scan_key()

{

uchar keytemp,i;//定义局部变量

keyport=0xf0;//行线输出0,列线输出1

keytemp=keyport;//读按键端口值

if (keytemp==0xf0)

return no_key;//无键按下,返回

delay 15ms();

keyport=keytemp|0x0f;//列线输出,行线输入

keytemp=keyport;//读取按键端口值

for (i=0;i<12;i++)

{

if (keytemp==keycode[i])

break;

}

keyport=0xf0; while(keyport!=0xf0);//等待按键是否释放

delay 15ms();//延时

return i;

}

4.3 报警子程序

void alarm (uint temp)

{ if (temp>upperv)//上限报警,红色亮,蜂鸣器响

{ledredcon=0;

speakercon=0;

}

else if(temp

{ledgreencin=0;

speakercon=0;

}

else

{ledgreencon=1;//没发生报警

speakercon=1;

ledgreencon=1;

}

}

5 结束语

本文介绍的只是一个简单数字式温度计的设计思路,还可以增加存储器存储温度值;可以增加通信功能,将存储的数据传给计算机进行处理。

参考文献

[1]寇戈.模拟电路与数字电路[M].北京:电子工业出版社,2011.

[2]黄勤.单片机原理及应用[M].北京:清华大学出版社,2010.

}

keyport=0xf0;//行线0,列线输出1

while(keyport!=0xf0);//等待按键是否释放

delay 15ms();//延时

return i;

}

}

4.2 温度采集子程序

uchar scan_key()

{

uchar keytemp,i;//定义局部变量

keyport=0xf0;//行线输出0,列线输出1

keytemp=keyport;//读按键端口值

if (keytemp==0xf0)

return no_key;//无键按下,返回

delay 15ms();

keyport=keytemp|0x0f;//列线输出,行线输入

keytemp=keyport;//读取按键端口值

for (i=0;i<12;i++)

{

if (keytemp==keycode[i])

break;

}

keyport=0xf0; while(keyport!=0xf0);//等待按键是否释放

delay 15ms();//延时

return i;

}

4.3 报警子程序

void alarm (uint temp)

{ if (temp>upperv)//上限报警,红色亮,蜂鸣器响

{ledredcon=0;

speakercon=0;

}

else if(temp

{ledgreencin=0;

speakercon=0;

}

else

{ledgreencon=1;//没发生报警

speakercon=1;

ledgreencon=1;

}

}

5 结束语

本文介绍的只是一个简单数字式温度计的设计思路,还可以增加存储器存储温度值;可以增加通信功能,将存储的数据传给计算机进行处理。

参考文献

[1]寇戈.模拟电路与数字电路[M].北京:电子工业出版社,2011.

[2]黄勤.单片机原理及应用[M].北京:清华大学出版社,2010.

}

keyport=0xf0;//行线0,列线输出1

while(keyport!=0xf0);//等待按键是否释放

delay 15ms();//延时

return i;

}

}

4.2 温度采集子程序

uchar scan_key()

{

uchar keytemp,i;//定义局部变量

keyport=0xf0;//行线输出0,列线输出1

keytemp=keyport;//读按键端口值

if (keytemp==0xf0)

return no_key;//无键按下,返回

delay 15ms();

keyport=keytemp|0x0f;//列线输出,行线输入

keytemp=keyport;//读取按键端口值

for (i=0;i<12;i++)

{

if (keytemp==keycode[i])

break;

}

keyport=0xf0; while(keyport!=0xf0);//等待按键是否释放

delay 15ms();//延时

return i;

}

4.3 报警子程序

void alarm (uint temp)

{ if (temp>upperv)//上限报警,红色亮,蜂鸣器响

{ledredcon=0;

speakercon=0;

}

else if(temp

{ledgreencin=0;

speakercon=0;

}

else

{ledgreencon=1;//没发生报警

speakercon=1;

ledgreencon=1;

}

}

5 结束语

本文介绍的只是一个简单数字式温度计的设计思路,还可以增加存储器存储温度值;可以增加通信功能,将存储的数据传给计算机进行处理。

参考文献

[1]寇戈.模拟电路与数字电路[M].北京:电子工业出版社,2011.

[2]黄勤.单片机原理及应用[M].北京:清华大学出版社,2010.