视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
DS18B20数字温度计的设计与实现
2025-10-02 19:11:00 责编:小OO
文档
摘要…………………………………………………………………………...I

第一章 绪论

1.1课题来源

20世纪80年代中期以后,Intel公司以专利转让的形式把8051内核技术转让给许多半导体芯片生产厂家,如ATMEL、PHILIPS、ANALOG、DEVICES、DALLAS等。这些厂家生产的芯片是MCS-51系列的兼容产品,准确地说是与MCS-51指令系统兼容的单片机。这些兼容机与8051的系统结构(主要是指令系统)相同,采用CMOS工艺,因而,常用80C51系列来称呼所有具有8051指令系统的单片机,它们对8051单片机一般都作了一些扩充,使其更有特点。其功能和市场竞争力更强,其实不该把它们直接称呼为MCS-51系列单片机,因为MCS只是Intel公司专用的单片机系列型号。MCS-51系列及80C51单片机有多种品种。它们的引脚及指令系统相互兼容,主要在内部结构上有些区别。目前使用的MCS-51系列单片机及其兼容产品通常分成以下几类:基本型、增强型、低功耗型、专用型、超8位型、片内闪烁存储器型。其中ATMEL公司的标准型AT单片机因其与MCS-51的完全兼容性、优良的工作性能、使用的灵活性以及较高的性能价格比,成为AT系列单片机的主流机型,在嵌入式控制系统中获得广泛应用。

众所周知,环境温度一直是生物能否较适宜生存的一个重要因素,而人们对环境温度的感知也从单纯的身体感官的感受发展到用各种温度计来对环境温度进行准确的测量。但是受限于技术等原因,温度计通常都有体积较大,精度不高等各种缺陷。而数字温度测量芯片的出现则解决了这些问题,其中的一款芯片DS18B20是DALLAS公司生产的1-Wire,即单总线器件,具有线路简单,体积小的特点。因此,用它来组成一个测温系统,具有线路简单,在一根通信线上可以挂载很多这样的数字温度芯片,十分方便。

美国Dallas半导体公司的数字化温度传感器DS1820[2]是世界上第一片支持 “一线总线”接口的温度传感器,在其内部使用了在板(ON-B0ARD)专利技术。全部传感元件及转换电路集成在形如一只三极管的集成电路内。“一线总线”独特而且经济的特点,使用户可轻松地组建传感器网络,为测量系统的构建引入全新概念。现在,新一代的DS18B20体积更小、更经济、更灵活。使你可以充分发挥“一线总线”的优点。 同DS1820一样,DS18B20也支持“一线总线”接口,测量温度范围为-55°C~+125°C,在-10~+85°C范围内,精度为±0.5°C。现场温度直接以“一线总线”的数字方式传输,大大提高了系统的抗干扰性。适合于恶劣环境的现场温度测量,如:环境控制、设备或过程控制、测温类消费电子产品等。与前一代产品不同,新的产品支持3V~5.5V的电压范围,使系统设计更灵活、方便。而且新一代产品更便宜,体积更小,这就为用最低的成本制作出用途更广,精度更高的便携带的数字温度计提供了可能。目前,国际上新型温度传感器正从模拟式向数字式,从集成化向智能化、网络化的方向飞速发展。

单片机自1976年由Intel公司推出MCS-48开始,迄今已有三十多年了。由于单片机集成度高、功能强、可靠性高、体积小、功耗低、使用方便、价格低廉等一系列优点,目前已经渗入到人们工作和生活的方方面面,几乎“无处不在,无所不为”。单片机的应用领域已从面向工业控制、通讯、交通、智能仪表等迅速发展到家用消费产品、办公自动化、汽车电子、PC机外围以及网络通讯等广大领域,对各个行业的技术改造和产品更新换代起着重要的推动作用。

单片机有两种基本结构形式:一种是在通用微型计算机中广泛采用的,将程序存储器和数据存储器合用一个存储器空间的结构,称为普林斯顿结构。另一种是将程序存储器和数据存储器截然分开,分别寻址的结构,一般需要较大的程序存储器。目前的单片机以采用程序存储器和数据存储器截然分开的结构为多。

本设计讨论的单片机多功能定时器的核心是目前应用极为广泛的51系列单片机,配置了外围设备,构成了一个可编程的计时定时系统,具有体积小,可靠性高,功能强等特点。不仅能满足所需要求而且还有很多功能可供开发,有着广泛的应用领域。

1.2国内外现状及水平 

温度控制系统在国内各行各业的应用虽然已经十分广泛,但从国内生产的温度控制器来讲,总体发展水平仍然不高,同日本、美国、德国等先进国家相比,仍然有着较大的差距。成熟的温控产品主要以“点位”控制及常规的PID控制器为主,它们只能适应一般温度系统控制,而用于较高控制场合的智能化、自适应控制仪表,国内技术还不十分成熟,形成商品化并广泛应用的控制仪表较少。随着我国经济的发展及加入WTO,我国及企业对此都非常重视,对相关企业资源进行了重组,相继建立了一些国家、企业的研发中心,开展创新性研究,使我国仪表工业得到了迅速的发展。

