基于单片机的太阳能热水器水温监控系统.doc

上传人:文库蛋蛋多 文档编号:4151392 上传时间:2023-04-07 格式:DOC 页数:34 大小:320.50KB
返回 下载 相关 举报
基于单片机的太阳能热水器水温监控系统.doc_第1页
第1页 / 共34页
基于单片机的太阳能热水器水温监控系统.doc_第2页
第2页 / 共34页
基于单片机的太阳能热水器水温监控系统.doc_第3页
第3页 / 共34页
基于单片机的太阳能热水器水温监控系统.doc_第4页
第4页 / 共34页
基于单片机的太阳能热水器水温监控系统.doc_第5页
第5页 / 共34页
点击查看更多>>
资源描述

《基于单片机的太阳能热水器水温监控系统.doc》由会员分享,可在线阅读,更多相关《基于单片机的太阳能热水器水温监控系统.doc(34页珍藏版)》请在三一办公上搜索。

1、摘 要1ABSTRACT2第1章 绪 论11.1 课题来源11.2 课题背景11.3 研究意义2第二章 系统的总体设计32.1 温度控制系统完成的功能32.2系统的控制原理图32.3 系统整体工作流程:4第三章 硬件电路设计63.1时钟电路设计63.2系统复位电路63.3报警与控制电路设计73.4 LED显示电路设计83.5温度检测电路设计103.6按键电路设计123.7 继电器控制电路13第四章 软件设计134.1 主程序方案144.2 各个模块子程序设计154.2.1主程序154.2.2读出温度子程序164.2.3数码管显示模块174.2.3温度处理程序18第五章 系统仿真195.1测试环

2、境及工具195.2测试方法195.3测试结果分析19结 论20致 谢21参考文献22附录一:系统原理图23附录二: 程序代码23摘 要随着单片机应用技术的成熟和传感技术的进步,有关单片机的应用系统趋向:小型化和功能多样化。所以通常应用在工业生产领域的单片机系统开始走进人们的日常生活,并给人们的日常生活带来很大的便利。热水器的水温监控系统以”水温“这一生活中比常见的变量为研究对象,比较详细的论述了怎样利用AT889S52这一芯片为核心,来实现:水温的采集,以及在水温过载的情况下报警并通过电磁阀来结束输出等功能的。关键词 单片机;水温;AT89S52;报警;电磁阀 ABSTRACTFollowin

3、g the microcomputer of applied technology becoming maturity and sensing technology improving. The single-chip microcomputer of application system trending to miniaturization and function diversity. So normally used in industrial production areas of single-chip microcomputer system began to enter Peo

4、ples Daily life, and to Peoples Daily life a lot of convenienceThe water temperature monitoring system to water heater water temperature the life of the common variables than as the research object, more detailed discusses about how to use AT889S52 this chip as the core, to achieve the collection, a

5、s well as the water temperature: in water temperature under the condition of the overload police and through the electromagnetic valve to end the function such as output.Keywords: Single-chip Microcomputer; The Temperature of Water; AT89S52; Alerting;Electromagnetic valve 第1章 绪 论CPU的工作是接收来自于传感装置的温度信

6、号,并判断输入是否合理再根据输入的情况来控制输出。在整个系工作过程中起着无可替代的作用。CPU功能,总的来说是以不同的方式,执行各种指令。不同的指令其功自略异。有的指令涉及到枷各寄存器之间的关系;有的指令涉及到单片机核心电路内部各功能部件的关系;有的则与外部器件如外部程序存储器发生联系。事实上,CPU是通过复杂的时序电路完成不同的指令功能。所谓CPU的时序是指控制器控照指今功能发出一系列在时间上有一定次序的信号,控制和启动一部分逻辑电路,完成某种操作。1.1 课题来源该题目为自选课题。1.2 课题背景单片机以其集成度高、运算速度快、体积小、运行可靠、价格低廉等优势,在过程控制、数据采集、机电一

