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

基于单片机的数字温度计课程设计报告


基于单片机的数字温度计课程设计

目录
一 .课程设计目的??????????????????????????? 4 二 .设计任务????????????????????????????? 4 三 .设计要求 ???????????????????????????? 四 . 设计方案及比较(设计可行性分析)????????????? 4 4

五 .系统设计总体思路?????????????????????? 6 六 .系统原理框图及工作原理分析????????????????? 6 1.温度计设计系统流程图 ??????????????????? 6 2.数字温度计应用系统的硬件设计 ??????????????? 8 (1).单片机小系统的基本组成及其选择 ???????????? 8 (2).电源 ????????????????????????? 8 (3).晶振控制 ??????????????????????? 8 (4).I/O 口&接口 ?????????????????????? 9 (5).主要芯片及其功能 ??????????????????? 10 ①AT89S52 ??????????????????????? 10 ②DS18B20 ??????????????????????? 12 ③1602 液晶显示屏 七 .系统软件程序的设计 2.C 语言程序 ??????????????????? 18 ???????????????????? 19

1.软件流程框图 ???????????????????????19 ????????????????????????21 八 .系统仿真调试 ????????????????????????25 1.仿真器的介绍 ????????????????????????27 ⑴.keil 软件的开发运用 ???????????????????27 ①.Keil C51 单片机软件开发系统的整体结构 ?????????27 ②.使用独立的 Keil 仿真器时,注意事项 ????????? 28 28 ⑵.proteus 软件的开发运用 .?????????????????28 ①.Protues 软件介绍 .?????????????????? ②.proteus 的工作过程 .??????????????????28 2.系统整体调试?????????????????????????28 ⑴.仿真调试结果???????????????????????28 ⑵.仿真结果分析???????????????????????29 九 .PCB 板制作以及成品制作调试?????????????????29 十 .实验结果??????????????????????????30 十一 .结论(设计分析)?????????????????????30 十二 .课程设计心得体会 ????????????????????30
1

基于单片机的数字温度计课程设计

一 课程设计目的 1、 加强学生理论联系实际的能力,提高学生的动手能力; 2、 学会基本电子元器件的识别和检测; 3、 学会应用 EDA 软件 Proteus, Multisim 进行电路的设计和仿真; 4、 基本掌握单片机的基本原理,并能将其应用于系统的设计: 5.学会运用 Altium Designer Pcb 进行pcb板制作; 6.通过实训,提高学生的学习兴趣,激发自主学习能力,培养创新意识。 二 设计任务 先焊制一个单片机最小系统,并以制作的单片机最小系统为核心, 设计并制作一个数字温度计应用系统。 三 设计要求 1 2 3 4 采用DS18B20作为温度传感器进行温度检测; 对采集温度进行显示,采用两路设计(显示温度分辨率0.1℃) ; 采集温度数值应采用数字滤波措施,保证显示数据稳定; 显示数据,无数据位必须消隐。

四、设计方案及比较(设计可行性分析)
该系统主要由温度测量和数据采集两部分电路组成,实现的方法有很多种,下面将列出两种 在日常生活中和工农业生产中经常用到的实现方案。

方案一 采用热电偶温差电路测温,温度检测部分可以使用低温热偶,热电偶由两个 焊接在一起的异金属导线所组成(热电偶的构成如图 3.1),热电偶产生的热电 势由两种金属的接触电势和单一导体的温差电势组成。通过将参考结点保持在已 知温度并测量该电压,便可推断出检测结点的温度。数据采集部分则使用带有A/D 通道的单片机,在将随被测温度变化的电压或电流采集过来,进行A/D 转换后, 就可以用单片机进行数据的处理,在显示电路上,就可以将被测温度显示出来。 热电偶的优点是工作温度范围非常宽,且体积小,但是它们也存在着输出电压小、 容易遭受来自导线环路的噪声影响以及漂移较高的缺点,并且这种设计需要用到 A/D 转换电路,感温电路比较麻烦。

2

基于单片机的数字温度计课程设计

图 3.1热电偶电路图
系统主要包括对A/D0809 的数据采集,自动手动工作方式检测,温度的显示等,这几项 功能的信号通过输入输出电路经单片机处理。此外还有复位电路,晶振电路,启动电路等。 故现场输入硬件有手动复位键、 A/D 转换芯片, 处理芯片为51 芯片, 执行机构有4 位数码管、 报警器等。

方案二 采用数字温度芯片DS18B20 测量温度,输出信号全数字化。便于单片机处理 及控制,省去传统的测温方法的很多外围电路。且该芯片的物理化学性很稳定, 它能用做工业测温元件,此元件线形较好。在0—100 摄氏度时,最大线形偏差小 于1 摄氏度。DS18B20 的最大特点之一采用了单总线的数据传输,由数字温度计 DS18B20和微控制器AT89C51(52)构成的温度测量装置,它直接输出温度的数字信 号,可直接与计算机连接。这样,测温系统的结构就比较简单,体积也不大。采用51 单片机控制,软件编程的自由度大,可通过编程实现各种各样的算术算法和逻辑 控制,而且体积小,硬件实现简单,安装方便。既可以单独对多DS18B20 控制工作,还可以与PC 机通信上传数据,另外AT89S51(52) 在工业控制上也 有着广泛的应用,编程技术及外围功能电路的配合使用都很成熟。 该系统利用AT89C51(52)芯片控制温度传感器DS18B20进行实时温度检测并显 示,能够实现快速测量环境温度,并可以根据需要设定上下限报警温度。该系统 扩展性非常强,它可以在设计中加入时钟芯片DS1302以获取时间数据,在数据处 理同时显示时间,并可以利用AT24C16芯片作为存储器件,以此来对某些时间点的 温度数据进行存储, 利用键盘来进行调时和温度查询, 获得的数据可以通过MAX232 芯片与计算机的RS232接口进行串口通信,方便的采集和整理时间温度数据。 系统框图如图

