简易数字温度计设计.docx

上传人:b****4 文档编号:2968442 上传时间:2022-11-16 格式:DOCX 页数:19 大小:213.50KB
下载 相关 举报
简易数字温度计设计.docx_第1页
第1页 / 共19页
简易数字温度计设计.docx_第2页
第2页 / 共19页
简易数字温度计设计.docx_第3页
第3页 / 共19页
简易数字温度计设计.docx_第4页
第4页 / 共19页
简易数字温度计设计.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

简易数字温度计设计.docx

《简易数字温度计设计.docx》由会员分享,可在线阅读,更多相关《简易数字温度计设计.docx(19页珍藏版)》请在冰豆网上搜索。

简易数字温度计设计.docx

简易数字温度计设计

摘要:

本系统利用单片机AT89C52采用程序设计方法来测试温度,还可以通过两个按键设置温度报警上限,当测试温度超过设定的温度上限时,蜂鸣器器就会报警且绿灯关闭,红灯点亮;当温度低于上限时蜂鸣器关闭且红灯关闭,绿灯点亮。

并通过液晶屏1602显示其测试温度以及设置的上限温度。

关键词:

STC89C52、LCD1602、DS18B20

简易数字温度计设计

1系统设计

1.1设计任务

设计一数字温度测量系统,能自动实现实际温度的测量与显示。

1.2设计要求

1.2.1基本功能

(1)测温范围-30℃~+120℃。

(2)测量误差在±0.5℃之内。

(3)能正常显示测量的温度。

1.2.2扩展功能

(1)增加温控功能,并可修改设置温控的上下限。

(2)增加温控报警功能。

2系统方案论证

本系统主要由主控模块、显示模块、按键模块、蜂鸣器模块、LED模块、传感器模块组成,下面分别论证这几个模块的选择。

2.1主控模块的论证与选择

方案一:

AT89C52单片机是一种高性能8位单片微型计算机。

内核本身具有丰富的指令集,足够实现本次作品的全部基本功能和部分拓展功能,相比Atmega16我们对AT89C52更为熟悉,且芯片价格较低,性价比高。

方案二:

采用ATmega16芯片作为主控芯片。

由于对芯片的不熟悉,导致如果想要实现温度计全部基本功能和部分拓展功能,较为困难。

综上所述,选择方案一。

2.2显示模块的论证与选择

方案一:

采用LCD1602显示。

LCD1602相对便宜,虽然其本身不能显示中文,但是温度计只需显示数字和一些英文,符合这次设计要求。

方案二:

采用LCD12864显示。

LCD12864屏幕显示细腻直观,且可以显示中文,但是相对昂贵。

综上所述,选择方案一。

2.3按键模块的论证与选择

方案一:

采用4X4矩阵按键。

尽管按键一目了然,但连线复杂,扫描过程烦琐,会耗费大量的系统资源。

方案二:

独立按键,我们只使用了两个按键来调节上限,大大节省了系统硬件资源,便于系统扩展。

综上所述,选择方案二。

3系统理论分析与计算

3.1DS18B20的理论分析与计算

DS18B20通过编程,可以实现最高12位的温度存储值,在寄存器中,以补码的格式存储,如图1所示。

图1DS18B20温度数据格式

寄存器一共2个字节,LSB是低字节,MSB是高字节,其中MSb是字节的高位,LSb是字节的低位。

大家可以看出来,二进制数字,每一位代表的温度的含义,都表示出来了。

其中S表示的是符号位,低11位都是2的幂,用来表示最终的温度。

DS18B20的温度测量范围是从-55度到+125度,而温度数据的表现形式,有正负温度,寄存器中每个数字如同卡尺的刻度一样分布,如图2所示。

图2DS18B20温度值

二进制数字最低位变化1,代表温度变化0.0625度的映射关系。

当0度的时候,那就是0x0000,当温度125度的时候,对应十六进制是0x07D0,当温度是零下55度的时候,对应的数字是0xFC90。

反过来说,当数字是0x0001的时候,那温度就是0.0625度了。

4电路与程序设计

4.1电路的设计

4.1.1系统总体框图

系统总体框图如图3所示

图3系统总体框图

4.1.2控制按键&LED电路

按下S1能增加温度报警上限,按下S2能减少温度报警上限。

测试温度低于上限时,绿灯LED1亮。

当温度超过设定的上限时,红灯LED2亮。

图4控制按键&LED

4.1.3蜂鸣器电路

当测试温度超过设定温度时,蜂鸣器开启;当测试温度低于设定温度时,蜂鸣器关闭。

蜂鸣器电流相对较大,因此需要用三极管驱动,并且加了一个1K欧的电阻作为限流电阻。

此外还加了一个D1二极管,这个二极管叫做续流二极管。

图5蜂鸣器电路

4.1.4显示电路

显示电路使用LCD1602,第一行显示”Temperature”第二行显示测试温度和温度上限,两者中间显示一个”>”或”<”。

RP1为上拉排阻。

图6显示电路

4.1.5传感器电路

图7传感器电路

4.1.6总体电路

图8整体电路

4.1.7电源

使用5V直流电源。

4.2程序的设计

4.2.1程序功能描述

