单片机数字温度计设计(程序部分)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

数字温度计(程序设计部分)
摘要:本设计完成了一种基于DS18B20的高精度的数字温度计。

我们设计温度系统是由中央控制器AT89S51、DS18B20温度传感器、LED数码管组成。

温度传感器DS18B20高精度的数字温度信号送给单片机AT89S51处理后,实现将温度数据送LED显示,实现了高精度的数字温度显示。

关键词:温度计数字控制 DS18B20 AT89S51
一系统方案设计
1.1 方案设计
由于本设计是测温电路,可以使用热敏电阻之类的器件将温度转换为电学量,便于电路处理。

而具体的处理方案和电路较多,一般来说,有下面两种情况。

方案一:
利用热敏元件的感温效应,流过这类元件的电压或电流的随被测温度变化而变化,将这种变化的电压或电流采集过来,通过一系列的电路处理后,再进行A/D转换,就可以用单片机进行数据的处理并送显示电路,就可以将被测温度显示出来。

这种方案需要用到A/D转换电路,缺点是感温电路后的信号处理比较复杂和不易克服干扰,其优点是通过细致的电路处理后,能达到较高的精度。

方案二:
采用集成的温度传感器,在这类器件中,已经集成了热敏器件、信号调理电路、AD 转换电路,输出的数据也是处理后的已经编码的数字量。

因而其外部电路简单,但其内部电路固定,所以其精度有限。

在单片机电路设计中,大多都是使用这类集成温度传感器,可以很容易直接读取被测温度对应的数据,进行适当的运算和处理,就可以满足设计要求。

1.2方案选择
从以上两种方案,很容易看出其优缺点,本设计中的设计指标不是很高,为了可靠和降低成本,系统采用方案二进行设计,选择使用一只温度传感器DS18B20作为系统的核心器件。

同时,为了能够可靠的工作,能够使电路比较简单,软件设计也比较简单,故采用了AT89S52作为系统的控制芯片。

1.3 系统功能和模块的描述
1.3.1 系统功能
本设计所介绍的数字温度计与传统的温度计相比,具有读数方便,测温范围广,测温准确,其输出温度采用数字显示,主要用于对测温比较准确的场所,或科研实验室使用。

1.3.2 模块描述
<1>、主控制器:负责温度参数的采集和显示的控制。

<2>、显示电路:对温度数字进行显示。

<3>、测温电路:其主要部件为温度传感器,负责对外界进行温度感觉。

二、电路设计
2.1主要电子元件
2.1.1 数字温度传感器DS18B20
由DALLAS 半导体公司生产的DS18B20型单线智能温度传感器,属于新一代适 配微处理器的智能温度传感器,可广泛用于工业、民用、军事等领域的温度测量及控制仪器、测控系统和大型设备中。

它具有体积小,接口方便,传输距离远等特点。

2.1.2 数码管LED 显示器
● 数码显示器有静态和动态显示两种显示方式。

● LED 显示器工作在静态显示方式时,其阴极点(或阳极)连接在一起接地(或+5V ),每一个的段选线(a,b,c,d,e,f,g,p )分别与一个8位口相连。

图1 系统硬件电路框图
图2 DS18B20引脚分布图
● LED 显示 器工作在动态显示方式时,段选码端口I/O1用来输出显示字符的段选码,I/O2输出位选码。

I/O1不断送待显示字符的段选码,I/O2不断送出不同的位扫描码,并使每位显示字符显示一段时间,一般为1—5mS 。

利用眼睛的礼视觉惯性,从显示器上便可以见到相当稳定的数字显示。

2.2 硬件模块关系图
按照系统设计功能的要求,确定系统由3个模块组成:主控制器、测温电路和显示电路。

数字温度计总体电路结构框图如图4所示。

图4 电路结构框图
图3 四位数码管
三、程序设计
3.1 主程序
主程序的主要功能是负责温度的实时显示、读出并处理DS18B20的测量温度值,温度测量每1s进行一次,其程序流程图如图5。

图5 主程序流程图
3.2 读出温度子程序
读出温度子程序的主要功能是读出RAM中的9字节,在读出时需要进行CRC校验,校验有错时不进行温度数据的改写。

其程序流程图如图6所示。

图6 读出温度子程序流程图
3.3 温度转换命令子程序
温度转换命令子程序主要是发温度转换开始命令,当采用12位分辩率时转换时间约为750ms,在本程序设计中采用1s显示程序延时法等待转换的完成。

温度转换命令子程序流程图如图7所示。

图7 温度转换命令子程序流程图
3.4 计算温度子程序
计算温度子程序将RAM中读取值进行BCD码的转换运算,并进行温度值正负的判定,其流程图如图8所示。