3

基于单片机的数字温度计课程设计

1602 显示器 单片机芯片 晶振控制 AT89S52 第一路 温度检测电 DS18B20

第二路 温度检测电 DS18B20

从以上两种方案,容易看出方案一的测温装置可测温度范围宽、体积小,但 是线性误差较大。方案二的测温装置电路简单、精确度较高、实现方便、软件设 计也比较简单,还可以进行各种功能的扩展,例如报警系统,时间显示等,故本次设 计采用了方案二,并采用两路设计。

五 系统设计总体思路 设计方案及其总体设计框图
1602 显示器 单片机芯片 晶振控制 AT89S52 第一路 温度检测电 DS18B20

第二路 温度检测电路 DS18B20

六 系统原理框图及工作原理分析 1.温度计设计系统流程图
4

基于单片机的数字温度计课程设计

开始 进入缓冲区初始化 复位 DS18B20 发跳过 ROM 命令

温度转换命令

延时

系统设计原理: 本次课程设计是基于单片 机的数字温度计设计,在开始 课程设计的时候我们要理解并 掌握对单片机的开发,学会使 用 KEIL 及 Proteus, Multisim 等 仿真软件。根据设计任务要求 选择好器件,编写好程序运行 成功之后进行软件联调,验证 系统是否正确。通过筛选,我 们组选用单片机 AT89S52 作为 主控制系统; 用 1602 液晶显示 模块芯片作为温度数据显示装 置;智能温度传感器采用 DS18B20 器件作为测温电路主 要组成部分。

复位 DS18B20,跳过 ROM 命令

读存储器命令

读温度命令

将温度转换为 BCD 码

更新数据缓冲区

5

基于单片机的数字温度计课程设计

2、数字温度计应用系统的硬件设计 (1)、单片机小系统的基本组成及其选择 单片机选型参考 ? ① AT89S51、AT89S52 :具备 ISP 下载功能 ,可以使用 USBASP 程序 下载线或者并口下载 ? ② STC89C51、STC89C52:使用串口线+MAX232 烧写程序。 ? ③AT89C51、AT89C52 :可以在最小系统板上使用,但需要另外用编 程器烧写程序 本次课程设计选用 AT89S52 型号单片机进行操作。
AT89S52 是一个低功耗,高性能 CMOS 8 位单片机,片内含 8k Bytes ISP(In-system programmable)的可反复擦写 1000 次的 Flash 只读程序存储器,器件采用 ATMEL 公司的高密度、非易 失性存储技术制造, 兼容标准 MCS -51 指令系统及 80C51 引脚 结构, 芯片内集成了通用 8 位中央处理器和 ISP Flash 存储单元, 功能强大的微型计算机的 AT89S52 可为许多嵌入式控制应用 系统提供高性价比的解决方案。 AT89S52 具有如下特点:40 个引脚,8k Bytes Flash 片内程序 存储器,256 bytes 的随机存取数据存储器(RAM) ,32 个外部 双向输入/输出(I/O)口,5 个中断优先级 2 层中断嵌套中断, 2 个 16 位可编程定时计数器,2 个 全双工串行通信口,看门狗 (WDT)电路,片内时钟振荡器。 AT89S52 引脚图 此外, AT89S52 设计和配置了振荡频率可为 0Hz 并可通过软 件设置省电模式。空闲模式下,CPU 暂停工作,而 RAM 定时

AT89S52 引脚图

计数器,串行口,外中断 系统可继续工作,掉电模式冻结振 荡器而保存 RAM 的数据,停止芯片其它功能直至外中断激活 或硬件复位。同时该芯片还具有 PDIP、TQFP 和 PLCC 等三 种 封装形式,以适应不同产品的需求。

此外,AT89S52 设计和配置了振荡频率可为 0Hz 并可通过软件设 置省电模式。空闲模式下,CPU 暂停工作,而 RAM 定时计数器,串行口, 外中断 系统可继续工作,掉电模式冻结振荡器而保存 RAM 的数据,停 止芯片其它功能直至外中断激活或硬件复位。同时该芯片还具有 PDIP、 TQFP 和 PLCC 等三 种封装形式,以适应不同产品的需求。 (2)电源 ? ①电源适配器供电:DC 座(三个管脚) ? ②usb 供电: (3) 晶振控制

6

基于单片机的数字温度计课程设计

晶振控制 电路结构原理如右图所示

(4)I/O 口&接口 ? ① 所有 I/O 用排针引出 ? ② 串行通信口:P3.0,p3.1 ? ③ ISP:p1.6,p1.7

单片机共有 4 个 8 位双向并行 I/O 通道 口,每位均有自己的锁存器、输出驱动器和 输入缓冲器组成。这种结构,在数据输出时 可以锁存,及输出新的数据以前,通道口上 的原始数据不变。 但对输入信息是不锁存的, 所以从外部输入的信息必须保持到取数指令 执行完为止。

7

基于单片机的数字温度计课程设计

(5)主要芯片及其功能 ①AT89S52(也可以用 AT89S51) 引脚说明 AT89S52 是一种低功耗、高性能 CMOS8 位微控制器,具有 8K 在系统可编程

