打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
LED数码管和DS18B 20温度显示器设计
课程设计说明书
专业
电气工程及其自动化
学生姓名
奉达师
班级
B电气162
学号
1610601202
指导教师
盐城工学院
完成日期
2019年6月21日
LED数码管和DS18B 20温度显示器设计
摘  要:
本文设计的是一个温度温度检测显示系统,主要设计分为硬件和软件的设计,硬件模块主要由STC89C52单片机主控模块、DS18B20温度采集器、4位LED共阴极数码管以及控制电路组成。软件的设计主要从控制思路、软件系统框图出发,先介绍整体思路,再主义分析各模块程序算法的实现,最终编写出满足任务要求的程序。
本设计中的单片机主控模块主要由晶振电路、复位电路、供电模块和程序下载接口组成。本文设计所需要的器件比较简单,主要通过数字式温度传感器DS18B20作为感温元件对周围的温度进行采集,然后以数字量的方式传递给STC89C52单片机进行处理,最后通过4位LED共阴极数码显示出来。
该设计通过对程序设计、仿真图设计、软件与硬件的联调、电路原理图绘制、电路图的焊接几个步骤最后得出焊接好的实物。
关键词:
ST89C51单片机、DS18B20温度传感器、4位LED共阴极数码管   控制电路
目    录
1.概    述.......................................................................................................................... 1
1.1 课题研究背景与意义........................................................................................... 1
1.2 课题设计内容....................................................................................................... 1
2 系统设计......................................................................................................................... 2
2.1 设计方案及论证................................................................................................... 2
2.2 系统硬件设计....................................................................................................... 3
2.2.1 主控模块............................................................................................................ 4
2.2.2 LED数码管显示模块........................................................................................ 7
2.2.3 DS18B20温度检测模块.................................................................................... 8
2.3 软件设计............................................................................................................. 10
2.3.1 主程序模块...................................................................................................... 10
2.3.2 温度采集与数码管显示子程序设计.............................................................. 11
3. 系统调试...................................................................................................................... 12
3.1 硬件调试............................................................................................................. 12
3.1.1 静态检查.......................................................................................................... 12
3.1.2 通电检查.......................................................................................................... 12
3.2软件调试及软硬件联调...................................................................................... 12
3.2.1仿真调试........................................................................................................... 12
3.2.2实物调试........................................................................................................... 13
3.2.3 实验结果.......................................................................................................... 13
4. 结束语.......................................................................................................................... 14
5. 参考文献...................................................................................................................... 15
附录1:LED数码管和DS18B20温度显示器设计原理图纸..................................... 16
附录2:LED数码管和DS18B20温度显示器设计元器件目录表............................. 17
附录3:LED数码管和DS18B20温度显示器设计程序清单..................................... 18
LED数码管和DS18B 20温度显示器设计
1.概   述
1.1 课题研究背景与意义
测量控制的作用是从生产现场中获取各种参数,运用科学计算的方法,综合各种先进技术,使每个生产环节都能够得到有效的控制,不但保证了生产的规范化、提高产品质量、降低成本,还确保了生产安全。所以,测量控制技术已经被广泛应用于炼油、化工、冶金、电力、电子、轻工和纺织等行业。
温度采集控制系统是在嵌入式系统设计的基础上发展起来的。嵌入式系统虽然起源于微型计算机时代,但是微型计算机的体积、价位、可靠性,都无法满足广大对象对嵌入式系统的要求,因此,嵌入式系统必须走独立发展道路。这条道路就是芯片化道路。将计算机做在一个芯片上,从而开创了嵌入式系统独立发展的单片机时代。
温度显示器在人们生活中是显而易见的,它可以运用于多个领域,例如养殖场温度的检测,工厂温度的检测,还有各种交通工具温度的实时检测以及各种机器的温度监测。
温度检测控制系统在工业生产、科学研究和人们的生活领域中,得到了广泛应用。在工业生产过程中,很多时候都需要对温度进行严格的监控,以使得生产能够顺利的进行,产品的质量才能够得到充分的保证。使用自动温度控制系统可以对生产环境的温度进行自动控制,保证生产的自动化、智能化能够顺利、安全进行,从而提高企业的生产效率。温度检测系统应用十分广阔。
1.2 课题设计内容
本课题内容是设计并制作一个温度显示器屏控制系统,主要控制原理是利用DS18B20温度检测芯片对周围环境温度进行采集,然后通过单片机的转换传输给LED数码管,并在数码管上显示出来,显示温度为-55摄氏度+125摄氏度,精确到小数点后一位。
设计LED数码管显示的DS18B20温度显示器控制系统主要分为两大部分,硬件电路与软件控制程序,对硬件电路与软件程序分别进行调试,并进行软硬件联调,要求获得调试成功的实物。
2 系统设计
2.1 设计方案及论证
根据设计内容,提出了如下两种方案:
方案一:采用普通电阻式温度传感器,放大器,A/D转换器作为测量温度的电路。采用两种不同材质的导体,如在某点互相连接在一起,对这个连接点加热,在它们不加热的部位就会出现电位差。这个电位差的数值与不加热部位测量点的温度有关,和这两种导体的材质有关。这种现象可以在很宽的温度范围内出现,如果精确测量这个电位差,再测出不加热部位的环境温度,就可以准确知道加热点的温度。由于它必须有两种不同材质的导体,所以称之为“热电偶”。不同材质做出的热电偶使用于不同的温度范围,它们的灵敏度也各不相同。热电偶的灵敏度是指加热点温度变化1℃时,输出电位差的变化量。对于大多数金属材料支撑的热电偶而言,这个数值大约在5~40微伏/℃之间。
热电偶传感器有自己的优点和缺陷,它灵敏度比较低,容易受到环境干扰信号的影响,也容易受到前置放大器温度漂移的影响,因此不适合测量微小的温度变化。由于热电偶温度传感器的灵敏度与材料的粗细无关,用非常细的材料也能够做成温度传感器。也由于制作热电偶的金属材料具有很好的延展性,这种细微的测温元件有极高的响应速度,可以测量快速变化的过程。
方案二:采用数字可编程温度传感器作为温度检测元件。数字可编程温度传感器可以直接读出被测温度值。不需要将温度传感器的输出信号接到A/D转换器上,减少了系统的硬件电路的成本和整个系统的体积。
美国Dallas半导体公司的数字化温度传感器DS1820是世界上第一片支持 “一线总线”接口的温度传感器,在其内部使用了在板(ON-B0ARD)专利技术。全部传感元件及转换电路集成在形如一只三极管的集成电路内。“一线总线”独特而且经济的特点,使用户可轻松地组建传感器网络,为测量系统的构建引入全新概念。现在,新一代的DS18B20体积更小、更经济、更灵活。使你可以充分发挥“一线总线”的优点。 同DS1820一样,DS18B20也支持“一线总线”接口,测量温度范围为-55°C~+125°C,在-10~+85°C范围内,精度为±0.5°C。现场温度直接以“一线总线”的数字方式传输,大大提高了系统的抗干扰性。适合于恶劣环境的现场温度测量,如:环境控制、设备或过程控制、测温类消费电子产品等。与前一代产品不同,新的产品支持3V~5.5V的电压范围,使系统设计更灵活、方便。而且新一代产品更便宜,体积更小
它还有很多特性:适应电压范围更宽,电压范围:3.0~5.5V,寄生电源方式下可由数据线供;独特的单线接口方式,DS18B20在与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯;DS18B20支持多点组网功能,多个DS18B20可以并联在唯一的三线上,实现组网多点测温;DS18B20在使用中不需要任何外围元件,全部传感元件及转换电路集成在形如一只三极管的集成电路内;温范围-55℃~+125℃,在-10~+85℃时精度为±0.5℃;可编程的分辨率为9~12位,对应的可分辨温度分别为0.5℃、0.25℃、0.125℃和0.0625℃,可实现高精度测温;在9位分辨率时最多在93.75ms内把温度转换为数字,12位分辨率时最多在750ms内把温度值转换为数字,速度更快;测量结果直接输出数字温度信号,以“一线总线”串行传送给CPU,同时可传送CRC校验码,具有极强的抗干扰纠错能力;负压特性:电源极性接反时,芯片不会因发热而烧毁,但不能正常工作。
方案论证:
方案一硬件电路复杂,需要设计A/D转换电路,以及与其相关的编程,总体设计起来较困难,软件、硬件调试复杂,硬件成本较高。而且器传感器有以下缺点:它灵敏度比较低,容易受到环境干扰信号的影响,也容易受到前置放大器温度漂移的影响。所以总体来说,方案一在硬件、软件上的成本都比较高,而且易受外部环境的影响,系统工作不稳定。
方案二由于采用的是具有一总线特点的温度传感器,所以电路连接简单;而且该传感器拥有强大的通信协议,同过几个简单的操作就可以实现传感器与单片机的交互,包括复位传感器、对传感器读写数据、对传感器写命令。软件、硬件易于调试,制作成本较低。也使得系统所测结果精度大大提高。
经过对这两种方案的比较,本设计决定采用方案二。
2.2 系统硬件设计
基于单片机的LED显示DS18B20温度显示器系统的系统框图如2-1所示。系统由单片机主控模块、LED显示模块、DS18B20测温模块三部分组成。
LED数码管显示电路
程序下载模块和供电模块
晶振电路
DS18B20温度检测模块
复位电路
图2-1  基于单片机的温度显示器屏控制系统设计框图2.2.1 主控模块
单片机主控模块由复位电路、晶振电路、供电系统、程序下载端口组成;如图2-2。
图2-2单片机最小系统原理图
A. 时钟电路
STC89C52内部有一个用于构成振荡器的高增益反相放大器,引脚XTAL1和XTAL2分别是此放大器的输入端和输出端。时钟可以由内部方式产生或外部方式产生。
内部方式的时钟电路在XTAL1和XTAL2引脚上外接定时元件,内部振荡器就产生自激振荡。定时元件通常采用石英晶体和电容组成的并联谐振回路。晶体振荡频率可以在1.2~12MHz之间选择,电容值在5~30pF之间选择,电容值的大小可对频率起微调的作用。
外部方式的时钟电路如图2-4(b)所示,XTAL2接地,XTAL1接外部振荡器。对外部振荡信号无特殊要求,只要求保证脉冲宽度,一般采用频率低于12MHz的方波信号。
外部方式时钟电路
图2-3 时钟电路
B. 复位电路
RST引脚是复位信号的输入端。复位信号是高电平有效,其有效时间应持续24个振荡周期(即二个机器周期)以上。若使用颇率为6MHz的晶振,则复位信号持续时间应超过4us才能完成复位操作。
产生复位信号的电路逻辑如图2-5所示。整个复位电路包括芯片内、外两部分。外部电路产生的复位信号(RST)送至施密特触发器,再由片内复位电路在每个机器周期的S5P2时刻对施密特触发器的输出进行采样,然后才得到内部复位操作所需要的信号。
图2-4复位信号的电路逻辑图
复位操作有上电自动复位相按键手动复位两种方式。
上电自动复位是通过外部复位电路的电容充电来实现的。这样,只要电源Vcc的上升时间不超过1ms,就可以实现自动上电复位,即接通电源就成了系统的复位初始化。
按键手动复位有电平方式和脉冲方式两种。其中,按键电平复位是通过使复位端经电阻与Vcc电源接通而实现的;而按键脉冲复位则是利用RC微分电路产生的正脉冲来实现的。
C.程序下载端口与供电模块
供电模块主要实现对单片机的供电,单片机的VCC端口接电源极,GND端口接电源负极。程序下载端口利用单片机的P3.0(RXD)串口输入和P3.1(TXD)串口输出端口进行串口传输方式对单片机进行程序代码的写入。设计图如图2-5所示。
图2-5 程序下载端口与供电模块
2.2.2   LED数码管显示模块
本设计采用4位LED共阴极八段数码管来显是温度的大小,显示数据范围从-55.0到125.0,LED数码管是一种半导体发光器件,其基本单元是发光二极管,通过对其不同的管脚输入相对的电流,会使其发亮,从而显示出数字。可以显示:时间、日期、温度等可以用数字代替的参数,数码管连接图如图2-6所示。
数码管按段数分为七段数码管和八段数码管,八段数码管比七段数码管多一个发光二极管单元(多一个小数点显示);按能显示多少个“8”可分为1位、2位、4位等等数码管;按发光二极管单元连接方式分为共阳极数码管和共阴极数码管。共阳极数码管是指将所有发光二极管的阳极接到一起形成公共阳极(COM)的数码管。共阳极数码管在应用时应将公共极COM接到+5V,当某一字段发光二极管的阴极为低电平时,相应字段就点亮。当某一字段的阴极为高电平时,相应字段就不亮。
动态驱动是将所有数码管的8个显示笔划"a,b,c,d,e,f,g,dp"的同名端连在一起,另外为每个数码管的公共极COM增加位选通控制电路,通过由各自独立的I/O线控制,当单片机的P0口输出字形码时,所有数码管都接收到相同的字形码,但究竟是那个数码管会显示出字形,取决于单片机对P2.0-P2.3位选通COM端电路的控制,所以我们只要将需要显示的数码管的选通控制打开,该位就显示出字形,没有选通的数码管就不会亮。通过分时轮流控制各个数码管的COM端,就使各个数码管轮流受控显示。
图2-6  4位LED共阴极八段输出显示连接模块
2.2.3 DS18B20温度检测模块
设计所采用的温度传感器为Dallas半导体公司的数字化温度传感器DS18B20,它是世界上第一片支持“一线总线”接口的温度传感器。“一线器件”体积更小、适用电压更宽、更经济。全部传感元件及转换电路集成在形如一只三极管的集成电路内。DS18B20可以程序设定9-12位的分辨率,精度为±0.5℃。可选更小的封装方式,更宽的电压适用范围。分辨率设定,及用户设定的报警温度存储在EEPROM中,掉电后依然保存。
图2-7DS18B20与STC89C52单片机接口电路的设计
DSl8B20数字温度计提供9位(二进制)温度读数,指示器件的温度信息经过单线接口送入DSl8B20或从DSl8B20送出,因此从主机CPU到DSl8B20仅需一条线,当DS18B20接收到温度转换命令后,开始启动转换。转换完成后的温度值就以16位带符号扩展的二进制补码形式存储在高速暂存存储器的第1、2字节。单片机可以通过单线接口读出该数据,读数据时低位在先,高位在后,数据格式以0.0625℃/LSB形式表示。
当符号位S=0时,表示测得的温度值为正值,可以直接将二进制位转换为十进制;当符号位S=1时,表示测得的温度值为负值,要先将补码变成原码,再计算十进制数值。表2是一部分温度值对应的二进制温度数据[6]。
国内精度为±0.5°C。现场温度直接以“一线总线”的数字方式传输,大大提高了系统的抗干扰性。适合于恶劣环境的现场温度测量,如:环境控制、设备或过程控制、测温类消费电子产品等。
1.DS18B20产品的特点
(1)只要求一个端口即可实现通信。
(2)在DS18B20中的每个器件上都有独一无二的序列号。
(3)实际应用中不需要外部任何元器件即可实现测温。
(4)测量温度范围在-55°C- +125°C之间。
(5)数字温度计的分辨率用户可以从9位到12位选择。
(6)内部有温度上、下限设置。
2.DS18B20的引脚介绍
TO-92封装的DS18B20引脚功能描述见表2-1。
序号
名称
引脚功能描述
1
GND
地信号
2
DQ
数据输入/输出引脚。开漏单总线接口引脚。当被用着在寄生电源下,也可以向器件提供电源。
3
VDD
可选择的VDD引脚。当工作于寄生电源时,此引脚必须接地。
2.3软件设计
2.3.1 主程序模块
系统主程序主要用于变量及其他部件的初始化,比如该设计对DS18B20温度报警器的初始化,还用于对温度的读取,以及数码管的显示,从而实现设计所需要的功能。主程序的流程图2-8所示。
读取温度值
图2-8主程序流程图
本设计中主程序的书写主要分为变量的定义、延时子函数的编写、DS18B20的初始化程序、温度采集子程序的书写、数码管显示子程序的书写和主函数的编写。
2.3.2温度采集与数码管显示子程序设计
A.温度采集子函数主要是用来对温度进行采集和转换,最终将数据传送给单片机,由单片机来控制数码管的显示。温度采集子函数书写的流程图如图2-9。
温度转换命令
图2-9温度采集子函数流程图
B.对于数码管显示子程序,它主要是用来对DS18B20温度采集器所采集到的温度进行显示,在本设计中我们采用的是4位一体LED共阴极数码管,在设计的时候采用传统的直接与单片机相连的方式,减少了译码器,使编程和硬件设计更加简单,设计流程图如图2-10所示。
送段选到P0口
图2-10数码管显示子
程序流程图
3. 系统调试
根据前述第2大节中硬件和软件设计,制作了基于单片机的电梯显示屏控制系统样机实物。对样机的硬件和软件分别进行了调试,最后进行了软件、硬件联调。
3.1 硬件调试
3.1.1 静态检查
根据硬件电路图核对了元器件的型号、极性,安装是否正确,检查硬件电路连线是否与电路原理图一致,检查电路元器件是否都已经连接好,用万用表一一测试。
3.1.2 通电检查
先调试电源部分,整个电路只需要+5V的电压,用USB线从电脑USB口取电。
再用示波器检测单片机的复位和晶振电路是否有复位信号和振荡信号。
3.2软件调试及软硬件联调
对软件先用仿真器进行了调试。用仿真器运行正常后,再用烧写器将程序烧到STC89C52单片机中,进行了脱机调试。
3.2.1仿真调试
A.Proteus仿真电路
基于单片机的LED数码管和DS18B20温度显示控制系统Proteus仿真电路及仿真结果图如图3-1所示。
图3-1 基于单片机的温度显示控制系统Proteus仿真电路及仿真结果图
3.2.2实物调试
用Proteus仿真成功后,制作了基于单片机的DS18B20温度显示系统多孔板实物,将附录3的程序烧写到STC89C52中去,通电后发现LED数码管都没有任何现象,不能工作,只有电源灯输出正常,经过长时间的检查,把问题锁定在DS18B20温度检测器件上,由于DS18B20的DQ端与单片机对接出现了错误,导致单片机没有接收到DS18B20传送的数据,所以数码管没有显示,电路更改之后系统运行一切正常,至此多孔板调过来的数据试工作完成。
3.2.3 实验结果
制作了基于单片机的电梯显示屏控制系统多孔板实物,
图3-2 多孔板实验结果
4. 结束语
本次设计的是基于STC89C52单片机的4位一体LED共阴极数码管和DS18B20的温度显示控制系统,它可进周围温度的检测,并在数码管上显示出具体数值。分别进行了硬件电路设计、软件设计、Proteus仿真以及多孔板板实物调试。
通过一系列过设计和调试,本设计已经完成了一个比较完整的温度检测显示系统。致此本人设计基本完成了预期的目标,系统在温度采集、温度处理方面做的比较好,而在数据的存储和数码管的显示方面不够理想。主要存在以下几个方面:
(1)  程序的代码不够精练,浪费STC89C52内的FLASH ROM;
(2)  未对以前的温度数值进行存储,使以后不能利用这些数据;
(3)  对数码管的控制考虑不周,以致出现闪烁现象;
参考文献
[1] 张兰红,邹华,刘纯利,等. 单片机原理及应用[M].北京:机械工业出版社,2017.
[2]楼然苗,胡佳文,李光飞,等. 单片机实验与课程设计指导[M].浙江大学出版社,2013.
[3] 郭天祥. 新概念51单片机C语言教程 ——入门、提高、开发、拓展全攻略[M].北京:电子工业出版社,2010.
[4] 杨欣,张延强,张铠麟. 实例解读51单片机完全学习与应用[M].北京:电子工业出版社,2012.
[5] 彭伟. 单片机C语言程序设计实训100例——基于8051+Proteus仿真(第2版)[M].北京:电子工业出版社,2012.
致  谢
在这一段时间里,我感到自己的收获是非常大的,这一段时间的工作,使我在专业技能、动手能力多方面都有了很大的提高。
如何去分析问题、解决问题的方法。使我受益匪浅。从接受课题到现在完成课程设计,尤其是在课题设计的前期准备工作和设计的过程中,查阅了大量相关资料,在论文结束最后阶段花费了不少时间取进行修改,这使得我能够顺利的完成该课程设计工作。同时也借助了同组同学的支持与帮助,使我深刻的体会到了同学之间给我带来的帮助。
感谢母校的辛勤培育之恩!使我学到了许多新的知识,掌握了一定的操作技能,同时这次课程设计使我受益非浅。
附   录:
附录1:基于单片机的电LED和DS18B20温度显示系统的设计原理图图
附录2:基于单片机的DS1B20温度显示设计系统元器件目录表
序号
型 号(名称)
数量
作用
1
STC89C52
1
单片机
2
DS18B20温度检测芯片
1
温度检测
3
10kΩ排阻
1
上拉电阻
4
4位共阴极LED八段数码管
1
显示数字
5
按钮
1
复位按钮等
6
30pF瓷片电容
2
晶振电路用
7
10μF电解电容
1
上电复位
8
12MHz
1
晶振
9
导线
若干
电路连接
10
1kΩ
1
上电复位
11
10kΩ
1
上电复位
12
4.7kΩ
1
DS18B20上拉电阻
13
各种焊接仪器
1
电路焊接
14
万用板
1
摆放器件
附录3:基于单片机的电梯显示屏控制系统程序清单
#include "reg51.h"
#include "intrins.h" //_nop_();
#define dm P0//段码输出端口
#define uchar unsigned char
#define uint unsigned int
sbit DQ=P3^7; //温度输入口
sbit w0=P2^7; //数码管1
sbit w1=P2^6; //数码管2
sbit w2=P2^5; //数码管3
sbit w3=P2^4; //数码管4
int temp1=0; //显示当前温度和设置温度的标志位位0时显示当前温度
uint h;
uint temp;
uchar r;
uchar high=35,low=20;
uchar sign;
uchar q=0;
uchar tt=0;
uchar scale;
Uchar code ditab[16]={0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x04,0x05,0x06,0x06,0x07,0x08,0x08,0x09,0x09};
//小数段码
uchar codetable_dm[12]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00,0x40};
//共阴LED 段码表"0" "1" "2""3" "4" "5" "6" "7""8" "9" "不亮""-"
uchartable_dm1[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef}; //各位带小数点的段码表
uchar data temp_data[2]={0x00,0x00}; //读出温度暂放
uchar datadisplay[5]={0x00,0x00,0x00,0x00,0x00}; //显示单元数据,共4 个数据和一个运算暂用
/*****************11延时函数*************************/
void delay(uint t)
{
uint i,j;
for(i=0;i<t;i++)
for (j=0;j<110;j++);
}
void scan()
{
int j;
for(j=0;j<4;j++)
{
switch (j)
{
case 0:dm=table_dm[display[0]];w0=0;delay(50);w0=1;//xiaoshu
case 1:dm=table_dm1[display[1]];w1=0;delay(50);w1=1;//gewei
case 2:dm=table_dm[display[2]];w2=0;delay(50);w2=1;//shiwei
case 3:dm=table_dm[display[3]];w3=0;delay(50);w3=1;//baiwei
//else{dm=table_dm[b3];w3=0;delay(50);w3=1;}
}
}
}
//***************DS18B20 复位函数************************/
ow_reset(void)
{
char presence=1;
while(presence)
{
while(presence)
{
DQ=1;_nop_();_nop_();//从高拉到低
DQ=0;
delay(50); //550 us
DQ=1;
delay(6); //66 us
presence=DQ; //presence=0 复位成功,继续下一步
}
delay(45); //??500 us
presence=~DQ;
}
DQ=1; //拉高电平
}
/****************DS18B20 写命令函数************************/
//?1-WIRE总线上写一个字节
void write_byte(uchar val)
{
uchar i;
for(i=8;i>0;i--)
{
DQ=1;_nop_();_nop_(); //从高啦到低
DQ=0;_nop_();_nop_();_nop_();_nop_(); //5us
DQ=val&0x01; //最低位移出
delay(6); //66 us
val=val/2; //右移一位
}
DQ=1;
delay(1);
}
/****************DS18B20 读一个字节函数************************/
//?????1 ???
uchar read_byte(void)
{
uchar i;
uchar value=0;
for(i=8;i>0;i--)
{
DQ=1;_nop_();_nop_();
value>>=1;
DQ=0;_nop_();_nop_();_nop_();_nop_(); //4us
DQ=1;_nop_();_nop_();_nop_();_nop_(); //4us
if(DQ)value|=0x80;
delay(6); //66 us
}
DQ=1;
return(value);
}
/*****************读出温度************************/
read_temp()
{
ow_reset(); //总线复位
delay(200);
write_byte(0xcc); //发命令
write_byte(0x44); //发转换命令
ow_reset();
delay(1);
write_byte(0xcc); /发命令
write_byte(0xbe);
temp_data[0]=read_byte(); //读出温度值的低字节
temp_data[1]=read_byte(); //读出温度值的高字节
temp=temp_data[1];
temp<<=8;
temp=temp|temp_data[0]; // 两个字合成一个变量
return temp; //?????
}
/****************温度数据处理函数************************/
work_temp(uint tem)
{
uchar n=0;
if(tem>6348) // 温度值正负判断,标志位置
{tem=65536-tem;n=1;} //负温度求补码
display[4]=tem&0x0f; // 取小数部分的值
display[0]=ditab[display[4]]; // 存入小数部分的值
display[4]=tem>>4; // 取中间八位,即整数部分的值
display[3]=display[4]/100; // 取百位数据暂存
display[1]=display[4]%100; // 取后两位数据暂存
display[2]=display[1]/10; //取十位数据暂存
display[1]=display[1]%10; //各位数据
r=display[1]+display[2]*10+display[3]*100;
/////符号位显示判断/////
if(!display[3])
{
display[3]=0x0a; //最高位位0时不显示
if(!display[2])
{
display[2]=0x0a; 次高位0时不显示
}
}
if(n){display[3]=0x0b;}负温度时最高位显示“-”}
//*********设置温度显示转换************//
void xianshi(int horl)
{
int n=0;
if(horl>128)
{
horl=256-horl;n=1;
}
display[3]=horl/100;
display[3]=display[3]&0x0f;
display[2]=horl%100/10;
display[1]=horl%10;
display[0]=0;
if(!display[3])
{
display[3]=0x0a; //最高位位0时不显示
if(!display[2])
{
display[2]=0x0a; //次高位0时不显示
}
}
if(n)
{
display[3]=0x0b; //负温度时最高为显示"-"
}
}
//*********主函数**************//
void main()
{
dm=0x00; //初始化端口
w0=0;
w1=0;
w2=0;
w3=0;
for(h=0;h<4;h++) //开机显示"0000"
{
display[h]=0;
}
ow_reset(); 开机先转换一次
write_byte(0xcc); //Skip ROM
write_byte(0x44); 发转换命令
for(h=0;h<100;h++) //开机显示“0000”
{
scan();
}
while(1)
{
if (temp1==0)
{
work_temp(read_temp()); 处理温度数据
scan();
}
}
}
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
DS18B20数字温度计C程序(能显示负温)
DS18B20和串口通信的那点事儿 ? 笨笨剥壳
1-Wire总线协议应用
温度测量DSB1820 lcd1602液晶显示
单片机温度检测报警程序(ds18b20)-Changing's Blog
硕士论文:温湿度监测系统
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服