数字温度计方案设计书.docx
《数字温度计方案设计书.docx》由会员分享,可在线阅读,更多相关《数字温度计方案设计书.docx(19页珍藏版)》请在冰豆网上搜索。
![数字温度计方案设计书.docx](https://file1.bdocx.com/fileroot1/2022-11/16/643df5d8-fa2b-4f85-90cb-3bf5203867a1/643df5d8-fa2b-4f85-90cb-3bf5203867a11.gif)
数字温度计方案设计书
HefeiUniversity
计算机控制技术设计报告
设计题目:
数字温度计设计
专业班级:
08级自动化
(2)班
姓名:
陆坤李宏灶金卫健
学号:
08050701300805070110
0805070147
指导老师:
储忠
摘要
在这个信息化高速发展的时代,单片机作为一种最经典的微控制器,单片机技术已经普及到我们生活,工作,科研,各个领域,已经成为一种比较成熟的技术,作为自动化专业的学生,我们学习了单片机,就应该把它熟练应用到生活之中来。
本文将介绍一种基于单片机控制的数字温度计,本温度计属于多功能温度计,可以设置上下报警温度,当温度不在设置范围内时,可以报警。
本文设计的数字温度计具有读数方便,测温范围广,测温精确,数字显示,适用范围宽等特点。
关键词:
单片机,数字控制,数码管显示,温度计,DS18B20,AT89S52。
一、总体方案设计概述
1.1系统总体方案设计
本设计以检测温度并显示温度提供上下限报警为目的,按照系统设计功能的要求,确定系统由4个模块组成:
主控器、测温电路,报警电路,显示电路。
系统以DS18B20为传感器用以将温度模拟量转化为电压数字量以总线传入单片机,以AT89S52为主芯片,在主芯片对DS18B20传入的温度值进行处理,由单片机程序控制,将经处理后的温度由12864液晶屏显示出来。
本系统具有电路简洁,性能可靠等特点,易于实现。
总体设计框图
1.2各功能模块
1.2.1温度检测
每次测温由单片机向测温传感器发出特定脉冲,测温传感器能够检测到脉冲并做相应的工作。
传感器将模拟温度信号经过采集,数字处理,放大后输出。
DS18B20使用一个单线接口发送或接受信息,因此在单片机和DS18B20之间只需要一条线链接,用于读写和温度转换的电源可以从数据线获得,无需外接电源。
1.2.2数字信号的处理及温度显示
送入单片机内部的数字信号经过单片机的处理,将数据用12864液晶屏显示出来。
其处理过程主要由单片机能存储的程序进行控制。
1.2.3报警功能
在单片机程序内设置了报警温度的上下限值,当所测得的温度超过了这一数值,将会由蜂鸣器发出报警。
报警功能是本系统的重要功能之一,在工业应用中常常需要在特定的温度条件下进行报警,当温度超出范围时及时的报警是十分必要的。
二、硬件系统设计
2.1总体电路设计
温度计电路设计原理图控制器使用单片机AT89S52,温度传感器使用DS18B20,用12864液晶屏以动态扫描法实现温度显示。
电路还包括报警电路,单片机外设电路等。
整个系统的原理图如下图所示:
2.2主控制器AT89C52
AT89C52是一种低功耗、高性能CMOS8位微控制器,具有8K在系统可编程Flash存储器。
使用Atmel公司高密度非易失性存储器技术制造,与工业80C51产品指令和引脚完全兼容。
片上Flash允许程序存储器在系统可编程,亦适于常规编程器。
在单芯片上,拥有灵巧的8位CPU和在系统可编程Flash,使得AT89S52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。
2.3显示电路12864
12864是一种具有4位/8位并行、2线或3线串行多种接口方式,内部含有国标一级、二级简体中文字库的点阵图形液晶显示模块;其显示分辨率为128×64,内置8192个16*16点汉字,和128个16*8点ASCII字符集.利用该模块灵活的接口方式和简单、方便的操作指令,可构成全中文人机交互图形界面。
可以显示8×4行16×16点阵的汉字.也可完成图形显示.低电压低功耗是其又一显著特点。
由该模块构成的液晶显示方案与同类型的图形点阵液晶显示模块相比,不论硬件电路结构或显示程序都要简洁得多,且该模块的价格也略低于相同点阵的图形液晶模块。
2.3.1基本特性
低电源电压(VDD:
+3.0--+5.5V)
显示分辨率:
128×64点
内置汉字字库,提供8192个16×16点阵汉字(简繁体可选)
内置128个16×8点阵字符2MHZ时钟频率
通讯方式:
串行、并口可选
内置DC-DC转换电路,无需外加负压
无需片选信号,简化软件设计
工作温度:
0℃-+55℃,存储温度:
-20℃-+60℃
2.3.2设计使用
本设计主要用的是12864的串行接法
12864串行接法
12864引脚说明
2.4温度传感器
引脚图
封装图
2.4.1技术性能描述
1、独特的单线接口方式,DS18B20在与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯。
2、测温范围-55℃~+125℃,固有测温分辨率0.5℃。
3、支持多点组网功能,多个DS18B20可以并联在唯一的三线上,最多只能并联8个,实现多点测温,如果数量过多,会使供电电源电压过低,从而造成信号传输的不稳定。
4、工作电源:
3~5V/DC
5、在使用中不需要任何外围元件
6、测量结果以9~12位数字量方式串行传送
DS18B20的性能特点如下:
·独特的单线接口仅需要一个端口引脚进行通信;
·实际应用中不需要外部任何元器件即可实现测温;
·可通过数据线供电,电压范围为3.0~5.5V;
·在DS18B20中的每个器件上都有独一无二的序列号;
·温度以9或12位数字量读出;
·报警搜索命令识别并标志超过程序限定温度(温度报警条件)的器件;
·负电压特性,电源极性接反时,温度计不会因发热而烧毁,但不能工作。
2.4.2接线说明
独特的一线接口,只需要一条口线通信,多点能力,简化了分布式温度传感应用,无需外部元件,可用数据总线供电。
电压范围为3.0V至5.5V无需备用电源,,测量温度范围为-55至+125摄氏度。
范围内精度为±0.5摄氏度,温度传感器可编程的分辨率为9~12位,温度转换为12位数字格式最大值为750毫秒。
用户可定义的非易失性温度报警设置应用范围包括恒温控制,工业系统,消费电子产品温度计,或任何热敏感系统
2.5蜂鸣器报警电路
所测温度超出上、下限温度极限值时,为实现报警功能,并且相应的指示灯亮,设计了蜂鸣器报警电路。
三、软件系统设计
3.1程序流程图
3.2软件代码
3.2.1主文件部分
#include
#include"12864.h"
#include"DS18B20.H"
sbitbeep=P0^0;//蜂鸣器控制口
sbitred_H=P0^2;//红灯控制口
sbitgreen_L=P0^1;//绿灯控制口
externunsignedintwendu;
unsignedintH=33,L=30;
voidmain(void)
{
unsignedinttemp;
unsignedchartemp_h,temp_l;
Delay(50000);
Lcd_Init();//12864初始化
Lcd_DisplayString(0,2,"温度检测");
Lcd_DisplayString(1,1,"温度:
");
while
(1)
{
temp=read_temp()*0.625;//读取温度
if(temp>H*10)//温度高于33摄氏度则报警//上下限报警判断
{
beep=0;
red_H=0;
}
elseif(temp{
beep=0;
green_L=0;
}
else//否则取消声光报警
{
beep=1;
green_L=1;
red_H=1;
}
Lcd_WriteCmd(0x90+0x04);//把收到的温度信息显示在12864上
Lcd_WriteData(temp/1000+0x30);
Lcd_WriteData(temp%1000/100+0x30);
Lcd_WriteData(temp%100/10+0x30);
Lcd_WriteData('.');
Lcd_WriteData(temp%10+0x30);
Lcd_WriteData('C');
Delay(20000);
}
}
3.2.2DS18B20部分
#include"DS18B20.h"
#include//_nop_();延时函数用
sbitDQ=P1^0;//温度输入口
uinttemp;
uintwendu;
/******************温度小数部分用查表法****************/
ucharcodeditab[16]=
{0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x04,0x05,0x06,0x06,0x07,0x08,0x08,0x09,0x09};
uchardatatemp_data[2]={0x00,0x00};//读出温度暂放
uchardatadisplay[5]={0x00,0x00,0x00,0x00,0x00};//显示单元数据,共4个数据和一个运算暂用
/*****************11us延时函数*************************/
voiddelay_18b20(uintt)
{
while(t--);
}
/****************DS18B20复位函数************************/
ow_reset(void)
{
charpresence=1;
while(presence)
{
while(presence)
{
DQ=1;_nop_();_nop_();//从高拉倒低
DQ=0;
delay_18b20(50);//550us
DQ=1;
delay_18b20(6);//66us
presence=DQ;//presence=0复位成功,继续下一步
}
delay_18b20(45);//延时500us
presence=~DQ;
}
DQ=1;//拉高电平
}
/****************DS18B20写命令函数************************/
//向1-WIRE总线上写1个字节
voidwrite_byte(ucharval)
{
uchari;
for(i=8;i>0;i--)
{
DQ=1;_nop_();_nop_();//从高拉倒低
DQ=0;_nop_();_nop_();_nop_();_nop_();//5us
DQ=val&0x01;//最低位移出
delay_18b20(6);//66us
val=val/2;//右移1位
}
DQ=1;
delay
(1);
}
/****************DS18B20读1字节函数************************/
//从总线上取1个字节
ucharread_byte(void)
{
uchari;
ucharvalue=0;
for(i=8;i>0;i--)