AT89S52 引脚图 DIP 封装 Flash 存储器。 使用 Atmel 公司高密度非 易失性存储器技术制造, 与工业 80C51 产品指令和引脚完 全兼容。 片上 Flash 允许程序存储器在系统可编程, 亦适于 常 规编程器。在单芯片上,拥有灵巧的 8 位 CPU 和在系统 可编程 Flash ,使得 AT89S52 为众多嵌入式控制应用系统提 供高灵活、超有效的解决方案。 AT89S52 具有以下标准功能: 8k 字节 Flash,256 字节 RAM, 32 位 I/O 口线,看门狗定 时器,2 个数据指针,三个 16 位 定时器/计数器,一个 6 向量 2 级中断结构,全 双工串行口, 片内晶振及时钟电路。另外,AT89S52 可降至 0Hz 静态逻 辑操作, 支持 2 种软件可选择节电模式。空闲模式下,CPU 停止工作,允许 RAM、定时器/ 计数器、串口、中断继续工 作。掉电保护方式下,RAM 内容被保存,振荡器被冻 结, 单片机一切工作停止,直到下一个中断或硬件复位为止。 P0 口:P0 口是一个 8 位漏极开路的双向 I/O 口。作为输出口,每位能驱动 8 个 TTL 逻 辑电平。对 P0 端口写“1”时,引脚用作高阻抗输入。 当访问外部程 序和数据存储器时,P0 口也被作为低 8 位地址/数据复用。在这种模式下, P0 不 具有内部上拉电阻。 在 flash 编程时, P0 口也用来接收指令字节; 在程序校验时, 输出指令字节。程序校验 时,需要外部上拉电阻。 P1 口:P1 口是一个具有内部上拉电阻的 8 位双向 I/O 口,p1 输出缓冲器 能驱动 4 个 TTL 逻辑电平。对 P1 端口写“1”时,内部上拉电阻把端口拉高, 此时可以作为输入 口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的 原因,将输出电流(IIL) 。 此外,P1.0 和 P1.1 分别作定时器/计数器 2 的外部计数输入(P1.0/T2)和定 时器/计数器 2 的触发输入(P1.1/T2EX) 。 在 flash 编程和校验时,P1 口接收低 8 位地址字节。 引脚号第二功能: P1.0 T2(定时器/计数器 T2 的外部计数输入) ,时钟输出 P1.1 T2EX(定时器/计数器 T2 的捕捉/重载触发信号和方向控制) P1.5 MOSI(在系统编程用) P1.6 MISO(在系统编程用) P1.7 SCK(在系统编程用)
8

基于单片机的数字温度计课程设计

P2 口:P2 口是一个具有内部上拉电阻的 8 位双向 I/O 口,P2 输出缓冲器 能驱动

AT89S52 引脚图 PLCC 封装 4 个 TTL 逻辑电平。对 P2 端口写“1”时,内部上拉电阻把端口拉高,此时可以 作为输入 口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将 输出电流 (IIL) 。 在访问外部程序存储器或用 16 位地址读取外部数据存储器 (例 如执行 MOVX @DPTR) 时,P2 口送出高八位地址。在这种应用中,P2 口使用很强 的内部上拉发送 1。在使用 8 位地址(如 MOVX @RI)访问外部数据存储器时,P2 口输出 P2 锁存器的内容。 在 flash 编程和校验时,P2 口也接收高 8 位地址字节 和一些控制信号。 P3 口:P3 口是一个具有内部上拉电阻的 8 位双向 I/O 口,p3 输出缓冲器 能驱动 4 个 TTL 逻辑电平。对 P3 端口写“1”时,内部上拉电阻把端口拉高, 此时可以作为输入 口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的 原因,将输出电流(IIL) 。 P3 口亦作为 AT89S52 特殊功能(第二功能)使用,如 下表所示。 在 flash 编程和校验时,P3 口也接收一些控制信号。 端口引脚 第二功能: P3.0 RXD(串行输入口) P3.1 TXD(串行输出口) P3.2 INTO(外中断 0) P3.3 INT1(外中断 1) P3.4 TO(定时/计数器 0) P3.5 T1(定时/计数器 1) P3.6 WR(外部数据存储器写选通) P3.7 RD(外部数据存储器读选通) 此外,P3 口还接收一些用于 FLASH 闪存编程和程序校验的控制信号。 RST:复位输入。当振荡器工作时,RST 引脚出现两个机器周期以上高电平将 是单片机复位。 ALE/PROG:当访问外部程序存储器或数据存储器时,ALE(地址锁存允许)输 出脉冲用于锁存地址的低 8 位字节。一般情况下,ALE 仍以时钟振荡频率的 1/6 输出固定的脉冲信号,因此它可对外输出时钟或用于定时目的。要注意的是:每 当访问外部数据存储器时将跳过一个 ALE 脉冲。对 FLASH 存储器编程期间,该引 脚还用于输入编程脉冲(PROG) 。如有必要,可通过对特殊功能寄存器(SFR)区 中的 8EH 单元的 D0 位置位, 可禁止 ALE 操作。 该位置位后, 只有一条 MOVX 和 MOVC
9

基于单片机的数字温度计课程设计

指令才能将 ALE 激活。此外,该引脚会被微弱拉高,单片机执行外部程序时,应 设置 ALE 禁止位无效。 PSEN: 程序储存允许 (PSEN) 输出是外部程序存储器的读选通信号, 当 AT89S52 由外部程序存储器取指令(或数据)时,每个机器周期两次 PSEN 有效,即输出两 个脉冲,在此期间,当访问外部数据存储器,将跳过两次 PSEN 信号。 EA/VPP : 外 部 访 问 允 许 , 欲 使 CPU 仅 访 问 外 部 程 序 存 储 器 ( 地 址 为 0000H-FFFFH) ,EA 端必须保持低电平(接地) 。需注意的是:如果加密位 LB1 被编 程,复位时内部会锁存 EA 端状态。如 EA 端为高电平(接 Vcc 端) ,CPU 则执行内 部程序存储器的指令。 FLASH 存储器编程时, 该引脚加上+12V 的编程允许电源 Vpp, 当然这必须是该器件是使用 12V 编程电压 Vpp。 XTAL1:振荡器反相放大器和内部时钟发生电路的输入端。 XTAL2:振荡器反相放大器的输出端。②DS18B20 ②DS18B20 DS18B20 温度传感器是美国 DALLAS 半导体公司最新推出的一种改进型智能温 度传感器,与传统的热敏电阻等测温元件相比,它能直接读出被测温度,并且可 根据实际要求通过简单的编程实现 9-12 位的数字值读数方式。 TO-92 封装的 DS18B20 的引脚排列见下图,其引脚功能描述见表 3-3。 (底视 图)