随着国内外工艺的日益发展,温度检测技术也不断的进步,目前的温度检测使用的温度计种类繁多、应用范围也较广泛,大致包括一些几种方法:

(1) 利用物体热胀冷缩原理制成的温度计,包括玻璃温度计、双金属温度计、压力温度计等;

(2) 利用热电效应技术制成的温度检测元件;

利用此项技术制成的温度检测元件主要是热电偶。热电偶发展较早,比较成熟,至今仍未应用最广泛的检测元件。热电偶具有结构简单、制作方便、测量范围宽、精度高、热惯性小等特点。常用热电偶镍铬-镍硅、镍铬-康铜、铂铑-铂、铂锗30-铂锗6等;                               

(3) 利用热阻效应制成的温度计:可分为电阻测温元件、导体测温元件、陶瓷热敏测温元件;

(4) 利用热幅原理制成的高温计;

辐射测温在近年相对其他的测温领域显得活跃些,热辐射高温计通常分为两种:一种是单色辐射高温计,一般称为光学高温计;另一种是全辐射高温计,它的原理是物体受热辐射后,视物体本身的性质,能将其吸收、透过或反射。而受热物体放出的辐射能的多少,与他的温度有一定的关系。热辐射式高温计就是根据这种热辐射原理制成的。

(5) 利用声学原理进行温度测量;

声学法温度检测技术是近年来发展起来的一项新技术,利用该技术,可以对炉内的烟气温度测量值和火焰分布进行检测,判断炉的燃烧状况,进行实时调节和控制。声学温度检测技术的基本原理是通过测量声波传感器之间的声波传播时间以最小二乘原理重建温度的测量方法。

单片机是指一个集成在一块芯片上的完整计算机系统。尽管他的大部分功能集成在一块小芯片上,但是它具有一个完整计算机所需要的大部分部件:CPU、内存、内部和外部总线系统,目前大部分还会具有外存。同时集成诸如通讯接口、定时器,实时时钟等外围设备。而现在最强大的单片机系统甚至可以将声音、图像、网络、复杂的输入输出系统集成在一块芯片上。

单片机也被称为微控制器(Microcontroller),是因为它最早被用在工业控制领域。单片机由芯片内仅有CPU的专用处理器发展而来。最早的设计理念是通过将大量外围设备和CPU集成在一个芯片中,使计算机系统更小,更容易集成进复杂的而对体积要求严格的控制设备当中。INTEL的Z80是最早按照这种思想设计出的处理器,从此以后,单片机和专用处理器的发展便分道扬镳。

早期的单片机都是8位或4位的。其中最成功的是INTEL的8031,因为简单可靠而性能不错获得了很大的好评。此后在8031上发展出了MCS51系列单片机系统。基于这一系统的单片机系统直到现在还在广泛使用。随着工业控制领域要求的提高,开始出现了16位单片机,但因为性价比不理想并未得到很广泛的应用。90年代后随着消费电子产品大发展,单片机技术得到了巨大的提高。随着INTEL i960系列特别是后来的ARM系列的广泛应用,32位单片机迅速取代16位单片机的高端地位,并且进入主流市场。而传统的8位单片机的性能也得到了飞速提高,处理能力比起80年代提高了数百倍。目前,高端的32位单片机主频已经超过300MHz,性能直追90年代中期的专用处理器,而普通的型号出厂价格跌落至1美元,最高端的型号也只有10美元。当代单片机系统已经不再只在裸机环境下开发和使用,大量专用的嵌入式操作系统被广泛应用在全系列的单片机上。而在作为掌上电脑和手机核心处理的高端单片机甚至可以直接使用专用的Windows和Linux操作系统。

1.3 课题研究的目的意义

数字温度计与传统的温度计相比,具有读数方便,测温范围广,测温准确,其输出温度采用数字显示,主要用于对测温比较准确的场所,或科研实验室使用。

温度计是常用的热工仪表,常用于工业现场作为过程的温度测量。在工业生产过程中,不仅需要了解当前温度读数,而且还希望能了解过程中的温度变化情况。随着工业现代化的发展,对温度测量仪表的要求越来越高,而数字温度表具有结构简单,抗干扰能力强,功耗小,可靠性高,速度快等特点,更加适合于工业过程中以及科学试验中对温度进行在线测量的要求。

近年来,数字温度表广泛应用在各个领域,它与模拟式温度表相比较,归纳起来有如下特点。⑴准确度高,⑵测量范围宽、灵敏度高,⑶测量速度快,⑷使用方便、操作简单,⑸抗干扰能力强,⑹自动化程度高,⑺读数清晰、直观方便。

数字温度计的高速发展,使它已成为实现测量自动化、提高工作效率不可缺少的仪表。数字化是当前计量仪器仪表发展的主要方向之一。而高准确度数字温度计的出现,又使温度计进入了精密标准测量领域。与此相适应,测量的可靠性、准确性显得越来越重要。

1.4课题研究内容