图8 计算温度子程序流程图
3.5 显示数据刷新子程序
显示数据刷新子程序主要是对显示缓冲区中的显示数据进行刷新操作,当最高显示位为0时将符号显示位移入下一位。

程序流程图如图9所示。

图9 显示数据刷新子程序流程图
四源程序代码
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit DQ =P3^4; //定义通信端口
sbit x=0x90;
uchar code discode[16]={0x3f,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7c,0x39,0x5e ,0x79,0x71}; //0~F
uchar a[2]={0,0}; //显示两位
uchar temp_H,temp_L;//温度的高八位和低八位//延时
void delay(uchar useconds)
{
do{;}while(--useconds);
}//复位
uchar ow_reset(void)
{
uchar presence;
DQ = 0; //拉低DQ
delay(240); // 等至少480us
DQ = 1; // 拉高
delay(15); // 等待响应
presence = DQ; // 得到器件响应
delay(240); // 延迟480us
return(presence); // 返回器件响应,0=有器件, 1 = 无器件
}
//从1-wire 总线上读取一个字节
uchar read_byte(void)
{
uchar i;
//ACC=0;//uchar value = 0;//初始值为0
for (i=8;i>0;i--)
{
//value>>=1;//右移
DQ = 0; // 拉低DQ
delay(2);
DQ = 1; // 再拉高
delay(4); //
//
CY=DQ;CY=ACC&0x01;//if(DQ)value|=0x80;//将数据循环右移RLC A
delay(30); // 等60us
}
return(ACC);//value);//返回读出的数据
}
//向1-WIRE 总线上写一个字节
void write_byte(char val)
{
uchar i;ACC=val;
for (i=8; i>0; i--) //
{
DQ = 0; // 拉低
CY= ACC&0x01;
delay(2);
DQ =CY;//DQ = val&0x01;//输出最低位
delay(30); // 等60us
DQ = 1;
//val=val/2;
}
delay(30);
}//读取温度
void Read_Temperature(void)
{
ow_reset();
write_byte(0xCC); // 跳过序列号检测
write_byte(0xBE); // 读内部单元
temp_L=read_byte(); //低八位
temp_H=read_byte(); //高八位
ow_reset(); //复位
write_byte(0xCC); //跳过ROM
write_byte(0x44); // 开始温度转换
temp_H=temp_H*16;
temp_H+=temp_L/16;//还原整数部分
temp_L=(temp_L&0x0f)*25/4; //小数部分
}
void display1() //小数点显示
{
P0=0x80;
P2=0x04;
}
void display(void) //温度度数显示
{
uchar i,j,k;
i=8;j=0;
while (j<2)
{
P2=0;
P0=discode[a[j]/10]; // 高八位读取
P2=i;
for (k=0;k<50;k++);
i>>=1;
P2=0;
P0=discode[a[j]%10]; // 低八位读取
P2=i;
for (k=0;k<50;k++);
i>>=1;
if (i==0) i=0x80;
j++;
}
P2=0;
}
void main(void)
{
uchar k1=0,k2=0;
//delay1(0);
while(1)
{Read_Temperature(); //读取温度
a[0]=temp_H; //
a[1]=temp_L;
for (k1=0;k1<20;k1++) //循环显示
{display();
display1();}
}
五总结
(1)能实现显示两位小数。

(2)所显示温度的范围在1~100℃之间。

(3)整个系统其性能指标均达到了要求。

通过此次设计,让我对AT89系列单片机的应用有了更深一步的认识,在此设计中也使我的编程技能很好的得到了提高,在硬件设计与PCB的设计等方面都得已提高,并且认识到很多新的算法和设计思想。

六参考文献
[1] 电子线路设计与实践.北京:电子工业出版社,2006
[2] 朱永金、成友才.单片机应用技术(C语言).北京:中国劳动社会保障出版社,2007
[3] 阎石.数字电子技术基础(第三版). 北京:高等教育出版社,1989
学生毕业设计答辩情况记载表
论文题目:
班级:学生姓名:学号:
目录
一系统方案设计 (1)
1.1 方案设计 (1)
1.2方案选择 (1)
1.3 系统功能和模块的描述 (2)
1.3.1 系统功能 (2)
1.3.2 模块描述 (2)
二、电路设计 (2)
2.1主要电子元件 (2)
2.1.1 数字温度传感器DS18B20 (2)
2.1.2 数码管LED显示器 (2)
2.2 硬件模块关系图 (3)
三、程序设计 (4)
3.1 主程序 (4)
3.2 读出温度子程序 (4)
3.3 温度转换命令子程序 (5)
3.4 计算温度子程序 (5)
3.5 显示数据刷新子程序 (6)
四源程序代码 (7)
五总结 (9)
六参考文献 (9)。

相关文档
最新文档