图 3-3 DS18B20 引脚图

10

基于单片机的数字温度计课程设计

表 3-3 序 号 1 名 称 GN D

DS18B20 详细引脚功能描述

引脚功能描述

地信号 数据输入/输出引脚。开漏单总线 接口引脚。当被用着在寄生电源 下,也可以向器件提供电源。 可选择的 VDD 引脚。 当工作于寄生 电源时此引脚必须接地。

2

DQ

3

VD D

DS18B20 的性能特点如下: 独特的单线接口仅需要一个端口引脚进行通信; 多个 DS18B20 可以并联在惟一的三线上,实现多点组网功能; 无须外部器件;可通过数据线供电,电压范围为 3.0~5.5V; 零待机功耗;温度以9或12位数字;用户可定义报警设置; 报警搜索命令识别并标志超过程序限定温度(温度报警条件)的器件; 负电压特性,电源极性接反时,温度计不会因发热而烧毁,但不能正常工作; DS18B20 采用 3 脚 PR-35 封装或8脚 SOIC 封装,其内部结构框图如图 3-4 所示。
I/O
64 位 ROM 和 单 高温触发器 TH 高 速 缓 存 配置寄存器 低温触发器 TL
温度传感器

存储器与控制逻辑

C

线 接 口

Vdd

8 位 CRC 发生器

图 3-4 DS18B20 内部结构 64 位 ROM 的结构开始 8 位是产品类型的编号, 接着是每个器件的惟一的序号, 共有 48 位,最后 8 位是前面 56 位的 CRC 检验码,这也是多个 DS18B20 可以采用
11

基于单片机的数字温度计课程设计

一线进行通信的原因。温度报警触发器TH和TL,可通过软件写入户报警上下 限。 DS18B20 温度传感器的内部存储器还包括一个高速暂存 RAM 和一个非易失性 的可电擦除的 EERAM。 高速暂存 RAM 的结构为 8 字节的存储器, 结构如图 3-4 所示。 头 2 个字节包含测得的温度信息,第 3 和第 4 字节TH和TL的拷贝,是易失的, 每次上电复位时被刷新。第 5 个字节,为配置寄存器,它的内容用于确定温度值 的数字转换分辨率。DS18B20 工作时寄存器中的分辨率转换为相应精度的温度数 值。该字节各位的定义如图 3-5 所示。低 5 位一直为 1,TM 是工作模式位,用于 设置 DS18B20 在工作模式还是在测试模式,DS18B20 出厂时该位被设置为 0,用户 要去改动,R1 和 R0 决定温度转换的精度位数,来设置分辨率.

温度 温度

LSB MSB

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

TM R1 R0 1
.

1

1

1

1
.

图 3-5

DS18B20 字节定义

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

基于单片机的数字温度计课程设计

当符号位 S=0 时,表示测得的温度值为正值,可以直接将二进制位转换为十 进制;当符号位 S=1 时,表示测得的温度值为负值,要先将补码变成原码,再计 算十进制数值。表 2 是一部分温度值对应的二进制温度数据。

表 3-4 DS18B20 温度转换时间表 R1 0 0 1 1 R0 0 1 0 1 分辨率/位 9 10 11 12 温度最大转换时间/ms 93.75 187.5 375 750

DS18B20 完成温度转换后,就把测得的温度值与 RAM 中的 TH、TL 字节内容作 比较。若T>TH 或 T<TL,则将该器件内的报警标志位置位,并对主机发出的报 警搜索命令作出响应。因此,可用多只 DS18B20 同时测量温度并进行报警搜索。 在 64 位 ROM 的最高有效字节中存储有循环冗余检验码(CRC) 。主机 ROM 的前 56 位来计算 CRC 值,并和存入 DS18B20 的 CRC 值作比较,以判断主机收到的 ROM 数据是否正确。 DS18B20 的测温原理是这这样的,器件中低温度系数晶振的振荡频率受温度的 影响很小, 用于产生固定频率的脉冲信号送给减法计数器 1;高温度系数晶振随温 度变化其振荡频率明显改变,所产生的信号作为减法计数器 2 的脉冲输入。器件 中还有一个计数门, 当计数门打开时,DS18B20 就对低温度系数振荡器产生的时钟 脉冲进行计数进而完成温度测量。计数门的开启时间由高温度系数振荡器来决定, 每次测量前, 首先将-55℃所对应的一个基数分别置入减法计数器 1、温度寄存器 中,计数器 1 和温度寄存器被预置在-55℃所对应的一个基数值。 减法计数器 1 对低温度系数晶振产生的脉冲信号进行减法计数,当减法计数 器 1 的预置值减到 0 时, 温度寄存器的值将加 1,减法计数器 1 的预置将重新被装 入,减法计数器 1 重新开始对低温度系数晶振产生的脉冲信号进行计数,如此循 环直到减法计数器计数到 0 时,停止温度寄存器的累加,此时温度寄存器中的数 值就是所测温度值。其输出用于修正减法计数器的预置值,只要计数器门仍未关 闭就重复上述过程,直到温度寄存器值大致被测温度值。