7、体化、智能化仪表、家用电器以及网络技术等方面得到了广泛的应用,特别是单片机技术的开发与应用,标志着计算机发展史上又一个新的里程碑。作为计算机两大发展方向之一的单片机,以面向对象的实时控制为己任,嵌入到如家用电器、汽车、机器人、仪器仪表等设备中,使其智能化。目前国内外各大电气公司,大的半导体厂商正在不断的开发、使用单片机,使其无论在控制能力,减小体积,降低成本,还是开发环境的改善等方面,都得到空前迅速的发展。温度检测控制系统在工业生产、科学研究和人们的生活领域中,得到了广泛应用。在工业生产过程中,很多时候都需要对温度进行严格的监控,以使得生产能够顺利的进行,产品的质量才能够得到充分的保证。使用自

8、动温度控制系统可以对生产环境的温度进行自动控制,保证生产的自动化、智能化能够顺利、安全进行,从而提高企业的生产效率。温度检测系统应用十分广阔随着该项技术的日益成熟和现代生活对方便快捷的要求越来越高,水温控制系统开始应用到生活领域,特别是在2009年美国IBM公司提出的“智慧地球”标志着单片机由工业生产到日常生活应用的转变的标志。单片机的运用已经越来越靠近生活,而且通过单片机的运用还能够更好的节约有限的社会资源,这也正符合中国要建立“资源节约型社会”的发展要求。随着时代的发展,科技的进步,单片机在智能仪器仪表、家用电器中、工业控制、计算机网络和通信领域、医用设备等领域的应用越来越广泛。温度是日常

9、生活中无时不在的物理量,温度的控制在各个领域都有积极的意义。很多行业中都有大量的用电加热设备,如用于热处理的加热炉,用于融化金属的坩锅电阻炉及各种不同用途的温度箱等,采用单片机对它们进行控制不仅具有控制方便、简单、灵活性大等特点,而且还可以大幅度提高被控温度的技术指标,从而能够大大提高产品的质量。因此,智能化温度控制技术正被广泛地采用工业生产过程当中。1.3 研究意义由于单片机应用在这几年得到空前发展,有关单片机的产品也大量运用到生产生活的各个方面。目前在中国单片机市场上,一些家用太阳能热水器和中小型的洗浴场所,在调节温度时仍然采用手动模式 ,这样很容易因为手 动误差而造成水温输出地过高或过低

10、,从而给使用者造成不便,甚至严重时会将使用者烫伤,本设计就说是为了着手研究和解决这一问题的。水温不宜过高过低:洗澡水的温度超过正常的体温,即37,称为热水浴;低于人体温度,高于皮肤的温度,即33,叫做温水浴。水温在34-36,利于去垢止痒;37-39,利于消除疲劳;40-45能舒筋活血,发汗镇痛。洗澡水的温度可因时制宜,例如冬天可选择热水浴,夏天可选用温水浴。如果浴水过烫,温度太高,不仅会损伤皮肤,还会使皮肤表面血管扩张,体表血流量骤增,心脏和大脑的血液供应减少,常有缺氧和昏倒的危险。不仅是在热水器方面,生活中其他有关水温这一变量的方面也可以运用。可以说水温监测系统的运用正好填补了我国热水器用

11、户中低端市场。第二章 系统的总体设计系统的总体设计是从系统的整体出发,具体的实现:描述该系统是一个怎样的系统,要实现哪些功能,是什么样的控制原理以及工作流程等方面大体的阐述一下,来为后续工作思路的展开奠定基础。单片机与其他的可编译微处理器,如PLC相比具有组块灵活,功能强大,价格便宜等优点,因此单片机在生活应用方向拥有广大的发展前景。2.1 温度控制系统完成的功能本器件以AT89S52单片机系统进行温度采集与控制 温度信号由模拟温度传感器DS18B20采集输入AT89S52,主控器能对各温度检测器通过LED进行显示。本机实现的功能:1、利用温度传感器采集到当前的温度,通过AT89S52单片机进

12、行控制,最后通过LED数码管以串行口传送数据实现温度显示。2、可以通过按键任意设定一个恒定的温度。3、将水环境数据与所设置的数据进行比较,当水温低于设定值时,开启;当水温高于设定温度时,停止,从而实现对水温的自动控制。4、当系统出现故障,超出控制温度范围时,自动蜂鸣报警。2.2 系统的控制原理图在系统中,利用传感器测得热水器出水管道实际温度并转换成毫伏级电压信号,该电压信号经过温度检测电路转换成与水温相对应的数字信号进入单片机,单片机进行数据处理后,通过LED显示器显示温度,同时将温度与设定温度比较,以此来判别是否为合理输出。图1-1 系统硬件结构示意图2.3 系统整体工作流程:首先,进行总线

