毕业论文-基于DS18B20数字温度传感器的数字温度计设计 下载本文

内容发布更新时间 : 2024/11/15 16:26:23星期一 下面是文章的全部内容请认真阅读。

1.3 实物的制作

1.3.1 PCB板的制作

原理图与PCB板都绘制完成后,开始着手制作实物。首先制作PCB板,讲图1-7按照100%的比例打印到热转印纸上,图纸需打印在纸张光滑的一面,打印好后将图纸平铺在以打磨抛光好的PCB板上,将纸张固定,通过热转印机将纸张上的图形转印到PCB板上,转印好后检查是否有没转印到地方,这些地方可用字迹涂改液涂抹,涂抹完后可以开始腐蚀PCB板。将转印好的PCB板放入腐蚀机中,大概腐蚀100秒,将板上不用的铜箔腐蚀去,腐蚀好后,将板取出,清水冲洗掉腐蚀夜,这时板上除转印了油墨的地方,其他地方的铜箔均以腐蚀掉,再经由抛光机可将板上油墨出去。如在绘制PCB板时放置了焊盘,就可以用打孔机对照板上焊孔打孔,如之前没有放置焊盘,还需对照原图自己瞄点在打孔,打孔完成后,PCB板就制作完成,可以对照原图插放焊接元器件。 1.3.2 插件与焊接

PCB板制作完成后,开始元器件的安装与焊接,对照原理图和PCB图,将元件插放到对应位置,电阻、瓷片电容、晶振没有正负之分插放可以不考虑元件方向。电解电容,三极管,DS18B20温度传感器,排阻都有正负极性之分,插元件时要注意分清方向和极性,特别是三极管的基极、集电极和发射极要对照实物引脚插放,一旦插错引脚就会影响试验成功。AT89C51芯片和数码管可以先把与之对应的元件插槽插到PCB板上,不将它们固定在板上方便于之后的实物调试。所有元件插放好后,开始焊接固定,焊接时要注意焊接的时间,时间过长可能会将PCB板上的铜箔焊掉,影响电路的连接,焊点要求光滑美观,焊接完后减去元件过长引脚,以防引脚接触是电路断路,引脚剪完可用万用表检测电路是否短路,是否存在虚焊,电路是否连通。检查无误,实物(图1-8)做成后则可进入下一环节,对物件进行软件设计。

图1-8 实物图

9

第二章 温度计的软件设计

2.1 程序编写软件

本设计需要从硬件和软件两方面来完成设计,其中软件设计中程序的编写选择了KeiluVision2编程软件来完成。

2.2 程序设计思路

本设计的程序编写成功后,可使得AT89C51芯片能对温度传感器采集的温度信号进行处理,并通过输出端口输出与之对应的高低电平信号,控制数码管将当前环境温度显示出来。AT89C51芯片将高低电平信号转换为BCD码,就可以由数码管显示出数据,温度计程序的关键在于从DS18B20温度传感器中读出温度以及DS18B20内部温度数据转换,编程中主要语句应该用于描叙从DS18B20中读出温度信号。

图2-1 DS18B20操作流程图

10

2-3 程序的编写

确定编程的基本思路后,开始编写程序,编程课选用单片机C语言或汇编语言编程,本设计采用汇编语言,根据图2-1所示基本思路完成程序的编写:

;这是关于DS18B20的读写程序,数据脚P2.4,晶振12MHZ ;采用的是启东单片机开发板AY-MPU89S51E

;进行温度显示,这里我们考虑用四位数码管来显示温度 ;显示范围0.0到+99.5度,显示精度为0.5度

;单片机内存分配申明

TEMPER_L EQU 29H ;用于保存读出温度的低8位 TEMPER_H EQU 28H ;用于保存读出温度的高8位 FLAG1 EQU 38H ;是否检测到DS18B20标志位 A_BIT EQU 20H ;数码管个位数存放内存位置 B_BIT EQU 21H ;数码管十位数存放内存位置 C_BIT EQU 22H ;数码管小数存放内存位置 ORG 0000H ;主程序开始 AJMP MAIN ORG 0030H MAIN:

CLR FLAG1 ;清所有标志位 LCALL INIT_1820 ;调用复位子程序 LCALL GET_TEMPER ;调用读温度子程序

;因为12位转化时每一位的精度为0.0625度,我们由精度只要知道29H的低4位的最高位

;将28H中的低3位移入29H中的高4位的相应位,且最高位补0,这样获得一个新字节,这个字节就是实际测量获得的温度值整数部分 MOV R0,29H MOV A,29H

MOV C,40H ;将28H中的最低位移入C,40H为位地址 RRC A MOV C,41H RRC A MOV C,42H RRC A CLR C RRC A MOV 29H,A

LCALL DISPLAY ;调用数码管显示子程序 AJMP MAIN

;DS18B20复位初始化子程序 INIT_1820: SETB P2.4 NOP

11

CLR P2.4 MOV R1,#2 LT1:

MOV R0,#150 ;主机发出延时600us的复位低脉冲 DJNZ R0,$ DJNZ R1,LT1

SETB P2.4 ;然后拉高数据线15-60us MOV R1,#8 DJNZ R1,$ MOV R0,#22 LT2:

JNB P2.4,LT3 ;DJNZ R0,LT2 LJMP LT4 LT3:

SETB FLAG1 ;LJMP LT5 LT4:

CLR FLAG1 ;LJMP LT7 LT5:

MOV R0,#210 LT6:

DJNZ R0,LT6 ;LT7:

SETB P2.4 RET

;读出转换后的温度值 GET_TEMPER: JB FLAG1,GT2

RET ;GT2:

MOV A,#0CCH ;LCALL WRITE_1820

MOV A,#44H ;LCALL WRITE_1820

LCALL D1MS ;LCALL INIT_1820 ;MOV A,#0CCH ;LCALL WRITE_1820

MOV A,#0BEH ;LCALL WRITE_1820

LCALL READ_1820 ;RET

等待DS18B20回应 置标志位,表示DS1820存在 清标志位,表示DS1820不存在 时序要求延时一段时间约420us 判断DS1820是否存在?若DS18B20不存在则返回 跳过ROM匹配 发出温度转换命令 延时一段时间,等待AD转换结束 准备读温度前先复位 跳过ROM匹配 发出读温度命令 将读出的温度数据保存到28H/29H 12