毕业设计(论文)-基于DS18B20的单片机设计(多点测温).docx

上传人:good****022 文档编号:116434981 上传时间:2022-07-05 格式:DOCX 页数:37 大小:3.44MB
返回 下载 相关 举报
毕业设计(论文)-基于DS18B20的单片机设计(多点测温).docx_第1页
第1页 / 共37页
毕业设计(论文)-基于DS18B20的单片机设计(多点测温).docx_第2页
第2页 / 共37页
毕业设计(论文)-基于DS18B20的单片机设计(多点测温).docx_第3页
第3页 / 共37页
点击查看更多>>
资源描述
目录一、系统硬件部分设计21系统总体设计方案2(1)系统的技术指标2(2)温度测量方案2(3)系统方案及元件的选择32系统的工作模块4(1)AT89C51芯片4(2) LCD显示5(3)温度采集模块5(4)声光模块5(5)驱动模块63系统电路原理图7二、系统软件部分设计81系统软件设计方案8(1)主程序流程图8(2)显示模块流程图9(3)温度采集模块流程图92程序清单10三、系统仿真过程及结果111.Keil编译及仿真112.Proteus仿真12四、系统实物制作与调试151系统实物器件清单152实物制作过程153系统调试过程与功能实现16(1)实验中遇到的问题和解决方案16(2)系统的功能实现16五、心得体会:17六、参考文件18附录19附录一(系统实物器件清单)19附录二(源程序)21一、系统硬件部分设计1系统总体设计方案 如图1所示:图1系统方案本设计目的在于通过测量温度来判断外部设备是否工作,以维持室温的恒定,于是我们测温模块DS18B20来采集不同地方的温度,通过单片机89C51来判断温度是否在设定范围内,并输出到显示模块LCD1602,显示温度数值。如果温度在可控范围内,LED灯将显示正常工作,蜂鸣器不工作;如果温度超过设定值,系统将驱动降温模块,电机将开始运转,LED灯显示超温工作,蜂鸣器报警;如果温度低于设定值,系统将驱动升温模块,电阻丝将开始通电,将电能转化成热能,LED灯将显示红色报警,蜂鸣器报警。(1)系统的技术指标利用DS18B20和AT89C51设计一个温度测量系统,系统功能:实现三点温度检测,用LCD显示温度;温度测量范围:-55125,精度0.1。设定温度上下限,当温度高于上限值或低于下限值时,系统能自动驱动降温与升温设备工作。(2)温度测量方案由于多点温度测量是本设计的主要内容,所以温度测量的精确非常重要,为了提高温度测量汇总的准确度,本设计采用了使用DS18B20温度测量模块直接对温度进行测量。然后将多个DS18B20温度测量模块得到的数据进行采集,可以达到多点的温度精确测量。DS18B20的64位ROM中存储着器件独一无二的序列号,缓存器中包含两字节的温度寄存器,用于存储温度传感器的数字输出,缓存器中还提供一字节的上线警报触发(TH)和下线警报触发(TL)寄存器,和一字节的配置寄存器,使用者可以通过配置寄存器来设置温度转换的精度。缓存器的第五字节、第六字节和第七字节为器件内部保留使用。第八字节含有循环冗余码(CRC)。使用寄生电源时,DS18B20不需要额外的供电电源,当总线为新电平时,功率由单总线上的上拉电阻通过DQ引脚提供;高电平总线信号同时也向内部电容Cap充电,Cap在总线低电平时为器件供电。DS18B20中温度数据是以带符号位的16位补码存储在温度寄存器中的,符号位说明温度是正值还是负值,正值时,S=0;负值时,S=1。DS18B20采用严格的单总线通信协议,以保证数据的完整性。该协议定义了6钟信号类型,即复位脉冲、应答脉冲、写0、写1、读0和读1.。除了应答脉冲,所有这些信号都有主机发出同步信号。总线上传输的所有数据和命令都是字节的低位在前。在写时序开始后的1560us期间,DS18B20采样总线的状态。如果总线为高电平,则逻辑1被写入DS18B20;如果总线为低电平,则逻辑0被写入DS18B20.。每个读时序均由主机发起,拉低总线至少1us。在主机发起读时序后,DS18B20开始在总线上传送0或1。若DS18B20发送1,则保持总线为高电平;若发送0,则拉低总线,当传送0时,DS18B20在该时序结束时释放总线,再由上拉电阻将总线拉回空闲状态。DS18B20发出的数据在读时序下降沿起始后的15us内有效,因此主机必须在读时序开始后的15us内释放总线,并采样总线状态。DS18B20在使用时,一般采用单片机来进行数据采集。只需将DS18B20信号线与单片机一位I/O线相连,且单片机的一位I/O线可挂接多个DS18B20,从而实现多点温度测量。(3)系统方案及元件的选择机型的选择,通过对系统大致程序的估计和系统工作速度的估计以及I/O口需求量的估计,考虑价格因素、元器件市场因素,选定AT89C51单片机作为系统的主要控制芯片。各种经过DS18B20测量得到的温度值的电信号都需要经过LCD显示出来,考虑到被测量的有效位数及其富裕量,选择LM016L液晶显示模块进行显示,由于需要显示的数字较多,需要进行排版处理,才能使得温度值能够更加直观地显示出来,选择LM016L液晶显示模块进行显示排版。由于升温和降温时,需要进行声音报警和灯光报警,所以采用LED指示灯和蜂鸣器进行报警提示。由于该电路的设计需要对升温和降温做出反应,在升温时散热,在降温时发热,所以采用电动机模块和电阻丝模块,在升温时发电机启动,带动风扇进行散热, 在降温时电阻丝模块接入电路,通过电流热效应进行放热。2系统的工作模块(1)AT89C51芯片51 单片机是一块芯片集成了 CPU、RAM、ROM、定时/计数器和多功能的 I/O 口。 运算模块由DS18B20、设备和显示屏组成。 单片机通过对DS18B20输入数据的处理,来判断是否启动设备。如果温度超过所设置的上限值,单片机将在电机的输出口置1,启动电机散热,同时高温指示灯将亮起,蜂鸣器工作;如果温度低于所设置的下限值,电阻丝工作供热,低温指示灯将亮起,蜂鸣器工作;在所设置的温度范围内,设备将不会工作,绿灯亮起。如图2所示:图2 AT89C51(2) LCD显示本设计采用的是 LCD 液晶显示输出数据。液晶显示器 LM016L 液晶显示器 LCD液晶显示模块引出引脚标号为D7.0、RS、RW、E,接入单片机引脚P07.0、P20、P21 、P22如图3所示: 图3液晶显示图(3)温度采集模块本设计采用DS18B20模块采集和输送温度,温度采集模块引出引脚标号为DQ-A、DQ-B、DQ-C接入单片机引脚P35、P36、P37。连接方式如图4所示: 图4 DS18B20(4)声光模块LED指示灯LED指示灯是单片机系统中最常用的显示设备,用户可以根据指示灯的亮灭状况判断设备的工作状态。指示灯需要完成的任务有:检查设备的运行状态,如果设备没启动,则相应的指示灯亮起,其他指示灯不工作;如果设备启动,则相应的指示灯亮起,其他不工作设备的指示灯熄灭,同时以不同颜色的指示灯来区别工作状况,使用户可以更加有顺序和效率的操作设备。LED指示模块引出引脚LED-A、LED-B、LED-C、MOTOR-A、MOTOR-B、MOTOR-C、HEAT-A、HEAT-B、HEAT-C接入单片机引脚P24、P25、P26、P27、P30、P31、P32、P33、P34。如图5所示。图5 LED指示灯警报本设计采用扬声器speaker警报模块引出引脚BEE,接入单片机引脚P23连接方式如图6所示:图6蜂鸣器(5)驱动模块电动机驱动电动机属于强电设备,在弱电设备中无法应用,所以电动机的驱动就需要使用继电器,继电器是弱电驱动强电的中间设备,单片机可以在继电器的控制端输入一个高电平信号,使继电器的衔铁吸和,从而启动电动机。电动机驱动模块引出引脚MOTOR-A、MOTOR-B、MOTOR-C,接入单片机引脚P27、P30、P31。如图7所示:图7电动机的连接图发热电阻丝驱动发热电阻丝的驱动原理同电动机的驱动一样,利用继电器使设备接入电源从而工作。电阻丝驱动模块引出引脚HEAT-A、HEAT-B、HEAT-C,接入单片机引脚P32、P33、P34.如图8所示:图8电阻丝的连接图3系统电路原理图二、系统软件部分设计1系统软件设计方案(软件流程图)(1)主程序流程图主程序通过对温度采集模块输送的信息进行处理,并在LCD显示处理,如图 9.图9主程序流程图(2)显示模块流程图通过单片机向显示模块写入命令和数据,对显示方式和显示内容作出选择,如图10.图10显示模块流程图(3)温度采集模块流程图DS18B20温度采集模块的工作时序包括:初始化时序、写时序和读时序,如图11. 图11温度采集模块流程图2程序清单(见附录二)三、系统仿真过程及结果1.Keil编译及仿真将所编辑的C程序写入Keil软件,并运行仿真,所得程序编译无误,如图12。图12编译程序截图点击软件右上角的程序仿真按钮,对所编译成功的程序进行仿真,结果如图13。图13运行程序截图2.Proteus仿真接通电源开关后,仿真图如图14 15 16 17和18所示:LCD、DS18B20开始工作。DS18B20温度数值为27.0、27.0、27.0LCD示数分别为27.0、27.0、27.0未超过温度上下限,电阻丝模块、电动机模块不工作,如图14。图14调整DS18B20感受到的温度值为31.5、33.0、29.4LCD示数为31.5、33.0、29.4未超过温度上下限,所以电动机模块和电阻丝模块都不动作,如图15。图15调整DS18B20温度数值为31.5、33.0、40.9LCD显示为31.5、33.0、40.9第三组温度超过温度上限,第三组对应发动机模块动作,电阻丝模块不动做,如图16。图16调整DS18B20温度数值分别为31.5、33.0、19.7,LCD显示为31.5、33.0、19.7,由于第三组低于温度下限,所以第三组对应电阻丝模块动作,电动机模块不动作,如图17。图17调整DS18B20温度数值为39.7、39.0、20.0LCD显示为39.7、39.0、20.0按住KM2按钮,给B降温未超过温度上下限,但电动机模块动作,电阻丝模块没有动作。图18四、系统实物制作与调试1系统实物器件清单(见附录一)2实物制作过程为了缩短开发周期,采用购买完整的单片机开发板进行实验,购买单片机开发板中只包含本实验中的AT89C51芯片、AT89C51的周边电路和电动机模块和电阻丝模块,为了完善开发元件,我们购买了LCD液晶显示模块,型号为LM016L、三块DS18B20芯片和若干杜邦线。因为电动机模块和电阻丝模块并没有与开发板直接相连,所以采用杜邦线将电动机模块和电阻丝模块与开发板进行连接,对照电路图进行完善连接。实物图如图19所示。图193系统调试过程与功能实现(1)实验中遇到的问题和解决方案实验初期,按照实验方案在温度范围内的LED应该点亮,仿真成功,但是应用于实验中的单片机开发板却并没成功,经过多次更换LED之后依然无发点亮,通过与老师、同学的讨论和分析,得出结论:在单片机开发板中使用的LED灯是共阳极连接的,所以实验现象与仿真结果无法一致。硬件修改过于繁琐,所以我们在软件即程序语言上做了修改,原是“0”点亮的程序,我们改为“1”点亮,通过软件即程序上的修改,我们达到了仿真结果。多次实验以后,我们将位定义直接集中在端口头文件,方便进行调试。我们将三组温度采集和处理模块的相似功能的程序进行分组集成函数。通过AT89C51部分函数初始化程序,我们成功解决了无定义端口高电平影响实验的问题。(2)系统的功能实现用手指握住B组DS18B20芯片加温,LCD示数为B组25.5,A组19.3,C组19.3。其中A组与C组低于温度下限,触发对应LED7、LED8,B组处于温度范围内,触发对应LED2。图20使用加热工具对B组DS18B20芯片进行加热,LCD示数如下:A组21.0,B组40,C组23.1摄氏度。其中B组超过温度上限,触发对应LED5,A组C组处在温度范围内,触发对应LED1、LED3。五、心得体会:课程设计是培养学生综合运用所学知识,发现、提出、分析和解决实际问题, 锻炼实践能力的重要环节, 是对学生实际工作能力的具体训练和考察过程。 随着科学技术发展的日新日异,单片机已经成为当今计算机应用中空前活跃的领域,在生活中可以说得是无处不在。因此作为自动化专业的学生来说掌握单片机的开发技术是十分重要的。我的题目是简易计算器硬软件的设计,对于我们这些工科学生来说,这是 一次考验。怎么才能找到课堂所学与实际应用的最佳结合点?怎样让自己的业余更接近专业?怎样让自己的计划更具有序性,而不会忙无一用?这都是我们所要考虑和努力的。这次课程设计我学到很多很多的东西,学会了怎么样去制定计划,怎么样去实现这个计划,并掌握了在执行过程中怎么样去克服心理上的不良情绪。不仅巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识,掌握了一种系统的研究方法,可以进行一些简单的编程。通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。 同时在设计的过程中发现了自己的不足之处, 对以前所学过的知识理解得不够深刻,掌握得不够牢固,对单片机汇编语言掌握得不够好。这次课程设计通过自己的努力,同学的帮助,网络资料的收集,最终顺利完成了。六、参考文件1 张毅刚. 单片机原理及应用M 北京.高等教育出版社 2010附录附录一(系统实物器件清单)DescriptionDesignatorFootprintLibRefQuantityMotor, General KindB1RB5-10.5Motor1Motor, General KindB2RB5-10.5Motor1Motor, General KindB3RB5-10.5Motor1CapacitorC1RAD-0.3Cap1CapacitorC2RAD-0.3Cap11 Amp General Purpose RectifierD1DIO10.46-5.3x2.8Diode 1N400111 Amp General Purpose RectifierD2DIO10.46-5.3x2.8Diode 1N400111 Amp General Purpose RectifierD3DIO10.46-5.3x2.8Diode 1N400111 Amp General Purpose RectifierD4DIO10.46-5.3x2.8Diode 1N400111 Amp General Purpose RectifierD5DIO10.46-5.3x2.8Diode 1N400111 Amp General Purpose RectifierD6DIO10.46-5.3x2.8Diode 1N40011Typical RED GaAs LEDDS1LED-1LED11Typical RED GaAs LEDDS2LED-1LED11Typical RED GaAs LEDDS3LED-1LED11Typical RED GaAs LEDDS4LED-1LED11Typical RED GaAs LEDDS5LED-1LED11Typical RED GaAs LEDDS6LED-1LED11Typical RED GaAs LEDDS7LED-1LED11Typical RED GaAs LEDDS8LED-1LED11Typical RED GaAs LEDDS9LED-1LED11Single-Pole Dual-Throw RelayK1DIP-P5/X1.65Relay-SPDT1Single-Pole Dual-Throw RelayK2DIP-P5/X1.65Relay-SPDT1Single-Pole Dual-Throw RelayK3DIP-P5/X1.65Relay-SPDT1Single-Pole Dual-Throw RelayK4DIP-P5/X1.65Relay-SPDT1Single-Pole Dual-Throw RelayK5DIP-P5/X1.65Relay-SPDT1Single-Pole Dual-Throw RelayK6DIP-P5/X1.65Relay-SPDT1InductorL1INDC2010-0804Inductor1InductorL2INDC1005-0402Inductor1InductorL3INDC2010-0804Inductor1LoudspeakerLS1PIN2Speaker1NPN Bipolar TransistorQ1BCY-W3NPN1NPN Bipolar TransistorQ2BCY-W3NPN1NPN Bipolar TransistorQ3BCY-W3NPN1NPN Bipolar TransistorQ4BCY-W3NPN1NPN Bipolar TransistorQ5BCY-W3NPN1NPN Bipolar TransistorQ6BCY-W3NPN1NPN Bipolar TransistorQ7BCY-W3NPN1ResistorR1AXIAL-0.4Res21ResistorR2AXIAL-0.4Res21ResistorR3AXIAL-0.4Res21ResistorR4AXIAL-0.4Res21ResistorR5AXIAL-0.4Res21ResistorR6AXIAL-0.4Res21ResistorR7AXIAL-0.4Res21ResistorR8AXIAL-0.4Res21ResistorR9AXIAL-0.4Res21ResistorR10AXIAL-0.4Res21ResistorR11AXIAL-0.4Res21ResistorR12AXIAL-0.4Res21ResistorR13AXIAL-0.4Res21ResistorR14AXIAL-0.4Res21ResistorR15AXIAL-0.4Res21ResistorR16AXIAL-0.4Res21Isolated Resistor NetworkRP1SSO-G16/X.4Res Pack41SwitchS1SPST-2SW-PB1SwitchS2SPST-2SW-PB1SwitchS3SPST-2SW-PB1SwitchS4SPST-2SW-PB1SwitchS5SPST-2SW-PB1SwitchS6SPST-2SW-PB1U1AT89C511U2Component_11U3Component_11U4Component_11Crystal OscillatorY1BCY-W2/D3.1XTAL1附录二(源程序)主程序:#include#includeioset.h #includeLCD1602.h#includeds1820.h#define uchar unsigned char#define uint unsigned intuchar fh,bw,sw,fh1,bw1,sw1,fh2,bw2,sw2;uint ty,temp,tempi,tempx,ty1,temp1,temp1i,temp1x,ty2,temp2,temp2i,temp2x,max,min;uchar displaytemp16 = A: B: ;uchar displaytemp116 =C: ;void delays (unsigned int us) while(us-);void DISPLAY() displaytemp2= fh; bw=tempi/100;if(bw=0) displaytemp3= ; else displaytemp3=bw+0 x30;sw=(tempi%100)/10;if(sw=0) displaytemp4= ; else displaytemp4=sw+0 x30; displaytemp5= (tempi%100)%10+0 x30; displaytemp6=.; displaytemp7=tempx/10+0 x30;displaytemp10= fh1; bw1=temp1i/100;if(bw1=0) displaytemp11= ; else displaytemp11=bw1+0 x30;sw1=(temp1i%100)/10;if(sw1=0) displaytemp12= ; else displaytemp12=sw1+0 x30; displaytemp13= (temp1i%100)%10+0 x30; displaytemp14=.; displaytemp15=temp1x/10+0 x30; LCD_Write_String(0,0,displaytemp); displaytemp12= fh2; bw2=temp2i/100;if(bw2=0) displaytemp13= ; else displaytemp13=bw2+0 x30;sw2=(temp2i%100)/10;if(sw2=0) displaytemp14= ; else displaytemp14=sw2+0 x30; displaytemp15= (temp2i%100)%10+0 x30; displaytemp16=.; displaytemp17=temp2x/10+0 x30;LCD_Write_String(0,1,displaytemp1);void flag() temp=retemp();ty=temp;if(ty0 xf000) fh=-; temp=temp; temp+=1; else fh= ; tempi =temp4; tempx=(temp&0 x000f)*6.25;temp1=retemp1();ty1=temp1;if(ty10 xf000) fh1=-; temp1=temp1; temp1+=1; else fh1= ; temp1i =temp14; temp1x=(temp1&0 x000f)*6.25;temp2=retemp2();ty2=temp2;if(ty20 xf000) fh2=-; temp2=temp2; temp2+=1; else fh2= ; temp2i =temp24; temp2x=(temp2&0 x000f)*6.25;void port_init(void) LED_A =1; LED_B =1; LED_C =1; MOTOR_A =0; MOTOR_B =0; MOTOR_C =0; HEAT_A =0; HEAT_B =0; HEAT_C =0; BEE =0;void alarm(int z,int p,int v) if(z=max) LED_A =0; MOTOR_A =1; HEAT_A =0; else if(z=max) LED_B =0; MOTOR_B =1; HEAT_B =0; else if(p=max) LED_C =0; MOTOR_C =1; HEAT_C =0; else if(vmin) LED_C =0; MOTOR_C =0; HEAT_C =1; else LED_C =1; MOTOR_C =0; HEAT_C =0; /* if(MOTOR_A=1)|(MOTOR_B=1)|(MOTOR_C=1)|(HEAT_A=1)|(HEAT_B=1)|(HEAT_C=1) BEE=1; else BEE=0;*/void keycan() if(KMA=0) delays(500); if(KMA=0) MOTOR_A=1; if(KTA=0) delays(500); if(KTA=0) HEAT_A=1; if(KMB=0) delays(500); if(KMB=0) MOTOR_B=1; if(KTB=0) delays(500); if(KTB=0) HEAT_B=1; if(KMC=0) delays(500); if(KMC=0) MOTOR_C=1; if(KTC=0) delays(500); if(KTC=0) HEAT_C=1;void main() port_init(); LCD_initial(); max=40; min=20; while(1) keycan(); flag(); DISPLAY(); alarm(tempi,temp1i,temp2i); delays(10); IOSET端口头文件#ifndef _IOSET_H_#define _IOSET_H_#define out P0sbit KMA=P10; sbit KTA=P11; sbit KMB=P12; sbit KTB=P13; sbit KMC=P14; sbit KTC=P15; sbit RS=P20; sbit RW=P21;sbit E =P22; sbit BEE =P23;sbit LED_A =P24;sbit LED_B =P25;sbit LED_C =P26;sbit MOTOR_A =P27;sbit MOTOR_B =P30;sbit MOTOR_C =P31;sbit HEAT_A =P32;sbit HEAT_B =P33;sbit HEAT_C =P34;sbit DQ =P35;sbit DQ1=P36;sbit DQ2=P37;#endifLCD1602液晶显示屏头文件#ifndef _1602_H_#define _1602_H_#include #include /包含_nop_( )空函数指令的头文件#define uchar unsigned char#define uint unsigned intvoid lcd_initial(void);/ LCD初始化函数void check_busy(void); /检查忙标志函数void write_command(uchar com); /写命令函数void write_data(uchar dat);/写数据函数void LCD_Write_String(unsigned char x,unsigned char y,unsigned char *s) ; /写字符串函数void delay(uint);/延时函数void delay(uint j) /1ms延时子程序uchar i=250;for(;j0;j-)while(-i);i=249;while(-i);i=250;void check_busy(void)/检查忙标志函数uchar dt;dodt=0 xff;E=0;RS=0;RW=1;E=1;dt=out;while(dt&0 x80);E=0;void write_command(uchar com) /写命令函数check_busy();E=0;RS=0;RW=0;out=com;E=1;_nop_( );E=0;delay(1);void write_data(uchar dat) /写数据函数check_busy();E=0;RS=1;RW=0;out=dat;E=1;_nop_();E=0;delay(1);void LCD_initial(void) /液晶显示器初始化函数write_command(0 x38);/写入命令0 x38:8位两行显示,57点阵字符write_command(0 x0C);/写入命令0 x0C:开整体显示,光标关,无黑块write_command(0 x06);/写入命令0 x06:光标右移write_command(0 x01); /写入命令0 x01:清屏delay(1);/ 写入字符串函数void LCD_Write_String(unsigned char x,unsigned char y,unsigned char *s) if (y = 0) write_command(0 x80 + x); /表示第一行else write_command(0 xC0 + x); /表示第二行 while (*s0) write_data( *s); s +; delay(1); #endifDS18B20模块头文件#ifndef _1802_H_#define _1802_H_#include #include /包含_nop_( )空函数指令的头文件#define uchar unsigned char#define uint unsigned intvoid delay5(uchar);void init_ds18b20(void);uchar readbyte(void);void writebyte(uchar);uint retemp(void);void init_ds18b201(void);uchar readbyte1(void);void writebyte1(uchar);uint retemp1(void);void init_ds18b202(void);uchar readbyte2(void);void writebyte2(uchar);uint retemp2(void);void delay5(uchar n) do _nop_(); _nop_(); _nop_(); n-; while(n);void init_ds18b20(void)/函数功能:18B20初始化 uchar x=0; DQ =0; delay5(120); DQ =1; delay5(16); delay5(80);uchar readbyte(void) /函数功能:读取1字节数据uchar i=0;uchar date=0;for (i=8;i0;i-) DQ =0; delay5(1); DQ =1;/15s内拉释放总线 date=1; if(DQ) date|=0 x80; delay5(11); return(date);void writebyte(uchar dat) /函数功能:写1字节 uchar i=0; for(i=8;i0;i-) DQ =0; DQ =dat&0 x01;/写1 在15s内拉低 delay5(12); /写0 拉低60s DQ = 1; dat=1; delay5(5); uint retemp(void)/函数功能:读取温度uchar a,b;uint t;init_ds18b20();writebyte(0 xCC); writebyte(0 x44);init_ds18b20();writebyte(0 xCC); writebyte(0 xBE); a=readbyte();b=readbyte();t=b;t0;i-) DQ1 =0; delay5(1); DQ1 =1;/15s内拉释放总线 date1=1; if(DQ1) date1|=0 x80; delay5(11); return(date1);void writebyte1(uchar dat1) /函数功能:写1字节 uchar i=0; for(i=8;i0;i-) DQ1 =0; DQ1 =dat1&0 x01;/写1 在15s内拉低 delay5(12); /写0 拉低60s DQ1 = 1; dat1=1; delay5(5); uint retemp1(void)/函数功能:读取温度uchar c,d;uint t1;init_ds18b201();writebyte1(0 xCC); writebyte1(0 x44);init_ds18b201();writebyte1(0 xCC); writebyte1(0 xBE); c=readbyte1();d=readbyte1();t1=d;t10;i-) DQ2 =0; delay5(1); DQ2 =1;/15s内拉释放总线 date2=1; if(DQ2) date2|=0 x80; delay5(11); return(date2);void writebyte2(uchar dat2) /函数功能:写1字节 uchar i=0; for(i=8;i0;i-) DQ2 =0; DQ2 =dat2&0 x01;/写1 在15s内拉低 delay5(12); /写0 拉低60s DQ2 = 1; dat2=1; delay5(5); uint retemp2(void)/函数功能:读取温度uchar e,f;uint t2;init_ds18b202();writebyte2(0 xCC); writebyte2(0 x44);init_ds18b202();writebyte2(0 xCC); writebyte2(0 xBE); e=readbyte2();f=readbyte2();t2=f;t2=8;t2=t2|e;return(t2);#endi37
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 其他分类 > 文学论文


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!