本设计主要介绍了用单片机和数字温度传感器DS18B20相结合的方法来实现温度的采集,以单片机ATC51芯片为核心,辅以温度传感器DS18B20和LED数码管及必要的外围电路,构成了一个多功能单片机数字温度计。该装置适用于人民的日常生活和工、农业生产的温度测量与报警,实现对温度的监测。其主要研究内容包括两方面,一是对系统硬件部分的设计,包括温度采集电路和显示电路;二是对系统软件部分的设计,应用C语言实现温度的采集与显示。通过利用数字温度传感器DS18B20进行设计,能够满足实时检测温度的要求,同时通过LED数码管的显示功能,可以实现不间断的温度显示,并带有复位功能。

本次设计的主要思路是利用51系列单片机,数字温度传感器DS18B20和LED数码显示器,构成实现温度检测与显示的单片机控制系统,即数字温度计。通过对单片机编写相应的程序,达到能够实时检测周围温度的目的。

通过对本课题的设计能够熟悉数字温度计的工作原理及过程,了解各功能器件(单片机、DS18B20、LED)的基本原理与应用,掌握各部分电路的硬件连线与程序编写,最终完成对数字温度计的总体设计。根据实验要求实现测温范围在-55~125 oC,误差在±0.5 oC以内的LED数码管显示。

第二章 系统方案设计

2.1 设计任务和要求

本次课程设计课题是数字温度计的设计,设计任务为:

(1)根据设计要求,选用ATC51单片机为核心器件;

(2)温度检测器件采用DS18B20数字式温度传感器,利用单总线式连接方式与单片机的串行接口P0.0引脚相连;

(3)显示电路采用4个LED数码管显示器接P1口并行显示温度值,数码管由P3口(P3.0~P3.3)选通,动态显示。

(4)给出全部电路和源程序。

2.2  设计方案

根据系统的设计要求,选择DS18B20作为本系统的温度传感器,选择单片机ATC51为测控系统的核心来完成数据采集、处理、显示、报警等功能。选用数字温度传感器DS18B20,省却了采样/保持电路、运放、数/模转换电路以及进行长距离传输时的串/并转换电路,简化了电路,缩短了系统的工作时间,降低了系统的硬件成本。

该系统的总体设计思路如下:温度传感器DS18B20把所测得的温度发送到ATC51单片机上,经过51单片机处理,将把温度在显示电路上显示,本系统显示器用4位共阳LED数码管以动态扫描法实现。检测范围-55摄氏度到125摄氏度。

根据系统的设计要求,选择DS18B20作为本系统的温度传感器,选择单片机ATC51为测控系统的核心来完成数据采集、处理、显示、报警等功能。选用数字温度传感器DS18B20,省却了采样/保持电路、运放、数/模转换电路以及进行长距离传输时的串/并转换电路,简化了电路,缩短了系统的工作时间,降低了系统的硬件成本。

该系统的总体设计思路如下:温度传感器DS18B20把所测得的温度发送到ATC51单片机上,经过51单片机处理,将把温度在显示电路上显示,本系统显示器用4位共阳LED数码管以动态扫描法实现。检测范围-55摄氏度到125摄氏度。

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

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

          

图2.1  数字温度计总体电路结构框图

第三章 电路设计

3.1 ATC51介绍

单片机ATC51是一种带4K字节闪烁可编程可擦除只读存储器的低电压,高性能CMOS8位微处理器,如图3.1所示。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的ATC51是一种高效微控制器,为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。ATC51的主要特性介绍:

与MCS-51 兼容; 

4K字节可编程FLASH存储器; 

寿命:1000写/擦循环; 

数据保留时间:10年; 

全静态工作:0Hz-24MHz; 

三级程序存储器锁定; 

128×8位内部RAM;32可编程I/O线;

两个16位定时器/计数器;有5个中断源; 

可编程串行通道;具有低功耗的闲置和掉电模式; 

具有片内振荡器和时钟电路;

图3.1  ATC51

3.2 单片机最小系统

单片机最小系统是内部时钟接引脚XTAL1和XTAL2,采用18KHz的晶振CRYSTAL,用两个30pF的电容进行稳压;复位电路接引脚RST,用一个6.8K的电阻作上拉电阻,10μF的电容过滤干扰信号,分别如图3.2和图3.3所示:

图3.2  内部时钟电路

RST

图3.3  上电复位电路

3.3 LED显示电路

显示电路采用4位共阳LED数码管,从P0口输出段码,列扫描用P3.0~P3.3口来实现,P0口上拉电阻为R×8集成电阻,P3串口上拉电阻为10WATT1K电阻,列驱动用MPSA65三极管,如图3.4所示。

图3.4  LED显示电路

3.4 DS18B20温度传感器介绍

DS18B20温度传感器是美国DALLAS半导体公司推出的第一片支持“一线总线”接口的温度传感器,它具有微型化、低功耗、高性能、抗干扰能力强、易配微处理器等优点,可直接将温度转化成串行数字信号供处理器处理。

DS18B20 的性能特点如下:

●独特的单线接口方式仅需要一个端口引脚进行通信;

●多个DS18B20可以并联在唯一的三线上,实现多点组网功能;

●无需外部器件;

●可通过数据线供电,电压范围:3.0~5.5V;

●测温范围-55℃~+125℃,在-10~+85℃时精度为±0.5℃

●零待机功耗

●温度以9或12位数字量读出;

●用户可定义的非易失性温度报警设置;

●报警搜索命令识别并标志超过程序限定温度(温度报警条件)的器件;

●负电压特性,电源极性接反时,温度计不会因发热而烧毁,但不能正常工作

DS18B20结构特点。

它采用3脚PR-35 封装或8脚SOIC封装,其内部结构框图如图3.5所示:

图3.5  DS18B20内部结构框图

 b闪速ROM的结构如下:

8bit检验CRC

48bit序列号

8bit工厂代码(10H)

MSB      LSB  MSB       LSB   MSB            LSB

开始8位是产品类型的编号,接着是每个器件的惟一的序号,共有48 位,最后8位是前面56 位的CRC 检验码,这也是多个DS18B20 可以采用一线进行通信的原因。温度报警触发器TH和TL,可通过软件写入户报警上下限。主机操作ROM的命令有五种,如表3.1所列:

指  令

说  明

读ROM(33H)

读DS1820的序列号

匹配ROM(55H)

继读完位序列号的一个命令,用于多个DS1820时定位

跳过ROM(CCH)

此命令执行后的存储器操作将针对在线的所有DS1820

搜ROM(F0H)

识别总线上各器件的编码,为操作各器件作好准备
报警搜索(ECH)

仅温度越限的器件对此命令作出响应
     表3.1  主机操作ROM的命令                    

DS18B20 温度传感器的内部存储器还包括一个高速暂存RAM和一个非易失性的可电擦除的E2PRAM。高速暂存RAM 的结构为8字节的存储器,结构如表3.2所示。 

Byte0 温度测量值LSB(50H)

Byte1温度测量值MSB(50H)

E2PRAM

Byte2TH高温寄存器

TH高温寄存器

Byte3TL低温寄存器

TL低温寄存器

Byte4配位寄存器配位寄存器
Byte5预留(FFH)

Byte6预留(0CH)

Byte7预留(10H)

Byte8循环冗余码校验(CRC)

                            表3.2  高速暂存RAM结构图

前2个字节包含测得的温度信息,第3和第4字节TH和TL的拷贝,是易失的,每次上电复位时被刷新。第5个字节,为配置寄存器,它的内容用于确定温度值的数字转换分辨率。DS18B20工作时寄存器中的分辨率转换为相应精度的温度数值。

温度低位LSB

温度高位MSB    

THTL配置保留保留保留8位CRC

当DS18B20接收到温度转换命令后,开始启动转换。转换完成后的温度值就以16位带符号扩展的二进制补码形式存储在高速暂存存储器的第1,2字节。单片机可通过单线接口读到该数据,读取时低位在前,高位在后,数据格式以0.062 5 ℃/LSB形式表示。温度值格式如下: 

23    

22  

21

20

2-1

2-2

2-3

2-4

MSB                                    LSB

S  S  S  S  S  26 

25 

24 

MSB                                    LSB

这是12位转化后得到的12位数据,存储在18B20的两个8比特的RAM中,二进制中的前面5位是符号位,如果测得的温度大于0,这5位为0,只要将测到的数值乘于0.0625即可得到实际温度,以+25.0625为例,它的十六进制表示为0191H,转换为十进制为401D,那么401×0.0625=25.0625;如果温度小于0,这5位为1,测到的数值需要取反加1再乘于0.0625即可得到实际温度。图中,S表示位。对应的温度计算:当符号位S=0时,表示测得的温度植为正值,直接将二进制位转换为十进制;当S=1时,表示测得的温度植为负值,先将补码变换为原码,再计算十进制值。例如+125℃的数字输出为07D0H,+25.0625℃的数字输出为0191H,-25.0625℃的数字输出为FF6FH,-55℃的数字输出为FC90H。

DS18B20温度传感器主要用于对温度进行测量,数据可用16位符号扩展的二进制补码读数形式提供,并以0.0625℃/LSB形式表示。表3.3是部分温度值对应的二进制温度表示数据。

温度/℃

二进制表示十六进制表示
+12500000111  1101000007D0H
+25.062500000001  100100010191H
+0.500000000  000010000008H
000000000  000000000000H
-0.511111111  11111000FFF8H
-25.062511111110  01101111FE6FH
-5511111100  10010000FC90H
表2.3  部分温度值

DS18B20完成温度转换后,就把测得的温度值与RAM中的TH、TL字节内容作比较,若T>TH或T在位ROM的最高有效字节中存储有循环冗余校验码(CRC)。主机根据ROM的前 56位来计算CRC值,并和存入DS18B20中的CRC值做比较,以判断主机收到的ROM数 据是否正确。 

DS18B20测温原理:

DS18B20的测温原理如图2.6所示,图中低温度系数晶振的振荡频率受温度的影响很小用于产生固定频率的脉冲信号送给减法计数器1,高温度系数晶振随温度变化其震荡频率明显改变,所产生的信号作为减法计数器2的脉冲输入,图中还隐含着计数门,当计数门打开时,DS18B20就对低温度系数振荡器产生的时钟脉冲后进行计数,进而完成温度测量.计数门的开启时间由高温度系数振荡器来决定,每次测量前,首先将-55 ℃所对应的基数分别置入减法计数器1和温度寄存器中,减法计数器1和温度寄存器被预置在-55 ℃所对应的一个基数值。

减法计数器1对低温度系数晶振产生的脉冲信号进行减法计数,当减法计数器1的预置值减到0时温度寄存器的值将加1,减法计数器 1的预置将重新被装入,减法计数器1重新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到减法计数器2计数到0时,停止温度寄存器值的累加,此时温度寄存器中的数值即为所测温图3.6中的斜率累加器用于补偿和修正测温过程中的非线性其输出用,于修正减法计数器的预置值,只要计数门仍未关闭就重复上述过程,直至温度寄存器值达到被测温度值,这就是DS18B20的测温原理。

图3.6  DS18B20测温原理图

在正常测温情况下,DS1820的测温分辨力为0.5℃,可采用下述方法获得高分辨率的温度测量结果:首先用DS1820提供的读暂存器指令(BEH)读出以0.5℃为分辨率的温度测量结果,然后切去测量结果中的最低有效位(LSB),得到所测实际温度的整数部分Tz,然后再用BEH指令取计数器1的计数剩余值Cs和每度计数值CD。考虑到DS1820测量温度的整数部分以0.25℃、0.75℃为进位界限的关系,实际温度Ts可用下式计算:Ts=(Tz-0.25℃)+(CD-Cs)/CD

3.5 温度传感器DS18B20与单片机的连接