13、的初始化,将报警及继电器装置至于关闭状态。其次,从18B20数字温度传感器里读取水温的数字变化量。接着,判定读取的温度是否达到输出要求,超过设定值时,开启报警装置,并打开继电器切断水源。另外简易键盘还可以修改温度的设定值。 开 始 总线初始化 关闭继电器读18B20水温数据 发出报警信息是否超出设定值?是否 显示当前温度是设置新温度上下限是否有新输入否 结束本次进程图1.2系统工作流程图第三章 硬件电路设计该章主要介绍怎样来实现具体电路的接法问题。电路图是单片机应用的基本,高效简洁的电路图才能更好的描述系统的功能。3.1 时钟电路设计时钟电路是用来产生AT89S52单片机工作时所必须的时钟信号

14、,AT89S52本身就是一个复杂的同步时序电路,为保证工作方式的实现,AT89S52在唯一的时钟信号的控制下严格的按时序执行指令进行工作 ,时钟的频率影响单片机的速度和稳定性。通常时钟由于两种形式:内部时钟和外部时钟。我们系统采用内部时钟方式来为系统提供时钟信号。AT89S52内部有一个用于构成振荡器的高增益反向放大器,该放大器的输入输出引脚为XTAL1和XTAL2,它们跨接在晶体振荡器和用于微调的电容,便构成了一个自激励振荡器。电路中的C1、C2的选择在30PF左右,但电容太小会影响振荡的频率、稳定性和快速性。晶振频率为在1.2MHZ12MHZ之间,频率越高单片机的速度就越快,但对存储器速度

15、要求就高。为了提高稳定性我们采用温度稳定性好的NPO电容,采用的晶振频率为12MHZ。本次系统的时钟电路设计如图3.2所示。图3-1 时钟电路图3.2 系统复位电路AT89S52的复位输入引脚RST为单片机提供了初始化的手段,可以使程序从指定处开始执行,在AT89S52的时钟电路工作后,只要RST引脚上出现超过两个机器周期以上的高电平时,即可产生复位的操作,只要RST保持高电平,则AT89S52循环复位,只有当RET由高电平变成低电平以后,AT89S52才从0000H地址开始执行程序,本系统采用按键复位方式的复位电路。图3-2 复位电路图3.3 报警与控制电路设计 在微型计算机控制系统中,为了

16、安全生产,对于一些重要的参数或系统部位,都设有紧急状态报警系统,以便提醒操作人员注意,或采取紧急措施。其方法就是把计算机采集的数据或记过计算机进行数据处理、数字滤波,标度变换之后,与该参数设定值进行比较,如果高于设置值1度(或低于设置数1度)则进行报警,否则就作为采样的正常值,进行显示和控制。同样热水器的温度超出低高设定的温度范围内时当P1.4输出高电平“0”时,晶体管导通,压电蜂鸣器两端获得约+5V电压而鸣叫,出报警声音;单片机的P1.1输出低电平,此时红色指示灯亮,直到低于设定的最低温度时,P1.4输出高时,三极管截止,蜂鸣器停止发声,P1.1输出电平高电平,发光二极管灭,报警和控制电路而

17、下图3-4所示:图3-3 报警与控制电路与单片机的连接3.4 LED显示电路设计LED数码管是一种半导体发光器件,其基本单元是发光二极管,通过对其不同的管脚输入相对的电流,会使其发亮,从而显示出数字。可以显示:时间、日期、温度等可以用数字代替的参数。 数码管按段数分为七段数码管和八段数码管,八段数码管比七段数码管多一个发光二极管单元(多一个小数点显示);按能显示多少个“8”可分为1位、2位、4位等等数码管;按发光二极管单元连接方式分为共阳极数码管和共阴极数码管。共阳极数码管是指将所有发光二极管的阳极接到一起形成公共阳极(COM)的数码管。共阳极数码管在应用时应将公共极COM接到+5V,当某一字