13

基于单片机的数字温度计课程设计

表 3-5 温度/℃ +125 +85 +25.0625 +10.125 +0.5 0 -0.5 -10.125 -25.0625 -55

一部分温度对应值表 二进制表示 十六进制表示 07D0H 0550H 0191H 00A2H 0008H 0000H FFF8H FF5EH FE6FH FC90H

0000 0111 0000 0101 0000 0001 0000 0000 0000 0000 0000 0000 1111 1111 1111 1111 1111 1110 1111 1100

1101 0000 0101 0000 1001 0000 1010 0001 0000 0010 0000 1000 1111 0000 0101 1110 0110 1111 1001 0000

另外,由于 DS18B20 单线通信功能是分时完成的,它有严格的时隙概念,因 此读写时序很重要。系统对 DS18B20 的各种操作按协议进行。操作协议为:初使 化 DS18B20(发复位脉冲)→发 ROM 功能命令→发存储器操作命令→处理数据。
. .

VCC

DS18B20

DS18B20

DS18B20

单 片 机
.

VCC
4.7K

GND

GND

GND
.

DS18B20 温度传感器与单片机的接口电路

14

基于单片机的数字温度计课程设计

DS18B20 可以采用两种方式供电,一种是采用电源供电方式,此时 DS18B20 的 1 脚接地, 2 脚作为信号线, 3 脚接电源。 另一种是寄生电源供电方式, 如图 4 所 示单片机端口接单线总线,为保证在有效的 DS18B20 时钟周期内提供足够的电流, 可用一个 MOSFET 管来完成对总线的上拉。 当 DS18B20 处于写存储器操作和温度 A/D 转换操作时,总线上必须有强的上 拉,上拉开启时间最大为 10us。采用寄生电源供电方式时 VDD 端接地。由于单线 制只有一根线,因此发送接口必须是三态的。由于 DS18B20 是在一根 I/O 线上读 写数据,因此,对读写的数据位有着严格的时序要求。DS18B20 有严格的通信协议 来保证各位数据传输的正确性和完整性。该协议定义了几种信号的时序:初始化 时序、读时序、写时序。所有时序都是将主机作为主设备,单总线器件作为从设 备。而每一次命令和数据的传输都是从主机主动启动写时序开始,如果要求单总 线器件回送数据,在进行写命令后,主机需启动读时序完成数据接收。数据和命 令的传输都是低位在先。 DS18B20 的复位时序

DS18B20 的读时序 对于 DS18B20 的读时序分为读 0 时序和读 1 时序两个过程。 对于 DS18B20 的读时隙是从主机把单总线拉低之后,在 15 秒之内就得释放单 总线,以让 DS18B20 把数据传输到单总线上。DS18B20 在完成一个读时序过程,至 少需要 60us 才能完成。

DS18B20 的写时序 对于 DS18B20 的写时序仍然分为写 0 时序和写 1 时序两个过程。 对于 DS18B20 写 0 时序和写 1 时序的要求不同,当要写 0 时序时,单总线要 被拉低至少 60us, 保证 DS18B20 能够在 15us 到 45us 之间能够正确地采样 IO 总线

15

基于单片机的数字温度计课程设计

上的“0”电平,当要写 1 时序时,单总线被拉低之后,在 15us 之内就得释放单 总线。

③1602 液晶显示屏 1602 液晶显示流程图:
开始 初始化 1602 延时 调用子程序设置 第一行显示位置 与内容 调用子程序设 置第二行显示 位置与内容

工业字符型液晶,能够同时显示 16x02 即 32 个字符。 (16 列 2 行) 注:为了表示的方便 ,后文皆以 1 表示高电平,0 表示低电平。 1602 液晶也叫 1602 字符型液晶,它是一种专门用来显示字母、数字、符号等的点阵型 液晶模块。它由若干个 5X7 或者 5X11 等点阵字符位组成,每个点阵字符位都可以显示一个 字符,每位之间有一个点距的间隔,每行之间也有间隔,起到了字符间距和行间距的作用, 正因为如此所以它不能很好地显示图形(用自定义 CGRAM,显示效果也不好) 。 1602LCD 是指显示的内容为 16X2,即可以显示两行,每行 16 个字符液晶模块(显示字 符和数字) 。 目前市面上字符液晶绝大多数是基于 HD44780 液晶芯片的,控制原理是完全相同的,因 此基于 HD44780 写的控制程序可以很方便地应用于市面上大部分的字符型液晶。

管脚功能

LCD1602 引脚图 16

基于单片机的数字温度计课程设计

1602 采用标准的 16 脚接口,其中: 第 1 脚:VSS 为电源地 第 2 脚:VCC 接 5V 电源正极 第 3 脚:V0 为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最 高(对比度过高时会 产生“鬼影”,使用时可以通过一个 10K 的电位器调整对比度) 。 第 4 脚:RS 为寄存器选择,高电平 1 时选择数据寄存器、低电平 0 时选择指令寄存器。 第 5 脚:RW 为读写信号线,高电平(1)时进行读操作,低电平(0)时进行写操作。 第 6 脚:E(或 EN)端为使能(enable)端。 第 7~14 脚:D0~D7 为 8 位双向数据端。 第 15~16 脚:空脚或背灯电源。15 脚背光正极,16 脚背光负极。

七 系统软件程序的设计 1 软件流程框图:
初始化 发 DS18B20 复位命令

调用显示子程序

发跳过 ROM 命令

N 是否正确 Y N 初次上串 N 读出温度值,温度 计算,处理显示, 数据刷新

发读取温度命令

读取操作并进行校验 Y N 字节是否读完 Y 校验是否正确 N

发温度转换开始命令 移入温度暂存器 主程序流程图 读温度流程图 结束

17

基于单片机的数字温度计课程设计

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

开始 N 温度零下? Y 温度值取补码置“—”标志 置“+”标志

计算小数位温度 BCD 值

计算整数位温度 BCD 值

结束
计算温度流程图

显示数据刷新子程序主要是对显示缓冲器中的显示数据进行刷新操作,当最 高显示位为 0 时将符号显示位移入下一位。程序流程图如下图。
温度数据移入显示寄存器 N 十位数 0? Y 百位数 0? Y 十位数显示符号百 位数不显示 百位数显示数据 (不显示符号)

N

结束
显示数据刷新流程图

18

基于单片机的数字温度计课程设计

2 C 语言程序 #include<reg52.h.H> // 包含头文件 // #include <intrins.h> #include <float.h> //浮点数处理 #include <string.h> #define uchar unsigned char #define uint unsigned int sbit LCD_Busy = P2 ^ 7; // 定 义 LCM2402 的 测 忙 线 ( 与 LCM2402_DB0_DB7 关联) /***LCD1602 端口定义***/ sbit LCD_E=P0^5; sbit RW=P0^6; sbit RS=P0^7; uint temp,temp2; float f_temp,f_temp2; sbit ds=P3^7; sbit ds2=P3^6; void delay(uint z) //延时 z MS { uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); } void LCD_TestBusy(void){ P2 = 0xff; //设备读状态 RS = 0; RW = 1; LCD_E = 1; while(LCD_Busy); //等待 LCM 不忙 LCD_E = 0; // } void write_com(uchar com) { LCD_TestBusy(); P2 = com; RS = 0; RW = 0; LCD_E = 1; LCD_E = 0; }
19

基于单片机的数字温度计课程设计

void write_dat(uchar dat) { LCD_TestBusy(); P2 = dat; RS = 1; RW = 0; LCD_E = 1; LCD_E = 0; } void print(uchar a,uchar *str){ write_com(a | 0x80); while(*str != '\0'){ write_dat(*str++); } *str = 0; } void print_sfm(uchar add,uint t) { uchar a,b,c; a=t/100; b=t%100/10; c=t%100%10; write_com(0x80+0x40+add); write_dat(0x30+a); write_dat(0x30+b); write_dat(0x30+c); } void init() { RW=0; write_com(0x38); write_com(0x0c); write_com(0x06); write_com(0x01); } void dsreset(void)//DS18B20 复位,初始化 { uint i; ds=0; i=103; while(i>0)i--;
20

基于单片机的数字温度计课程设计

ds=1; i=4; while(i>0)i--; } bit tempreadbit(void) //读一位数据 { uint i; bit dat; ds=0;i++; ds=1;i++;i++; dat=ds; i=8;while(i>0)i--; return(dat); } uchar tempread(void) //读一字节(8 位) { uchar i,j,dat; dat=0; for(i=1;i<=8;i++) { j=tempreadbit(); dat=(j<<7)|(dat>>1); //读出的最低位在最前面,刚好一字节在 dat 里 } return (dat); } void tempwritebyte(uchar dat) //向 DS18B20 写一个字节数据 { uint i; uchar j; bit testb; for(j=1;j<=8;j++) { testb=dat&0x01; dat=dat>>1; if(testb) { ds=0; i++;i++; ds=1; i=8;while(i>0)i--; } else
21

基于单片机的数字温度计课程设计

{ ds=0; i=8;while(i>0)i--; ds=1; i++;i++; } } } void tempchange(void) { dsreset(); delay(1); tempwritebyte(0xcc); tempwritebyte(0x44); } uint get_temp() { uchar a,b; dsreset(); delay(1); tempwritebyte(0xcc); tempwritebyte(0xbe); a=tempread(); b=tempread(); if(b&0x80) { temp=~b+1;} else{ temp=b;} temp<<=8; temp=temp|a; // 开始获取温度并转换

// 写跳过读 ROM 指令 // 写温度转换指令

// 读低八位 // 读高八位 // 判断正负

//

两个字节组合成一个字

f_temp=temp*0.0625; // temp=f_temp*10+0.5; // f_temp=f_temp+0.05; return temp; //返回 temp 是整型 } void dsreset2(void)//DS18B20 复位,初始化 { uint i; ds2=0;
22

基于单片机的数字温度计课程设计

i=103; while(i>0)i--; ds2=1; i=4; while(i>0)i--; } bit tempreadbit2(void) //读一位数据 { uint i; bit dat; ds2=0;i++; ds2=1;i++;i++; dat=ds2; i=8;while(i>0)i--; return(dat); } uchar tempread2(void) //读一字节(8 位) { uchar i,j,dat; dat=0; for(i=1;i<=8;i++) { j=tempreadbit2(); dat=(j<<7)|(dat>>1); //读出的最低位在最前面,刚好一字节在 dat 里 } return (dat); } void tempwritebyte2(uchar dat) //向 DS18B20 写一个字节数据 { uint i; uchar j; bit testb; for(j=1;j<=8;j++) { testb=dat&0x01; dat=dat>>1; if(testb) { ds2=0; i++;i++; ds2=1; i=8;while(i>0)i--;
23

基于单片机的数字温度计课程设计

} else { ds2=0; i=8;while(i>0)i--; ds2=1; i++;i++; } } } void tempchange2(void) { dsreset2(); delay(1); tempwritebyte2(0xcc); tempwritebyte2(0x44); } // 开始获取温度并转换

// 写跳过读 ROM 指令 // 写温度转换指令

