简单多点温度测量系统课程设计
多点温度测量系统的设计

返回
3、显示ROM地址程序
开始 第一行显示提示信息及模块 计算存18B20的ROM地址偏移量 依次取ROM地址显示在第二行 返回
4、读选中DS18B20温度程序
开始
计算存ROM地址存储单元偏移量 DS18B20复位初始化 发跳过ROM命令 启动温度转换 延时等待温度转换 DS18B20复位初始化 发匹配ROM命令 取匹配ROM地址发送 发读温度转换值命令 读转换温度值
总体设计结构
时钟 电路 显示模块
复位 电路
51单 片机
按键
测温模 块1
测温模 块2
测温模 块N
多点温度测量系统的硬件电路
多点温度测量系统的软件程序
1、主程序
开始 LCD初始化
判读ROM,还是读 温度 调用读选中DS18B20温度程序 调用显示温度程序 调用读ROM程序 调用显示ROM程序
2、读ROM地址程序
总体设计
整个系统包含以下几个部分:51单片机、时钟电路、复位电路 组成的51单片机小系统;多块测温模块;显示温度值的显示模 块和按键模块。测温模块由温度传感器组成,温度传感器采用 美国Dallas半导体公司推出的智能温度传感器DS18B20,温度测 量范围为-55 -- +125,可编程为9到12位的A/D转换精度,测温 分辨率可达0.0625C,完全能够满足系统要求。DS18B20采用单 总线结构,只需要一根数据线DQ即可与单片机通信,多个 DS18B20可同时连接在一根数据线上与单片机通信。显示器可采 用LCD液晶显示器,显示信息量大、效果好、使用方便。系统处 理时,由51单片机控制从各个测温模块测量出温度数字量,存 入缓冲区;然后通过按键控制,从缓冲区取出,根据数字量和 温度的关系计算出温度值,依次送LCD显示器显示。
2019年单片机课程设计之多点温度测量系统的设计.doc

单片机应用系统设计课题:多点温度测量系统的设计姓名:班级:学号:指导老师:日期:单片机复位报警点按键调时钟振荡时钟振荡主控制器显示温度传感一、设计的背景和意义温度测控技术在各个领域应用越来越广泛,同时温度测量也被人们所关注,人们对测试温度的仪器要求越来越高,要为人类工、科研、生活提供更好的设施,那就需要从单片机技术入手,一切向着数字化控制,智能化控制方向发展。
二、系统总体方案设计因为要用到温度传感器,所以在单片机电路设计中,大多都是使用传感,我们使用的是DS18B20,此传感器,可以很容易直接读取被测温度值,进行转换,可以满足设计的要求。
1、原理:(1)将 AD590 作为室温度传感器,当温度变化时,AD590 会产生电流的变化,经 OPA1 将电流转换为电压,由 OPA2 作为零为调整,最后由 OPA3 反相放大 10 倍。
(2)ADCO804 输出最大转换值=FFH(255)。
OPA3 为放大10 倍时。
则本电路最大测量温度为;最大显示温度为 5.1/10V=0.51V,即51°C(10 为放大倍数)。
255X=51,知 X=0.2,即先乘 2 再除 10。
FF→255→255ⅹ2→510,R4=0.5R3=10。
即D4=0,D3=5,D2=1,D1=0,本电路显示器只取D3、D2两位数。
(3)按下P2.1按钮,放开后立即进入温度设定模式,显示设定最高温度为34°C (建立在 TABLE 内)每按一次设定温度将减少 1°C,直至最低温度 20°C,再按一次回到 34°C。
(4)当室温高于设定温度,压缩机(P3.0)运转,使室温降低,当室温低于设定值时,压缩机停止运行。
(5)当进入设定温度模式,如末按下设定按钮(P2.1)经数秒后自动解除设定模式,回到室温显示模式。
(6)本程序以计时中断,每 50ms 中断一次,比较室温一次,而令压缩机运转和停止。
多路温度测试课程设计