18、段发光二极管的阴极为低电平时,相应字段就点亮。当某一字段的阴极为高电平时,相应字段就不亮。动态驱动是将所有数码管的8个显示笔划a,b,c,d,e,f,g,dp的同名端连在一起,另外为每个数码管的公共极COM增加位选通控制电路,通过由各自独立的I/O线控制,当单片机的P0口输出字形码时,所有数码管都接收到相同的字形码,但究竟是那个数码管会显示出字形,取决于单片机对P2.0-P2.3位选通COM端电路的控制,所以我们只要将需要显示的数码管的选通控制打开,该位就显示出字形,没有选通的数码管就不会亮。通过分时轮流控制各个数码管的COM端,就使各个数码管轮流受控显示,这就是动态驱动。在本设计中采用了四位

19、八段数码管,用动态驱动来显示温度的值,如图3.5所示。图3-4 显示电路原理图具体的电路仿真图设定AT89S52的P0口接LED数码显示器的8个段显示,具体的P0.1P0.7分别接LED数码显示器的a.b.c.d.e.f.g.dp端。其中dp端为小数点标志位,有单片机的P2口中的P2.0p2.3接4位的LED位数控制端。具体如下图所示:图 3-5 数码显示器的具体电路接法3.5 温度检测电路设计本次设计所采用的温度传感器为Dallas半导体公司的数字化温度传感器DS18B20,它是世界上第一片支持“一线总线”接口的温度传感器。“一线器件”体积更小、适用电压更宽、更经济。全部传感元件及转换电路集

20、成在形如一只三极管的集成电路内。DS18B20可以程序设定912位的分辨率,精度为0.5。可选更小的封装方式,更宽的电压适用范围。分辨率设定,及用户设定的报警温度存储在EEPROM中,掉电后依然保存。DS18B20与AT89S52单片机接口电路的设计DSl8B20数字温度计提供9位(二进制)温度读数,指示器件的温度信息经过单线接口送入DSl8B20或从DSl8B20送出,因此从主机CPU到DSl8B20仅需一条线,当DS18B20接收到温度转换命令后,开始启动转换。转换完成后的温度值就以16位带符号扩展的二进制补码形式存储在高速暂存存储器的第1、2字节。单片机可以通过单线接口读出该数据,读数据

21、时低位在先,高位在后,数据格式以0.0625LSB形式表示。当符号位S0时,表示测得的温度值为正值,可以直接将二进制位转换为十进制;当符号位S1时,表示测得的温度值为负值,要先将补码变成原码,再计算十进制数值。表2是一部分温度值对应的二进制温度数据。图3-6 DS18B20与AT89S52单片机的连接DS18B20支持“一线总线”接口,测量温度范围为 -55C-+125C,在-10-+85C范围内,精度为0.5C。现场温度直接以“一线总线”的数字方式传输,大大提高了系统的抗干扰性。适合于恶劣环境的现场温度测量,如:环境控制、设备或过程控制、测温类消费电子产品等。1.DS18B20产品的特点 (

22、1)只要求一个端口即可实现通信。 (2)在DS18B20中的每个器件上都有独一无二的序列号。 (3)实际应用中不需要外部任何元器件即可实现测温。 (4)测量温度范围在-55C+125C之间。 (5)数字温度计的分辨率用户可以从9位到12位选择。 (6)内部有温度上、下限设置。 2.DS18B20的引脚介绍 TO92封装的DS18B20引脚功能描述见表1。 表1DS18B20详细引脚功能描述序 号名称引脚功能描述1GND地信号2DQ数据输入/输出引脚。开漏单总线接口引脚。当被用着在寄生电源下,也可以向器件提供电源。3VDD可选择的VDD引脚。当工作于寄生电源时,此引脚必须接地。因为一线通信接口,