(1)能够测试-30℃~+120℃的温度。

(2)按下S1能增加温度报警上限,按下S2能减少温度报警上限。

(3)测试温度低于上限时,绿灯亮,蜂鸣器关闭。

当温度超过设定的上限时,红灯亮且蜂鸣器响起。

4.2.2程序流程图

图9程序流程图

5测试方案与测试数据

5.1测试方案

5.1.1软件仿真测试

用Proteus7.5软件画出电路图,模拟硬件对程序进行调试。

 

5.1.2硬件软件联调

将编写的单片机C语言程序下载到实际硬件中,进行硬件软件联调。

5.2测试条件与仪器

测试条件:

检查多次,仿真电路和硬件电路必须与系统原理图完全相同,并且检查无误,硬件电路保证无虚焊。

测试仪器:

数字示波器,数字万用表。

5.3测试结果

系统上电运行后,LCD能正常显示测试温度且绿灯点亮,测试温度每秒更新。

按下S1能使报警温度上限+1,按下S2能使报警温度上限-1。

当测试温度超过上限温度时,绿灯关闭,红灯点亮且蜂鸣器开启;当测试温度低于上限温度时,红灯关闭,绿灯点亮且蜂鸣器关闭。

6总结

本系统以单片机STC89C52芯片为核心部件,利用LCD1602、独立按键、蜂鸣器、DS18B20并配合C语言算法实现了简易数字温度计设计,完成此次设计题目中的全部基本功能和部分拓展功能。

在系统设计过程中,力求硬件线路简单,充分发挥软件编程方便灵活的特点,来满足系统设计要求。

在本次设计的过程中,遇到了许多突发事件和困难,设计制作曾一度止步不前,但通过仔细分析和调整后解决了一个又一个的问题。

在整个过程中我们深刻的体会到团队精神的重要性,并提高了自己解决问题的能力。

 

附录主要源程序

main程序:

#include

sbitKEY1=P1^0;//上调报警温度

sbitKEY2=P1^1;//下调报警温度

sbitLED1=P1^2;//正常时绿灯亮

sbitLED2=P1^3;//报警时红灯亮

sbitBUZZ=P1^6;

bitenBuzz=0;//蜂鸣器使能标志

bitflag1s=0;//1s定时标志

unsignedintwarnT=30;//报警温度值

unsignedcharT0RH=0;//T0重载值的高字节

unsignedcharT0RL=0;//T0重载值的低字节

voidConfigTimer0(unsignedintms);

unsignedcharIntToString(unsignedchar*str,intdat);

externbitStart18B20();

externbitGet18B20Temp(int*temp);

externvoidInitLcd1602();

externvoidLcdShowStr(unsignedcharx,unsignedchary,unsignedchar*str);

externvoidLcdWriteCmd(unsignedcharcmd);

voidmain()

{

bitres;

bitbackup=1;

inttemp;//读取到的当前温度值

intintT,decT;//温度值的整数和小数部分

unsignedcharlen,len1;

unsignedcharstr[12],str1[12];

EA=1;//开总中断

P1=0XF3;

ConfigTimer0

(1);//T0定时1ms

Start18B20();//启动DS18B20

InitLcd1602();//初始化液晶

while

(1)

{

if(flag1s)//每秒更新一次温度

{

flag1s=0;

res=Get18B20Temp(&temp);//读取当前温度

if(res)//读取成功时,刷新当前温度显示

{

intT=temp>>4;//分离出温度值整数部分

decT=temp&0xF;//分离出温度值小数部分

len=IntToString(str,intT);//整数部分转换为字符串

len1=IntToString(str1,warnT);//报警温度转换为字符串

str[len++]='.';//添加小数点

decT=(decT*10)/16;//二进制的小数部分转换为1

//位十进制位

str[len++]=decT+'0';//十进制小数位再转换为

//ASCII字符

str[len++]=0xdf;//添加字符串“℃”

str[len++]='C';

str[len++]='';

str[len]='\0';//添加字符串结束符

str1[len1++]=0xdf;//添加字符串“℃”

str1[len1++]='C';

str1[len1]='\0';//添加字符串结束符

if(intT

{

enBuzz=0;//关闭蜂鸣器

LcdWriteCmd(0x01);//清屏

LcdShowStr(2,0,"Temperature");//显示第一行

LcdShowStr(2,1,str);//显示实时温度

LcdShowStr(9,1,"<");

LcdShowStr(11,1,str1);//显示报警温度

}

else

{

enBuzz=1;//启动蜂鸣器发声

LcdWriteCmd(0x01);//清屏

LcdShowStr(4,0,"Warning!

");//显示警告

LcdShowStr(0,1,"Temp:

");

LcdShowStr(5,1,str);//显示实时温度

LcdShowStr(11,1,">");

LcdShowStr(12,1,str1);//显示报警温度

}

}

else//读取失败时,提示错误信息

{

LcdShowStr(4,1,"error!

");

}

Start18B20();//重新启动下一次转换

}

}

}

/*按键动作函数*/

voidKeyAction()

{

if(KEY1==0)

{

KEY1=1;

warnT++;

}

elseif(KEY2==0)

{

KEY2=1;

warnT--;

}

}

/*

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1