单片机应用课程设计电子时钟及温度控制器.doc
单片机应用课程设计(设计课题: 电子时钟及温度控制器 院(系、部): 机械工程系 专业: 机械制造及其自动化专业 学 生 姓 名: 学 生 学 号: 指 导 教 师: 2012年6月21日一、 单片机电子时钟的设计目录第一章前言3第二章方案论证与比较32.1数字时钟方案32.2数码管显示方案4第三章系统设计53.1总体设计53.1.1系统说明53.1.2系统框图3第四章原理图与仿真图64.1 Protel原理图 64.2 Proteus 仿真图74.3流程图84.4源程序清单104.5设计总结18第五章实验心得体会19第六章参考文献20第一章 前言单片机自20世纪70年代问世以来,以其极高的性能价格比,受到人们的重视和关注,应用很广、发展很快。单片机体积小、重量轻、抗干扰能力强、环境要求不高、价格低廉、可靠性高、灵活性好、开发较为容易。由于具有上述优点,在我国,单片机已广泛地应用在工业自动化控制、自动检测、智能仪器仪表、家用电器、电力电子、机电一体化设备等各个方面,而51单片机是各单片机中最为典型和最有代表性的一种。这次毕业设计通过对它的学习、应用,以AT89S51芯片为核心,辅以必要的电路,设计了一个简易的电子时钟,它由4.5V直流电源供电,通过数码管能够准确显示时间,日期,调整时间,日期,从而到达学习、设计、开发软、硬件的能力。 时钟电路在计算机系统中起着非常重要的作用,是保证系统正常工作的基础。在一个单片机应用系统中,时钟有两方面的含义:一是指为保障系统正常工作的基准振荡定时信号,主要由晶振和外围电路组成,晶振频率的大小决定了单片机系统工作的快慢;二是指系统的标准定时时钟,即定时时间,它通常有两种实现方法:一是用软件实现,即用单片机内部的可编程定时/计数器来实现,但误差很大,主要用在对时间精度要求不高的场合;二是用专门的时钟芯片实现,在对时间精度要求很高的情况下,通常采用这种方法,典型的时钟芯片有:DS1302,DS12887,X1203等都可以满足高精度的要求。本设计由单片机AT89S51芯片和LED数码管为核心,运用DS1302时钟芯片,辅以必要的电路,构成了一个单片机电子时钟。第二章 方案论证与比较2.1数字时钟方案数字时钟是本设计的最主要的部分。根据需要,可利用两种方案实现。方案一:本方案采用Dallas公司的专用时钟芯片DS12887A。该芯片内部采用石英晶体振荡器,其芯片精度不大于10ms/年,且具有完备的时钟闹钟功能,因此,可直接对其以用于显示或设置,使得软件编程相对简单。为保证时钟在电网电压不足或突然掉电等突发情况下仍能正常工作,芯片内部包含锂电池。当电网电压不足或突然掉电时,系统自动转换到内部锂电池供电系统。而且即使系统不上电,程序不执行时,锂电池也能保证芯片的正常运行,以备随时提供正确的时间。方案二:本方案完全用软件实现数字时钟。原理为:在单片机内部存储器设三个字节分别存放时钟的时、分、秒信息。利用定时器与软件结合实现1秒定时中断,每产生一次中断,存储器内相应的秒值加1;若秒值达到60,则将其清零,并将相应的分字节值加1;若分值达到60,则清零分字节,并将时字节值加1;若时值达到24,则将十字节清零。该方案具有硬件电路简单的特点。但由于每次执行程序时,定时器都要重新赋初值,所以该时钟精度不高。而且,由于是软件实现,当单片机不上电,程序不执行时,时钟将不工作。基于硬件电路的考虑,本设计采用方案二完成数字时钟的功能。2.2数码管显示方案方案一:静态显示。所谓静态显示,就是当显示器显示某一字符时,相应的发光二极管恒定的导通或截止。该方式每一位都需要一个8 位输出口控制。静态显示时较小的电流能获得较高的亮度,且字符不闪烁。但当所显示的位数较多时,静态显示所需的I/O口太多,造成了资源的浪费。方案二:动态显示。所谓动态显示就是一位一位的轮流点亮各个位,对于显示器的每一位来说,每隔一段时间点亮一次。利用人的视觉暂留功能可以看到整个显示,但必须保证扫描速度足够快,字符才不闪烁。显示器的亮度既与导通电流有关,也于点亮时间与间隔时间的比例有关。调整参数可以实现较高稳定度的显示。动态显示节省了I/O口,降低了能耗。从节省I/O口和降低能耗出发,本设计采用方案二。第三章 系统硬件设计3.1总体硬件设计3.1.1系统说明利用单片机(AT89S51)制作简易电子时钟,由六个LED数码管分别显示小时十位、小时个位、分钟十位、分钟个位、秒钟十位、秒钟个位。6个PNP管(9012)分别控制六个数码管的亮灭,一个按键用于时间调整。3.1.2系统框图AT89C52六位LED共阳显示按键 DS1302时钟模块蜂鸣器闹铃第四章 原理图与仿真图4.1 Protel原理图 图4-14.2 Proteus 仿真图图4-24.3 流程图主程序开始设定定时器常数,开中断显示时间到1秒?T0中断现场保护重装定时器初值满20次否?满24小时否?满60秒否?满60分否?恢复现场时值加1时缓冲单元清零秒值加1分缓冲单元清零秒缓冲单元清零分值加1结束时钟调整程序关闭显示,省电状态分钟闪烁,调时状态分值加1按键k2时间t>1时值=24?按键k2时间t<0.5按键k2时间t<0.5时钟闪烁,调时状态分值=60?分值清零时值加1时值清零返回显示k2是否按下4.4 源程序清单#include <reg52.h>#include <intrins.h>#define uchar unsigned char#define uint unsigned intuchar data_7seg10=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,;uchar miao,fen,shi,year,mon,day;sbit qh=P13;sbit miaoyear=P10;sbit fenmon=P11;sbit shiday=P12;sbit rst=P14;sbit sck=P15;sbit io=P16;sbit fm=P17;/*函数声明:*/void write_ds1302_byte(uchar dat);void write_ds1302(uchar add,uchar dat);uchar read_ds1302(uchar add);void read_shijian();void read_riqi();void set_shijian();void set_riqi();void display_shijian();void display_riqi();void delay(int n);void show();void fmzz(); /*DS1302单字节写入:*/void write_ds1302_byte(uchar dat)uchar i;for (i=0;i<8;i+)sck=0;io=dat&0x01;dat=dat>>1;sck=1; /*DS1302多字节写入:*/void write_ds1302(uchar add,uchar dat)rst=0;_nop_();sck=0;_nop_();rst=1;_nop_();write_ds1302_byte(add);write_ds1302_byte(dat);rst=0;_nop_();io=1;sck=1; /*DS1302读取:*/uchar read_ds1302(uchar add) uchar i,value;rst=0;_nop_();sck=0;_nop_();rst=1;_nop_();write_ds1302_byte(add);for (i=0;i<8;i+)value=value>>1;sck=0;if (io) value=value|0x80;sck=1;rst=0;_nop_();sck=0;_nop_(); sck=1;io=1;return value;/*调整日期*/ void set_riqi() if (miaoyear=0) delay(100); if (miaoyear=0) year=(year>>4)*10+(year&0x0f); year+; if (year=99) year=0; year=(year/10)<<4)+(year%10); write_ds1302(0x8C,year); if (fenmon=0) delay(100); if (fenmon=0) mon=(mon>>4)*10+(mon&0x0f); mon+; if (mon=13) mon=1; mon=(mon/10)<<4)+(mon%10); write_ds1302(0x88,mon); if (shiday=0) delay(100); if (shiday=0) if (day=31) day=1; day=(day>>4)*10+(day&0x0f); day+; if (day=31) day=1; day=(day/10)<<4)+(day%10); write_ds1302(0x86,day); /*调整时间:*/void set_shijian() if (miaoyear=0) delay(100); if (miaoyear=0) miao=(miao>>4)*10+(miao&0x0f); miao+; if (miao=60) miao=0; miao=(miao/10)<<4)+(miao%10); write_ds1302(0x80,miao); if (fenmon=0) delay(100); if (fenmon=0) fen=(fen>>4)*10+(fen&0x0f); fen+; if (fen=60) fen=0; fen=(fen/10)<<4)+(fen%10); write_ds1302(0x82,fen); if (shiday=0) delay(100); if (shiday=0) shi=(shi>>4)*10+(shi&0x0f); shi+; if (shi=24) shi=0; shi=(shi/10)<<4)+(shi%10); write_ds1302(0x84,shi); /*读取日期*/ void read_riqi() year=read_ds1302(0x8D); mon=read_ds1302(0x89); day=read_ds1302(0x87); /*读取时间:*/void read_shijian() shi=read_ds1302(0x85); fen=read_ds1302(0x83); miao=read_ds1302(0x81);/*显示日期*/ void display_riqi() unsigned int b=1;P2=0x01;P0=data_7segyear/16;delay(b);P2=0x02;P0=data_7segyear%16;delay(b);P2=0x04;P0=data_7segmon/16;delay(b);P2=0x08;P0=data_7segmon%16;delay(b);P2=0x10;P0=data_7segday/16;delay(b);P2=0x20;P0=data_7segday%16;delay(b); /*显示时间:*/void display_shijian() unsigned int a=1;P2=0x01;P0=data_7segshi/16;delay(a);P2=0x02;P0=data_7segshi%16;delay(a);P2=0x04;P0=data_7segfen/16;delay(a);P2=0x08;P0=data_7segfen%16;delay(a);P2=0x10;P0=data_7segmiao/16;delay(a);P2=0x20;P0=data_7segmiao%16;delay(a); /*蜂鸣:*/ void fmzz() uint i; for (i=0;i<100;i+) fm=!fm; delay(2); /*延时程序:*/void delay(int n)unsigned int i,j;for(i=0;i<n;i+)for(j=0;j<121;j+); /*显示学号:*/void show() unsigned int m;for(m=0;m<20;m+)uint a=10;P2=0x01;P0=data_7seg0;delay(a);P2=0x02;P0=data_7seg2;delay(a);P2=0x04;P0=data_7seg4;delay(a);P2=0x08;P0=data_7seg2;delay(a);P2=0x10;P0=data_7seg1;delay(a);P2=0x20;P0=data_7seg6;delay(a); /*主程序:*/void main() show(); delay(5);/*write_ds1302(0x8e,0x00); /禁止写保护write_ds1302(0x84,0x12);/初始化write_ds1302(0x82,0x00);write_ds1302(0x80,0x00);write_ds1302(0x86,0x01); write_ds1302(0x88,0x06); write_ds1302(0x8C,0x12);write_ds1302(0x8e,0x80);*/开保护while (1) if(qh=0) set_riqi(); read_riqi(); display_riqi(); read_shijian(); else set_shijian();read_shijian();display_shijian();read_riqi(); if(fen=0) if(miao=0) fmzz();4.5设计总结本设计能够很准确的走时,并能够通过硬件对时钟进行时间、日期调整,并具有整点报时功能。u 功能介绍:1. 显示XX:XX:XX时间和日期。2. 时间可调:调整键(k2)按下时间小于1秒(t<1s),关闭显示(省电)。调整键(k2)按下(t>0.5s)分钟位闪亮,此时按下k2键(t<0.5s)该个位数值加1,当加到9时,再按下k2键则该个位显示0,分钟十位加1。继续按下调整键(k2)(t>0.5s)时钟位闪亮,此时按下k2键(t<0.5s)该个位数值加1,当加到9时再按下加S2键则该个位显示0,时钟十位加1。继续按下调整键(k2)(t>0.5s),返回到正常显示状态。3.下载线和电源线插接说明:1.下载线插接说明:两排十针下载口,板图上都有一个小方框,为1号引角;下载线的凸口为正方向,凸口的右侧边的第一个插孔为1号引角,这一点一定要切记,不然的话程序下载不进去。2.电源线插接说明:电池盒的红线为正,黑线为负。板子所留出来的电源插口用VCC(表示电源正)和GND(表示电源负)标明。u 调试要点:首先确保各器件的完好性,其次检测各芯片的电源线和地线是否接触良好,然后焊接器件,接好电源用万用表检测各电源端、地端的状态是否正常。检查无误后插上AT89S51并烧写一简易的程序,观察电路是否能协同工作。最后烧写工作程序,根据显示现象调试程序直至成功。上电运行时,数码管开始显示02:42:16,为我的学号,之后时钟开始随系统时间走时,具有整点报时功能,日期同理为当前日期,与时间调节方法相同。第五章 实验心得体会(1)、在这两周里,因为之前接触到的电子系统设计不多,所以一开始,感觉难以入手,就算上网载了很多程序,也看不懂。后来请求同学的帮助,了解了要对各种芯片编写程序时首先应找到该芯片的数据手册,根据数据手册上的说明、时序要求及流程图编写对应程序。(2)、其次,巩固了Keil C51工程文件的建立,程序编写以及编译的掌握程度。最重要的是,因为只是水平有限,要自己编写C程序很难,但在此实验中,最大的收获莫过于看懂别人的程序,分析之后,自己拼凑编写以实现不同的功能。并且掌握了52C程序的编写过程。(3)、掌握了Proteus的使用方法,从实际操作中认识到Proteus在仿真方面的优越性,激发了自己学习Proteus的兴趣;(4)、因为自己要修改程序,所以单单花费在程序分析的时间就很多,为了更好的理解程序,我把每句主要程序的后面都注释了该语句的意思,详情可以见程序清单,发现注释语义的工作量也是非常大的。写实验报告时,每个模块的流程图都是自己画的,用WORD文档画图真的很麻烦,而且不是很美观。因为时间比较仓促,流程图写的条理性不够,不过相信以后多多练习,就可以做得更好。(5)、在这次实验中我遇到了很多故障,不过通过各种渠道(比如网络,请教同学,老师等等)解决了一些故障,虽然没有全部解决,但能在短短一周内通过此次作业,实现电子钟的功能,还是有点成就感的。在解决这些问题的过程中发现网络确实是一个很好的学习平台,利用前人的经验可以提高自己的解决实际问题的能力。通过这一个多礼拜的学习实践,使我对所学的知识进行了系统的复习和巩固,在以前学习中不够清晰的概念得到了更好的理解。相信通过不断的学习,能使自己扬长补短。第六章 参考文献1单片机原理、接口技术与应用杨学昭,王东云主编.西安电子科技大学出版社 .2009年2月2微型计算机原理与接口技术 冯博琴,吴宁编.清华大学出版社 .2007年8月3电子技术基础康光华等 编著. 高等教育出版社 .20054基于AT89051单片机与DS18B20的温度测量系统蔺鹏,柴世红.甘肃科技. 2008年第9期6 基于 DS18B20 测温系统的设计颜丽娜,张铁民.机械与电子.2010 年 第 11 期751单片机C语言教程-入门、提高、开发、拓展全攻略郭天祥编著.电子工业出版社.2009年12月二、 基于DS18B20的温度测量 目 录第一章 设计目的22第二章 设计要求22第三章 设计内容22第四章 系统设计方案234.1 方案选择234.2系统组成24第五章 系统硬件设计25 5.1 DS18B20介绍255.2 DS18B20初始化265.3部分电路设计26 5.3.1晶振设计26 5.3.2报警电路设计27第六章 原理图、仿真与实物276.1 原理图276.2 仿真图286.3 实物296.4 源程序清单29第七章 总结34第八章 参考文献35第一章 设计目的通过该课程设计使学生进一步了解和加深智能化仪器设计的一般原则;熟练掌握智能化仪器与装置的软、硬件设计方法;掌握仪器的软件调试及软硬件联合统调方法与技能。掌握仪器的接口技术;熟练掌握仪表总线的工作原理、设计步骤、编程及调试;掌握VC或汇编设计软件的编程与调试方法。1、巩固、加深和扩大单片机应用的知识面,提高综合及灵活运用所学知识解决工业控制的能力。2.、培养针对课题需要,选择和查阅有关手册、图表及文献资料的自学能力,提高组成系统、编程、调试的动手能力。3、通过对课题设计方案的分析、选择、比较、熟悉单片机用系统开发、研制的过程,软硬件设计的方法、内容及步骤。第二章 设计要求 1、温度测试基本范围0100。 2、精度误差小于1。 3、LED数码管显示。4、实现报警提示。第三章 设计内容基于DS18B20的温度测量系统数字温度计采用温度敏感元件也就是温度传感器(如铂电阻,热电偶,半导体,热敏电阻等),将温度的变化转换成电信号的变化,如电压和电流的变化,温度变化和电信号的变化有一定的关系,如线性关系,一定的曲线关系等,这个电信号可以使用模数转换的电路即A/D转换电路将模拟信号转换为数字信号,数字信号再送给处理单元,如单片机,处理单元经过内部的软件计算将这个数字信号和温度联系起来,成为可以显示出来的温度数值,如25.0摄氏度,然后通过显示单元,如LED显示出来给人观察。这样就完成了数字温度计的基本测温功能,他是基于AT89S51单片机,采用数字温度传感器DS18B20,利用DS18B20不需要A/D转换,课直接进行温度采集显示,报警的数字温度计设计。包括传感器数据采集电路,温度显示电路,报警电路,单片机主板电路等组成。第四章 系统设计方案4.1 方案选择提及到温度的检测,我们首先会考虑传统的测温元件有热电偶和热电阻,而热电偶和热电阻测出的一般都是电压,再转换成对应的温度,需要比较多的外部硬件支持,硬件电路复杂,软件调试也复杂,制作成本高。因此,本数字温度计设计采用智能温度传感器DS18B20作为检测元件,测温范围为-55°C至+125°C,最大分辨率可达0.0625°C。DS18B20可以直接读出被测量的温度值,而采用三线制与单片机相连,减少了外部的硬件电路,具有低成本和易使用的特点。按照系统设计功能的要求,确定系统由三个模块组成:主控制器STC89C51,温度传感器DS18B20,驱动显示电路。总体电路框图如下:图4-1 系统总体框图该系统主要由温度测量和数据采集两部分电路组成,实现的方法有很多种,下面将列出两种在日常生活中和工农业生产中经常用到的实现方案。采用数字温度芯片DS18B20 测量温度,输出信号全数字化。便于单片机处理及控制,省去传统的测温方法的很多外围电路。且该芯片的物理化学性很稳定,它能用做工业测温元件,此元件线形较好。在0100 摄氏度时,最大线形偏差小于1 摄氏度。DS18B20 的最大特点之一采用了单总线的数据传输,由数字温度计DS18B20和微控制器AT89S51构成的温度测量装置,它直接输出温度的数字信号,可直接与计算机连接。这样,测温系统的结构就比较简单,体积也不大。采用51 单片机控制,软件编程的自由度大,可通过编程实现各种各样的算术算法和逻辑控制,而且体积小,硬件实现简单,安装方便。既可以单独对多DS18B20控制工作,还可以与PC 机通信上传数据,另外AT89S52 在工业控制上也有着广泛的应用,编程技术及外围功能电路的配合使用都很成熟。该系统利用AT89S52芯片控制温度传感器DS18B20进行实时温度检测并显示,能够实现快速测量环境温度,并可以根据需要设定上下限报警温度。该系统扩展性非常强,它可以在设计中加入时钟芯片DS1302以获取时间数据,在数据处理同时显示时间,并可以利用AT24C16芯片作为存储器件,以此来对某些时间点的温度数据进行存储,利用键盘来进行调时和温度查询,获得的数据可以通过MAX232芯片与计算机的RS232接口进行串口通信,方便的采集和整理时间温度数据。方案的测温装置电路简单、精确度较高、实现方便、软件设计也比较简单。4.2系统组成本课题以是89C52单片机为核心设计的一种数字温度控制系统,系统整体硬件电路包括,传感器数据采集电路,温度显示电路,上下限报警调整电路,单片机主板电路等组成。系统框图主要由主控制器、单片机复位、报警按键设置、时钟振荡、LED显示、温度传感器组成。系统框图如图4-2所示。图4-2 系统基本方框图第五章 系统硬件设计5.1 DS18B20介绍DS18B20引脚如图4-3所示。图4-3 DS18B20引脚图数字温度传感器DS18B20是一种体积小、适用于多种场合、且适用电压更宽、更经济器件。DALLAS 半导体公司的数字化温度传感器DS18B20是世界上第一片支持“一线总线”接口的温度传感器。温度传感器的种类众多,在应用与高精度、高可靠性的场合时 DALLAS(达拉斯)公司生产的 DS18B20 温度传感器当仁不让。超小的体积,超低的硬件开消,抗干扰能力强,精度高,附加功能强,使得 DS18B20 更受欢迎。TO-92封装的DS18B20的引脚排列见图4-4图4-4 DS18B20的引脚分布图 DS18B20详细引脚功能描述: (1)、GND:地信号。(2)、DQ:数据输入/输出引脚。开漏单总线接口引脚。(3)、VDD:可选的VDD引脚。当工作于寄生电源时,此引脚必须接地。 DS18B20测温原理:低温度系数晶振的振荡频率受温度影响很小,用于产生固定频率的脉冲信号送给计数器1。高温度系数晶振 随温度变化其振荡率明显改变,所产生的信号作为计数器2的脉冲输入。计数器1和温度寄存器被预置在55所对应的一个基数值。计数器1对 低温度系数晶振产生的脉冲信号进行减法计数,当计数器1的预置值减到0时,温度寄存器的值将加1,计数器1的预置将重新被装入,计数器1重 新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到计数器2计数到0时,停止温度寄存器值的累加,此时温度寄存器中的数值即 为所测温度。5.2 DS18B20初始化图 5-2 DS18B20初始化流程图 5.3部分电路图设计 5.3.1 晶振设计80C52单片机内部带有时钟电路,只需在片外通过XTAL1和XTAL2引脚接入定时控制元件(12MHZ晶振和电容)即可构成一个稳定的自激振荡器。XTAL1和XTAL2分别是80C52内部高增益反响放大器的输入端和输出端 时钟频率为 12MHz.此部分为其使能和复位电路,该电路采用上电自动复位方式,通过复位电容C1的充电来实现,接通电源就实现了系统的复位初始化。5.3.2 报警电路设计 单片机一个引脚控制蜂鸣器,当温度超过设定的值时,他就可以报警,下图为PNP型三极管给低电平即可以实现报警。第六章 原理图、仿真与实物6.1 原理图6.2 仿真图图8-1 仿真16.3 实物 如下面包板实物图显示26.38和29.13度6.4 源程序清单:/DS18B20 的读写程序,数据脚P2.5 /温度传感器18B20 汇编程序,采用器件默认的12 位转化/最大转化时间750 微秒,显示温度-55 到+125 度,显示精度/为0.1 度,显示采用4 位LED 共阳显示测温值/P0 口为段码输入,P20P24 为位选/*/#include "reg52.h"#include "intrins.h" /_nop_();延时函数用#define dm P0 /段码输出口#define uchar unsigned char#define uint unsigned intsbit DQ=P25; /温度输入口sbit w0=P23; /数码管4sbit w1=P22; /数码管3sbit w2=P21; /数码管2sbit w3=P20; /数码管1sbit beep=P17; /蜂鸣器和指示灯sbit set=P10; /温度设置切换键sbit add=P11; /温度加sbit dec=P12;int temp1=0; /显示当前温度和设置温度的标志位为0 时显示当前温度uint h;uint temp;uchar r;uchar high=40,low=15;uchar sign;uchar q=0;uchar tt=0;uchar scale;/*温度小数部分用查表法*/uchar code ditab16=0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x04,0x05,0x06,0x06,0x07,0x08,0x08,0x09,0x09;/小数断码表uchar code table_dm12=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e;/共阴LED 段码表"0" "1" "2" "3" "4" "5" "6" "7" "8" "9" "不亮" "-"uchar table_dm1=0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10; /个位带小数点的断码表uchar data temp_data2=0x00,0x00; /读出温度暂放uchar data display5=0x00,0x00,0x00,0x00,0x00; /显示单元数据,共4 个数据和一个运算暂用/*11us 延时函数*/void delay(uint t)for (;t>0;t-);void scan()int j;for(j=0;j<4;j+)switch (j)case 0: dm=table_dmdisplay0;w0=0;delay(50);w0=1;/xiaoshucase 1: dm=table_dm1display1;w1=0;delay(50);w1=1;/geweicase 2: dm=table_dmdisplay2;w2=0;delay(50);w2=1;/shiweicase 3: dm=table_dmdisplay3;w3=0;delay(50);w3=1;/baiwei/ elsedm=table_dmb3;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 usDQ=1;delay(6); /66 uspresence=DQ; /presence=0 复位成功,继续下一步delay(45); /延时500 uspresence=DQ;DQ=1; /拉高电平/*DS18B20 写命令函数*