DS18B20的DQ引脚与单片机的P3.7口连接,采用外部电源供电方式,如图2.7所示。P3口是一个带内部上拉电阻的8位双向I/O口,其输出缓冲器可驱动(吸收或输出电流4个TTL逻辑门电路。对该端口写“1”即在指令中安排一条SETB P3.7指令,可通过内部上拉电阻将该端口拉至高电平,此时该端口可做输入口使用。

图3.7 测温电路

P3.7

3.6 过温报警电路

用MPSA65三极管做位驱动,CONN-SIL2规格的蜂鸣器和红色LED灯作报警提示。

P1.3

图3.8  过温报警电路

第四章 程序设计

4.1 温度采集DS18B20部分程序设计分析

由于DS18B20单线通信功能是分时完成的,它有严格的时隙概念,因此读写时序很重要。系统对DS18B20的一般操作过程为:初始化DS18B20(发复位脉冲)→发ROM功能命令→发存储器操作命令→处理数据。

初始化:单片机将数据线拉低480-960us后释放,等待15-60us,单总线器件即可输出一个持续时间为60-240us的低电平(应答信号),单片机收到此应答后即可进行后续操作;

写时序:当主机将数据线的电平从高拉到低时,形成写时序,有写0和写1两种时序。写时序开始后,DS18B20在15-60us期间从数据线上采样,如果采样到低电平,则向DS18B20写0,否则写1,两个的时序之间至少需要1us的回复时间按(拉高总线电平);

读时序:当主机从DS18B20读取数据时,产生读时序,此时,主机将数据线的电平从高拉到低使读时序被初始化。如果此后15us内,主机在总线上采样到低电平,则从DS18B20读0,否则读1。

4.2 各部分程序设计及其程序流程图

系统程序主要包括主程序,读出温度子程序,温度转换命令子程序,计算温度子程序,报警子程序和显示数据刷新子程序等。

(1)主程序:主程序的主要功能是负责温度的实时显示,读出并处理DS18B20的测量温度值。温度测量每1s进行一次。主程序流程图如图4.1所示。

(2)读出温度子程序:读出温度子程的主要功能是读出RAM中的9字节。在读出时须进行CRC校验,校验有错时不能进行温度数据的改写。读出温度子程序流程图如图4.2所示。

(3)温度转换命令子程序:温度转换命令子程序主要是发温度转换开始命令。当采用12位分辨率时,转换时间约为750 ms。在本程序设计中,采用1s显示程序延时法等待转换的完成。温度转换命令子程序流程图如图4.3所示。

(4)计算温度子程序:计算温度子程序将RAM中读取的值进行十进制的转换运算,并进行温度值正负的判断。其流程图如图4.4所示。

(5)显示数据刷新子程序:显示数据刷新子程序主要是对显示缓冲器中的显示数据进行刷新操作,当最高数据显示位为0时,将符号显示位移入下一位。显示数据刷新子程序流程图如图4.5所示。

图4.1  主程序流程图

图4.2  读温度子程序

图3.3   温度转换命令子程序流程图

    

图4.4  计算温度子程序

第五章 系统仿真

5.1 Proteus简介

Proteus软件是一种低投资的电子设计自动化软件,提供可仿真数字和模拟、交流和直流等数千种元器件和多达30多个元件库。Proteus软件提供多种现实存在的虚拟仪器仪表。此外,Proteus还提供图形显示功能,可以将线路上变化的信号,以图形的方式实时地显示出来。这些虚拟仪器仪表具有理想的参数指标,例如极高的输入阻抗、极低的输出阻抗,尽可能减少仪器对测量结果的影响,Proteus软件提供丰富的测试信号用于电路的测试。这些测试信号包括模拟信号和数字信号。提供Schematic Drawing、SPICE仿真与PCB设计功能,同时可以仿真单片机和周边设备,可以仿真51系列、AVR、PIC等常用的MCU,并提供周边设备的仿真,例如373、led、示波器等。

Proteus提供了大量的元件库,有RAM、ROM、键盘、马达、LED、LCD、AD/DA、部分SPI器件、部分IIC器件,编译方面支持Keil和MPLAB等编译器。一台计算机、一套电子仿真软件,在加上一本虚拟实验教程,就可相当于一个设备先进的实验室。以虚代实、以软代硬,就建立一个完善的虚拟实验室。在计算机上学习电工基础,模拟电路、数字电路、单片机应用系统等课程,并进行电路设计、仿真、调试等。

该软件实现了单片机仿真和SPICE电路仿结合,具有模拟电路仿真、数字电路仿真、各种单片机(51系列、AVR、PIG等常用的MCU)及其外围电路(如LCD、RAM、ROM、键盘、LED、A/D、D/A……)组成的系统仿真。提供了多种虚拟仪器。如示波器、逻辑分析仪、信号发生器等,调试非常方便。提供软件调试功能,同时支持第三方的软件编译和调试环境,如Keil等软件。具有强大的原理图绘制功能。Proteus与其它单片机仿真软件不同的是,它不仅能仿真单片机CPU的工作情况,也能仿真单片机外围电路或没有单片机参与的其它电路的工作情况。因此在仿真和程序调试时,关心的不再是某些语句执行时单片机寄存器和存储器内容的改变,而是从工程的角度直接看程序运行和电路工作的过程和结果。对于这样的仿真实验.从某种意义上讲,是弥补了.实验和工程应用阉脱节的矛盾和现象。同时,当硬件调试成功后,利用Proteus ARES软件,很容易获得其PCB图,为今后的制造提供了方便。

5.2 电路原理图及系统仿真  

经软件调试-仿真器调试通过,并烧录芯片,得到所要求的设计结果。试验成功。现根据具体设计方案对整体电路仿真如下图5.1:

图5.1  整体电路仿真图

第六章 总结

这次为期十天的单片机课程设计让我学到很多东西。首先,我们的课题难度较大,涉及的某些内容是我们从来没有学习过的,比如:单总线传输(使用DS18B20)、使用Proteus仿真。这就要求我们自己去收集资料,并且自主地学习。

经过此次课程设计,我收获很多,在原来了解相关的单片机理论知识的基础上,通过自己的动手实践,理论与实践的结合使得对知识的理解更加深刻,并且慢慢学会培养自己的创新精神,感觉很有成就感,但同时我又了解到自己在单片机方面还有很多不足,尤其是单片机指令系统及ATC51各引脚的第二功能等等知识不够了解,因此在设计中遇到了很多不懂的知识,我会主动地查资料或请教老师和同学,而这些问题也渐渐得到解决。从查资料找合适的方案和电路开始,到编写并调试程序,Proteus仿真,都是由我们自己完成。途中遇到了很多问题,比如:修改程序使之符合自己的电路并调试成功等。每一步都有可能出现问题,我们所做的就是迎接问题,改正错误,使自己的作品更加完善。

在做单片机课程设计的过程中,我对单片机的工作原理有了更深一步的体会,在编程时自学了DS18B20的工作原理,学习使用Keil与Proteus软件并进行联合仿真,复习了LED数码管动态显示和二进制转换为十进制的程序设计。

在找资料的过程中,我接触到一个精彩纷呈的单片机世界,这激发了我对单片机的学习热情,也为我以后的学习生活指明了奋斗目标和方向。在今后的学习生活中,我会记住在实验过程中的经验教训,争取获得更大的进步。

实验过程中,使我更加扎实的掌握了有关单片机的基础知识,在设计过程中虽然遇到了一些问题,但经过一次又一次的思考,一遍又一遍的检查终于找出了原因所在,也暴露出了前期我在这方面的知识欠缺和经验不足。实践出真知,通过亲自动手制作,使我们掌握的知识不再是纸上谈兵。过而能改,善莫大焉。在课程设计过程中,我不断发现错误,不断改正,不断领悟,不断获取。最终的调试运行环节,本身就是在践行“过而能改,善莫大焉”的知行观。这次课程设计终于顺利完成了,在设计中遇到了很多问题,最后在老师的指导下,终于迎刃而解。

此次设计也让我明白有什么不懂不明白的地方要及时请教老师和同学或上网查询,只要认真钻研,动脑思考,动手实践,就没有弄不懂的知识,收获就多。在今后社会的发展和学习实践过程中,一定要不懈努力,不能遇到问题就想到要退缩,一定要不厌其烦的发现问题所在,然后一一进行解决,只有这样,才能成功的做成想做的事,才能在今后的道路上劈荆斩棘,而不是知难而退,那样永远不可能收获成功,收获喜悦,也永远不可能得到社会及他人对你的认可!

参考文献

[1]谢自美.电子线路设计.实验.测试[M].武汉:华中科技大学出版,2000.

[2]郁有文等.传感器原理及工程应用[M].西安:西安电子科技大学出版社,2003.

[3]何立民等.单片机实验与实践教程[M]. 北京:北京航空航天大学出版社,2004.

[4]松井邦彦.传感器实用电路设计与制作[M].北京:科学出版社,2005.

[5]彭介华.电子技术课程设计指导[M].北京:高等教育出版社,2005.

[6]李全利,仲伟峰,徐军著.单片机原理及应用.北京:清华大学社,2006.

[7]华成英,童诗白.模拟电子技术基础(第四版)[M].北京:高等教育出版社,2006.

[8]康华光.电子技术基础数字部分(第五版)[M].北京:高等教育出版社,2006.

[9]钟富昭著.8051单片机典型模块设计与应用.北京:人民邮电出版,2007.

[10]张一斌等.单片机课程设计指导[M].长沙:中南大学出版社,2009.

[11]江世民,黄同成.单片机原理及应用.中国铁道出版社,2010.

致谢

对于此次课程设计,我感慨颇多,从理论到实践,在这段日子里,可以说得是苦多于甜,但是可以学到很多很多的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,才能提高自己的实际动手能力和思考的能力。

这次课程设计让我收获不少,虽然这次我这组的课程设计题目不是很难,但对于我来说却是难上加难,课我最终还是克服了各种困难。并且我也花了很多时间去做,认真完成了此次课程设计。在黄同成老师的指导下,我得以顺利地完成本次课程设计,并努力使设计更加完美。黄老师严谨求实的治学态度,踏实坚韧的工作精神,将使我终生受益。在此,我要感谢黄老师对我的帮助。谢谢!

附录

DATA_BUS BIT P3.7

FLAG  BIT 00H

NEG  BIT 01H

TURN  BIT 02H

TEMP_L  EQU 30H 

TEMP_H  EQU 31H 

TEMP_DP  EQU 32H 

TEMP_INT EQU 33H 

TEMP_BAI EQU 34H  

TEMP_SHI EQU 35H  

TEMP_GE  EQU 36H 

T_UP  EQU 37H 

T_DOWN  EQU 38H 

MARK  EQU 39H 

DIS_DP  EQU 3AH  

DIS_ADD  EQU 3BH

ORG 0000H                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   

AJMP START

ORG  0040H

START: 

MOV  SP, #50H

MOV   P3,#00H

CLR  FLAG               ; FLAG为读/写状态标志位

CLR  NEG                ; NEG为温度是否为零下,即正负数补码判断标志位MOV  T_UP,#60H  

MOV  T_DOWN,#30H

MOV  MARK,#00H 

MOV  TEMP_DP, #08H

MOV  TEMP_BAI, #08H

MOV  TEMP_SHI, #08H

MOV  TEMP_GE, #08H

LCALL DISPLAY

MAIN:  

LCALL READ_TEMP  

LCALL PROCESS 

LJMP MAIN

READ_TEMP:

LCALL RESET_PULSE                    

MOV  A, #0CCH     

LCALL  WRITE   

MOV  A, #44H  

LCALL  WRITE

LCALL DISPLAY 

LCALL RESET_PULSE  

MOV  A, #0CCH   

LCALL WRITE

MOV  A, #0BEH   

LCALL  WRITE 

LCALL READ  

RET

DS18B20初始化

RESET_PULSE:

RESET: SETB DATA_BUS

NOP

NOP

CLR  DATA_BUS

MOV  R7, #255

DJNZ R7, $               ;保持至少480us低电平,作为复位脉冲

SETB  DATA_BUS        ;由C51对引脚置1,释放总线 

MOV  R7, #30

DJNZ R7, $     ;由上拉电阻将总线拉至高电平,使总线处于闲置状态,等待15us~60us

JNB DATA_BUS,SETB_FLAG;若引脚处于低电平,则对FLAG置0,若引脚处于高电平,则对FLAG置1

CLR  FLAG

AJMP NEXT

SETB_FLAG:

SETB  FLAG

NEXT: 

MOV  R7, #120  ;保持至少240us的低电平,告诉主机从机已准备就绪,可以接收主机发布的ROM命令和功能指令

DJNZ R7, $

SETB  DATA_BUS

JNB  FLAG, RESET  ;如果从机没有准备好,即FLAG不等于0,那么则继续执行复位命令,直到从机准备就绪,即FLAG=0

RET

WRITE:

SETB DATA_BUS 

MOV  R6, #8

CLR  C

WRITING:

CLR  DATA_BUS    ;写时序由主机拉低总线至低电平开始执行

MOV  R7, #5

DJNZ R7, $

RRC  A

MOV DATA_BUS, C

MOV R7, #30H

DJNZ R7, $           ;每一个写时序维持15us~60us

SETB DATA_BUS

NOP

DJNZ R6, WRITING

RET

READ:

SETB DATA_BUS

MOV  R0, #TEMP_L

MOV  R6, #8

MOV  R5, #2

CLR  C

READING:

CLR  DATA_BUS

NOP

NOP

SETB DATA_BUS

NOP

NOP

NOP

NOP

MOV  C,DATA_BUS

RRC  A

MOV  R7, #30H

DJNZ R7, $

SETB DATA_BUS

DJNZ R6, READING       ;读一个字节指令

MOV  @R0, A

INC  R0

MOV  R6, #8

SETB DATA_BUS

DJNZ R5, READING      ;读两字节数据,实际上就是读温度

RET 

DISPLAY:

MOV  R4, #50  

DIS_LOOP:

MOV  P3,#00H

MOV  A, TEMP_DP      ;将温度寄存器的小数位送给A

MOV  DPTR, #TABLE_DP    

MOVC A, @A+DPTR     

MOV  DPTR, #TABLE_INTER

MOVC  A, @A+DPTR

MOV  P0, A           ;由P0口和位P3.3控制温度的小数位显示

SETB P3.3

LCALL D1MS

CLR  P3.3

MOV  A, TEMP_GE

MOV  DPTR, #TABLE_INTER                 

MOVC A, @A+DPTR                       

MOV  P0, A                          

CLR     P0.7

SETB P3.2 

LCALL D1MS

CLR  P3.2

MOV  A, TEMP_SHI                         

MOV  DPTR, #TABLE_INTER

MOVC A, @A+DPTR                           

MOV  P0, A                         

SETB  P3.1

LCALL D1MS

CLR  P3.1

JNB  NEG,BAI          

MOV  A,#0BFH           

MOV  P0,A            

SETB P3.0

LCALL D1MS

CLR  P3.0

AJMP NEXTT

BAI:

MOV  A, TEMP_BAI       

CJNE A, #0, SKIP 

AJMP NEXTT

SKIP: MOV  A, TEMP_BAI            

MOV  DPTR, #TABLE_INTER

MOVC A, @A+DPTR                 

MOV  P0, A                   

SETB P3.0

LCALL D1MS

CLR  P3.0

NEXTT: NOP

DJNZ R4, DIS_LOOP

RET

PROCESS:

MOV  A,MARK             

CJNE A,#01H,TP1

MOV  A,T_UP           

AJMP SEP

TP1:MOV  A,MARK

CJNE A,#02H,TP2

MOV  A,T_DOWN         

AJMP SEP

TP2: MOV  R7, TEMP_L  

MOV  A, #0FH

ANL  A, R7

MOV  TEMP_DP,A         ;将温度的小数位放在TEMP_DP   

MOV  R7, TEMP_L  

MOV  A, #0F0H

ANL  A, R7         

SWAP A

MOV  TEMP_L, A          ;将温度的个位放在TEMP_L

MOV  R7, TEMP_H  

MOV  A, #0FH

ANL  A, R7

SWAP A

ORL  A, TEMP_L      ;合并温度的个位与十位并将结果放在累加器A

MOV  TEMP_L,A    

CJNE A,T_UP,NEQ1     ;判断是否过温度上限

NEQ1: JC  NUP

CLR  P1.3

AJMP TP

UP:SETB  P1.3

MOV  A,TEMP_L

CJNE A,T_DOWN,NEQ2     ;判断是否过温度下限

NEQ2: JNC  NDOWN

CLR P1.3

AJMP TP

NDOWN:SETB P1.3

TP:

MOV  A,TEMP_L

MOV     R7, #80H  

ANL  A, R7

CJNE A, #00H,NG        

CLR  NEG;    NEG=0,说明TEMP_L为正数补码,直接进行十进制转换

MOV  A,TEMP_L

AJMP SEP

NG:

SETB NEG  ; NEG=1,说明TEMP_L为负数补码,必须先取反加一求得原码,再进行十进制转换

MOV A,TEMP_L

CPL  A

INC  A

SEP:

MOV  B, #H

DIV  AB              

MOV  TEMP_BAI,A

MOV  A, #0AH

XCH  A, B        

DIV  AB          

MOV  TEMP_SHI,A

MOV  TEMP_GE,B

RET

D1MS:

MOV  R7,#250

DJNZ R7,$

RET

D2MS:

MOV  R6, #3

LOOP3:

MOV R5, #250

DJNZ R5, $

DJNZ R6, LOOP3

RET

TABLE_DP:

DB 00H,01H,01H,02H,03H,03H,04H,04H,05H,06H

DB 06H,07H,08H,08H,09H,09H

TABLE_INTER:

DB 0C0H,0F9H,0A4H,0B0H,099H,092H,082H,0F8H,080H,090H

END下载本文

显示全文
专题