当前位置:首页 >> 工学 >>

课程设计数值温度计实践报告


物理与电气工程学院课程设计报告 数字温度计

姓 专

名 业 电气工程及其自动化

指导教师 成 日 绩 期 2014.04.04

第 1 页

数字温度计的设计
摘 要:随着“信息时代”的到来,作为获取信息的手段——传感器技术得到了显著的进 步,其应用领域越来越广

泛,对其要求越来越高,需求越来越迫切。传感器技术已成为衡 量一个国家科学技术发展水平的重要标志之一。因此,了解并掌握传感器的基本结构、工 作原理及特性是非常重要的。 在日常生活及工农业生产中, 经常要用到温度的检测及控制, 传统的测温元件有热电偶和热电阻。而热电偶和热电阻测出的一般都是电压,再转换成对 应的温度,需要比较多的外部硬件支持, 其缺点如下:1. 硬件电路复杂;2. 软件调试 复杂;3. 制作成本高。为了提高对传感器的认识和了解,尤其是对温度传感器的深入研 究以及其用法与用途,基于实用、广泛和典型的原则而设计了本系统。本文利用单片机结 合传感器技术开发设计,文中把传感器理论与单片机实际应用有机结合,详细地讲述了利 用温度传感器 DS18B20 测量环境温度,同时 51 单片机在现代电子产品中广泛应用以及其 技术已经非常成熟,DS18B20 可以直接读出被测温度值,而且采用三线制与单片机相连, 减少了外部的硬件电路,具有低成本和易使用的特点。 关键词: 信息时代 温度传感器 51 单片机 1 概述 1.1 设计目的 随着人们生活水平的不断提高,单片机控制无疑是人们追求的目标之一,它所给人带 来的方便也是不可否定的,其中数字温度计就是一个典型的例子,但人们对它的要求越来 越高,要为现代人工作、科研、生活、提供更好的更方便的设施就需要从数单片机技术入 手,一切向着数字化控制,智能化控制方向发展。 本设计所介绍的数字温度计与传统的温度计相比,具有读数方便,测温范围广,测温 准确,其输出温度采用数字显示,主要用于对测温比较准确的场所,或科研实验室使用, 可广泛用于食品库、冷库、粮库、温室大棚等需要控制温度的地方。目前,该产品已在温 控系统中得到广泛的应用。 1.2 设计原理 本系统是一个基于单片机 AT89S52 的数字温度计的设计,用来测量环境温度,测量范 围为-50℃—110℃度。整个设计系统分为 4 部分:单片机控制、温度传感器、数码显示以 及键盘控制电路。整个设计是以 AT89S52 为核心,通过数字温度传感器 DS18B20 来实现环 境温度的采集和 A/D 转换,同时因其输出为数字形式,且为串行输出,这就方便了单片机 进行数据处理,但同时也对编程提出了更高的要求。单片机把采集到的温度进行相应的转 换后,使之能够方便地在数码管上输出。LED 采用四位一体共阴的数码管。 1.3 设计难点 此设计的重点在于编程,程序要实现温度的采集、转换、显示,其外围电路所用器件 较少,相对简单,实现容易。 2 系统总体方案及硬件设计 2.1 数字温度计设计方案论证 由于本设计是测温电路,可以使用热敏电阻之类的器件利用其感温效应,在将随被测 温度变化的电压或电流采集过来,进行 A/D 转换后,就可以用单片机进行数据的处理,在
第 2 页

显示电路上,就可以将被测温度显示出来,这种设计需要用到 A/D 转换电路,感温电路比 较麻烦。进而考虑到用温度传感器,在单片机电路设计中,大多都是使用传感器,所以这 是非常容易想到的,所以可以采用一只温度传感器 DS18B20,此传感器,可以很容易直接 读取被测温度值,进行转换,就可以满足设计要求。 2.2 总体设计框图 温度计电路设计总体设计方框图如图 1 所示,控制器采用单片机 STC89C52,温度传感 器采用 DS18B20,用 4 位共阴 LED 数码管以串口传送数据实现温度显示。