多路温度测试课程设计一、课程目标知识目标:1. 学生能够理解温度的概念,掌握温度的单位及换算方法。
2. 学生能够了解多路温度测试的原理,掌握温度传感器的使用方法。
3. 学生能够运用所学的温度测试知识,对实际环境进行数据采集与分析。
技能目标:1. 学生能够独立操作温度测试设备,进行多路温度测试实验。
2. 学生能够运用数据处理软件,对温度数据进行整理、分析和呈现。
3. 学生能够通过小组合作,解决多路温度测试过程中遇到的问题。
情感态度价值观目标:1. 学生能够认识到温度测试在日常生活和工程领域的重要性,增强对科学技术的兴趣和热情。
2. 学生能够通过多路温度测试实验,培养动手能力、观察力和团队协作能力。
3. 学生能够树立正确的实验态度,遵循实验操作规范,养成安全、环保意识。
课程性质:本课程为实践性课程,以学生动手实验为主,结合理论知识,培养学生的实践能力和创新精神。
学生特点:六年级学生具备一定的物理知识基础,对实验操作感兴趣,具有较强的求知欲和动手能力。
教学要求:教师应注重引导学生掌握温度测试的基本原理,关注实验操作的规范性和安全性,培养学生的观察、分析和解决问题的能力。
通过小组合作,提高学生的沟通协作能力,将理论知识与实践相结合,达到学以致用的目的。
二、教学内容1. 温度基础知识:温度的定义、单位及换算,温度传感器原理。
教材章节:《物理》六年级上册,第三章“温度与热量”。
2. 多路温度测试设备的使用与操作:- 温度传感器的连接与调试;- 数据采集器的使用;- 实验操作步骤与注意事项。
教材章节:《物理》六年级上册,第三章“温度与热量”实践活动部分。
3. 数据处理与分析:- 数据整理与图表制作;- 实验数据的分析;- 异常数据的处理。
教材章节:《数学》六年级上册,第二章“数据的收集、整理与表达”。
4. 小组合作与问题解决:- 小组分工与协作;- 实验过程中问题的发现与解决;- 实验结果的评价与反思。
教材章节:《综合实践活动》六年级上册,第三章“问题解决与合作交流”。
多点温度监测系统

电子设计自动化实训报告题目:多点温度监测系统学生姓名:宋安邦学生学号:2104020685学院:工学院专业:电子信息工程班级:2011级指导教师:林君副教授一、实训目的和意义通过对多点温度检测系统的设计,可以更深入的了解MC5.2单片机的特点以及应用技巧,对单片机的应用可以温习其中的结构以及原理。
而且proteus的强大功能也能通过此次试验反应出来,熟悉其界面的风格以及各种应用,又重新的认识了proteus在单片机方面的强大功能。
二、实训设计内容要求➢ 1.实现4点温度实时采集,温度传感器采用DS18B20➢ 2.采用LCD1602显示4个采集点温度➢ 3.具有温度上下限报警功能:上限90°C,下限20°C➢ 4.声音和光报警2种模式:光报警采用4只发光LED;声音报警采用扬声器,报警音调采用2KHz方波。
三、系统设计1.方案设计2(1)工作原理:(a)通过四个温度采集器采集数字温度输入到单片机的p2.0~p2.3口。
(b)初始化LCD1602使1602能够接受数据,并分配其显示位置,此处采用两行两列式显示。
(c)单片机读取信号。
(d)单片机向LCD1602写信号,并延时。
(e)判断是否有数据高于90度或低于20度,如果有点亮相应的led,并启动蜂鸣器。
(2)硬件系统组成(a)80C52(b)晶振电路(c)复位电路(d)LED灯电路(e)LCD1602(f)温度检测ds18b203. 软件设计(1)时间的设定:从此采用中断T0方式延时,而且是基本单位,无论蜂鸣器还是led,或是显示温度都用到此延时程序。
延时程序如下:void tmpDelay(int num){while(num--) ;}void Time0(void) interrupt 1 using 0{sound=~sound;TH0=(65536-5000)/256;TL0=(65536-5000)%256;}(2)信号的读入与写出:读字节程序如下unsigned char ReadOneChar1()//{unsigned char i=0;unsigned char dat1 = 0;for (i=8;i>0;i--){DQ1 = 0; // 给脉冲信号dat1>>=1;DQ1 = 1; // 给脉冲信号if(DQ1)dat1|=0x80;tmpDelay(4);}return(dat1);一共读四个字节,接下来是写字节程序如下void WriteOneChar1(unsigned char dat1)// {unsigned char i=0;for (i=8; i>0; i--){DQ1 = 0;DQ1 = dat1&0x01;tmpDelay(5);DQ1 = 1;dat1>>=1;}注意度字节的返回值。
多点温度测量课程设计

多点温度测量课程设计一、课程目标知识目标:1. 学生能理解温度测量的基本原理,掌握不同温度测量工具的使用方法。
2. 学生能够运用多点温度测量方法,分析物体的温度分布特点。
3. 学生了解温度在生活中的应用,知道温度对物体性质的影响。
技能目标:1. 学生能够正确使用温度计、红外测温仪等工具进行多点温度测量。
2. 学生能够通过实验数据,绘制温度分布图,分析温度变化规律。
3. 学生能够运用所学知识,解决实际生活中的温度测量问题。
情感态度价值观目标:1. 学生对温度测量产生兴趣,增强对物理实验的好奇心和探究欲望。
2. 学生通过合作完成实验,培养团队协作精神和沟通能力。
3. 学生认识到温度测量在生活中的重要性,提高环保意识和节能意识。
分析课程性质、学生特点和教学要求:本课程为物理学科实验课,针对八年级学生设计。
学生已具备一定的物理知识和实验技能,对温度测量有一定的了解。
课程旨在通过实践操作,让学生掌握多点温度测量的方法,提高实验能力。
教学要求注重实践性、探究性和合作性,鼓励学生主动参与、积极思考,将所学知识应用于实际生活中。
课程目标分解:1. 知识目标:通过课堂讲解、实验演示和练习,使学生掌握温度测量的基本知识和技能。
2. 技能目标:通过分组实验,让学生动手操作,培养实际操作能力和数据分析能力。
3. 情感态度价值观目标:通过实验探究和讨论,激发学生学习兴趣,培养合作精神,增强环保意识。
二、教学内容本章节教学内容依据课程目标,结合教材第四章“温度与热量”相关内容,进行如下安排:1. 温度测量原理:- 温度定义与单位- 温度测量的基本原理(如膨胀原理、电热效应等)2. 温度测量工具:- 常见温度测量工具(如酒精温度计、电子温度计、红外测温仪等)- 不同温度测量工具的使用方法及注意事项3. 多点温度测量方法:- 实验设计:多点温度测量实验步骤及要求- 实验操作:分组进行实验,测量不同位置的温度- 数据处理:绘制温度分布图,分析温度变化规律4. 温度测量在生活中的应用:- 温度对物体性质的影响(如熔点、沸点等)- 温度测量在环保、节能等方面的实际应用案例教学进度安排:第一课时:温度测量原理与温度测量工具介绍第二课时:多点温度测量实验操作与数据收集第三课时:温度分布图绘制与分析,讨论温度测量在实际生活中的应用教学内容科学性和系统性:确保所选教学内容符合科学性,紧密联系教材,逐步引导学生从理论知识过渡到实践操作。
课程设计--多点温度计设计-精品

多点温度计设计1.课程设计方案1.1.课程设计要求1.1.1.基本要求利用数字温度传感器与单片机结合来测量温度。
利用数字温度传感器DS18B20采集温度信号,计算后用LED1602字符型液晶显示相应的温度值。
数字温度计所测量的温度采用数字显示,控制器使用单片机AT89C51,测温传感器使用DS18B20。
首先进行预设计,根据选定硬件电路方案,充分利用单片机软、硬件资源。
主要设计指标有测量两点或两点以上的温度,测温范围均为:0~100℃;每点温度分辨力:0.0625℃;测量速率:2次/秒自动连续测量。
1.1.2.扩展要求用图形液晶显示温度曲线,当前温度、单位等,利用单片机实现一些扩展功能,如:实现超温报警等,或结合自身能力实现其他功能。
1.2.课程设计内容1.2.1设计方案根据课程设计要求,制定课程设计方案。
采用专用集成数字化温度传感器DS18B20测温,它具有接口简单、直接数字量输出、精度高等优点。
DS18B20是DALLAS公司的最新单线数字温度传感器,它的温度检测与数字检测数据全集成于一个芯片之上,测量范围为-55~+125℃,在-10 ~+85℃内,精度为±0.0625℃,完全可以满足设计指标要求。
在DS18B20中的每个器件上都有独一无二的序列号,这个序列号是出厂前已经刻录在DS18B20中,需要用户使用前进行读取。
它还可以实现“一线总线”的数字方式传输,即在一个端口上,可以挂很多数字温度传感器,通过读取每个DS18B20的序列号,进行匹配后完成多个DS18B20的测温过程,电路简单,易于实现。
另DS18B20支持3~5.5V的电源范围,使得系统设计更加方便灵活。
DS18B20支持报警温度设置,用户设定的报警温度保存在EEPROM存储器,满足部分扩展要求,并且掉电后依然保存,方便随时的通断电。
单片机控制模块以ATMEL公司生产的AT89C52单片机为主控核心,AT89C52单片机价格便宜,语言简单,是单片机初学者的基本入门课程,对于初学者来说使用容易,且可用性强。
基于某单片机的多点温度测量系统设计

基于某单片机的多点温度测量系统设计设计需求及背景:在许多工业领域中,需要实时监测多点的温度数据,以确保系统的正常运行和生产过程的稳定性。
传统的温度测量系统通常使用多个独立的传感器连接到数据采集器,然后通过有线或无线的方式将数据传输到主控制系统。
这种设计方式存在布线繁琐、维护成本高等问题。
因此,我们需要设计一种基于单片机的多点温度测量系统,以实现简化布线、降低成本、提高系统可靠性等目的。
该系统需要能够同时测量多个点的温度,并将数据发送到中央控制系统进行处理和监控。
设计方案:1.硬件设计:- 选择一款适合的单片机作为系统主控制器,如Arduino或STM32等;-集成多个温度传感器,如DS18B20等,连接到单片机的GPIO口;-添加合适的电源管理模块,以确保传感器和单片机正常工作;-集成无线通信模块,如WiFi、蓝牙或LoRa等,以将数据传输至中央控制系统;-设计外壳和固定装置,以方便系统的安装和使用。
2.软件设计:-编写单片机上的程序,实现多路温度传感器数据的采集和处理;-设计通信协议,将采集到的数据封装成数据包,并通过无线通信模块发送至中央控制系统;-在中央控制系统上编写数据接收和处理程序,对接收到的数据进行解析和展示;-实现远程监控功能,可以通过手机或电脑实时查看系统各点的温度数据。
3.系统特点:-灵活布线:传感器可以分布在不同位置,无需固定布线,减少安装和维护成本;-高可靠性:采用单片机控制和无线通信,系统稳定性高,数据传输可靠;-高效监控:通过中央控制系统实现多点温度数据的集中管理和实时监控;-易扩展:可以根据需要增加更多传感器和扩展功能,满足不同的监测需求。
总结:基于单片机的多点温度测量系统设计,可以提高监测效率、降低成本并提高系统可靠性。
通过合理的硬件设计和软件开发,可以实现多路温度数据的实时采集和传输,为工业自动化和生产管理提供有力支持。
未来,在不断优化和扩展的基础上,这种系统设计还可以应用到更多领域,并实现更多功能和特性的进一步发展。
最新单片机课程设计之多点温度测量系统的设计

单片机课程设计之多点温度测量系统的设计单片机应用系统设计课题:多点温度测量系统的设计姓名:班级:学号:指导老师:日期:单片机复位报警点按键调时钟振荡时钟振荡主控制器显示温度传感一、设计的背景和意义温度测控技术在各个领域应用越来越广泛,同时温度测量也被人们所关注,人们对测试温度的仪器要求越来越高,要为人类工、科研、生活提供更好的设施,那就需要从单片机技术入手,一切向着数字化控制,智能化控制方向发展。
二、系统总体方案设计因为要用到温度传感器,所以在单片机电路设计中,大多都是使用传感,我们使用的是DS18B20,此传感器,可以很容易直接读取被测温度值,进行转换,可以满足设计的要求。
1、原理:(1)将 AD590 作为室温度传感器,当温度变化时,AD590 会产生电流的变化,经OPA1 将电流转换为电压,由 OPA2 作为零为调整,最后由 OPA3 反相放大 10 倍。
(2)ADCO804 输出最大转换值=FFH(255)。
OPA3 为放大 10 倍时。
则本电路最大测量温度为;最大显示温度为 5.1/10V=0.51V,即51°C(10 为放大倍数)。
255X=51,知 X=0.2,即先乘 2 再除 10。
FF→255→255ⅹ2→510,R4=0.5R3=10。
即D4=0,D3=5,D2=1,D1=0,本电路显示器只取D3、D2两位数。
(3)按下P2.1按钮,放开后立即进入温度设定模式,显示设定最高温度为34°C (建立在 TABLE 内)每按一次设定温度将减少 1°C,直至最低温度 20°C,再按一次回到 34°C。
(4)当室温高于设定温度,压缩机(P3.0)运转,使室温降低,当室温低于设定值时,压缩机停止运行。
(5)当进入设定温度模式,如末按下设定按钮(P2.1)经数秒后自动解除设定模式,回到室温显示模式。
(6)本程序以计时中断,每 50ms 中断一次,比较室温一次,而令压缩机运转和停止。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
课程设计报告(2010 —2011 年度第2学期)题目:基于DS18B20的多点温度测量系统院系:姓名:学号:专业:指导老师:2011年5 月22 日40C;C;;)数据传输方式:采用串行数据传送的方式。
目录1设计要求…………………………………………………………………………2设计的作用、目的………………………………………………………………3设计的具体实现………………………………………………………………….3.1系统概述…………………………………………………………………….3.2单元电路设计与分析………………………………………………………3.3电路的安装与调试…………………………………………………………4心得体会及建议…………………………………………………………………4.1心得体会……………………………………………………………………4.2建议…………………………………………………………………………5附录………………………………………………………………………………6参考文献…………………………………………………………………………基于DS12B20的多点温度测量系统设计报告1设计要求运用DS12B20温度测量芯片实现一个多点温度测量系统,要求如下:(1).测量点为两点。
(2).测量的温度为-40~+40°C(3).温度测量的精度为±0.5°C(4).测量系统的响应时间要小于1S。
(5).温度数据的传输方式采用串行数据传送的方式。
2 设计的作用、目的通过本设计可以进一步了解熟悉单片机的控制原理以及外设与单片机的数据通信方法,尤其是串行通信方法以及单片机与外设间的接口问题。
本设计旨在提高学生的实际应用系统开发能力,增长学生动手实践经验,激起学生学以致用的兴趣。
3设计的具体实现3.1系统概述本系统分为温度采集模块、核心处理模块、控制模块和显示模块。
温度采集模块由DS18B20温度测量芯片构成,它负责测量温度后将温度量转化为数字信号,传输到数据处理模块;核心处理模块由AT89S52单片机组成,它负责与温度采集模块进行数据通信、对数据进行操作处理已经对各种外设的响应与控制;控制模块由几个按键组成,实现对测量点的选择以及电路复位的操作;显示模块由一块四位的八段译码显示管和驱动芯片组成,它的作用是显示测量的温度值。
系统模块组成图:3.2 单元电路设计与分析一、模块详解:1.温度采集单元。
采用DALLAS 公司的DS18B20温度传感器,该温度传感器将温度检测与数字数据输出全集成于一个芯片上,它的一个工作周期分为温度检测和数据处理两个部分,它采用单数据总线进行数据传输,由于本设计采用两点测量温度,两个温度传感器的输出数据脚共连在单片机的数据引脚上,因此在进行温度检测和数据处理中需要首先利用DS18B20的ROM 操作指令对温度传感器的ROM —ID 进行识别,以针对特定的温度传感器进行操作。
(对DS18B20的操作指令见附录文件,识别ROM-ID 的子程序见附录程序) DS18B20的主要特征: ·全数字温度转换及输出 ·先进的单总线技术·最高12位的分辨率时的最大工作周期为750毫秒 ·可选择寄生工作方式·检测温度范围为-55°C~+125°C ·内置EEPROM ,限温度报警·64位光刻ROM ,内置产品序列号,方便多机挂接·多种封装形式,适应不同硬件2.核心处理单元。
采用Atmel公司的AT89S52单片机,它作为系统的核心部分,和温度采集单元之间,它直接对温度传感器进行指令操作,获取温度传感器的温度数据后进行各种处理,然后通过显示模块显示出温度值,工作过程中,接收来自控制模块的信号,并对其作出相应的响应。
AT89S52是一种低功耗、高性能CMOS 8位微控制器,具有8K 在系统可编程Flash 存储器。
使用Atmel 公司高密度非易失性存储器技术制造,与工业80C51 产品指令和引脚完全兼容。
片上Flash允许程序存储器在系统可编程,亦适于常规编程器。
在单芯片上,拥有灵巧的8 位CPU 和在系统可编程Flash,使得AT89S52在众多嵌入式控制应用系统中得到广泛应用。
3.控制模块。
采用几个按钮开关和相应的几个10K电阻组成,当按下按钮是,得到一个低电平信号送入单片机,松开开关后变回高电平信号,单片机识别此信号并对此做出响应。
4.显示模块。
采用一个四位的八段译码管和一块八位锁存器74HC373组成,采用扫描显示的方式显示四位数据。
(a)八段数码管结构(b)共阴型数码管(c)共阳型数码管八段LED数码显示管原理和结构数码管分为共阳型和共阴型,共阳极型就是发光管的正极都连在一起,作为一条引线,负极分开。
八段数码发光管就是8个发光二极管组成的,在空间排列成为8字型带个小数点,只要将电压加在阳极和阴极之间相应的笔画就会发光。
8个发光二极管的阳极并接在一起,8个阴极分开,因此称为共阳八段数码管。
相反则为共阴八段数码管。
共阴极八段译码管显码表:(输入为sp、g、f、e、d、c、b、a)输入输出输入输出3FH 0 7FH 806H 1 6FH 95BH 2 77H A4FH 3 7CH B66H 4 39H C6DH 5 5EH D7DH 6 79H E07H 7 71H F*****显示小数点时sp位置为1就可以了。
******二、电路仿真:使用PROTEUS仿真软件对设计电路进行仿真,程序部分用KEIL软件进行编写。
仿真图如下:仿真中,调整DS18B20的温度,可以看到显示器上面的温度也相应的变为调整后的温度,通过按下button2或者button1可以更换温度传感器的选择。
仿真中的单片机使用的程序数据文件由KEIL软件编译生成,详细的程序参考附录中的主程序。
由于实际电路中要用到DS18B20的ROM_ID码,所以专门设计了提取ID码的电路,提取ID码得程序在参考附录中的提取ROM_ID码程序。
提取的ID码会在显码管上以一次显示一个字节的方式显示出来,显示八组,一共是八字节的ID码。
电路图如下:3.3电路的安装与调试电路仿真通过后,开始实际的焊接过程,焊接过程比较繁琐,需要认真小心操作,确保焊接的线路不出现错误,由于缺乏焊接经验,焊接线路比较混乱,焊接过程花费比较长的时间,完成焊接后,就是开始检查调试了,使用万用表检查电源电路无故障后,就开始安装芯片开始调试了。
初次调试时发现数码管显示非常不稳定,现实的非常不连续,过分析,确定应该是程序中的扫描时间不合适,经过几次的程序修改和实物调试观察后,最终解决了这个问题。
然后就是电路性能检测,使用普通的温度计,测量室内温度后,再用制作的电路测量室内温度,数据分别为32.5和32.8,几次测量后得出的结论,精度满足0.5的要求。
响应时间直接利用感官判断,系统的响应时间在1s内。
两个温度传感器掘客正常测量温度,各个控制开关功能正常。
经过一段时间的运行测试,工作正常,完成调试过程。
4 心得体会及建议4.1心得体会经过本次设计实验,充分认识到了自身再动手实际操作方面的不足,单片机程序的编写不够熟练,电路焊接很生疏,需要多加练习。
4.2 建议希望在以后的学习中能过再多做类似本设计的练习,提高动手能力,夯实基础知识。
5 附录5.1 原件明细表DS18B20两个、AT89S52一块、74HC573一块、按钮开关3个、10K电阻三个、4.7K电阻两个、10uf电解电容一个、四位八段数码管一个。
5.2 设计原理图参看上面的仿真图。
5.3 设计的主程序:#include <reg51.h>#define uchar unsigned char#define uint unsigned intsbit DS=P2^0; //定义温度传感器的数据引脚sbit button1=P3^5; //定义按钮开关的控制位脚sbit button2=P3^6;uint temp; // 温度值sbit dula=P2^6;uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};uchar code table1[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd, 0x87,0xff,0xef};uchar codeROM_CODE1[]={0x28,0xaa,0x4b,0x27,0x03,0x00,0x00,0x06}; uchar codeROM_CODE2[]={0x28,0x1b,0x40,0x12,0x03,0x00,0x00,0x8f};void delay(uint count) //延时函数{uint i;while(count){i=200;while(i>0)i--;count--;}}void dsreset() //18B20复位,初始化函数{uint i;DS=0;i=103;while(i>0)i--;DS=1;i=6;while(i>0)i--;}bit tmpreadbit() // 读1位数据函数{uint i;bit dat;DS=0;i++;i++;DS=1;i++;i++;dat=DS;i=8; // 短延时while(i>0)i--;return (dat);}uchar tmpread() //读1字节函数{uchar i,j,dat;dat=0;for(i=1;i<=8;i++){j=tmpreadbit();dat=(j<<7)|(dat>>1); //读出的数据最低位在最前面,这样刚好一个字节在DAT里}return(dat);}void tmpwritebyte(uchar dat) //write a byte to ds18b20 向1820写一个字节数据函数{uint i;uchar j;bit testb;for(j=1;j<=8;j++){testb=dat&0x01;dat=dat>>1;if(testb) //write 1{DS=0;i++;i++;DS=1;i=8;while(i>0)i--;}else{DS=0; //write 0i=8;while(i>0)i--;DS=1;i++;i++;}}}void match_rom(uchar fp) //匹配ROM ID{char k;tmpwritebyte(0x55); // 发送匹配ROM命令if(fp)for(k=0;k<8;k++)tmpwritebyte(ROM_CODE1[k]); //发送18B20的序列号,先发送低字节elsefor(k=0;k<8;k++)tmpwritebyte(ROM_CODE2[k]);}void tmpchange(uchar a) //转换温度{dsreset();delay(1);match_rom(a);tmpwritebyte(0x44);}uint tmp(uchar fp) //读取寄存器中存储的温度数据{float tt;uchar a,b;dsreset();delay(1);match_rom(fp);tmpwritebyte(0xbe);a=tmpread(); //读低8位b=tmpread(); //读高8位temp=b;temp<<=8; //two byte compose a int variable 两个字节组合为1个字temp=temp|a;tt=temp*0.0625; //温度在寄存器中是12位,分辨率是0.0625temp=tt*10+0.5; //乘10表示小数点后只取1位,加0.5是四折五入return temp;}void display(uint temp) //显示程序{uchar A0,A1,A2,A2t,A3,ser;ser=temp/10;SBUF=ser;A0=temp/1000;A1=temp%1000/100;A2t=temp%100;A2=A2t/10;A3=A2t%10;dula=1;P1=table[A0]; //显示千位P3=0Xfe;dula=0;delay(1);dula=1;P1=table[A1]; //显示百位 P3=0Xfd;dula=0;delay(1);dula=1;P1=table1[A2]; //显示十位 P3=0xfb;dula=0;delay(1);dula=1;P1=table[A3]; //显示个位 P3=0xf7;dula=0;delay(1);dula=1;}void main(){uchar fp=1;uint x=0;while(1){if(button1==0||(button1==1&&button2==1)) //按下一号键或者不按键时显示A的温度测量值{delay(1); //延时去抖动if(button1==0||(button1==1&&button2==1))do{fp=1;tmpchange(fp);display(x); display(x);x=tmp(fp);display(x);display(x);}while(button2==1);}if(button2==0) //按下二号键测量B的温度{delay(1);if(button2==0)do{fp=0;tmpchange(fp);display(x);display(x);x=tmp(fp);display(x);display(x);}while(button1==1);}}}5.4 用来提取DS18B20的ROM-ID码子程序物理电路公用上面的原理电路,但是提取ID码时每次只能接一个DS18B20在上面,不然就没法提取了。