家用包装机上的纸张

基于51单片机的温度测量系统

摘要:单片机广泛应用于检测和控制系统中,温度是系统经常需要测量、控制和维护的量。从硬件和软件两方面介绍了AT89C2051单片机温度控制系统的设计,并给出了硬件原理图和程序框图。

关键词:单片机at89c 2051;温度传感器ds 18b 20;温度;措施

介绍

单片机在电子产品中得到了广泛的应用,在很多电子产品中也用于温度检测和温度控制。因此,本文设计了一种基于atmel公司的AT89C2051的温度测量系统。这是一种利用单片机冗余I/O口实现的低成本温度检测电路。该电路非常简单,易于实现,适用于几乎所有类型的单片机。

一、系统硬件设计

系统的硬件结构如图1所示。

1.1数据采集

数据采集电路如图2所示。温度传感器DS18B20采集被控对象的实时温度,并作为数据输入提供给AT89C2051的P3.2端口。在这个设计中,我们控制的对象是室温。当然,作为一种改进,我们可以将传感器与电路板分离,通过数据线与之通信,方便测量各种物体。

DS18B20是DALLAS公司生产的单线数字温度传感器,具有3引脚TO-92小体积封装。测温范围为-55℃ ~+125℃,可编程9位~ 12位A/D转换精度,测温分辨率可达0.0625℃。测量的温度以扩展符号的16位数字量串行输出,支持3v ~ 5.5v的电压范围,使系统设计更加灵活方便。其工作电源可在远端引入或以寄生电源方式产生;多个DS18B20可以并联成三根或两根线,CPU只用一根端口线就可以和多个DS18B20通信,占用微处理器的端口少,节省了大量的引线和逻辑电路。以上特点使得DS18B20非常适合长距离多点温度检测系统。分辨率设置和用户设置的报警温度存储在EEPROM中,断电后仍会保存。DS18B20使电压和特性有了更多的选择,因此我们可以构建一个经济的温度测量系统。如图2所示,DS18B20的DQ引脚是数字信号输入/输出端;1引脚GND为电源地;三脚VDD是外部电源的输入端。

AT89C2051(以下简称2051)是一款8051兼容的微控制器,与Intel的MCS-51完全兼容。它有一个2K的可编程闪存和128B字节的数据存储空间,可以直接驱动LED,和805655一样。

1.2接口电路

图2单片机2051与温度传感器DS18B20的连接图。

接口电路由ATMEL的2051单片机、ULN2003达林顿芯片、4511BCD解码器、串行EEPROM24C16(保存系统参数)、MAX232、数码管及外围电路组成。单片机从P1.0 ~并行通信。经4511BCD解码器解码,用两个* * *阴极发光二极管静态显示10位和10位的温度。

串行EEPROM24C16是一种标准的I2C规格,只需两个引脚即可读写。因为MCU 2051的P1是一个双向I/O端口,所以我们在设计中使用P1作为输出端口。从图2可以看出,P1.7作为串行时钟输出信号连接到24C16的引脚6,P1.6作为串行数据输出连接到24C16的引脚5。P1。4和P1.5用作两个数码管的位选择信号。当P1.4=1时,选择第一个数码管(单位);当P1.5=1时,选择第二个数码管(十位数)。p1.0 ~ p1.3的输出信号接至解码器4511作为数码管的显示。另外,由于MCU 2051的P3口有特殊功能,P3.0(RXD)串行输入口,P3.1(TXD)串行输出口,P3.2(入)外部中断0,P3.3(INT1)外部中断1P3.4 .从图2中可以看出,P3.0和P3.1作为与MAX232串行通信的接口;P3.2和P3.3作为中断信号接口;P3.4和P3.5用作外部定时/计数输入点。P3.7作为脉冲输出,控制发光二极管的开关。

由于电路中使用了* *阴极的LED数码管,所以增加了一个达林顿电路ULN2003来放大信号,产生足够的电流来驱动数码管显示。因为4511只能解码十进制的BCD,而且只能翻译成0到9,这里我们用4511解码输出我们需要的温度。

1.3报警电路简介

图3七段数码管温度显示接线图

本文设计的报警电路比较简单,由一个自振荡蜂鸣器(只要在蜂鸣器两端施加3V以上的电压,蜂鸣器就会一直叫)和一个发光二极管组成(如图3)。在本设计中,蜂鸣器由ULN2003电流放大器IC控制。当所需温度达到某一上限或下限时(本文中上限温度为45℃,下限温度为5℃),报警电路开始工作,主要程序设计如下:

Main()//主函数

{无符号字符I = 0;& ltbr/>;无符号int m,n;& ltbr/>;while(1)& lt;br/>;{ I = read temperature();//读数温度}

如果(i & gt0 & amp& amp我& lt=10) //如果温度在0到10度之间,直接给七段数码管赋值。

{ p 1 = design p 1[I];}

否则//如果温度大于10度,

{ m = I % 10;//先给第一个七段数码管赋值