图1

总体设计框图

2.2.1

主控制器

单片机 STC89C52 具有低电压供电和体积小等特点,四个端口只需要两个口就能满足 电路系统的设计需要,适合便携手持式产品的设计使用。 STC89C52 单片机芯片具有以下特性: 1)指令集合芯片引脚与 Intel 公司的 8052 兼容; 2)4KB 片内在系统可编程 FLASH 程序存储器; 3)时钟频率为 0~33MHZ; 4)128 字节片内随机读写存储器(RAM) ; 5)6 个中断源,2 级优先级; 6)2 个 16 位定时/记数器; 7)全双工串行通信接口; 8)监视定时器; 9)两个数据指针;
2.2.2 显示电路

显示电路采用 4 位共阴 LED 数码管,从 P0 口输出段码,P2.4—P2.7 作片选端。但在 焊电路板的时候发现数码管亮度不够,所以在 P2.4—P2.7 端口接四个 10K 的电阻,以使数 码管高亮显示。
第 3 页

2.2.3 温度传感器

DS18B20 温度传感器是美国 DALLAS 半导体公司推出的一种改进型智能温度传感 器,与传统的热敏电阻等测温元件相比,它能直接读出被测温度,并且可根据实际要求通 过简单的编程实现 9-12 位的数字值读数方式。DS18B20 的性能特点如下: ●独特的单线接口仅需要一个端口引脚进行通信,无须经过其它变换电路; ●多个 DS18B20 可以并联在惟一的三线上,实现多点组网功能; ●内含 64 位经过激光修正的只读存储器 ROM; ●可通过数据线供电,内含寄生电源,电压范围为 3.0~5.5V; ●零待机功耗; ●温度以9或12位数字; ●负电压特性,电源极性接反时,温度计不会因发热而烧毁,但不能正常工作; ●测温范围为-55℃-+125℃,测量分辨率为 0.0625℃ ①采用单总线专用技术,DS18B20 采用3脚 PR-35 封装或8脚 SOIC 封装,其内部结构 框图如图 2 所示。

图 2 DS18B20 内部结构

64 位 ROM 的结构开始8位是产品类型的编号,接着是每个器件的惟一的序号,共有 48 位,最后8位是前面 56 位的 CRC 检验码,这也是多个 DS18B20 可以采用一线进行通 信的原因。温度报警触发器TH和TL,可通过软件写入用户报警上下限。 DS18B20 温度传感器的内部存储器还包括一个高速暂存 RAM 和一个非易失性的可电 擦除的 EERAM。高速暂存 RAM 的结构为8字节的存储器,结构如图 3 所示。头2个字 节包含测得的温度信息,第3和第4字节TH和TL的拷贝,是易失的,每次上电复位时 被刷新。 第5个字节, 为配置寄存器, 它的内容用于确定温度值的数字转换分辨率。 DS18B20 工作时寄存器中的分辨率转换为相应精度的温度数值。该字节各位的定义如图 3 所示。低 5位一直为1,TM是工作模式位,用于设置 DS18B20 在工作模式还是在测试模式, DS18B20 出厂时该位被设置为0,用户要去改动,R1 和 R0 决定温度转换的精度位数,来 设置分辨率。

第 4 页

温度

LSB

温度 MSB TH 用户字节 1 TL 用户字节 2 配置寄存器 保留 保留 保留 CRC

.

.

TM R1 R0
.

1

1

1

1

1
.

图 3 DS18B20 字节定义

由下面表 1 可见,DS18B20 温度转换的时间比较长,而且分辨率越高,所需要的温度 数据转换时间越长。因此,在实际应用中要将分辨率和转换时间权衡考虑。 高速暂存RAM的第6、7、8字节保留未用,表现为全逻辑1。第9字节读出前面 所有8字节的 CRC 码,可用来检验数据,从而保证通信数据的正确性。 DS18B20 接收到温度转换命令后,开始启动转换。转换完成后的温度值就以 16 位带 符号扩展的二进制补码形式存储在高速暂存存储器的第1、2字节。单片机可以通过单线 接口读出该数据,读数据时低位在先,高位在后,数据格式以 0.0625℃ /LSB 形式表示。 当符号位S=0时,表示测得的温度值为正值,可以直接将二进制位转换为十进制; 当符号位S=1时,表示测得的温度值为负值,要先将补码变成原码,再计算十进制数值。 . 表 2 是一部分温度值对应的二进制温度数据。 .

