基于51单片机的小型温度采集系统设计

时间:2022-10-18 04:32:25

【前言】基于51单片机的小型温度采集系统设计由文秘帮小编整理而成,但愿对你的学习工作带来帮助。IIC 即Inter-Integrated Circuit(集成电路总线),由菲利浦半导体公司在80年代初设计出这种用来整体电路的连接的总线类型。集成电路总线是一种多向控制总线,它简化了信号传输总线,是目前最常用的短距离[2]芯片间的通讯方式之一。温度采集系统的设计采用IIC通信协议...

基于51单片机的小型温度采集系统设计

摘 要 提出了基于51单片机小型温度采集系统设计,该设计以51单片机作为控制核心,基于IIC协议进行通信,采用C语言编程。文中重点对系统的软件进行设计,主要分为IIC总线通信、温度采集和显示三部分。所设计的温度采集系统具有相对测量精度高、使用方便、成本低等优点。

关键词 51单片机;温度采集;IIC总线

中图分类号TP368.1 文献标识码A 文章编号 1674-6708(2013)91-0212-02

传统的温度采集系统设计方法一般都会用到很多传感器,这不仅会加大系统的调试和维护的难度,还使设计成本大幅度的增加。基于以上多种原因的考虑,我们提出基于51单片机的小型温度采集系统设计,该设计采用IIC协议[1]进行通信,设计成本得到大幅度降低,能够满足基本测量要求。

1 硬件原理

IIC 即Inter-Integrated Circuit(集成电路总线),由菲利浦半导体公司在80年代初设计出这种用来整体电路的连接的总线类型。集成电路总线是一种多向控制总线,它简化了信号传输总线,是目前最常用的短距离[2]芯片间的通讯方式之一。温度采集系统的设计采用IIC通信协议可以提供很好的支撑。

整个设计的控制核心采用51单片机,单片机的P1.1、P1.0口分别与IIC总线上的SCL、SDA相连。单片机通过IIC总线从LM75A[3]芯片接收采集温度的数据进行处理,同时控制着数码管的显示。显示部分由大功率三极管9012来驱动数码管的位,三位数码管的位选由单片机的P1.3~P1.5口通过控制三极管9012的导通和截止来实现,数码管的段选由与IIC总线扩展口相连的PCF8574[4]控制着。另外还应完成单片机常规电路的设计,包括复位电路、按键电路和晶振电路等,其中按键电路应同时具有外部中断和普通按键功能。

2 软件设计

硬件设计完成后,软件的设计是温度采集系统最终功能的实现关键,我们所设计的程序主要包括IIC总线通信、温度采集和显示三部分。

2.1 IIC总线通信

IIC总线上传送的每一个字节都是8位,字节数没有限制。但必须跟随一个接收器回应的应答位在每传送一个字节后,并且最高位为首先发出的数据位,主控制器发送终止信号于全部数据传送结束后,具体程序如下:

void IIC_senddata(uchar adata) {}

uchar IIC_readdata(){} //读数据

{

uchar readdata;

uchar cnt;

readdata=0x00;

for(cnt=0;cnt

{

IIC_scl=1;

delay4us();

readdata

if(IIC_sda)

readdata|=0x01;

IIC_scl=0;

if(cnt==7)

return readdata;

}

}

void IIC_mcudata(uchar adata)

{

IIC_senddata(adata);

if(!tack_check())

{

IIC_stop_ nop(); //停止

IIC_start_ nop(); //开始

}

}

2.2 温度采集

具有IIC总线接口的LM75A芯片被使用到温度采集系统,可连接8个器件在LM75A同一总线上,温度范围为:-55℃-+125℃,电源电压范围为2.8V~5.5 V,能提供1l位A/D转换器,可编程滞后设定点和温度阈值[5]。上电时,可用作独立的温度控制器。软件设计上,根据芯片硬件的一些特点,应实现高低八位数据的轮流采集,如下:

uchar agai=0,bgai=0;

void IIC_LM75A()

{

uint gettemperture=0;

gettemperture = agai *8+ bgai;

if(gam) //低于零度时

{

agai =(2048- gettemperture)/8; //取补码温度的整数值

bgai =(2048- gettemperture)%8;

bgai *=125;

}

else

{

agai =( gettemperture)/8; //取温度的整数值

bgai = gettemperture %8;

bgai *=1.25; //取温度的小数值

}

}

2.3 显示

系统的温度采集范围为-9.9℃~99.9℃,显示精度为0.1℃,具有很强的实用性。我们采用I/O扩展的PCF8574芯片直接驱动三位数码管,位选采用三极管驱动。结合芯片和数码管间的引脚连接,具体程序如下:

void disp(uchar dz)

{

static uchar cnt=0;

uchar disp[12]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x7f,0xbf};

CH0=1;CH1=1;CH2=1; //所有数码管位选无效

writ8574(0xff);

IIC_LM75A(); //LM75A采集温度

IIC_write24C02(dz);

dz++;

switch(cnt) //扫描显示三位数码管

{

case 0:CH0=0; //第一位数码管

if(!Ptem) //如果为正,显示温度的整数部分第一位

writ8574(disp[htem/10]);

else //如果为负,显示“-”号

writ8574(disp[11]);

break;

case 1:CH1=0; //第二位数码管

writ8574(disp[htem%10]&0x7f);

break;

case 2:CH2=0; //第三位数码管

writ8574(disp[ltem]);

break;

}

if(++cnt>2) cnt=0;

}

3 精度测试

我们采用面包板搭建温度采集硬件电路,结合KeiluVision编程,在单片机中烧写入调试生成的[.hex]文件,测试设计精度。功能调试成功后对不同环境下的温度进行采集。采集结果与苏州天宇生产的JT.1-112型温度计作对比,如表1所示,测量精度较高,相对测量精度都在0.20%以下。

表1 温度采集数据

4 结论

传统的设计与我们设计的基于51单片机小型温度采集系统相比,具有成本低、使用方便、相对测量精度高等优点,具有潜在的实际应用价值。

参考文献

[1]郑明惠.温室环境数字化监测仪表的设计与研制[J].计算机测量与控制,2010:12.

[2]顾涵,潘启勇,庞盼.基于IIC协议小型温度计的设计[J].科技传播,2012:8.

[3]谭静芳,姜春玲.温室环境智能测控系统的设计[M].农业装备技术,2010.

[4]徐玮.C51单片机高效入门[M].北京:机械工业出版社,2011.

[5]周长吉.现代温室工程[M].北京:化学工业出版社,2011.

上一篇:透过等级文化看婚姻 下一篇:基于GPRS技术配电远程数据采集与监控系统分析