资源描述
《单片机原理及应用》课程设计任务书
二级学院:电子信息和电气工程学院 专业: 班级:
学生姓名
指导老师
职 称
讲师
课题名称
基于51单片机温度警报器设计
课题工作内容
1、 设计内容:硬件电路设计、软件电路设计 2、 总体方案选择、讨论确定。软件步骤图设计,硬件电路各部分设计,程序软调试、整机调试。 3、 撰写设计汇报
指标要求
1、LED能显示传感器温度 2、温度高于30度或小于15度,蜂鸣器发出警报
进程安排
第一天 下达任务、讲授、查资料 第二天 方案确定 第三天、第四天 软、硬件设计 第五天~第八天 软、硬件调试 第九天 撰写汇报 第十天 答辩考评
关键参考文件
[1]钟晓伟,宋哲存,基于单片机试验是温湿度控制系统设计 [A] 林业机械和木工设备
[2]叶景,基于单片机温度控制系统设计 经验和交流,
[3]杨光友.单片机微型计算机原理及接口技术[M].北京:中国水利水电出版社,
地点
起止日期
9.5-9.15
课 程 设 计
题 目:基于单片机数字温度报警器设计
姓 名:
学 院:
专 业:
班 级:
学 号:
指导老师:
9月15日
目 录
摘要 4
1 引言 4
1.1课题背景 4
1.2研究内容和意义 6
2 芯片介绍 6
2.1 DS18B20概述 6
2.1.1 DS18B20封装形式及引脚功效 7
2.1.2 DS18B20内部结构 7
2.1.3 DS18B20供电方法 9
2.1.4 DS18B20测温原理 10
2.1.5 DS18B20ROM命令 12
2.2 AT89C52概述 13
2.2.1单片机AT89C52介绍 13
2.2.2功效特征概述 13
3 系统硬件设计 14
3.1 单片机最小系统设计 14
3.2 温度采集电路设计 15
3.3 LED显示报警电路设计 16
4 总结 16
致谢 17
参考文件 18
附录A 总电路图 19
附录B 原器件清单 19
附录C 温度报警器部分程序 20
摘 要
伴随时代进步和发展,温度测试已经影响到我们生活、工作、科研、各个领域,已经成为了一个很关键事情,所以设计一个温度测试系统势在必行。
本文关键介绍了一个基于AT89C52单片机数字温度报警器系统。具体描述了利用数字温度传感器DS18B20开发测温系统过程,关键对传感器在单片机下硬件连接,软件编程和各模块系统步骤进行了详尽分析,对各部分电路也一一进行了介绍,该系统能够方便实现温度采集和报警,并能够依据需要任意上下限报警温度,它使用起来相当方便,含有精度高、量程宽、灵敏度高、体积小、功耗低等优点,适合于我们日常生活和工、农业生产中温度测量,也能够当做温度处理模块潜入其它系统中,作为其它主系统辅助扩展。DS18B20和AT89C52结合实现最简温度报警系统,该系统结构简单,抗干扰能力强,适合于恶劣环境下进行现场温度测量,有广泛应用前景。
关键词:单片机;温度检测;AT89C52;DS18B20;
1 引言
1.1课题背景
温度是工业对象中关键被控参数之一,如冶金、机械、食品、化工各类工业生产中,广泛使用多种加热炉、热处理炉、反应炉等,对工件温度处理要求严格控制。伴随科学技术发展,要求温度测量范围向深度和广度发展,以满足工业生产和科学技术要求。
基于AT89C51单片机提升了系统可移植性、扩展性,利于现代测控、自动化、电气技术等专业实训要求。以单片机为关键设计温度报警器,含有安全可靠、操作简单方便、智能控制等优点。
温度对于工业生产如此关键,由此推进了温度传感器发展。温度传感器关键经过了三个发展阶段[1]:
(1)模拟集成温度传感器。该传感器是采取硅半导体集成工艺制成,所以亦称硅传感器或单片集成温度传感器。此种传感器含有功效单一(仅测量温度)、
测温误差小、价格低、响应速度快、传输距离远、体积小、微功耗等特点,适合远距离测温、控温,不需要进行非线性校准,外围电路简单。它是现在在中国外应用最为普遍一个集成传感器,经典产品有AD590、AD592、TMP17、LM135等;
(2)模拟集成温度控制器。模拟集成温度控制器关键包含温控开关、可编程温度控制器,经典产品有LM56、AD22105和MAX6509。一些增强型集成温度控制器(比如TC652/653)中还包含了A/D转换器和固化好程序,这和智能温度传感器有一些相同之处。但它自成系统,工作时并不受微处理器控制,这是二者关键区分;
(3)智能温度传感器 (亦称数字温度传感器)。智能温度传感器是在20世纪90年代中期问世,其内部全部包含温度传感器、A/D转换器、信号处理器、存放器(或寄存器)和接口电路。有产品还带多路选择器、中央控制器(CPU)、随机存取存放器(RAM)和只读存放器(ROM)。智能温度传感器特点是能输出温度数据及相关温度控制量,适配多种微控制器(MCU);而且它是在硬件基础上经过软件来实现测试功效,其智能化程度也取决于软件开发水平。
现代信息技术三大基础是信息采集[2](即传感器技术)、信息传输(通信技术)和信息处理(计算机技术)。传感器属于信息技术前沿尖端产品,尤其是温度传感器被广泛用于工农业生产、科学研究和生活等领域,数量高居多种传感器之首。数字温度传感器能够直接将被检测温度信息以数字化形式输出,和传统模拟式温度传感器相比,含有测量精度高、功耗低、稳定性好、外围接口电路简单特点。而单片机微处理器越来越丰富外围功效模块,愈加方便了数字式温度传感器输出信号处理。
智能温度传感器内部全部包含温度传感器、A/D转化器、信号处理器、存放器(或寄存器)和接口电路。有产品还带多路选择器、中央处理器(CPU)、随机存取存放器(RAM)和只读存放器(ROM)。而且它是在硬件基础上经过软件来实现测试功效,其智能化程度也取决于软件开发水平。进入二十一世纪后,智能温度传感器正朝着高精度、多功效、总线标准化、高可靠性及安全性、开发虚拟传感器和网络传感器、研制单片机测温系统等方向发展。数字化温度传感器能够直接将温度量以数字脉冲信号形式输出,含有测量精度高、抗干扰能力强、传输距离远、外围接口电路简单等很多优点。同时数字温度传感器还可直接和微处理器进行接口,大大方便了传感器输出信号处理.数字单总线温度传感器是现在最新测温器件,它集温度测量,A/D转换于一体,含有单总线结构,数字量输出,直接和微机接口等优点。
1.2研究内容和意义
本温度报警器以AT89C51单片机为控制关键,由一数字温度传感器DS18B20测量被控温度,结合7段LED和驱动LED74LS245组合而成。当被测量值超出预设范围则发出警报,且精度高,适适用于大多数工业生产和教育教学领域。
温度是一个最基础环境参数,它是和人类生活、工作关系最亲密物理量,也是各门学科和工程研究设计中常常碰到和必需正确测量物理量。从工业炉温、环境气温到人体温度;从空间、海洋到家用电器,各个技术领域全部离不开测温和控温。所以,研究温度测量和控制方法含相关键意义。
AT89C52单片机
数字温度传感器
双限报警系统
译码显示电路
设计原理
2 芯片介绍
2.1 DS18B20概述
DS18B20是Dallas企业继DS1820后推出一个改善型智能数字温度传感器,和传统热敏电阻相比,只需一根线就能直接读出被测温度值,并可依据实际需求来编程实现9~12位数字值读数方法[3]。
2.1.1 DS18B20封装形式及引脚功效
图2.1 DS18B20封装形式和引脚功效
图2.1所表示,DS18B20外形如一只三极管,引脚名称及作用以下:
GND:接地端。
DQ:数据输入/输出脚,和TTL电平兼容。
VDD:可接电源,也可接地。因为每只DS18B20全部能够设置成两种供电方法,即数据总线供电方法和外部供电方法。采取数据总线供电方法时VDD接地,能够节省一根传输线,但完成数据测量时间较长;采取外部供电方法则VDD接+5V,多用一根导线,但测量速度较快。
2.1.2 DS18B20内部结构
64位ROM和单线接口
存放和控制逻辑
高速缓存器
温度传感器
高温触发器TH
低温触发器TL
匹配寄存器
8位CRC发生器
电源检 测
C
DQ
VDD
内部电源VDD
图2.2 DS18B20内部结构
图2.2中出示了DS18B20 关键内部部件,下面对DS18B20内部部分进行简单描述[4]:
(1)64位ROM。64位ROM是由厂家使用激光刻录一个64位二进制ROM代码,是该芯片标识号,如表2.1所表示:
表2.1 64位ROM标识
8位循环冗余检验
48位序列号
8位分类编号(10H)
MSB LSB
MSB LSB
MSB LSB
第1个8位表示产品分类编号,DS18B20分类号为10H;接着为48位序列号。它是一个大于281*1012十进制编码,作为该芯片唯一标示代码;最终8位为前56位CRC循环冗余校验码,因为每个芯片64位ROM代码不一样,所以在单总线上能够并接多个DS18B20进行多点温度实习检验。
(2)温度传感器。温度传感器是DS18B20关键部分,该功效部件可完成对温度测量经过软件编程可将-55~125℃范围内温度值按9位、10位、11位、12位分辨率进行量化,以上分辨率全部包含一个符号位,所以对应温度量化值分别为0.5℃、0.25℃、0.125℃、0.0625℃,即最高分辨率为0.0625℃。芯片出厂时默认为12位转换精度。当接收到温度转换命令(44H)后,开始转换,转换完成后温度以16位带符号扩展二进制补码形式表示,存放在高速缓存器RAM第0,1字节中,二进制数前5位是符号位。假如测得温度大于0,这5位为0,只要将测得数值乘上0.0625即可得到实际温度;假如温度小于0,这5位为1,测得数值需要取反加1再乘上0.0625即可得到实际温度。
(3)高速缓存器。DS18B20内部高速缓存器包含一个高速暂存器RAM和一个非易失性可电擦除EEPROM。非易失性可点擦除EEPROM用来存放高温触发器TH、低温触发器TL和配置寄存器中信息。
(4)配置寄存器。配置寄存器内容用于确定温度值数字转换率。DS18B20工作是按此寄存器分辨率将温度转换为对应精度数值,它是高速缓存器第5个字节,该字节定义如表2.2所表示:
表2.2 匹配寄存器
TM
R0
R1
1
1
1
1
1
TM是测试模式位,用于设置DS18B20在工作模式还是在测试模式,在DS18B20出厂时该位被设置为0,用户不要去改动;R1和R0用来设置分辨率;其它5位均固定为1。DS18B20分辨率设置如表2.3所表示:
表2.3 DS18B20分辨率设置
R1
R0
分辨率
最大转换时间 /ms
0
0
9位
93.75
0
1
10位
187.5
1
0
11位
375
1
1
12位
750
DS18B20依靠一个单线端口通讯。在单线端口条件下,必需先建立ROM 操作协议,才能进行存放器和控制操作。所以,控制器必需首先提供下面5个ROM 操作命令之一:
1)读ROM;
2)匹配ROM;
3)搜索ROM;
4)跳过ROM;
5)报警搜索。
这些命令对每个器件激光ROM 部分进行操作,在单线总线上挂有多个器件时,能够区分出单个器件,同时能够向总线控制器指明有多少器件或是什么型号器件。成功实施完一条ROM 操作序列后,即可进行存放器和控制操作,控制器能够提供6 条存放器和控制操作指令中任一条。一条控制操作命令指示DS18B20完成一次温度测量。测量结果放在DS18B20暂存器里,用一条读暂存器内容存放器操作命令能够把暂存器中数据读出。温度报警触发器TH 和TL 各由一个EEPROM字节组成。假如没有对DS18B20使用报警搜索命令,这些寄存器能够做为通常见途用户存放器使用。能够用一条存放器操作命令对TH 和TL 进行写入,对这些寄存器读出需要经过暂存器。全部数据全部是以最低有效位在前方法进行读写。
2.1.3 DS18B20供电方法
DS18B20能够采取外部电源供电和寄生电源供电两种模式。外部电源供电模式是将DS18B20GND直接接地,DQ和但单总线相连作为信号线,VDD和外部电源正极相连。图2.3所表示:
单片机
DS18B20
外部+5V电源
VDD
DQ
4.7K
VCC
其它单线器件
图2.3 DS18B20外部供电方法
图中DS18B20DQ端口经过接入一个4.7K上拉电阻到VCC,从而实现外部电源供电方法。
寄生电源供电模式图2.4所表示:从图中可知,DS18B20GND和VDD均直接接地,DQ和单总线相连,单片机其中一个I/O口和DS18B20DQ端相连。
VCC
单片机
DS18B20
GND
4.7K
图2.4 DS18B20寄生电源供电方法
+5V
2.1.4 DS18B20测温原理
DS18B20测温原理图2.5所表示, 其关键由斜率累加器、温度系数振荡器、减法计数器、温度存放器等功效部件组成。
图2.5 DS18B20测温原理
DS1820 是这么测温[5]:用一个高温度系数振荡器确定一个门周期,内部计数器在这个门周期内对一个低温度系数振荡器脉冲进行计数来得到温度值。计数器被预置到对应于-55℃一个值。假如计数器在门周期结束前抵达0,则温度寄存器(一样被预置到-55℃)值增加,表明所测温度大于-55℃。同时,计数器被复位到一个值,这个值由斜坡式累加器电路确定,斜坡式累加器电路用来赔偿感温振荡器抛物线特征。然后计数器又开始计数直到0,假如门周期仍未结束,将反复这一过程。
斜坡式累加器用来赔偿感温振荡器非线性,以期在测温时取得比较高分辨率。这是经过改变计数器对温度每增加一度所需计数值来实现。所以,要想取得所需分辨力,必需同时知道在给定温度下计数器值和每一度计数值。
DS18B20内部对此计算结果可提供0.5℃分辨率。温度以16bit带符号位扩展二进制补码形式读出,表2.4 给出了温度值和输出数据关系。数据经过单线接口以串行方法传输。DS18B20测温范围-55℃~+125℃,以0.5℃递增。
表2.4 温度数据关系
温度℃
数据输出(二进制)
数据输出(十六进制)
+125
00000000 11111010
00FA
+25
00000000 00110010
0032
+0.5
00000000 00000001
0001
0
00000000 00000000
0000
-0.5
11111111 11111111
FFFF
-25
11111111 11001110
FFCE
-55
11111111 10010010
FF92
S18B20遵照单总线协议,每次测温时全部必需有4个过程[6]:
• 初始化;
• 传送ROM 操作命令;
• 传送ROM操作命令;
• 数据交换;
2.1.5 DS18B20ROM命令
read ROM(读ROM).命令代码为33H,许可主设备读出DS18B2064位二进制ROM代码。该命令只适适用于总线上存在单个DS18B20.
Match ROM(匹配ROM)。命令代码为55H,若总线上有多个从设备时,适用该命令可选中某一指定DS18B20,即只有和64位二进制ROM代码完全匹配DS18B20才能响应其操作。
Skip ROM(跳过ROM)。命令代码为CCH,在开启全部DS18B20转换之前或系统只有一个DS18B20时,该命令将许可主设备不提供64位二进制ROM代码就适用存放器操作命令。
Search ROM(搜索ROM)。命令代码为F0H,当系统首次开启时,主设备可能不知纵向上有多少个从设备或它们ROM代码,适用该命令可确定系统中从设备个数及其RON代码。
Alarm ROM(报警搜索ROM)。命令代码为ECH,该命令用于判别和定位系统中超出程序设定报警温度值。
Write scratchpad(写暂存器)。命令代码为4EH,许可主设备向DS18B20暂存器写入两个字节数据,其中第一个字节写入TH中,第二个字节写入TL中。能够在任何时刻发出复位命令终止数据写入。
Read scratchpad(读暂存器)。命令代码为BEH,许可主设备读取暂存器中内容。从第一个字节开始直到读完第九个字节CRC读完。也能够在任何时刻发出复位命令中止数据读取操作。
Copy scratchpad(复制暂存器)。命令代码为48H,将温度报警触发器TH和TL中字节复制到非易失性EEPROM。若主机在该命令以后又发出读操作,而DS18B20又忙于将暂存器中内容复制到EEPROM时,DS18B20就会输出一个“0”,若复制结束,则DS18B20输出一个“1”。
Convert T(温度转换)。命令代码为44H,开启一次温度转换,若主机在该命令以后又发出其它操作,而DS18B20又忙于温度转换,DS18B20就会输出一个“0”,若转换结束,则DS18B20输出一个“1”。
Recall E2(拷回暂存器)。命令代码为B8H。将温度报警触发器TH和TL中字节从EEPROM中拷回到暂存器中。该操作是在DS18B20上电时自动实施,若实施该命令后又发出读操作,DS18B20会输出温度转换忙标识:0为忙,1完成。
Read power supply(读电源使用模式)。命令代码为B4H。主设备将该命令发给DS18B20后发出读操作,DS18B20会返回它电源使用模式:0为寄生电源,1为外部电源。
2.2 AT89C52概述
2.2.1单片机AT89C52介绍
AT89C52是一个低电压,高性能CMOS8位单片机,片内含8k bytes可反复擦写Flash只读程序存放器和256 bytes随机存取数据存放器(RAM),器件采取ATMEL企业高密度、非易失性存放技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器和Flash存放单元,AT89C52单片机在电子行业中有着广泛应用。
2.2.2 关键功效特征
1、兼容MCS51指令系统 2、8k可反复擦写(大于1000次)Flash ROM; 3、32个双向I/O口; 4、256x8bit内部RAM; 5、3个16位可编程定时/计数器中止; 6、时钟频率0-24MHz; 7、2个串行中止,可编程UART串行通道; 8、2个外部中止源,共8个中止源; 9、2个读写中止口线,3级加密位; 10、低功耗空闲和掉电模式,软件设置睡眠和唤醒功效; 11、有PDIP、PQFP、TQFP及PLCC等多个封装形式,以适应不一样产品需求。
3 系统硬件设计
3.1 单片机最小系统设计
单片机是一个集成电路芯片,是采取超大规模集成电路技术把含有数据处理能力中央处理器CPU随机存放器RAM、只读存放器ROM、多个I/O口和中止系统、定时器/计时器等功效集成到一块硅片上组成一个小而完善计算机系统。此次课程设计中选择AT89C52式单片机,其最小系统关键由电复位、振荡电路组成。单片机最小系统图3所表示。
单片机复位电路原理是在单片机复位引脚RST上电阻和电容,实现上电复位。当复位电平连续两个时钟周期以上时复位有效。复位电路由按键复位和上电复位两部分组成,上电复位是在复位引脚上连接一个电容到VCC,再连接一个电阻到GND;按键复位是在复位电容上并联一个开关,当开关按下时电容被放电、RST也被拉到高电平,而且因为电容充电,会保持一段时间高电平来使单片机复位。
AT89C51单片机使用12MHZ晶振最为振荡源,因为单片机内部有振荡电路,因另外部只要连接一个晶振和两个电容即可,电容通常在15pF至50pF之间。外部晶振结合单片机内部电路产生单片机所需时钟频率。
图3 单片机最小系统
3.2 温度采集电路设计
温度采集电路部分,采取数字温度传感器DS18B20进行温度采集。DS18B20是DALLAS企业生产一线式数字温度传感器,含有3个引脚;温度侧量范围为-55℃—+125℃,测量精度为0.5℃;被测温度用符号扩展16位数字量方法串行输出;CPU只需用一个端口线就能够和DS18B20通信。温度采集电路图4所表示。
图4 温度采集电路
3.3 LED显示报警电路设计
LED数码管和单片机P0口相连,单片机将采集到温度值转化为和数码管对应数据,经过P0口输出显示。即信号经过译码管端口a、b、c、d、e、f、g 、dp 端来控制每段译码管亮灭是否,同时经过端口1、2、3、4 四个端口来控制四个译码管。在此次设计中,用集成芯片74HC245驱动数码管。同时当采集到温度值超出所设置范围时,单片机会输出一信号,经过三极管放大后驱动蜂鸣器发出报警信号。LED数码管报警电路
4 总结
本设计是以温度采集及控制过程设计为总目标,以89C52单片机最小应用系统为总控制中心,辅助设计有温度采样电路、A/D转换接口、加热电路、LED数码管动态串行显示器等。
本设计关键、难点是:
(1) 要掌握温度传感器原理、结构、应用等;
(2) 考虑从非电量信号到电量信号电路实现原理和和单片机接口;
(3) 熟悉MCS-51编程技术,实现单片机对温度调整控制;
(4) 整体电路仿真调试。
此次设计优点:采取单片机AT89C51 性价比高;热敏电阻温度传感器转化温度方法很简练且精度高、测试范围较广。
因为时间及精力所限,对温度控制系统做了整体设计,具体实现了其中温度报警部分设计,即温度控制系统采集、显示及报警模块。
实物图以下:
致谢
在论文完成之际,我首先要想车晓岩老师表示最真挚谢意。车老师时常督促我抓紧时间做毕业设计,并常常讨论,给我提出好提议。车老师不仅工作认真,她严谨治学态度令我受益匪浅,相信在我以后生活学习带来深远影响。在此衷心向车老师表示我感激之心。
我还要尤其感谢各位同学给了我无私帮助,她们帮我处理了很多设计中碰到难题,并帮我测试程序。
因为本人学识有限,加之时间仓促,文中不免有错误和待改善之处,真诚欢迎各位师长、同学提出宝贵意见。
参考文件:
[1]钟晓伟,宋哲存,基于单片机试验是温湿度控制系统设计 [A] 林业机械和木工设备
[2]叶景,基于单片机温度控制系统设计 经验和交流,
[3]杨光友.单片机微型计算机原理及接口技术[M].北京:中国水利水电出版社,
[4]李丹妮,单片机温度控制系统设计[J]九江学院报
[5]ATMLE Corporation,8-Bit Microcontroller AT89C51 DATE SHEET.0265F-A-12/97
[6]胡寿松,自动控制原理[M]北京:科学出版社,
[7]刘笃仁,韩保君,传感器原理及应用技术 西安电子科技大学出版社,
[8]梅丽凤,王艳秋,汪毓铎,张军,单片机原理及接口技术 清华大学出版社
[9]深圳市计算机行业协会,全国单片机和嵌入式系统学术交流会,北京航空航天大学出版社,
[10]张义和,陈敌北,例说8051[M]北京:人民邮电出版社,
[11] 张开生,郭国法,MCS-51单片机温度控制系统设计[J]微型计算机信息,
[12]Dallas Semiconductor,Programmable Resolution 1-WIRE Digital Thermometer DS18B20 DATE SHEET.
附录A:总电路图
附录B:原器件清单
序号
编号
名称
型号
数量
1
R1
电阻
4.7K
1
2
R2
电阻
100K
1
3
R3
电阻
5K
1
4
RP1
排阻
5K
1
5
C1、C2
电容
33P
2
6
C3
电容
100u
1
7
S1
按键开关
1
8
X1
晶振
12M
1
9
Q1
三极管
PNP
1
10
LS1
蜂鸣器
1
11
U1
51单片机
AT89C52
1
12
U2
温度传感器
DS18B20
1
13
U3
集成芯片
74HC245
1
14
U4
4位7段数码管
共阳
1
附录C:温度报警器部分程序
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit DQ=P3^7;
sbit beep=P3^0;
void reset(); //DS18B20复位函数
void write_byte(uchar val); //DS18B20写命令函数
uchar read_byte(void); //DS18B20读1字节函数
void read_temp(); //温度读取函数
void LED_display();
void alarm();
uchar tempH,tempL,num;
uchar table[10]= {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //0~9LED字符编码
uchar setValue_low=15;
uchar setValue_high=30;
main()
{
while(1)
{
read_temp();
LED_display();
alarm();
}
}
void delay(uint t)
{
for(;t>0;t--);
}
void reset() //DS18B20复位
{
uchar presence=1;
while(presence)
{
while(presence)
{
DQ=1;_nop_();_nop_();
DQ=0;
delay(50);
DQ=1;
delay(6);
presence=DQ;
}
delay(45);
presence=~DQ;
}
DQ=1;
}
void write_byte(uchar val) //DS18B20写一个字节
{
uchar i;
for(i=8;i>0;i--)
{
DQ=1;_nop_();_nop_();
DQ=0;_nop_();_nop_();_nop_();_nop_();_nop_();
DQ=val&0x01;
delay(6);
val=val>>1;
}
DQ=1;
_nop_();
}
uchar read_byte(void) //DS18B20读一个字节
{
uchar i;
uchar value=0;
for(i=8;i>0;i--)
{
DQ=1;_nop_();_nop_();
value>>=1;
DQ=0;
_nop_();_nop_();_nop_();_nop_();
DQ=1;_nop_();_nop_();_nop_();_nop_();
if(DQ)
value|=0x80;
delay(6);
}
DQ=1;
return(value);
}
void read_temp() //从DS18B20读取温度值
{
uchar ch1,ch2;
reset();
write_byte(0xcc);
write_byte(0x44);
reset();
write_byte(0xcc);
write_byte(0xbe);
ch1=read_byte(); //DS18B20温度数值是16位二进制,精度高,最终四位是温度小数部分,最高五位为符号位(即正负温度)
ch2=read_byte();
num=(ch2<<4)|(ch1>>4); //只取温度值中间八位,小数部分舍去,符号位舍去四位。
tempH=num/10; //温度十位
tempL=num-tempH*10; //温度个位
}
void LED_display() //显示检测温度
{
P2=0x0;
P2=2;
P0=table[tempL];
delay(50);
P2=0x0;
P2=1;
P0=table[tempH];
delay(50);
P2=0x0;
}
void alarm() //报警
{
if(setValue_low<=num && setValue_high>=num)
beep=1; //在温度许可范围,不报警
else
beep=~beep;
}
展开阅读全文