.

R1 R0 0 0 0 1 1 0 1 1

分辨 率/位 温度 最大 转向时 间/ms 9 93.75 10 187.5 11 375 12 750

.

表 1 DS18B20 温度转换时间表

DS18B20 完成温度转换后, 就把测得的温度值与 RAM 中的 TH、 TL字节内容作比较。 若T>TH 或 T<TL,则将该器件内的报警标志位置位,并对主机发出的报警搜索命令作 出响应。因此,可用多只 DS18B20 同时测量温度并进行报警搜索。 在 64 位 ROM 的最高有效字节中存储有循环冗余检验码(CRC) 。主机 ROM 的前 56 位来计算 CRC 值,并和存入 DS18B20 的 CRC 值作比较,以判断主机收到的 ROM 数据是 否正确。 DS18B20 的测温原理是这这样的,器件中低温度系数晶振的振荡频率受温度的影响很 小,用于产生固定频率的脉冲信号送给减法计数器 1;高温度系数晶振随温度变化其振荡 频率明显改变,所产生的信号作为减法计数器2的脉冲输入。器件中还有一个计数门,当 计数门打开时, DS18B20 就对低温度系数振荡器产生的时钟脉冲进行计数进而完成温度测
第 5 页

量。计数门的开启时间由高温度系数振荡器来决定,每次测量前,首先将- 55℃ 所对应的 一个基数分别置入减法计数器1、温度寄存器中,计数器1和温度寄存器被预置在- 55℃ 所对应的一个基数值。 减法计数器1对低温度系数晶振产生的脉冲信号进行减法计数,当减法计数器1的预 置值减到0时,温度寄存器的值将加 1,减法计数器1的预置将重新被装入,减法计数器 1重新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到减法计数器计数到 0时,停止温度寄存器的累加,此时温度寄存器中的数值就是所测温度值。其输出用于修 正减法计数器的预置值,只要计数器门仍未关闭就重复上述过程,直到温度寄存器值大致 被测温度值。 2.3 系统整体硬件电路设计
2.3.1 主板电路

系统整体硬件电路包括,传感器数据采集电路,温度显示电路,上下限报警调整电路, 单片机主板电路等,单片机主板电路如图 5 所示:

图5 单片机主板电路

图 5 中包括时钟振荡电路和按键复位电路,按键复位电路是上电复位加手动复位,使 用比较方便,同时 LED 数码管将没有被测温度值显示,这时可以调整报警上下限,从而测 出被测的温度值。
2.3.2 显示电路

显示电路是使用的串口显示,这种显示最大的优点就是使用口资源比较少,只用 P0 和 P2 口,串口的发送和接收,采用 4 位共阴 LED 数码管,从 P0 口输出段码,P2.4—P2.7
第 6 页

作片选端。但在焊电路板的时候发现数码管亮度不够,所以在 P2.4—P2.7 端口接四个 10K 的电阻,期望增加驱动电流,以使数码管高亮显示。

图6温度显示电路

原理框图

第 7 页

3系统软件设计 系统程序主要包括主程序,读出温度子程序,温度转换命令子程序,计算温度子程序, 显示数据刷新子程序等。
DQ 置 1

初始化

短延时 DQ 置 0 延时 450us DQ 置 1

发跳过 ROM 指 令 开始温度转换 延时 2ms

初始化

延时 15-60us

写 入 跳 过 ROM 、读 取暂 存器和 CRC 字 节指令 读取温度的低 八位和高八位 取中间八位

X=DQ 延 时 至 少 60us X=~DQ 结束

结束

图 7 初始化流程图

图 8 读温度程序流程图

仿真图 第 8 页

附录 1

PCB 版图

第 9 页

附录 2
元件清单:
单片机 STC89C52RC:1 个 40 引脚底座:1 个 DS18B20:1 个 电阻:1k 1 个; 10K 1 个; 100 欧 8 个 排阻:1k 1 个 电容:极性电容 10uf 1 个; 瓷片电容 30pf 2 个 按键:1 个 晶振:12M 1 个 四位一体共阴数码管:1 个 USB 母头:1 个

附录 3
程序
源程序代码: #include "reg51.h" #include "intrins.h" //_nop_();延时函数用 #define Disdata P0 //段码输出口 #define discan P2 //扫描口 #define uchar unsigned char #define uint unsigned int sbit DQ=P3^1; //温度输入口 sbit DIN=P0^7; //LED 小数点控制 uint h; uchar flag; //**************温度小数部分用查表法***********// uchar code ditab[]= {0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x04,0x05,0x06,0x06,0x07,0x08,0x08,0x09,0 x09}; // uchar code dis_7[]={0X3F,0X06,0X5B,0X4F,0X66,0X6D,0X7D,0X07,0X7F,0X6F,0X00,0x40}; //共阴 LED 段码表 "0" "1" "2" "3" "4" "5" "6" "7" "8" "9" "不亮 " "-" uchar code scan_con[4]={0x7f,0xbf,0xdf,0xef}; //列扫描控制字 uchar data temp_data[2]={0x00,0x00}; //读出温度暂放 uchar data display[5]={0x00,0x00,0x00,0x00,0x00}; //显示单元数据,共 4 个数
第 10 页

据和一个运算暂用 // /***********11 微秒延时函数**********/ // void delay(uint t) { for(;t>0;t--); } // /***********显示扫描函数**********/ scan() { char k; for(k=0;k<4;k++) //四位 LED 扫描控制 { Disdata=0xff; Disdata=dis_7[display[k]]; if(k==1){DIN=1;} discan=scan_con[k];delay(90); discan=0xff; } } // /***********18B20 复位函数**********/ ow_reset(void) { char presence=1; while(presence) { while(presence) { DQ=1;_nop_();_nop_(); DQ=0; // delay(50); // 550us DQ=1; // delay(6); // 66us presence=DQ; // presence=0 继续下一步 } delay(45); //延时 500us presence = ~DQ; } DQ=1;} //
第 11 页

/**********18B20 写命令函数*********/ //向 1-WIRE 总线上写一个字节 void write_byte(uchar val) { uchar i; for (i=8; i>0; i--) // { DQ=1;_nop_();_nop_(); DQ = 0;_nop_();_nop_();_nop_();_nop_();_nop_();//5us DQ = val&0x01; //最低位移出 delay(6); //66us val=val/2; //右移一位 } DQ = 1; delay(1); } // /*********18B20 读 1 个字节函数********/ //从总线上读取一个字节 uchar read_byte(void) { uchar i; uchar value = 0; for (i=8;i>0;i--) { DQ=1;_nop_();_nop_(); value>>=1; DQ = 0; // _nop_();_nop_();_nop_();_nop_(); //4us DQ = 1;_nop_();_nop_();_nop_();_nop_(); //4us if(DQ)value|=0x80; delay(6); //66us } DQ=1; return(value); } // /***********读出温度函数**********/ // read_temp() { ow_reset(); //总线复位 write_byte(0xCC); // 发 Skip ROM 命令 write_byte(0xBE); // 发读命令
第 12 页

temp_data[0]=read_byte(); //温度低 8 位 temp_data[1]=read_byte(); //温度高 8 位 ow_reset(); write_byte(0xCC); // Skip ROM write_byte(0x44); // 发转换命令 } // /***********温度数据处理函数**********/ void work_temp() { uchar n=0; uchar doth,dotl; uchar flag3=1,flag2=1; //数字显示修正标记 if((temp_data[1]&0xf8)!=0x00) { temp_data[1]=~(temp_data[1]); temp_data[0]=~(temp_data[0])+1; n=1; flag=1; }//负温度求补码 if(temp_data[0]>255) { temp_data[1]++; } display[4]=temp_data[0]&0x0f; display[0]=ditab[display[4]]; doth=display[0]/10; dotl=display[0]%10; display[4]=((temp_data[0]&0xf0)>>4)|((temp_data[1]&0x07)<<4); display[3]=display[4]/100; display[2]=display[4]/10%10; display[1]=display[4]%10; if(!display[3]) { display[3]=0x0a; flag3=0; if(!display[2]) { display[2]=0x0a; flag2=0; } }//最高位为 0 时都不显示 if(n) {
第 13 页

display[3]=0x0b;//负温度时最高位显示"-" flag3=0; } } // /**************主函数****************/ main() { Disdata=0xff; //初始化端口 discan=0xff; for(h=0;h<4;h++){display[h]=8;}//开机显示 8888 ow_reset(); // 开机先转换一次 write_byte(0xCC); // Skip ROM write_byte(0x44); // 发转换命令 for(h=0;h<500;h++) {scan();} //开机显示"8888"2 秒 while(1) { read_temp(); //读出 18B20 温度数据 work_temp(); //处理温度数据 scan(); } } //显示温度值 2 秒

第 14 页

参考文献
[1] DS18b20 数据手册。 [2] 求是科技编著 8051 系列单片机 C 程序设计完全手册北京: 人民邮电出版社, 2006 [3] 余发山,王福忠.单片机原理及应用技术.徐州:中国矿业大学出版社,2003

第 15 页


相关文章:
温度计实习报告
温度计实习报告_电子/电路_工程科技_专业资料。基于汇编语言的温度计论文 单片机原理与应用技术 课程设计报告(论文) 数字式温度计 专业班级:电气姓时名:肖鹏 121 ...
模电课程设计报告(简易数字温度计)
模电课程设计报告(简易数字温度计)_工学_高等教育_教育专区。课程设计说明书 课程...相互之间的讨论帮助,莫说精益求精、从实践中获取更多的知识,完成基 本的任务...
数字温度计课程设计报告
数字温度计课程设计报告_工学_高等教育_教育专区。课程设计报告书课程名称:单片机课程设计 题系目:数字温度计 别:电子工程系 专业班级:电信 1103 班组学员:张春良 ...
数字温度计设计报告
数字温度计设计报告_电子/电路_工程科技_专业资料。考试序号:11 数字温度计设计...二、设计任务与要求 通过课程设计的教学实践,进一步学习、掌握单片机应用系统的 ...
DS18B20数字温度计设计实验报告_图文
单片机原理及应用课程设计报告书题 目: DS18B20 数字温度计 赵晓磊 段石磊 付...不仅将课 本的知识与实践相结合, 而且在实践中更加深入了解书中原本抽象的知识...
单片机课程设计数字温度计
单片机课程设计数字温度计_信息与通信_工程科技_专业资料。单片机课程设计 ...习环节,它包括选择课设任务、软件设计,硬件设计,调试和编写课 设报告实践内容...
数字温度计实验报告
工程设计课程报告 数字温度计设计和制作 姓名: 学号: 2012 年 6 月 28 日...工程设计方 法,开发及设计工具的使用方法,通过这一设计实践过程,锻炼自己的动手...
数显温度计实验报告
学习环节,它包括选择课设任务、软件设计,硬 件设计,调试和编写课设报告实践...利用 DS18B20 数字式温度传感器和微机实验平台实现数字温度计。 学习并掌握单片机...
单片机课程设计报告-数字温度计
单片机课程设计报告-数字温度计_工学_高等教育_教育专区。单片机课程设计报告 ...在此次课程设计中,我不仅仅加深了对单片机的理解,将理论知 识应用到了实践中,...
DS18B20数字温度计设计实验报告
基于DS18B20设计的数字温度计单片机原理及应用课程设计报告书题 姓学目: 名: ...不仅将课 本的知识与实践相结合, 而且在实践中更加深入了解书中原本抽象的知识...
更多相关标签: