温度测量与报警系统设计
课程设计说明书
题 目: 姓 名:学 号:指 导 教 师:专 业 年 级:所在学院和系:完 成 日 期:课 程 名 称:
机电一体系统设计
目 录
1绪论................................................................................................................................................ 1
1.1 背 景 . ................................................................................................................................. 1 1.1 设计要求 . .......................................................................................................................... 1 1.3 设计任务 . .......................................................................................................................... 1 2系统总体方案设计 . ....................................................................................................................... 2
2.1 设计思想 . .......................................................................................................................... 2 2.2 方案论证 . .......................................................................................................................... 2
2.2.1 电源模块 . .............................................................................................................. 2 2.2.2 温度检测模块 . ........................................................................................................ 3 2.2.3 控制模块 . ................................................................................................................ 3 2.2.4 显示模块 . ................................................................................................................ 3 2.2.5 报警模块 . ................................................................................................................ 4 2.2.6 按键模块 . ................................................................................................................ 4 2.3 芯片选择 . .......................................................................................................................... 4
2.3.1电源模块 . ................................................................................................................. 4 2.3.2 温度检测模块 . ........................................................................................................ 4 2.3.3 控制模块 . ................................................................................................................ 5 2.3.4 显示模块 . ................................................................................................................ 5
3系统硬件设计 . ............................................................................................................................... 6
3.1 单片机最小系统 . .............................................................................................................. 6 3.2 传感检测电路 . .................................................................................................................. 6 3.3 显示模块 . .......................................................................................................................... 7 3.4 报警模块 . .......................................................................................................................... 8 3.5 按键模块 . .......................................................................................................................... 8 3.6 总 电 路 . .......................................................................................................................... 8
3.6.1 绘图软件简介 . ...................................................................................................... 8
3.6.2 电路原理图 . .......................................................................................................... 9 3.6.3 电路PCB 图 . ........................................................................................................ 10
4系统软件设计 . ............................................................................................................................. 12
4.1 程序设计思路 . ................................................................................................................ 12 4.2 主程序流程图 . ................................................................................................................ 12 4.3 获取温度程序流程图 . .................................................................................................... 13 4.4 报警程序流程图 . ............................................................................................................ 14 4.5 显示程序流程图 . ............................................................................................................ 15 4.6 数据处理程序流程图 . .................................................................................................... 15 4.7 编程软件简介 . ................................................................................................................ 16 5总结.............................................................................................................................................. 17 参考文献 . ........................................................................................................................................ 18 附录A . .......................................................................................................................................... 19 附录B . ............................................................................................................................................ 20 附录C . ............................................................................................................................................ 21
1绪论
1.1 背 景
温度温度是工业生产中主要的被控参数之一,与之相关的各种温度控制系统广泛应用于冶金、化工、机械、食品等领域。温度控制是工业生产过程中经常遇到的过程控制, 有些工艺过程对其温度的控制效果直接影响着产品的质量;同时,温度超过了系统工作正常范围将直接影响系统的寿命,甚至损坏系统;甚至可以说任何一个系统都必须工作在一定的温度范围内,因而设计一种较为理想的温度控制系统是非常有价值的。
自18世纪工业革命以来,工业的飞速发展离不开温度参量在控制系统中的应用。在冶金、钢铁、石化、水泥、玻璃、医药等等行业,可以说几乎80%的工业部门都不得不考虑着温度的因素。在工业生产中人们都需要对各类加热炉、热处理炉、反应炉和锅炉中的温度进行检测和控制 , 常用的控制电路根据应用场合和所要求的性能指标有所不同 , 在工业企业中, 如何提高温度控制对象的运行性能一直以来都是控制人员和现场技术人员努力解决的问题。这类控制对象惯性大, 滞后现象严重, 存在很多不确定的因素, 难以建立精确的数学模型, 从而导致控制系统性能不佳, 甚至出现控制不稳定、失控现象。
1.1 设计要求
设计要求:实现温度的测量与控制。
测温范围:0~100C ; 测量精度:0.1C ; 设有上、下限报警温度; 数码显示;
1.3 设计任务
设计任务:硬件设计(元器件选择、电路原理图与电路板图绘制等)、软件设计。
2系统总体方案设计
2.1 设计思想
本设计题目的设计要求是测量温度、报警及显示,根据设计要求要测量温度就需要
有温度传感器以及相应的信号调理电路;报警信号可以通过视觉信号也可以是声音或二者兼备来告知用户;显示可以通过数码管、LED 点阵、LCD 等;人机交互即极限温度设置可以用按钮或键盘来输入;有了这些之后,各部分的功能得以实现,但是要是他们有序地完成任务还需要一个控制器来协调和控制各部分的工作;系统要工作需要为系统供电,于是需要有电源部分。根据上述的设计思路绘制系统框图如下图1。
图1 系统框图
2.2 方案论证
2.2.1 电源模块
方案一:直接利用电池来提供一个合适的电压。由于干电池供电电压会因负载的不同以及会随着使用的过程而电压发生变化,这会影响到系统的正常工作。
方案二:采用AC-DC 的方式为系统供电,该方式是将交流电变为所需的直流电压,它需要有相应的变压器、整流电路、滤波电路和稳压电路等,该方案电路复杂,费用较高、对于这样一个小系统不经济。
方案三、采用DC-DC 的方式,该方式是将直流电转换为系统所需的电压,采用该方案可以用干电池作为也可以用开关电源适配器来作为DC 输入,可以简化系统的电源电路,提高系统的便携性能、降低成本。
根据上述的对三种方案的分析比较后,该系统采用方案三比较合理。
2.2.2 温度检测模块
方案一、采用普通的温度传感器,该方案需要设计相应的信号放大电路、滤波电路、AD 转换电等。
方案二、采用DS18B20智能温度传感器,该传感器内置相应的信号调理电路,直接输出数字量,而且才1-Wire 的方式与控制器进行信号交流,简化了硬件电路的设计,同时其转换精度也很高,价格实惠,性价比高,应用非常广。
由于DS18B20温度传感器的优异性能,且足够满足该系统的要求,故采用方案二。
2.2.3 控制模块
方案一:采用MCS-51系列单片机。传统的51 单片机具有价格低廉, 使用简单等特点,但其运算速度低,功能单一,RAM 、ROM 空间小等缺点。
方案二:采用AT 89C52单片机单片机作为控制模块。具有丰富的资源:RAM ,ROM 空间大、超强抗干扰、超低功耗、可送 STC-ISP 下载编程器、指令周期短、低电压、易于编写和调试等优点。这些特点极大地提高了开发效率。
鉴于AT89C52单片机价格便宜,功能齐全等特点,本系统采用AT89C52单片机为控制器。
2.2.4 显示模块
方案一:采用数码管显示
LED 显示器工作方式有两种:静态显示方式和动态显示方式。静态显示的特点是每个数码管的段选必须接一个8位数据线来保持显示的字形码。动态显示的特点是将所有位数码管的段选线并联在一起,由位选线控制是哪一位数码管有效。根据系统要求该系统应采用动态显示方式,采用数码管显示。
方案二:采用1602液晶显示,1602液晶模块内部的字符发生存储器(CGROM) 已经存储了160个不同的点阵字符图形,这些字符有:阿拉伯数字、英文字母的大小写、常
用的符号、和日文假名等,每一个字符都有一个固定的代码。
数码管消耗电力比液晶多一点,但是数码管显示更加清晰,更加适合在白天等强光条件下显示。液晶极其省电,但是使用有温度范围限制,且因是反光式的,在外界光线很明亮的情况下很容易看不清楚。用数码管完全可以满足该系统的要求,故采用方案一。
2.2.5 报警模块
方案一、采用用LED 来显示报警信号,根据颜色的不同可以很清楚地知道是低于最低极限温度还是高于最高极限温度的情况,但是它需要人在现场。
方案二、采用蜂鸣器报警,它的优点是当事人不必在现场,可以不受空间物体的阻碍作用而将报警信号传递给用户,但是至于是上述两种中的哪种情况不能很清楚的知道。
根据两种方案的比较发现,二者具有互补的作用,所以选择方案一和方案二来共同实现报警功能。
2.2.6 按键模块
方案一、用键盘作为人机交互的接口。 方案二、用独立按键来实现人机交互。
根据系统的要求可知,只需三个键即可满足要求,故从经济的角度来看,选择方案二比较合理。
2.3 芯片选择
2.3.1电源模块
系统要求输入5V 的直流电压,于是选择5V 的三端直流稳压器L7805CV 芯片,7805是X78XX 系列中的一种,它能固定地输出4.75-5.25V 的电压,能够保证系统工作的稳定性。
2.3.2 温度检测模块
温度传感器选择DALLAS 公司生产DS18B20数字温度计,它具有线路简单,体积小,抗干扰能力强,精度高的特点。封装后的DS18B20可用于电缆沟测温,高炉水循环测
温,锅炉测温,机房测温,农业大棚测温,洁净室测温,弹药库测温等各种非极限温度场合。耐磨耐碰,体积小,使用方便,封装形式多样,适用于各种狭小空间设备数字测温和控制领域。
2.3.3 控制模块
控制器选用ATMEL 公司生产的8位单片机——AT89C52,片内含8k bytes 的可反复擦写的Flash 只读程序存储器和256 bytes的随机存取数据存储器(RAM ),器件采用ATMEL 公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器和Flash 存储单元,AT89C52单片机在电子行业中有着广泛的应用。
2.3.4 显示模块
系统采用两个4位的数码管显示,如果直接与单片机相连,既占引脚又驱动能力不够,故选用74LS138译码器来进行位选以减少引脚占用数量,采用74HC573锁存器来提高驱动能力。
3系统硬件设计
3.1 单片机最小系统
单片机最小系统通常有时钟电路和复位电路,时钟电路的晶振选择12MHz 的频率,复位电路选用手动复位电路,因选用单片机内部的ROM 存储器,所以 EA 引脚接高电平。其电路如图2所示。
图2 单片机最小系统
3.2 传感检测电路
DS18B20温度传感器只有三个引脚,其中GND 接地,DQ 数据输入输出引脚经电阻上拉后
接单片机P3.7引脚,V DD 接外部电源。其电路如下图3所示。
图3 传感器电路图
3.3 显示模块
显示部分用两个4位的数码管显示,位选是通过74LS138译码器来实现的,译码器的输入端A 、B 、C 接单片机P2.2、P2.3、P2.4三个端口,其数据输出引脚接数码管的位选引脚,因译码器输出的是低电平有效,故选用的数码管是共阴极的,段选通过74HC573锁存器来驱动,锁存器经上拉电阻后与单片机的P0口相连,锁存器的输出端接数码管的段选引脚,但是不能直接相接,必须串联上限流电阻,流入数码管的电流可以是20mA 左右,其压降在2点几伏,接上100Ω的电阻即可。其电路如下图4所示。
3.4 报警模块
报警电路有蜂鸣器电路和LED 发光二极管电路两个不部分,蜂鸣器采用三极管来驱动,为了限制其流过电路,给它串上一个100Ω的电阻,发光二极管直接接单片机的,同样需串上一个100Ω
3.5 按键模块
按钮的一端接地,当按下时,单片机相应的引脚被拉低,于是可以通过程序查询的方式来判断是否有哪一个按键按下,实现其功能,其电路简单,不单独画出。
3.6 总 电 路
3.6.1 绘图软件简介
Proteus 软件是英国Labcenter electronics 公司出版的EDA 工具软件(该软件中国总代理为广州风标电子技术有限公司)。它不仅具有其它EDA 工具软件的仿真功能,还能仿真单片机及外围器件。它是目前最好的仿真单片机及外围器件的工具。虽然目前国内推广刚起步,但已受到单片机爱好者、从事单片机教学的教师、致力于单片机开发应用的科技工作者的青睐。Proteus 是世界上著名的EDA 工具(仿真软件),从原理图布图、代码调试到单片机与外围电路协同仿真,一键切换到PCB 设计,真正实现了从概念到产品的完整设计。是目前世界上唯一将电路仿真软件、PCB 设计软件和虚拟模型仿
8
真软件三合一的设计平台。
9
3.6.3 电路PCB 图
在用Proteus 绘制电路板时,采用的是自动布局和手动调整,布线采用的是手动布线,手动布线时应注意电路布布线的规则,具体内容如下。 1. 电源线和地线的布线规则如下。
· 在电源、地线之间加上去耦电容。
· 尽量加宽电源线、地线宽度,最好是地线比电源线宽。
· 数字电路的pcb 可用宽的地导线组成一个回路,即构成一个地网来使用,模拟电路的地不能这样使用。
· 用大面积铜层作地线,在印制板上把没被用上的地方都与地相连接作为地线用,或是做成多层板,电源和地线各占用一层。
2.PCB 要合理分区,单片机系统通常可分三区,即模拟电路区(怕干扰) ,数字电路区(即怕干扰、又产生干扰) ,功率驱动区(干扰源) 。
3. 时钟振荡电路、特殊高速逻辑电路部分用地线圈起来。让周围电场趋近于零。 4.I /O 驱动器件、功率放大器件尽量靠近印制板的边,靠近引出接插件。 5. 使用45°的折线布线,不要使用90°折线,以减小高频信号的发射。 6. 单面板、双面板,电源线、地线要尽量粗。信号线的过孔要尽量少。
7. 关键的线尽量短并要尽量粗,并在两边加上保护地。将敏感信号和噪声场带信号通过一条扁带电缆引出的话,要用地线-信号-地线……方式引出。
8. 石英振荡器下面、噪声敏感器件下面要加大地的面积而不应该走其它信号线。 9. 任何信号线都不要形成环路,如不可避免,环路应尽量小。
10
图7 系统PCB 图
11
4系统软件设计
4.1 程序设计思路
本系统主要是测量温度、设定极限温度值及其显示和报警,于是设计思路为:首先是系统初始化,然后从传感器中读数、进行数据处理,处理结果存储,如有用户设定极限温度值则将其存储覆盖之前的极限温度值,将处理的结果与设定值比较并决定是否报警,将数据输出给用户。其设计思路框图如图8所示。
图8 程序设计思路框图
4.2 主程序流程图
主程序主要完成单片机定时器的初始化,调用温度获取程序,温度显示存储区数据刷新,
温度报警判断、温度显示的功能,主程序采用了一个死循环,程序运行的过程中,不断地执行主程序,从而实现显示不断更新。流程图如图9所示。
12
图9 主程序流程图
4.3 获取温度程序流程图
该程序主要完成从DS18B20传感器获取温度值和人机交互的功能即对极限温度进行设
置,此程序是该系统实现温度测量的主要功能块,它同时会调用温度传感器的底层驱动程序,实现将温度传感器中的数据读入到单片机中,问数据处理程序提供原始数据。流程图如图10所示。
13
图10 获取温度程序流程图
4.4 报警程序流程图
报警程序的控制对象主要是蜂鸣器和红绿灯,根据主程序传给的实参,可以判断是超过上限温度还是低于下限温度,进而执行不同的操作,告诉用户报警状态。超过最高极限温度则蜂鸣器响和红灯亮;低于最小极限温度则蜂鸣器响,同时绿灯亮。流程图如图11所示。
图11 报警程序流程图
14
4.5 显示程序流程图
显示程序是用来显示当前温度值和极限温度值的,共有八位要显示,采用的是动态扫描方式,从左到右逐位显示,采用一个循环8次的程序,一次将显存数组变量中的数据输出给对应位,这样就可以显示所要显示的内容,程序流程图如图12所示。
图12 显示程序流程图
4.6 数据处理程序流程图
从DS18B20获取的温度值必须进行一定的转换才能得到真正的温度数值,DS18B20 的温
度操作是使用16 位,也就是说分辨率是0.0625,将读取到的两字节温度值乘以0.0625即为实际温度值,直接相乘后得到的值将会约去小数部分,但是该系统要求获取0.1的精确度,这样是不合理的,为此,可以用0.625去乘,这得到的温度值扩大了十倍,保留了个分位上的数值,然后在显示的时候在相应位上将点点亮即可。
15
图13 数据处理程序流程图
4.7 编程软件简介
KeilSoftware 公司推出的uVision3是一款可用于多种8051MCU 的集成开发环境(IDE),
该IDE 同时也是PK51及其它开发套件的一个重要组件。除增加了源代码、功能导航器、模板编辑以及改进的搜索功能外,uVision3还提供了一个配置向导功能,加速了启动代码和配置文件的生成。此外其内置的仿真器可模拟目标MCU ,包括指令集、片上外围设备及外部信号等。uVision3提供逻辑分析器,可监控基于MCUI/O引脚和外设状态变化下的程序变量。
uVision3提供对多种最新的8051类微处理器的支持,包括AnalogDevices 的ADuC83x 和ADuC84x ,以及Infineon 的XC866等。
系统程序代码请见附录C.
16
5总结
17
参考文献
[1]喻宗泉,喻晗,李建民. 单片机原理与应用技术[M].西安:西安电子科技大学出版社,2006 [2]黄智玮. 全国大学生电子设计竞赛电路设计[M].北京:北京航空航天大学出版社,2006 [3]段玉生. 电工电子技术与EDA 基础[M].北京:清华大学出版社,2004 [4]胡向东, 刘京诚. 传感器与检测技术[M].北京:机械工业出版社,2010 [5]徐国华. 电子技能实训[M].北京:北京航空航天大学出版社,2007
[6]周灵彬, 任开杰, 张靖武. 基于Proteus 的电路与PCB 设计[M].北京:电子工业出版社,2010 [7]周润景, 张丽娜, 刘印群.PROTEUS 入门实用教程[M].北京:机械工业出版社,2007
[8]黄智伟. 全国大学生电子设计竞赛常用电路模块制作[M].北京:北京航空航天大学出版 社,2006
[9]李华,MCU-51系列单片机实用接口技术[M].北京:北京航空航天大学出版社, 1993 [10] 张胜全.D18B20数字温度计在微机温度采集系统中的序编制[M]. 南京:南京大学出版 社,1998
[11] 马田华等. 可编程单总线数字式温度传感器DS18B2的原理与应用[J].电子质量 2004,7
[12] 于永学.1-Wire 总线数字温度传感器DS18B20及应用[J].电子产品世界,2003,12 [13] 周晗晓,袁慧梅. 单片机系统的印制板设计与抗干扰技术[J].电子工艺技术,2004,6
附录A 材料清单
附录B 单片机引脚分配表
附录C 程序代码
头文件18B20.h 如下 typedef unsigned int uint; typedef unsigned char uchar;
extern bit horl; //报警温度最小最大极限值标志,默认最小值 extern bit zhf_flag; //正负标志 extern uint temperature;//存温度的变量
extern void delay(uchar idata us);// 短延时程序 extern void fwei(void);// 复位程序
extern void writebyte(uchar idata wrb);// 单字节写程序 extern uchar readbyte (void) ;// 单字节读程序
extern void read_bytes(uchar idata num);// 多字节读程序 extern void get_temp(void);// 提取温度值程序 extern void ds18b20_temp(void);//DS18B20主控程序 extern void shx(void);// 温度0.5s 值刷新一次程序
主功能程序代码如下: #include #include"18b20.h"
/********************************************* 定义显示字段码表
**********************************************/ Unsigned char code Disp_Tab[]=
{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; /********************************************* 定义引脚程序
**********************************************/ sbit A138=P2^2;//138译码器引脚 sbit B138=P2^3;
sbit C138=P2^4;
sbit fmq=P1^5;//蜂鸣器引脚 sbit redled=P1^0; //红绿灯引脚 sbit greenled=P1^1;
/********************************************* 定义变量程序
**********************************************/ uchar display_num[8]; // 数码管显示数据存储区 bit h,l;//定义报警标志
uint htemp=60,ltemp=10;//上下限报警温度 /********************************************* 初始化程序
**********************************************/ void sys_start() {
TMOD=0X01;
TH0 = 0xD8; //10ms初值 TL0 = 0xF0; IE = 0x82; TR0 = 1; }
/********************************************* 延时1ms 程序
**********************************************/ void delay1ms(uint j) { uint i; for(j;j>0;j--) for(i=120;i>0;i--) ;
}
/********************************************* 报警程序
**********************************************/ void alarm1(void) { if(h) { redled=0; fmq=1; } if(l) {
greenled=0; fmq=1; }
delay1ms(10); fmq=0; redled=1; greenled=1; }
void main() { uchar i;
sys_start();//初始化 while(1) { fmq=0; shx();
if(zhf_flag) //负温度值超出范围输出----
{
display_num[0]=0x40;//百位 display_num[1]=0x40;//十位 display_num[2]=0x40;//个位 display_num[3]=0x40; //小数位 }
else//存正温度值 {
display_num[0]=Disp_Tab[temperature%10000/1000];//百位 display_num[1]=Disp_Tab[temperature%1000/100];//十位 display_num[2]=Disp_Tab[temperature%100/10];//个位 display_num[3]=Disp_Tab[temperature%10]; //小数位 }
if(horl==1)
{display_num[4]=0x78; //显示上限温度值 display_num[5]=Disp_Tab[htemp%1000/100];//百位 display_num[6]=Disp_Tab[htemp%100/10]; //十位 display_num[7]=Disp_Tab[htemp%10]; //个位 }
else //显示下限温度值 {
display_num[4]=0x71;
display_num[5]=Disp_Tab[ltemp%1000/100];//百位 display_num[6]=Disp_Tab[ltemp%100/10]; //十位 display_num[7]=Disp_Tab[ltemp%10]; //个位 }
//当前温度与极限温度比较并标识
if(temperature>=(htemp*10)) h=1; else
h=0;
if(temperature
if(l==1||h==1) alarm1();
/********************************************* 显示程序
********************************************** for(i=0;i
P0=display_num[i];//段点亮 if(i==2) P0=P0|0x80;
switch(i) //位扫描 {
case 0:A138=0;B138=0;C138=0;break; case 1:A138=1;B138=0;C138=0;break; case 2:A138=0;B138=1;C138=0;break; case 3:A138=1;B138=1;C138=0;break; case 4:A138=0;B138=0;C138=1;break; case 5:A138=1;B138=0;C138=1;break; case 6:A138=0;B138=1;C138=1;break; case 7:A138=1;B138=1;C138=1;break; }
delay1ms(2); } } }
DS18B20温度获取程序代码: #include #include
#define nop() _nop_() //定义空指令 typedef unsigned int uint; typedef unsigned char uchar;
extern uint htemp,ltemp;//报警温度极限值外部变量说明 /********************************************* 函数头说明
**********************************************/ void delay(uchar idata us);// 短延时程序 void fwei(void);//复位程序
void writebyte(uchar idata wrb);// 单字节写程序 uchar readbyte (void) ;// 单字节读程序
void read_bytes(uchar idata num);// 多字节读程序 void get_temp(void);// 提取温度值程序 void ds18b20_temp(void);//DS18B20主控程序 void shx(void);// 温度0.5s 值刷新一次程序 /********************************************* 变量定义
**********************************************/
uchar idata dq_read_bytes[9];//读取的ds18b20的ram 的数据 uchar tim;
uint temperature=0;//存温度的变量
bit horl=0;//报警温度最小最大极限值标志,默认最小值 /********************************************* 位变量定义
**********************************************/ sbit dq=P3^7;//定义DS18B20的数据I/O引脚
bit ask;//定义应答信号变量 bit zhf_flag; //正负标志
sbit fun_chse=P2^7;//进行最大或最小温度功能的切换 sbit atdel=P2^6;//温度减 sbit atadd=P2^5;//温度加
/********************************************* 短延时程序
**********************************************/ void delay(uchar idata us) {
while(us--); }
/********************************************* 复位程序
**********************************************/ void fwei(void) { dq=1; nop(); dq=0;
delay(85);//延时513us nop(); dq=1;
delay(20);//延时123us nop(); nop(); nop();
if(dq==0) //应答判断 ask=1; else
ask=0; delay(20); nop(); nop(); dq=1; }
/********************************************* 单字节写程序
**********************************************/ void writebyte(uchar idata wrb) {
uchar idata nb; for(nb=0;nb
dq=wrb&0x01;//取数 delay(3);//延时30us nop(); nop(); dq=1; wrb>>=1; } }
/********************************************* 单字节读程序
**********************************************/ uchar readbyte (void) {
uchar idata nb,rdb=0;
28
for(nb=0;nb>=1;
dq=1;
if(dq==1)//读数 rdb=rdb|0x80; delay(2);//延时20us nop(); }
return(rdb); }
/********************************************* 多字节读程序
**********************************************/ void read_bytes(uchar idata num)//num
uchar idata i; for(i=0;i
dq_read_bytes[i]=readbyte(); }
/********************************************* 处理温度值程序
**********************************************/ void get_temp(void) {
read_bytes(9); temperature=0;
if(dq_read_bytes[1]>=248) //负温度值 {
29
zhf_flag=1; }
else//正温度值 {
zhf_flag=0;
temperature=temperature+dq_read_bytes[1]; temperature=temperature
temperature=temperature+dq_read_bytes[0]; temperature=temperature*10/16; //1/16=0.0625 } }
/********************************************* DS18B20操作程序
**********************************************/ void ds18b20_temp(void) //DS18B20主控程序 { fwei();
writebyte(0xcc); writebyte(0x44);
fwei();
writebyte(0xcc); writebyte(0xbe); get_temp(); }
/********************************************* 0.5s获取温度值程序
**********************************************/ void shx(void) {
if(tim>=50) //50x10ms=0.5s
30
tim=0;
ds18b20_temp();//温度显示对应存储区的内容刷新 P2=0XFF;
if(fun_chse==0) horl=~horl ; if(horl) {
if(!atdel) htemp--; if(!atadd) {
if(htemp==100) //上限温度不超过100 ; else htemp++; } } else
{
if(!atdel) {
if(ltemp==0)//下限温度不低于0 ; else ltemp--; } if(!atadd) ltemp++; }
31
}
/********************************************* 定时器T0中断服务程序
**********************************************/ void tt0(void) interrupt 1 {
TH0 = 0xD8; //TL0 = 0xF0; tim++; }
延时10ms 初值32