DS18B20温度传感器课程设计报告 - 图文

更新时间:2024-04-29 23:08:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

单片机课程设计报告

设计题目: DS18B20温度传感器 班 级: 09电信(2)班 姓 名: xxx 学 号: xxx 指导教师: xxx 调试地点: xxx

目 录

一、概述 .......................................................................................................................................... 3 二、内容 .......................................................................................................................................... 3

1、课程设计题目..................................................................................................................... 3 2、课程设计目的..................................................................................................................... 3 3、设计任务和要求................................................................................................................. 3 4、正文..................................................................................................................................... 4

(一)、方案选择与论证 ................................................................................................. 4

三、系统的具体设计与实现........................................................................................................... 6

(1)、系统的总体设计方案 ................................................................................................... 6 (2)、硬件电路设计 ............................................................................................................... 6

a、单片机控制模块 ......................................................................................................... 6 b、温度传感器模块 ........................................................................................................ 7

四、软件设计 ................................................................................................................................ 13

1、 主程序......................................................................................................................... 13 2、 读出温度子程序 ......................................................................................................... 13 3、 温度转换命令子程序 ................................................................................................. 13 4、计算温度子程序............................................................................................................... 14 五、完整程序如下: .................................................................................................................... 14 六、设计体会 ................................................................................................................................ 19 七、参考文献 ................................................................................................................................ 20

一、概述

2009年6月14日随着时代的进步和发展,单片机技术已经普及到我们生活、工作、科研、各个领域,已经成为一种比较成熟的技术。

本文主要介绍了一个基于89S51单片机的测温系统,详细描述了利用液晶显示器件传感器DS18B20开发测温系统的过程,重点对传感器在单片机下的硬件连接,软件编程以及各模块系统流程进行了详尽分析,特别是数字温度传感DS18B20的数据采集过程。对各部分的电路也一一进行了介绍,该系统可以方便的实现实现温度采集和显示,并可根据需要任意设定上下限报警温度,它使用起来相当方便,具有精度高、量程宽、灵敏度高、体积小、功耗低等优点,适合于我们日常生活和工、农业生产中的温度测量,也可以当作温度处理模块嵌入其它系统中,作为其他主系统的辅助扩展。DS18B20与AT89C51结合实现最简温度检测系统,该系统结构简单,抗干扰能力强,适合于恶劣环境下进行现场温度测量,有广泛的应用前景。

关键词: 单片机AT89C51、DS18B20温度传感器、液晶显示LCD1602。 二、内容

1、课程设计题目

基于DS18B20的温度传感器 2、课程设计目的

通过基于MCS-51系列单片机AT89C51和DS18B20温度传感器检测温度,熟悉芯片的使用,温度传感器的功能,数码显示管的使用,汇编语言的设计;并且把我们这一年所学的数字和模拟电子技术、检测技术、单片机应用等知识,通过理论联系实际,从题目分析、电路设计调试、程序编制调试到传感器的选定等这一完整的实验过程,培养了学生正确的设计思想,使学生充分发挥主观能动性,去独立解决实际问题,以达到提升学生的综合能力、动手能力、文献资料查阅能力的作用,为毕业设计和以后工作打下一个良好的基础。

3、设计任务和要求

以MCS-51系列单片机为核心器件,组成一个数字温度计,采用数字温度传感器DS18B20为检测器件,进行单点温度检测,检测精度为±0.5摄氏度。温度显示采用LCD1602显示,两位整数,一位小数。

系统总体仿真图

板上实现效果图 4、正文 (一)、方案选择与论证 根据设计任务的总体要求,本系统可以划分为以下几个基本模块,针对各个模

块的功能要求,分别有以下一些不同的设计方案: (1)、温度传感模块

方案一:采用热敏电阻,热敏电阻精度、重复性、可靠性较差,对于检测1摄氏度的信号是不适用的,也不能满足测量范围。在温度测量系统中,也常采用单片温度传感器,比如AD590,LM35等。但这些芯片输出的都是模拟信号,必须经过A/D转换后才能送给计算机,这样就使测温系统的硬件结构较复杂。另外,这种测温系统难以实现多点测温,也要用到复杂的算法,一定程度上也增加了软件实现的难度。