23、必须在先完成ROM设定,否则记忆和控制功能将无法使用。主要首先DS18B20提供以下功能命令之一:读ROM, ROM匹配,搜索ROM,跳过ROM,报警检查。若指令成功地使DS18B20完成温度测量,数据存储在DS18B20的存储器。一个控制功能指挥指示DS18B20的演出测温。测量结果将被放置在DS18B20内存中,并可以让阅读发出记忆功能的指挥,阅读内容的片上存储器。温度报警触发器TH和TL都有一字节EEPROM 的数据。如果DS18B20不使用报警检查指令,这些寄存器可作为一般的用户记忆用途。在片上还载有配置字节以理想的解决温度数字转换。写TH,TL指令以及配置字节利用一个记忆功能的指令完

24、成。所有的数据的读、写都是从最低位开始。3.6按键电路设计键盘共有三个键,判断K2K4键是否按下,可采用软件查询和中断的方法,当某个键按下时,低电平有效。3个键K2K4的功能定义如表所示。K2K4键的定义按键键名功能K2功能转换键此键按下,显示温度设定值,按键松开,显示当前温度K3加1键设定温度值加1K4减1键设定温度值减1图3-7 按键电路3.7 继电器控制电路 控制P1.0的高低电平来控制继电器的断开和闭合,当P1.0口为低电平时,三极管Q1导通,控制继电器开始关闭阀门,当P1.0为高电平时,三极管截止,继电器开启阀门。图3-8 控制电路示意图第四章 软件设计4.1 主程序方案首先要根据系

25、统的总体功能和键盘设置选择一种最合适的监控程序结构,然后根据实时性的要求,合理地安排监控软件和各执行模块之间地调度关系。本部分详细介绍了基于AT89S52单片机的多路温度采集控制系统的软件设计。根据系统功能,可以将系统设计分为若干个子程序进行设计,如温度采集子程序,数据处理子程序、显示子程序、执行子程序。采用Kiel uVision3集成编译环境和汇编语言来进行系统软件的设计。本章从设计思路、软件系统框图出发,先介绍整体的思路后,再逐一分析各模块程序算法的实现,最终编写出满足任务需求的程序。并对温度进行实时显示。采用C语言编写代码, 鉴于篇幅限制及DS18B20 的应用已经规范和成熟, 本文仅

26、就主程序流程图和显示子程序流程图及其代码进行说明。通过定时器T0 P3.4口的定时来实现, 在此不再赘述。主程序流程图主程序通过调用温度采集子程序完成温度数据采集, 然后调用温度转换子程序转换读取温度数据,调用显示子程序进行温度显示和判断温度数据。主程序(见附录2)调用四个子程序,分别是温度采集程序、数码管显示程序、温度处理程序和数据存储程序。温度采集程序:对温度芯片送过来的数据进行处理,进行判断和显示。数码管显示程序:向数码的显示送数,控制系统的显示部分。温度处理程序:对采集到的温度和设置的上、下限进行比较,做出判断,向继电器输出。数据存储程序:对键盘的设置的数据进行存储。显示当前温度判断当

27、前温度值超过设定温度1度红灯亮设定温度值是否低于设定温度1度是红灯亮否图 4-1 系统总流程图4.2 各个模块子程序设计各个模块子程序包括主程序,读出温度子程序,数码管显示模块程序,温度处理程序等4.2.1主程序主程序的主要功能是负责温度的实时显示、读出并处理DS18B20的测量的当前温度值,温度测量每1s进行一次。这样可以在一秒之内测量一次被测温度,其程序流程见图19所示。通过调用读温度子程序把存入内存储中的整数部分与小数部分分开存放在不同的两个单元中,然后通过调用显示子程序显示出来。 开 始调用度温度子程序 数字变换程序报警并关闭阀门显示子程序温度判别与报警子程序是否符合要求?结束本次循环

28、图4-2 主程序流程图4.2.2读出温度子程序读出温度子程序的主要功能是读出RAM中的9字节,在读出时需进行CRC校验,校验有错时不进行温度数据的改写。DS18B20复位、应答子程序读温度命令子程序写入子程序跳过ROM匹配命令DS18B20复位、应答子程序显示子程序(延时)写入子程序写入子程序跳过ROM匹配命令 温度转换命令 图4-3 读出温度子程序DS18B20的各个命令对时序的要求特别严格,所以必须按照所要求的时序才能达到预期的目的,同时,要注意读进来的是高位在后低位在前,共有12位数,小数4位,整数7位,还有一位符号位。4.2.3数码管显示模块本系统采用共阳极数码管,用模拟串口的动态显示

29、数据。其流程图如图4.3所示: 取百位数 查表选段代码 否 送百位数输出是否完成?是 取送十位循环 取送个位循环灭LED 返回 点亮LED取送十分位循环图4-4 LED显示子程序4.2.3温度处理程序系统通过DS18B20采集到温度和设置的上、下限进行比较得出结果,进行报警。第五章 系统仿真5.1 测试不同温度值下的系统生成结果系统预设测量温度范围:0-100摄氏度;系统预设上下限报警温度:10-30摄氏度;报警蜂鸣器的接口位置:P14口;继电器开关控制接口位置:P1.0口;5.1.1环境实际温度超出系统测量范围的仿真5.1.1.1结果预测 LED显示乱码; 蜂鸣报警器发出报警;5.1.1.2

30、仿真结果LED数码管显示器显示非正常数字(该显示为1.8.0而实测温度为128.0摄氏度);蜂鸣报警器处于高电平状态;继电器处于关闭状态5.1.2 温度处于预设上下限外5.1.2.1结果预测 数码管显示当前温度; 蜂鸣器发出报警信息:5.1.2.2仿真结果蜂鸣报警器处于闪烁报警状态,继电器处于关闭状态,LED数码管显示正常的当前温度5.1.3 温度在正常水温内5.1.3.1结果预测 LED正常显示当前温度; 继电器处于开启状态; 蜂鸣报警装置处于关闭状态;5.1.3.2仿真结果LED数码显示器显示当前水温,但数码管闪烁处于不稳定状态,蜂鸣报警器处于关闭状态,继电器处于开启状态5.2 测试方法使

31、系统运行,观察系统硬件检测是否正常(包括单片机控制系统,键盘电路,显示电路,温度测试电路等)。系统自带测试表格数据,观察显示数据是否相符合即可。采用温度传感器和温度计同时测量水温变化情况,目测显示电路是否正常。并记录温度值,与实际温度值比较,得出系统的温度指标。5.3 测试结果分析自检正常,温度显示正常。因为芯片是塑料封装,所以对温度的感应灵敏度不是相当高,需要一个很短的时间才能达到稳定。在测试低温度是数码管闪烁严重,造成数据不稳定。结 论通过对热水器水温监控系统的设计,使我认识到自己在单片机设计方面还存在很多的不足与缺陷,特别是在实践动手方面缺少经验,不能够更好的将所学知识应用到实际开发中去

32、,因此耽误大量的时间。经过设计和实践,本设计已经完成了一个比较完整的温度检测预与报警系统。它可以通过键盘输入温度上限、下限值,然后计算其上限和下限的中间值作为最适温度值。不断的采集温度值,显示温度值,如果发现采集的温度值高于上限值就通过相应的提示灯亮。如果采集的温度值低于下限值,那么也有相应的灯提示操作人员。如果并没有超过上下限则不会报警。致此本人设计基本完成了预期的目标,系统在温度采集、温度处理和键盘处理方面做的比较好,而在数据的存储和数码管的显示方面不够理想。主要存在以下几个方面:(1) 程序的代码不够精练,浪费AT89S52内的FLASH ROM;(2) 未对以前的温度数值进行存储,使以

33、后不能利用这些数据;(3) 对数码管的控制考虑不周,以致出现闪烁现象;参考文献1 李国勇 过程控制系统 电子工业出版社 20092 何立民.单片机应用系统设计系统配置与接口技术M.北京:北京航空航天大学,1990.3 李晓荃.单片机原理与应用M. 北京:电子工业出版社,2000.4谢自美.电子线路设计.实验.测试(第二版) M.武汉:华中科技大学出版社,2000.5 马忠梅,刘滨,戚军,马岩.单片机C语言Windows环境编程宝典M.北京:北京航空航天大学出版社,20036 Richard c.Dorf.modern conctrol systermM.BEIJING:Science Publ

34、ishing House,2002.附录一:系统原理图附录二: 程序代码#include /52系列头文件#include #define uchar unsigned char#define uint unsigned intsbit ds=P34;sbit dula=P26;sbit beep=P14; /定义蜂鸣器sbit led=P11;sbit jdq=P10;uint temp,t,w; /定义整型的温度数据uchar flag;float f_temp; /定义浮点型的温度数据uint low; /定义温度下限值 是温度乘以10后的结果uint high; /定义温度的上限值sb

35、it led1=P10; /控制发光二极管sbit led2=P11; /控制发光二极管sbit s1=P35;sbit s2=P36;sbit s3=P37;uchar flag1,flag2,flag3,flag4,s1num,qian,bai,shi,ge;uchar code table= 0xc0,0xf9,0xa4,0xb0,0x99, 0x92,0x82,0xf8,0x80,0x90,0xc6 ;/共阳数码管段码表uchar code table1=0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10;/带小数点的编码 void de

36、lay(uchar z) /延时函数 uchar a,b; for(a=z;a0;a-) for(b=100;b0;b-);void init() EA=1; ET1=1; TR1=1; TMOD=0x10; TH1=(65536-4000)/256; TL1=(65536-4000)%256; flag=0; high=100; jdq=1;void didi() beep=0; led=0; delay(500); beep=1; led=1; delay(500);void dsreset(void) /DS18b20复位, 初始化函数 uint i; ds=0; i=103; /延时最

37、短480us while(i0) i-; ds=1; /等待16-60us,收到低电平一个约60-240us则复位成功 i=4; while(i0) i-;bit tempreadbit(void) /读1位数据函数 uint i; bit dat; ds=0;i+; ds=1;i+;i+;/i+起到延时作用 dat=ds; i=8; while(i0)i-; return(dat);uchar tempread(void)/读1字节的数据函数 uint i,j,dat; dat=0; for(i=1;i=8;i+) j=tempreadbit(); dat=(j1); /读出的数据最低位在最

38、前面,这样刚好一个字节在dat里 return(dat);void tempwritebyte(uchar dat) /向DS18B20写一个字节的数据函数 uint i; uchar j; bit testb; for(j=1;j1; if(testb) /写1 ds=0;i+;i+;ds=1;i=8;while(i0)i-; else /写0 ds=0;i=8;while(i0) i-;ds=1;i+;i+; void tempchange(void) /DS18B20开始获取温度并转换 dsreset(); delay(1); tempwritebyte(0xcc);/写跳过读ROM指令

39、 tempwritebyte(0x44); /写温度转换指令uint get_temp()/读取寄存器中存储的温度数据 uchar a,b; dsreset(); delay(1); tempwritebyte(0xcc); /写跳过读ROM指令 tempwritebyte(0xbe); /写温度转换指令 a=tempread(); /读低8位 b=tempread(); /读高8位 temp=256*b+a; f_temp=temp*0.0625; /温度在寄存器中为12位,分辨率为0.0625 temp=f_temp*10+0.5; /乘以10表示小数点后面只取一位 return temp

40、; /temp是整型void keyscan() if(s1=0) P2=0xff; delay(5); if(s1=0) while(!s1); s1num+; if(s1num=1) flag=1; if(s1num=2) s1num=0; flag=0; if(s1num=1) flag=1;if(s2=0) delay(5);if(s2=0) while(!s2);high+=10;if(high=1000) high=100;if(s3=0)delay(5);if(s3=0) while(!s3); high-=10; if(high=0) high=100; void main()

41、/主函数 init(); while(1) tempchange(); /温度转换函数 if(temp=high-10)&(temphigh)&(temphigh+10) jdq=1;didi(); void time1() interrupt 3 TH1=(65536-4000)/256; TL1=(65536-4000)%256; t+; keyscan(); if(flag=0) if(t=4)t=0; switch(t) case 1:P0=tableget_temp()/100; P2=0xfd;break; case 2:P0=table1get_temp()%100/10;P2=0xfb;break; case 3:P0=tableget_temp()%10; P2=0xf7;break; if(flag=1) if(t=4)t=0; switch(t) case 0:P0=0xff; P2=0xfe;break; case 1:P0=0xff; P2=0xfd;break; case 2:P0=tablehigh/100; P2=0xfb;break; case 3:P0=tablehigh%100/10; P2=0xf7;break;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 办公文档 > 其他范文


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号