uint get_temp2() { uchar a,b; dsreset2(); delay(1); tempwritebyte2(0xcc); tempwritebyte2(0xbe); a=tempread2(); // 读低八位 b=tempread2(); // 读高八位 temp2=b; temp2<<=8; // 两个字节组合成一个字 temp2=temp2|a; f_temp2=temp2*0.0625; // temp2=f_temp2*10+0.5; // f_temp2=f_temp2+0.05; return temp2; //返回 temp 是整型 }

void main() { uint i,j; init(); print(0x80,"T is");

//第一行地址
24

基于单片机的数字温度计课程设计

tempchange(); delay(1000); tempchange(); tempchange2(); delay(1000); tempchange2(); while(1) { tempchange(); i=get_temp(); print_sfm(4,i); tempchange2(); j= get_temp2(); print_sfm(10,j); } } 八 系统仿真调试 1、仿真器的介绍 ⑴keil 软件的开发运用
Keil C51 是美国 Keil Software 公司出品的 51 系列兼容单片机 C 语言软件开发系统, 与汇编相比, C 语言在功能上、结构性、可读性、可维护性上有 明显的优势,因而易学易用。Keil 提供了包括 C 编 译器、宏汇编、连接器、库管理和一个功能强大的 仿真调试器等在内的完整开发方案,通过一个集成 开发环境(uVision)将这些部分组合在一起。运行 Keil 软件需要 WIN98、NT、WIN2000、WINXP 等操作 系统。 如果使用 C 语言编程, 那么 Keil 几乎就是不 二之选,即使不使用 C 语言而仅用汇编语言编程, 其方便易用的集成环境、强大的软件仿真调试工具 也会令你事半功倍。

① Keil C51 单片机软件开发系统的整体结构 C51 工具包的整体结构, uVision 与 Ishell 分别是 C51 for Windows 和 for Dos 的集成开发环境 (IDE) ,可以完成编辑、编译、 连接、调试、仿真等整个开发流程。开发人员可用 IDE 本身或其它 编辑器编辑 C 或汇编源文件。 然后分别由 C51 及 C51 编译器编译生 成目标文件 (.OBJ) 。目标文件可由 LIB51 创建生成库文件,也可以 与库文件一起经 L51 连接定位生成绝对目标文件 (.ABS) 。 ABS 文件
25

基于单片机的数字温度计课程设计

由 OH51 转换成标准的 Hex 文件, 以供调试器 dScope51 或 tScope51 使用进行 源代码级调试,也可由仿真器使用直接对目标板进行调 试,也可以直接写入程序存贮器如 EPROM 中。 ②使用独立的 Keil 仿真器时,注意事项 ? 仿真器标配 11.0592MHz 的晶振,但用户可以在仿真器上的晶振插孔 中换插其他频率的晶振。 ? 仿真器上的复位按钮只复位仿真芯片,不复位目标系统。 ? 仿真芯片的 31 脚( /EA )已接至高电平,所以仿真时只能使用片内 ROM ,不能使用片外 ROM ;但仿真器外引插针中的 31 脚并不与仿真 芯片的 31 脚相连,故该仿真器仍可插入到扩展有外部 ROM(其 CPU 的 /EA 引脚接至低电平)的目标系统中使用。 ⑵proteus 软件的开发运用 ① Protues 软件介绍 Proteus 是目前最好的模拟单片机外围器件的工具,它可以仿真51 系列、 AVR, PIC 等常用的MCU 及其外围电路。本文基于Proteus 6.9 和 Keil uVision3 软件。Proteus 与其它单片机仿真软件不同的是,它不 仅能仿真单片机CPU 的工作情况, 也能仿真单片机外围电路或没有单片 机参与的其它电路的工作情况。因此在仿真和程序调试时,关心的不再 是某些语句执行时单片机寄存器和存储器内容的改变, 而是从工程的角 度直接看程序运行和电路工作的过程和结果。对于这样的仿真实验,从 某种意义上讲,是弥补了实验和工程应用间脱节的矛盾和现象。 ② proteus 的工作过程 运行proteus 的ISIS 程序后,进入该仿真软件的主界面。在工作 前,要设 置view 菜单下的捕捉对齐和system 下的颜色、图形界面大小等项目。 通过工 具栏中的p 命令,在pick devices 窗口中选择电路所需的元件,放置 元件并调 整其相对位置, 元件参数设置, 元器件间连线, 编写程序; 在source 菜 单的 Define code generation tools 菜单命令下,选择程序编译的工具、 路径、扩展名等项目;在source 菜单的Add/removesource files 命令 下,加入单片机硬件电路的对应程序;通过debug 菜单的相应命令仿真 程序和电路的运行情况。 Proteus 软件提供了30 多个元件库,数千种元件。元件涉及数字和模 拟、交流和直流等。 2、系统整体调试 ⑴仿真调试结果
26

基于单片机的数字温度计课程设计

⑵仿真结果分析 在运行仿真结果时通过改变温度传感器 DS18B20 的温度,然后调用 各种子函数,可以改变液晶显示 1602 的第二行显示数据,说明程序编 写正确。 九 PCB 板制作以及成品制作调试

1 运用 Altium Designer Pcb 进行pcb板制作; 2 产品的焊接和调试,温度的测量可以读取,温度测量可用电烙铁进行.
27

基于单片机的数字温度计课程设计

十 实验结果 两路温度显示正常,环境温度测量正常. 十一结论(设计分析) 我们组设计的数字温度计系统知识运用简单的 AT89S52 芯片的 I/O 口传输功能,通过几个小的读数据、传递数据、延时子函数实现温度的 读取传输功能,是比较简单,容易实现的,所以我们的系统只是实现了 一些简单的功能,系统整体来说比较简易,但好像这个温度计没有多大 的应用价值, 所以我们后续分析觉得这个系统可以加一个温度复位系统 提高 AT89S52 芯片的功能价值,也提高数字温度计的智能价值,还可以 增加一个报警子函数,实现智能数字温度计更高的应用价值。由于时间 太仓促,经验不足,理论方面也相应的存在不足,加上条件有限,仍存 在着一些设计方面的问题,个人技能也有待提高,理论知识还要巩固加 强。 十二、课程设计心得体会 经过这次单片机课程设计,终于完成了我们的数字温度计的设计, 虽然不能做到很完美,但从心底里说,还是高兴的,毕竟这次设计把实 物都做了出来,高兴之余不得不深思! 在本次设计的过程中,我们发现很多的问题,也许是第一次进行这 种系统的设计所以感觉完成这样一次小系统设计我长进了很多, 单片机 课程设计重点就在于软件算法的设计,需要有很巧妙的程序算法,虽然 以前写过几次程序,但我觉的写好一个程序并不是一件简单的事,举个 例子,以前写的那几次,数据加减时,我用的都是 BCD 码,这一次,我 全部用的都是 16 进制的数直接加减, 显示处理时在用除法去删分,感觉 效果比较好,有好多的东西,只有我们去试着做了,才能真正的掌握, 只学习理论有些东西是很难理解的,更谈不上掌握。 从这次的课程设计中,我真真正正的意识到,在以后的学习中,要理论 联系实际,把我们所学的理论知识用到实际当中,学习单机片机更是如 此,程序只有在经常的写与读的过程中才能提高,这就是我在这次课程 设计中的最大收获。通过这次对数字温度计的设计与制作,让我了解了 设计电路的程序,也让我了解了关于数字温度计的原理与设计理念,要 设计一个电路总要先用仿真仿真成功之后才实际接线的。 但是最后的成 品却不一定与仿真时完全一样,因为,再实际接线中有着各种各样的条 件制约着。而且,在仿真中无法成功的电路接法,在实际中因为芯片本 身的特性而能够成功。所以,在设计时应考虑两者的差异,从中找出最 适合的设计方法。 通过这次学习,让我对各种电路都有了大概的了解,所以说,坐而
28

基于单片机的数字温度计课程设计

言不如立而行,对于这些电路还是应该自己动手实际操作才会有深刻理 解。 从这次的课程设计中,我真真正正的意识到,在以后的学习中,要 理论联系实际,把我们所学的理论知识用到实际当中,学习单机片机更 是如此,程序只有在经常的写与读的过程中才能提高,这就是我在这次 课程设计中的最大收获。 本来起初做的函数信号发生器,仿真实验结果挺理想,调试过程发现 波形失真比较严重,具体实验数据也测量不到,可能是实验数据参数选择 还是有点问题 ,实战经验还是不足的 ,迫于期末考试的压力 ,不得不重新 选择做这个 51 的数字温度计,作品还有很多不足,对于 C 语言也还没有更 熟悉,深层次的理解,在答辩时还有很多不懂,梁老师也积极为我们解答, 感谢老师的指导,我们会继续努力,放假之后继续把函数信号发生器系统 再优化,把作品完成,如果有什么不懂的地方,还希望老师不吝赐教.

29


赞助商链接
相关文章:
基于单片机的数字温度计课程设计报告
基于单片机的数字温度计课程设计报告_理学_高等教育_教育专区。基于单片机的数字温度计课程设计报告单片机课程设计报告 数字温度计课程设计 姓学 名号: 专业班级: 自动...
基于单片机的数字温度计设计
单片机原理及系统课程设计报告 基于单片机的数字温度计设计 摘要本数字温度计是以单片机 AT89C52 为数据处理核心,运用 DS18B20 单总线数 字式温度传感器进行温度采集...
单片机数字温度计课程设计报告
图 1 所示为数字温度计的一般结构框图: LCD1602 显示 STC90C51 主控制器 报警温度调 整键 2 数字温度计课程设计报告 蜂鸣器,指示灯 单片机时钟 振荡 DS18B20 ...
单片机课程设计报告(数字温度计)_图文
单片机课程设计报告(数字温度计)_计算机硬件及网络_IT/计算机_专业资料。单片机设计 单片机课程设计报告 课题:基于单片机的数字温度计设计 1 方案设计 2 系统的硬件...
基于单片机的数字温度计课程设计报告_图文
单片机原理及系统课程设计报告 基于单片机的数字温度计设计 1 引言设计一个数字温度计, 以单片机为控制核心, 运用集成度较高的温度传感器和 显示器能够较为准确测量...
单片机课程设计数字温度计
习环节,它包括选择课设任务、软件设计,硬件设计,调试和编写课 设报告等实践内容...本文将介绍一种基于单片机控制理论及其应用系统设计的数字温度计。 本文主要介绍了...
基于51单片机的数字温度计课程设计(原创)
基于51单片机的数字温度计课程设计(原创)_工学_高等教育_教育专区。原创的课设报告,非常有价值。摘要温度的检测与控制是工业生产过程中比较典型的应用。本设计以 ...
精品单片机课程设计报告-基于单片机的数字温度计设计-定
单片机课程设计报告基于单片机的数字温度计设计 1 绪论 2 方案设计 3 系统的硬件设计 3.1 主控制器 3.2 显示电路 3.3 温度传感器工作原理 3.4 温度传感器接口...
基于单片机的数字温度计设计 1.1
基于单片机的数字温度计设计 1.1 - 单片机原理及系统课程设计报告 基于单片机的数字温度计设计 摘要 本数字温度计是以单片机 AT89C52 为数据处理核心,运用 DS...
单片机课程设计报告(数字温度计)_图文
单片机课程设计报告(数字温度计) - 操作 课程设计成绩 报告 综合 指导教师签名 湖南理工学院南湖学院 单片机课程设计报告 基于单片机的数字温度计设计 姓学系专班 ...
更多相关标签: