版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
闽南理工学院毕业设计(论文)PAGEPAGE45PAGE1绪论随着新技术的不断开发与应用,近年来单片机发展十分迅速,一个以微机应用为主的新技术革命浪潮正在蓬勃兴起,单片机的应用已经渗透到电力、冶金、化工、建材、机械、食品、石油等各个行业。传统的温度采集方法不仅费时费力,而且精度差,单片机的出现使得温度的采集和数据处理问题能够得到很好的解决[1]文中要有参考文献的引用标记,上标。。传统的控制方式以不能满足高精度,高速度的控制要求,如温度控制表温度接触器,其主要缺点是温度波动范围大,由于他主要通过控制接触器的通断时间比例来达到改变加热功率的目的,受仪表本身误差和交流接触器的寿命限制,通断频率很低。文中要有参考文献的引用标记,上标。本设计使用单片机作为核心进行控制。单片机具有集成度高,通用性好,功能强,特别是体积小,重量轻,耗能低,可靠性高,抗干扰能力强和使用方便等独特优点,在数字、智能化方面有广泛的用途。
1温度控制及单片机发展历程温度控制系统在国内各行各业的应用虽然已经十分广泛,但从国内生产的温度控制器来讲,总体发展水平仍然不高,同日本、美国、德国等先进国家相比,仍然有着较大的差距。成熟的温控产品主要以“点位”控制及常规的PID控制器为主,它们只能适应一般温度系统控制,而用于较高控制场合的智能化、自适应控制仪表,国内技术还不十分成熟,形成商品化并广泛应用的控制仪表较少[2]按顺序标注[1][2][3]……[10]按顺序标注[1][2][3]……[10]……单片机是指一个集成在一块芯片上的完整计算机系统。尽管他的大部分功能集成在一块小芯片上,但是它具有一个完整计算机所需要的大部分部件:CPU、内存、内部和外部总线系统,目前大部分还会具有外存。同时集成诸如通讯接口、定时器,实时时钟等外围设备。而现在最强大的单片机系统甚至可以将声音、图像、网络、复杂的输入输出系统集成在一块芯片上。单片机也被称为微控制器(Microcontroller),是因为它最早被用在工业控制领域。单片机由芯片内仅有CPU的专用处理器发展而来。最早的设计理念是通过将大量外围设备和CPU集成在一个芯片中,使计算机系统更小,更容易集成进复杂的而对体积要求严格的控制设备当中。INTEL的Z80是最早按照这种思想设计出的处理器,从此以后,单片机和专用处理器的发展便分道扬镳[3]。早期的单片机都是8位或4位的。其中最成功的是INTEL的8031,因为简单可靠而性能不错获得了很大的好评。此后在8031上发展出了MCS51系列单片机系统。基于这一系统的单片机系统直到现在还在广泛使用。随着工业控制领域要求的提高,开始出现了16位单片机,但因为性价比不理想并未得到很广泛的应用。90年代后随着消费电子产品大发展,单片机技术得到了巨大的提高。随着INTELi960系列特别是后来的ARM系列的广泛应用,32位单片机迅速取代16位单片机的高端地位,并且进入主流市场。而传统的8位单片机的性能也得到了飞速提高,处理能力比起80年代提高了数百倍。目前,高端的32位单片机主频已经超过300MHz,性能直追90年代中期的专用处理器,而普通的型号出厂价格跌落至1美元,最高端的型号也只有10美元。当代单片机系统已经不再只在裸机环境下开发和使用,大量专用的嵌入式操作系统被广泛应用在全系列的单片机上。而在作为掌上电脑和手机核心处理的高端单片机甚至可以直接使用专用的Windows和Linux操作系统。1.1课题背景及研究意义近年来单片机发展十分迅速,一个以微机应用为主的新技术革命浪潮正在蓬勃兴起,单片机的应用已经渗透到电力、冶金、化工、建材、机械、食品、石油等各个行业。传统的温度采集方法不仅费时费力,而且精度差,单片机的出现使得温度的采集和数据处理问题能够得到很好的解决。1.2课题的设计目的1.巩固、加深和扩大单片机应用的知识面,提高综合及灵活运用所学知识解决工业控制的能力。2.培养针对课题需要,选择和查阅有关手册、图表及文献资料的自学能力,提高组成系统、编程、调试的动手能力。3.通过对课题设计方案的分析、选择、比较、熟悉单片机用系统开发、研制的过程,软硬件设计的方法、内容及步骤。1.3课题的主要工作本课题的温度传感器DS18B20,此传感器课读取被测量温度值,进行转换。主要工作研究重点是设计一种基于单片机的数字温度测量及报警系统。利用数字温度传感如下:1.测温范围-55℃~+125℃,固有测温分辨率0.5℃。2.精度误差小于1℃。3.LCD1602液晶显示。4.两路温度测量及报警功能。5.实现报警提示蜂鸣器及LCD发光二极管。1.4本文研究内容电子温度计采用温度敏感元件也就是温度传感器(如铂电阻,热电偶,半导体,热敏电阻等),将温度的变化转换成电信号的变化,如电压和电流的变化,温度变化和电信号的变化有一定的关系,如线性关系,一定的曲线关系等,这个电信号可以使用模数转换的电路即A/D转换电路将模拟信号转换为数字信号,数字信号再送给处理单元,如单片机或者PC机等,处理单元经过内部的软件计算将这个数字信号和温度联系起来,成为可以显示出来的温度数值,如25.0摄氏度,然后通过显示单元,如LED,LCD或者电脑屏幕等显示出来给人观察。这样就完成了电子温度计的基本测温功能。本文是基于AT89S51单片机,采用数字温度传感器DS18B20,利用DS18B20不需要A/D转换,可直接进行温度采集显示,报警的电子温度计设计。包括传感器数据采集电路,温度显示电路,上下限报警调整电路,单片机主板电路等组成。
2系统总体方案及硬件设计2.1电子温度计设计方案论证由于本设计是测温电路,可以使用热敏电阻之类的器件利用其感温效应,在将随被测温度变化的电压或电流采集过来,进行A/D转换后,就可以用单片机进行数据的处理,在显示电路上,就可以将被测温度显示出来,这种设计需要用到A/D转换电路,感温电路比较麻烦。进而考虑到用温度传感器,在单片机电路设计中,大多都是使用传感器,所以这是非常容易想到的,所以可以采用一只温度传感器DS18B20,此传感器,可以很容易直接读取被测温度值,进行转换,就可以满足设计要求。2.2总体设计框图温度计电路设计总体设计方框图如图2.1所示,控制器采用单片机AT89C52,温度传感器采用DS18B20,LCD1602实现温度显示。LCD1602显示模块AT89C52LCD1602显示模块AT89C52单片机时钟震荡电路温度检测电路温度门限报警电路温度检测电路温度门限报警电路图2.1总体设计框图2.2.1主控制器单片机AT89C52具有低电压供电和体积小等特点,四个端口只需要两个口就能满足电路系统的设计需要,适合便携手持式产品的设计使用。AT89C52单片机芯片具有以下特性:1)指令集合芯片引脚与Intel公司的8052兼容;2)4KB片内在系统可编程FLASH程序存储器;3)时钟频率为0~33MHZ;4)128字节片内随机读写存储器(RAM);5)6个中断源,2级优先级;6)2个16位定时/记数器;7)全双工串行通信接口;8)监视定时器;9)两个数据指针;2.2.2LCD1602显示模块显示电路采用LCD1602显示模块,接P0口。LCD1602主要技术参数:显示容量:16×2个字符芯片工作电压:4.5—5.5V工作电流:2.0mA(5.0V)模块最佳工作电压:5.0V字符尺寸:2.95×4.35(W×H)mm引脚功能说明:LCD1602采用标准的14脚(无背光)或16脚(带背光)接口,各引脚接口说明如表2.1所示[4]:表2.1引脚接口说明表编号符号引脚说明编号符号引脚说明1VSS电源地9D2数据2VDD电源正极10D3数据3VL液晶显示偏压11D4数据4RS数据/命令选择12D5数据5R/W读/写选择13D6数据6E使能信号14D7数据7D0数据15BLA背光源正极8D1数据16BLK背光源负极第1脚:VSS为地电源。第2脚:VDD接5V正电源。第3脚:VL为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度。第4脚:RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。第5脚:R/W为读写信号线,高电平时进行读操作,低电平时进行写操作。当RS和R/W共同为低电平时可以写入指令或者显示地址,当RS为低电平R/W为高电平时可以读忙信号,当RS为高电平R/W为低电平时可以写入数据。第6脚:E端为使能端,当E端由高电平跳变成低电平时,LCD1602显示模块执行命令。第7~14脚:D0~D7为8位双向数据线。第15脚:背光源正极。第16脚:背光源负极。LCD1602的指令说明及时序LCD1602显示模块内部的控制器共有11条控制指令,如表2.2所示[5]:表2.2控制命令表序号指令RSR/WD7D6D5D4D3D2D1D01清显示00000000012光标返回000000001*3置输入模式00000001I/DS4显示开/关控制0000001DCB5光标或字符移位000001S/CR/L**6置功能00001DLNF**7置字符发生存贮器地址0001字符发生存贮器地址8置数据存贮器地址001显示数据存贮器地址9读忙标志或地址01BF计数器地址10写数到CGRAM或DDRAM)10要写的数据内容11从CGRAM或DDRAM读数11读出的数据内容LCD1602显示模块的读写操作、屏幕和光标的操作都是通过指令编程来实现的。(说明:1为高电平、0为低电平)指令1:清显示,指令码01H,光标复位到地址00H位置。指令2:光标复位,光标返回到地址00H。指令3:光标和显示模式设置I/D:光标移动方向,高电平右移,低电平左移S屏幕上所有文字是否左移或者右移。高电平表示有效,低电平则无效。指令4:显示开关控制。D:控制整体显示的开与关,高电平表示开显示,低电平表示关显示C:控制光标的开与关,高电平表示有光标,低电平表示无光标B:控制光标是否闪烁,高电平闪烁,低电平不闪烁。指令5:光标或显示移位S/C:高电平时移动显示的文字,低电平时移动光标。指令6:功能设置命令DL:高电平时为4位总线,低电平时为8位总线N:低电平时为单行显示,高电平时双行显示F:低电平时显示5x7的点阵字符,高电平时显示5x10的点阵字符。指令7:字符发生器RAM地址设置。指令8:DDRAM地址设置。指令9:读忙信号和光标地址BF:为忙标志位,高电平表示忙,此时模块不能接收命令或者数据,如果为低电平表示不忙。指令10:写数据。指令11:读数据。与HD44780相兼容的芯片基本操作时序表如表2.3所示[6]。表2.3基本操作时序表读状态输入RS=L,R/W=H,E=H输出D0—D7=状态字写指令输入RS=L,R/W=L,D0—D7=指令码,E=高脉冲输出无读数据输入RS=H,R/W=H,E=H输出D0—D7=数据写数据输入RS=H,R/W=L,D0—D7=数据,E=高脉冲输出无读写操作时序如图2.2和图2.3所示:图2.2读操作时序图2.3写操作时序LCD1602的RAM地址映射及标准字库表LCD1602液晶显示模块是一个慢显示器件,所以在执行每条指令之前一定要确认模块的忙标志为低电平,表示不忙,否则此指令失效。要显示字符时要先输入显示字符地址,也就是告诉模块在哪里显示字符,图2.4是LCD1602的内部显示地址。图2.4LCD1602内部显示地址例如第二行第一个字符的地址是40H,那么是否直接写入40H就可以将光标定位在第二行第一个字符的位置呢?这样不行,因为写入显示地址时要求最高位D7恒定为高电平1所以实际写入的数据应该是01000000B(40H)+10000000B(80H)=11000000B(C0H)。在对液晶模块的初始化中要先设置其显示模式,在液晶模块显示字符时光标是自动右移的,无需人工干预。每次输入指令前都要判断液晶模块是否处于忙的状态。LCD1602液晶模块内部的字符发生存储器(CGROM)已经存储了160个不同的点阵字符图形,这些字符有:阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码,比如大写的英文字母“A”的代码是01000001B(41H),显示时模块把地址41H中的点阵字符图形显示出来,我们就能看到字母“A”。2.2.3温度传感器DS18B20温度传感器是美国DALLAS半导体公司推出的一种改进型智能温度传感器,与传统的热敏电阻等测温元件相比,它能直接读出被测温度,并且可根据实际要求通过简单的编程实现9-12位的数字值读数方式。DS18B20的性能特点如下:
●独特的单线接口仅需要一个端口引脚进行通信,无须经过其它变换电路;
●多个DS18B20可以并联在惟一的三线上,实现多点组网功能;
●内含64位经过激光修正的只读存储器ROM;
●可通过数据线供电,内含寄生电源,电压范围为3.0~5.5V;
●零待机功耗;
●温度以9或12位数字;
●用户可定义报警设置;
●报警搜索命令识别并标志超过程序限定温度(温度报警条件)的器件;
●负电压特性,电源极性接反时,温度计不会因发热而烧毁,但不能正常工作;●测温范围为-55℃-+125℃,测量分辨率为0.0625℃①采用单总线专用技术,
DS18B20采用3脚PR-35封装或8脚SOIC封装,其内部结构框图如图2.5所示[7]。图2.5DS18B20内部结构64位ROM的结构开始8位是产品类型的编号,接着是每个器件的惟一的序号,共有48位,最后8位是前面56位的CRC检验码,这也是多个DS18B20可以采用一线进行通信的原因。温度报警触发器TH和TL,可通过软件写入用户报警上下限。
DS18B20温度传感器的内部存储器还包括一个高速暂存RAM和一个非易失性的可电擦除的EERAM。高速暂存RAM的结构为8字节的存储器,结构如图2.6所示。头2个字节包含测得的温度信息,第3和第4字节TH和TL的拷贝,是易失的,每次上电复位时被刷新。第5个字节,为配置寄存器,它的内容用于确定温度值的数字转换分辨率。DS18B20工作时寄存器中的分辨率转换为相应精度的温度数值。该字节各位的定义如图2.6所示。低5位一直为1,TM是工作模式位,用于设置DS18B20在工作模式还是在测试模式,DS18B20出厂时该位被设置为0,用户要去改动,R1和R0决定温度转换的精度位数,来设置分辨率。温度LSB温度MSBTH用户字节1TL用户字节2配置寄存器保留保留保留CRC
图2.6DS18B20字节定义由下面表2.4可见,DS18B20温度转换的时间比较长,而且分辨率越高,所需要的温度数据转换时间越长。因此,在实际应用中要将分辨率和转换时间权衡考虑。高速暂存RAM的第6、7、8字节保留未用,表现为全逻辑1。第9字节读出前面所有8字节的CRC码,可用来检验数据,从而保证通信数据的正确性。当DS18B20接收到温度转换命令后,开始启动转换。转换完成后的温度值就以16位带符号扩展的二进制补码形式存储在高速暂存存储器的第1、2字节。单片机可以通过单线接口读出该数据,读数据时低位在先,高位在后,数据格式以0.0625℃/LSB形式表示。当符号位S=0时,表示测得的温度值为正值,可以直接将二进制位转换为十进制;当符号位S=1时,表示测得的温度值为负值,要先将补码变成原码,再计算十进制数值。表2.4DS18B20温度转换时间表DS18B20完成温度转换后,就把测得的温度值与RAM中的TH、TL字节内容作比较。若T>TH或T<TL,则将该器件内的报警标志位置位,并对主机发出的报警搜索命令作出响应。因此,可用多只DS18B20同时测量温度并进行报警搜索[8]。在64位ROM的最高有效字节中存储有循环冗余检验码(CRC)。主机ROM的前56位来计算CRC值,并和存入DS18B20的CRC值作比较,以判断主机收到的ROM数据是否正确。DS18B20的测温原理是这样的,器件中低温度系数晶振的振荡频率受温度的影响很小,用于产生固定频率的脉冲信号送给减法计数器1;高温度系数晶振随温度变化其振荡频率明显改变,所产生的信号作为减法计数器2的脉冲输入。器件中还有一个计数门,当计数门打开时,DS18B20就对低温度系数振荡器产生的时钟脉冲进行计数进而完成温度测量。计数门的开启时间由高温度系数振荡器来决定,每次测量前,首先将-55℃所对应的一个基数分别置入减法计数器1、温度寄存器中,计数器1和温度寄存器被预置在-55℃所对应的一个基数值。减法计数器1对低温度系数晶振产生的脉冲信号进行减法计数,当减法计数器1的预置值减到0时,温度寄存器的值将加1,减法计数器1的预置将重新被装入,减法计数器1重新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到减法计数器计数到0时,停止温度寄存器的累加,此时温度寄存器中的数值就是所测温度值。其输出用于修正减法计数器的预置值,只要计数器门仍未关闭就重复上述过程,直到温度寄存器值大致被测温度值。表2.5一部分温度对应值表温度/℃二进制表示十六进制表示+125000001111101000007D0H+8500000101010100000550H+25.062500000001100100000191H+10.125000000001010000100A2H+0.500000000000000100008H000000000000010000000H-0.51111111111110000FFF8H-10.1251111111101011110FF5EH-25.06251111111001101111FE6FH-551111110010010000FC90H
2.3系统整体硬件电路设计2.3.1主板电路系统整体硬件电路包括,传感器数据采集电路,温度显示电路,上下限报警调整电路,单片机主板电路等,单片机主板电路如图2.7所示:图2.7单片机主板电路2.3.2显示电路显示电路只用P0口,采用LCD1602显示模块。图2.8温度显示电路2.3.3温度采集电路通过DS18B20电路可以对温度进行采集,根据图2.9所示:图2.9温度采集电路
3系统软件设计3.1主程序设计整个系统的功能是由硬件电路配合软件来实现的,当硬件基本定型后,软件的功能也就基本定下来了。从软件的功能不同可分为两大类:一是监控软件(主程序),它是整个控制系统的核心,专门用来协调各执行模块和操作者的关系。二是执行软件(子程序),它是用来完成各种实质性的功能如测量、计算、显示、通讯等。每一个执行软件也就是一个小的功能执行模块[9]。这里将各执行模块一一列出,并为每一个执行模块进行功能定义和接口定义。各执行模块规划好后,就可以规划监控程序了。首先要根据系统的总体功能选择一种最合适的监控程序结构,然后根据实时性的要求,合理地安排监控软件和各执行模块之间地调度关系。主程序流程见图3.1。开始开始初始化初始化判断温度是否在设定范围内判断温度是否在设定范围内否是绿灯亮正常绿灯亮正常红灯亮报警显示温度显示温度结束结束图3.1主程序流程图3.2DS18B20初始化DS18B20初始化流程图见图3.2。图3.2DS18B20初始化流程图3.3数据测试将温度传感器与冰水混合物接触,经过充分搅拌达到热平衡后调节系统,使显示读数为0.00(标定0℃);利用气压计读出当时当地的大气压强,并根据大气压强和当地重力加速度计算出当时的实际压强;根据沸点与压强的关系查出沸点温度[10]。把温度传感器放入沸水中,待显示读数稳定后重新调节,使显示器显示读数等于当地当时沸点温度后工作结束。该温度计的量程为-55℃~125℃,读数精度为0.5℃,实际使用一般在0℃~100℃。采用0℃~50℃和50℃~100℃的精密水银温度计作检验标准,对设计的温度计进行测试,其结果表明能达到该精度要求。3.4仿真结果设置温度上限为28.5度,温度下限为23.5度。1.如图3.3所示。此时温度时24度和25度,正常范围内,绿灯亮,温度正常。图3.3仿真12.如图3.4所示。此时温度为24度和22度,由于22度低于下限温度,红灯闪亮,蜂鸣器响,实现报警。图3.4仿真23.如图3.5所示。此时温度为25度和30度,30度不在所设范围内,红灯闪亮,报警。图3.5仿真3
结论将本文设计的电子温度计制作成实物,只要开机运行则能立即监测所测对象的温度,测量范围较大,制作成本低,程序运行稳定。不过受限于八位A/D转换器转换精度不够,在测量范围内最小仅能分辨2℃温差,很难满足一些高精度测量。为此可以改用12位甚至更高分辨率的A/D转换器以提高温差分辨率,满足更高的测试要求。
致谢本论文是在老师的悉心指导和热情关怀下完成的。陈老师渊博学识、严谨的治学态度及随和的为人给我留下了难以忘怀的印象,这将使我受益终身。在此我由衷地感谢陈老师对我们的帮助,也非常感谢系领导对我们的关怀。
参考文献至少10篇,按照这个格式写[1]黄维翼.单片机应用与项目实践[M].清华大学出版社,2010.至少10篇,按照这个格式写[2]王质朴.吕运朋MCS-51单片机原理接口及应用[M].北京理工大学出版社,2009.[3]陈杰,黄鸿.传感器与检测技术[M].高等教育出版社,2002.[4]彭伟.单片机C语言程序设计实训100例[M].电子工业出版社,2009.[5]李俊松.21世纪的光电子科学[N].科学时报,2002-02-20(10).[6]康华光,陈大钦,张林.电子技术基础模拟部分[M].高等教育出版社,2005.[7]PaulScherz,夏建生,王仲奕.实用电子元器件与电路基础[M].电子工业出版社,2009.[8]周永东.基于DS18B20的单片机数字温度计[J].微电子学,2007(5):65-66.[9]陈超华,王会进.用KeilC51开发大型嵌入式[J].2003,23(11):140-143.[10]刘国强,唐东红,李兴伟等.基于AT89C51单片机的高精度测温系统的研制[J].仪器仪表学报,2005,26(ZL):258-259.
附录A:程序清单#include<reg52.h>#defineucharunsignedchar#defineuintunsignedintsbitDQ=P1^0;//DS18B20与单片机连接口sbitDQ1=P1^1;//DS18B201与单片机连接口sbitRS=P2^5;sbitRW=P2^6;sbitEN=P2^7;sbitbeef=P3^4;sbitP36=P3^6;sbitP37=P3^7;unsignedcharcodestr1[]={"1:"};unsignedcharcodestr2[]={"H:"};unsignedcharcodestr3[]={"2:"};unsignedcharcodestr4[]={"L:"};unsignedcharcodestr5[]={"23.5"}; //最低温门限unsignedcharcodestr6[]={"28.5"}; //最高温门制uchardatadisdata[4];uchardatadisdata1[4];uinttemp,temp1,tempL=23.5,tempH=28.5;uinttvalue,tvalue1;//温度值uchartflag,tflag1;//温度正负标志/*************************LCD1602程序**************************/voiddelay1ms(unsignedintms)//延时1毫秒(不够精确的){unsignedinti,j;for(i=0;i<ms;i++)for(j=0;j<100;j++);}voidwr_com(unsignedcharcom)//写指令//{delay1ms(1);RS=0;RW=0;EN=0;P0=com;delay1ms(1);EN=1;delay1ms(1);EN=0;}voidwr_com1(unsignedcharcom1)//写指令//{delay1ms(1);RS=0;RW=0;EN=0;P0=com1;delay1ms(1);EN=1;delay1ms(1);EN=0;}voidwr_dat(unsignedchardat)//写数据//{delay1ms(1);;RS=1;RW=0;EN=0;P0=dat;delay1ms(1);EN=1;delay1ms(1);EN=0;}voidwr_dat1(unsignedchardat1)//写数据//{delay1ms(1);;RS=1;RW=0;EN=0;P0=dat1;delay1ms(1);EN=1;delay1ms(1);EN=0;}voidLCD_init()//初始化设置//{delay1ms(15);wr_com(0x38);delay1ms(5);wr_com(0x08);delay1ms(5);wr_com(0x01);delay1ms(5);wr_com(0x06);delay1ms(5);wr_com(0x0c);delay1ms(5);}voiddisplay(unsignedchar*p)//显示// { while(*p!='\0') { wr_dat(*p); p++; delay1ms(1); }}init_play()//初始化显示{LCD_init(); //LCD_initwr_com(0x80); display(str1); wr_com(0x89); display(str2); wr_com(0xc0); display(str3); wr_com(0xc9); display(str4); return0;}/******************************DS18B20程序***************************************/voiddelay_18B20(unsignedinti)//延时1微秒{while(i--);}voidds1820rst()/*ds1820复位*/{ DQ=1;//DQ复位 delay_18B20(4);//延时 DQ=0;//DQ拉低 delay_18B20(100);//精确延时大于480us DQ=1;//拉高 delay_18B20(40);}voidds1820rst1()/*ds1820复位*/{ DQ1=1;//DQ复位 delay_18B20(4);//延时 DQ1=0;//DQ拉低 delay_18B20(100);//精确延时大于480us DQ1=1;//拉高 delay_18B20(40);}ucharDS1820rd()/*读数据*/{ unsignedchari=0; unsignedchardat=0; for(i=8;i>0;i--) { DQ=0;//给脉冲信号 dat>>=1; DQ=1;//给脉冲信号 if(DQ) dat|=0x80; delay_18B20(10); } return(dat);}ucharDS1820rd1()/*读数据*/ //读第二个温度传感器//{ unsignedcharj=0; unsignedchardat1=0; for(j=8;j>0;j--) { DQ1=0;//给脉冲信号 dat1>>=1; DQ1=1;//给脉冲信号 if(DQ1) dat1|=0x80; delay_18B20(10); }return(dat1);}voidDS1820wr(ucharwdata)/*写数据*/{unsignedchari=0;for(i=8;i>0;i--){DQ=0;DQ=wdata&0x01;delay_18B20(10);DQ=1;wdata>>=1; }}voidDS1820wr1(ucharwdata1)/*写数据*/ //写第二个温度传感器//{unsignedcharj=0;for(j=8;j>0;j--) { DQ1=0;DQ1=wdata1&0x01;delay_18B20(10);DQ1=1;wdata1>>=1;}}read_temp()/*读取温度值并转换*/{uchara,b;DS1820rst();DS1820wr(0xcc);//*跳过读序列号*/DS1820wr(0x44);//*启动温度转换*/DS1820rst();DS1820wr(0xcc);//*跳过读序列号*/DS1820wr(0xbe);//*读取温度*/a=DS1820rd();b=DS1820rd();tvalue=b;tvalue<<=8;tvalue=tvalue|a;if(tvalue<0x0fff)tflag=0;else{tvalue=~tvalue+1;tflag=1;}tvalue=tvalue*(0.625);//温度值扩大10倍,精确到1位小数return(tvalue);}read_temp1()/*读取温度值并转换*///读第二个温度传感器//{ucharc,d;DS1820rst1();DS1820wr1(0xcc);//*跳过读序列号*/DS1820wr1(0x44);//*启动温度转换*/DS1820rst1();DS1820wr1(0xcc);//*跳过读序列号*/DS1820wr1(0xbe);//*读取温度*/c=DS1820rd1(); //温度2进制低8位d=DS1820rd1(); //温度2进制高8位tvalue1=d;tvalue1<<=8;tvalue1=tvalue1|c;//合并高低位if(tvalue1<0x0fff) tflag1=0;else { tvalue1=~tvalue1+1; tflag1=1; }tvalue1=tvalue1*(0.625);//温度值扩大10倍,精确到1位小数return(tvalue1);}/*******************************************************************/voidDS1820disp()//温度值显示{ucharflagdat;disdata[0]=tvalue/1000+0x30;//百位数disdata[1]=tvalue%1000/100+0x30;//十位数disdata[2]=tvalue%100/10+0x30;//个位数disdata[3]=tvalue%10+0x30;//小数位temp=tvalue/10+tvalue%10;if(tflag==0)flagdat=0x20;//正温度不显示符号elseflagdat=0x2d;//负温度显示负号:-if(disdata[0]==0x30){disdata[0]=0x20;//如果百位为0,不显示if(disdata[1]==0x30){disdata[1]=0x20;//如果百位为0,十位为0也不显示}}wr_com(0x82);wr_dat(flagdat);//显示符号位wr_com(0x83);wr_dat(disdata[0]);//显示百位wr_com(0x84);wr_dat(disdata[1]);//显示十位wr_com(0x85);wr_dat(disdata[2]);//显示个位wr_com(0x86);wr_dat(0x2e);//显示小数点wr_com(0x87);wr_dat(disdata[3]);//显示小数位}voidDS1820disp1()//温度值显示 *************第二个温度传感器********************//{ucharflagdat1;disdata1[0]=tvalue1/1000+0x30;//百位数disdata1[1]=tvalue1%1000/100+0x30;//十位数disdata1[2]=tvalue1%100/10+0x30;//个位数disdata1[3]=tvalue1%10+0x30;//小数位temp1=tvalue1/10+tvalue1%10;if(tflag1==0)flagdat1=0x20;//正温度不显示符号elseflagdat1=0x2d;//负温度显示负号:-if(disdata1[0]==0x30){disdata1[0]=0x20;//如果百位为0,不显示if(disdata1[1]==0x30){disdata1[1]=0x20;//如果百位为0,十位为0也不显示}}wr_com1(0xc0+0x02);wr_dat1(flagdat1);//显示符号位wr_com1(0xc0+0x03);wr_dat1(disdata1[0]);//显示百位wr_com1(0xc0+0x04);wr_dat1(disdata1[1]);//显示十位wr_com1(0xc0+0x05);wr_dat1(disdata1[2]);//显示个位wr_com1(0xc0+0x06);wr_dat1(0x2e);//显示小数点wr_com1(0xc0+0x07);wr_dat1(disdata1[3]);//显示小数位}/**********************报警程序******************************/voidalarm(){ unsignedcharj; for(j=10;j>0;j--) { beef=1; delay1ms(20); beef=0; }}/********************主程序***********************************/main(){ P37=1; init_play();//初始化显示 while(1) { beef=0; delay1ms(400); read_temp1();//读取温度 ds1820disp1();//显示 read_temp();//读取温度 DS1820disp();//显示 wr_com(0xcb); display(str5); wr_com(0x8b); display(str6); if((temp<tempL||temp>tempH)||(temp1<tempL||temp1>tempH)) { unsignedchari; for(i=20;i>0;i--) { alarm(); P37=0; P36=1; delay1ms(100); P36=0; } } else P37=1; } return0;}基于C8051F单片机直流电动机反馈控制系统的设计与研究基于单片机的嵌入式Web服务器的研究MOTOROLA单片机MC68HC(8)05PV8/A内嵌EEPROM的工艺和制程方法及对良率的影响研究基于模糊控制的电阻钎焊单片机温度控制系统的研制基于MCS-51系列单片机的通用控制模块的研究基于单片机实现的供暖系统最佳启停自校正(STR)调节器单片机控制的二级倒立摆系统的研究基于增强型51系列单片机的TCP/IP协议栈的实现基于单片机的蓄电池自动监测系统基于32位嵌入式单片机系统的图像采集与处理技术的研究基于单片机的作物营养诊断专家系统的研究基于单片机的交流伺服电机运动控制系统研究与开发基于单片机的泵管内壁硬度测试仪的研制基于单片机的自动找平控制系统研究基于C8051F040单片机的嵌入式系统开发基于单片机的液压动力系统状态监测仪开发模糊Smith智能控制方法的研究及其单片机实现一种基于单片机的轴快流CO〈,2〉激光器的手持控制面板的研制基于双单片机冲床数控系统的研究基于CYGNAL单片机的在线间歇式浊度仪的研制基于单片机的喷油泵试验台控制器的研制基于单片机的软起动器的研究和设计基于单片机控制的高速快走丝电火花线切割机床短循环走丝方式研究基于单片机的机电产品控制系统开发基于PIC单片机的智能手机充电器基于单片机的实时内核设计及其应用研究基于单片机的远程抄表系统的设计与研究基于单片机的烟气二氧化硫浓度检测仪的研制基于微型光谱仪的单片机系统单片机系统软件构件开发的技术研究基于单片机的液体点滴速度自动检测仪的研制基于单片机系统的多功能温度测量仪的研制基于PIC单片机的电能采集终端的设计和应用基于单片机的光纤光栅解调仪的研制气压式线性摩擦焊机单片机控制系统的研制基于单片机的数字磁通门传感器基于单片机的旋转变压器-数字转换器的研究基于单片机的光纤Bragg光栅解调系统的研究单片机控制的便携式多功能乳腺治疗仪的研制基于C8051F020单片机的多生理信号检测仪基于单片机的电机运动控制系统设计Pico专用单片机核的可测性设计研究基于MCS-51单片机的热量计基于双单片机的智能遥测微型气象站MCS-51单片机构建机器人的实践研究基于单片机的轮轨力检测基于单片机的GPS定位仪的研究与实现基于单片机的电液伺服控制系统用于单片机系统的MMC卡文件系统研制
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 杜绝校园欺凌共建和谐校园演讲稿范文(3篇)
- 北京市海淀区2024-2025学年高二上学期9月月考 数学试题(含解析)
- DB12-T 1110-2021 企业开办登记规范
- 贡献社会主题班会教案
- 上海市市辖区(2024年-2025年小学五年级语文)统编版小升初模拟((上下)学期)试卷及答案
- 上海市县(2024年-2025年小学五年级语文)统编版专题练习(上学期)试卷及答案
- 浙江省台州市台州十校联考2024-2025学年高一上学期11月期中日语试题含答案
- 人教版九年级语文上册教案全集
- 辽宁省沈阳市沈河区沈阳市第七中学协作体2024-2025学年八年级上学期期中地理试卷(含答案)
- 广东省揭阳市2025届高三上学期第一次月考数学试题(含答案)
- 2022中国听障用户数字产品体验调研报告
- ADAScog(老年痴呆量表—认知)
- 非婚生育子女情况声明
- 脱硫检修方案
- 乐理试题(音程-三和弦)
- 汽轮机主油箱系统(课堂PPT)
- 数据管理制度
- 减速器拆装实训教案
- 氢氧化钠安全技术说明书(共2页)
- 投标优惠条件承诺书
- 微信公众账号授权书
评论
0/150
提交评论