方案二:采用单总线数字温度传感器DS18B20测量温度,直接输出数字信号。便于单片机处理及控制,节省硬件电路。且该芯片的物理化学性很稳定,此元件线形性能好,在0—100摄氏度时,最大线形偏差小于1摄氏度。DS18B20的最大特点之一采用了单总线的数据传输,由数字温度计DS18B20和微控制器AT89C51构成的温度装置,它直接输出温度的数字信号到微控制器。每只DS18B20具有一个独有的不可修改的64位序列号,根据序列号可访问不同的器件。这样一条总线上可挂接多个DS18B20传感器,实现多点温度测量,轻松的组建传感网络。

综上分析,我们选用第二种方案。

温度传感模块仿真图 (2)、显示模块

方案一:采用8位段数码管,将单片机得到的数据通过数码管显示出来。该方案简单易行,但所需的元件较多,且不容易进行操作,可读性差,一旦设定后很难再加入其他的功能,显示格式受限制,且大耗电量大,不宜用电池给系统供电。

方案二:采用液晶显示器件,液晶显示平稳、省电、美观,更容易实现题目要求,对后续的园艺通兼容性高,只需将软件作修改即可,可操作性强,也易于读数,采用RT1602两行十六个字符的显示,能同时显示其它的信息如日期、时间、星期、温度。

综上分析,我们采用了第二个方案

void w_dat(uint8 dat) {

wait(); EN = 0; P0 = dat; RS = 1; RW = 0; EN = 1; EN = 0; }

写命令

void w_cmd(uint8 cmd) {

wait(); EN = 0; P0 = cmd; RS = 0; RW = 0; EN = 1; EN = 0; }

发送字符串到LCD

void w_string(uint8 addr_start, uint8 *p) {

w_cmd(addr_start); while (*p != '\\0') { w_dat(*p++); } }

初始化1602

void Init_LCD1602(void) {

w_cmd(0x38); // 16*2显示,5*7点阵,8位数据接口 w_cmd(0x0c); // 显示器开、光标开、光标允许闪烁 w_cmd(0x06); // 文字不动,光标自动右移 w_cmd(0x01); // 清屏 }

uchar Reset()//完成单总线的复位操作。 {

uchar d;

DQ = 0; // 将 DQ 线拉低

Delayus(29); // 保持 480μs .复位时间为480μs,因此延时时间为(480-24)/16 = 28.5,取29μs。

DQ = 1; // DQ返回高电平

Delayus(3); // 等待存在脉冲.经过70μs之后检测存在脉冲,因此延时时间为(70-24)/16 = 2.875,取3μs。 d = DQ; // 获得存在信号 Delayus(25); // 等待时间隙结束

return(d); // 返回存在信号,0 = 器件存在, 1 = 无器件 }

void write_bit(uchar bitval)//向单总线写入1位值:bitval {

DQ = 0; // 将DQ 拉低开始写时间隙 if(bitval==1)

DQ =1; // 如果写1,DQ 返回高电平 Delayus(5);// 在时间隙内保持电平值,

DQ = 1; // Delayus函数每次循环延时16μs,因此Delayus(5)=5*16+24=104μs }

void ds18write_byte(char val)//向单总线写入一个字节值:val {

uchar i; uchar temp;

for (i=0; i<8; i++)// 写入字节, 每次写入一位 {

temp = val>>i; temp &= 0x01; write_bit(temp); }

Delayus(5); }

uchar read_bit()//从单总线上读取一位信号,所需延时时间为15μs,因此无法调用前面定义 { //的Delayus()函数,而采用一个for()循环来实现延时。 uchar i;

DQ = 0; //将DQ 拉低开始读时间隙 DQ = 1; // 然后返回高电平 for (i=0; i<3; i++); // 延时15μs return(DQ); // 返回 DQ 线上的电平值 }

uchar ds18read_byte()//从单总线读取一个字节的值 {

uchar i;

uchar value = 0; for (i=0;i<8;i++) { // 读取字节,每次读取一个字节

if(read_bit())

value|=0x01<

return(value); }

int Readtemperature()//如果单总线节点上只有一个器件则可以直接掉用本函数。如果节点上有多个器 { //件,为了避免数据冲突,应使用Match ROM函数来选中特定器件。

uchar temp_d,temp_g,k,get[2],temp; Reset();

ds18write_byte(0xcc); // 跳过 ROM ds18write_byte(0x44); // 启动温度转换 Delayus(5); Reset();

ds18write_byte(0xcc); // 跳过 ROM ds18write_byte(0xbe); // 读暂存器 for (k=0;k<2;k++) {

get[k]=ds18read_byte(); }

temp_d = get[0];//低位 temp_g = get[1];//高位

if((temp_g&0xf0)==0xf0) //正负号判断 {

temp_d=~temp_d;

if(temp_d==0xff) //保证-48(1111110100000000)、-32和-16显示正常 {

temp_d=temp_d+0x01;//00000000 temp_g=~temp_g;//00000010 temp_g=temp_g+0x01;//00000011 } else {

temp_d=temp_d+0x01;

temp_g=~temp_g; } w_cmd(0xc5);

w_dat(Xsw[temp_d&0x0f]); //查表得小数位的值 temp=((temp_d&0xf0)>>4)|((temp_g&0x0f)<<4); w_cmd(0xc1); w_dat(0x2d);//负号 }

else //正数 {

w_cmd(0xc5);

w_dat(Xsw[temp_d&0x0f]);//查表得小数位的值 temp=((temp_d&0xf0)>>4)|((temp_g&0x0f)<<4); w_cmd(0xc1);

w_dat(Bw[temp/100]); }

return temp; } main() {

Init_LCD1602();

w_string(0x80,word1); while (1) {

wendu=Readtemperature();

temp_g=wendu0/10+'0';//这里要特别注意啊少了0就差很多 temp_d=wendu+'0'; w_cmd(0xc2); delay(2);

w_dat(temp_g); delay(2);

w_dat(temp_d); delay(2);

w_cmd(0xc4); delay(2);

w_dat(0x2e);//小数点 delay(2);

w_cmd(0xc6); delay(2);

w_dat(0xdf);//温度符号 delay(2); w_dat(0x43); } }

六、设计体会

通过这次基于DS18B20传感器测量温度的设计,我学到了不少新的知识。首先,这次设计让我把书本上学到的理论知识转化成为现实生活中有价值的实物。如果没有这次设计为我 搭建的平台,我就不能对书本上的知识进行很好的理解,也不能熟练的把它们应用到现实生活中。还有,我们学会不能手高眼低,要踏踏实实,从基础学起、做起。但是,具体到设计时,我遇到了很多麻烦,比如如何将传感器得到的温度转换成为对应的电信号,如何将电信号输送到单片机进行控制,如何把测得的温度用数字显示出来等等。这就要求我们学习要一步一

个脚印,掌握扎实的理论基础了。最重要的一点是,我在这次设计中培养了自己的学习能力。由于好多知识超出了我们的课本范围,这就要求我们自己通过资料来增加我们的知识,解决遇到的一些问题。在短时间内从书本资料中筛选出我们所需要的知识,对我们的自主学习能力有很大的帮助。就拿DS18B20来说,我们书本上没有介绍到这种温度传感器,所以我们就通过学习DS18B20的说明书,了解它工作的原理以及特性,清楚在实际应用时要注意的事项,对DS18B20进行初始化、编程的要求和规定等。培养了自主学习的能力,无论以后我要做什么样的设计,我都能够通过查阅资料来实现。最后,本次设计能够顺利完成。 七、参考文献

【1】 梁森,欧阳三泰,王侃夫. 自动检测技术及应用【M】.北京:机械工业出版社.

【2】 万隆.单片机原理及应用技术教程 清华大学出版社.

【3】 李朝青.单片机原理及接口技术(简明修订版).杭州:北京航空航天大学出版社,

【4】 李广弟.单片机基础[M].北京:北京航空航天大学出版社. 【5】 康华光.数字电子技术基础(第四版). 北京:高等教育出版社.

本文来源:https://www.bwwdw.com/article/2ikg.html

Top