




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
摘要在实际生产和生活等各个领域中,温度是环境因素不可或缺的一部分,对温度进行及时精确的控制和检测显得尤为重要。本次设计在控制成本的前提下,设计了一款高精度、可同时检测八路温度并由液晶显示器对各路温度值进行显示的温度检测显示系统。该系统以AT89C51为控制核心,采用可编程单总线数字式温度传感器DS18B20进行温度采集,八路温度值由LM041L液晶显示器显示。系统正常运行时,其测温范围为-55℃~+125℃,该系统在现代电子工业飞速发展的时期有良好的应用前景。关键词:AT89C51;多路;温度检测;显示AbstractTemperatureisanessentialofenvironmentalfactorsinouractualproduction,livingandmanyotherfields.It’sparticularlyimportanttocontrolanddetectthetemperaturepromptlyandexactly.Ithasdesignedahighprecisiontemperaturetestingsysteminthebaseoflostcontrol,whichcaninspecteightroutetemperatureatonetimeandshoweachrouteoftemperaturebyLCD.AT89C51isadoptedascontrolcoreinthissystem.ItssensorsfortemperatureissinglebusdigitalDS18B20,sendingtemperaturetoLM041LLCDtodisplay.Whenitoperatesnormally,it’stemperaturerangesfrom-55℃to+125℃,thesystemhasagoodapplicationprospectinthemordenperiodwhenelectronicsindustrydevelopingrapidly.Keywords:AT89C51;Manyroutes;TemperatureDetection;Display目录TOC\o"1-2"\h\z\u摘要 DB7DB6DB5DB4DB3DB2DB1DB0清屏(并且光标回原点)0000000001光标回原点000000001X进入模式设定00000001I/DS显示开关控制0000001DCB光标或字符移位000001S/CR/LXX功能设定00001DLNFXX设置CGRAM地址00016位CGAM地址码设置显示地址0007位DDRAM地址码读忙标志和地址计数器01BF7位当前显示地址码向CGRAM/DDRAM写数据108位数据从CGRAM/DDRAM读数据118位数据表中X:任意二进制数。I/D:显示地址计数器模式选择。I/D=1,选择加1模式;I/D=0,选择减1模式。D:显示器开关控制位。D=1,显示器ON;D=0,显示器OFF。C:光标开关控制位。C=1,光标ON;C=0,光标OFF。B:光标闪烁开关控制位。B=1,光标闪烁ON;B=0,光标闪烁OFF。S/C:显示器或光标移位选择。S/C=1,选择显示器移位;S/C=0,选择光标移位。R/L:移位方向选择。R/L=1,向右移动;R/L=0,向左移动。DL:传输数据的有效位长度选择。DL=1,有效位为8位;DL=0,有效位为4位。N:显示器行数选择位。N=1,选择使用4行显示器;N=0,选择使用两行显示器。F:字符显示块的点阵选择。F=1,选择5×10点阵;F=0,选择5×7点阵。BF:忙标志位。BF=1,LCM处于忙状态;BF=0,LCM处于空闲状态。CGRAM:字符发生器RAM。用户自编成的字符或图形存储器。CDRAM:显示数据RAM。4.3.2LM041L的程序流程图及主要程序液晶显示器在本系统担任显示的任务,本系统采用的LM041L液晶显示器可同时显示八路温度,可直观的看到八路温度实时的温度情况,便于及时控制处理。LM041L为四行显示,可分别定义每路温度的显示地址,每行显示两路。其程序流程图如图4.6所示。图4.6LM041L的程序流程图LM041L显示程序如下。voidinit_lcd1602()//初始化LM041L{write_command(0x3f);delay(10);write_command(0x3f);delay(10);write_command(0x3f); //功能设定(8位,4行,5*7点阵式)delay(10);write_command(0x0c); //显示器ON,光标OFF,闪烁OFFdelay(10);write_command(0x06);//地址加1delay(10);write_command(0x01); //清除屏幕delay(10);}voidwrite_data(uchartempdata){ E=0; _nop_(); _nop_(); RS=1; _nop_(); RW=0; P1=tempdata; _nop_(); E=1; _nop_(); E=0; check_busy();}4.4报警模块软件设计虽然不同系统的报警电路有所差异,考虑核心是一样的,本系统的报警模块设计大致可分为三步进行。(1)分别采样被测八路温度值;(2)与设定的温度上下限值进行比较;(3)当有一路或几路温度超限时声光报警。本系统分别用P3.3和P3.4端口作为报警端口,当温度超限时,两端口便发出高低电平连续变换的脉冲,当发光二极管和蜂鸣器接收到此脉冲时,发光二极管闪烁,蜂鸣器也发出声音。用程序控制比较简单,报警电路程序流程图如图4.7所示。图4.7报警电路程序流程图串行口与通信上位机主要程序如下。if((temp_data_h&0xf0)==0xf0) //如果温度为负 { temp_data_l=~temp_data_l; //负温度将补码转成二进制, if(temp_data_l==0xff) //取反再加1 { temp_data_l=temp_data_l+0x01; temp_data_h=~temp_data_h; temp_data_h=temp_data_h+0x01;} else {temp_data_l=temp_data_l+0x01; temp_data_h=~temp_data_h; }{if(temp<10) //温度与下限(-10℃)比较,超限则报警 alarm_S=1,alarm_L=0; else alarm_S=0,alarm_L=1;}else //温度为正{ if(temp>89) //温度与上限值(90℃)比较,超限则报警 alarm_S=0,alarm_L=1; else alarm_S=1,alarm_L=0; }}4.5串行口上位机通信模块软件设计本次通讯中,测控系统分为上位机和下位机之间的通信,系统中单片机负责数据采集、处理和控制,上位机进行现场可视化检测,通信协议采用全双工异步串行通信方式,通过RS232的RTS信号进行收发转换,将八路温度值经过转换后送到上位机进行通信,程序流程图如图4.8所示。图4.8串行口程序流程图串行口通信主要程序如下。voidsend_int(void)//串行口上位机通信{ TR1=1; //启动定时器1 TMOD=0x20; //定时器1工作于8位自动重载模式,用于产生波特率 TH1=0xF3; //波特率2400 TL1=0xF3; SCON=0x50; //设定串行口工作方式 PCON&=0xef; } voidsend_str(charstr[]) //传送字串{ uchari=0; send_int(); for(i=0;i<16;i++) { SBUF=str[i]; while(!TI); //等特数据传送 TI=0; } //清除数据传送标志 TR1=0; }5八路温度采集显示系统仿真调试及结果5.1Proteus与KeilμVision联合仿真5.1.1Proteus与Keil4的链接设置KeilμVision4(简称Keil4)是德国Keil公司出品的51系列兼容单片机软件开发系统。该系统支持C语言和汇编语言。Keil4界面友好,操作简单。首先介绍Proteus与Keil4的链接设置[3]。(1)安装Keil4和Proteus7.4sp3;(2)将Proteus7Professional\Models\VDM51.DLL复制到Keil4\C51\bin目录下;(3)在Keil4\TOOLS.INI文件中的[C51]字段下添加:TDRV4=BIN\VDM5-1.DLL(“ProteusVSMSimulator”),并保存。其中TDRV4中的数字“4”可以任意;(4)在Proteus中绘制原理图后,选取Debug|UseRemoteDebugMonitor选项;(5)在Keil4中编辑程序完成后,选取Project|OptionsforTarget‘Target1’选项,选择Debug选项卡,选中ProteusVSMSimulator选项。单击Setting按钮,设置Host为127.0.0.1,Port为8000;(6)在Keil4中进行Debug,同时在Proteus中查看结果。5.1.2在Keil4中编辑程序并生成“HEX”文件打开Keil4,选择Project|NewProject命令,在弹出的CreateNewProject对话框中选择目标保存路径,在“文件名”编辑框输入工程名称。单击“保存”,在弹出的SelectDeviceforTarget‘Target1’对话框中双击Database框中的Atmel选项,选择AT89C51单片机,按“确定”后,在随后弹出的μVision4的对话框中选择“是”。选择File|New命令,新建一个文档,然后保存。本设计采用C语言编写程序,故输入扩展名为“.c”。保存文件后,Keil4会自动识别C语言程序中的关键字,并以不同的颜色显示[35]。在Keil的编辑器里编写源代码,其源程序见附录3。编写程序完成后,双击Keil4左边的ProjectWorkspace窗口中的Target1,然后右键单击SourceGroup1文件夹,在快捷菜单中选择AddFilestoGroup‘SourceGroup1’,在弹出的AddFilestoGroup‘SourceGroup1’对话框中选择文件类型为CSourceFile类型,将编完的C语言程序文件添加到SourceGroup1中。在Keil4中是以工程的方式对文件进行管理,为此需要将相关的目标文件加入到工程之中。右键单击ProjectWorkspace窗口中的Target1文件夹,在快捷菜单中选择OptionsforTarget‘Target1’选项。在弹出的OptionsforTarget‘Target1’对话框中选择Output选项卡,选中CreateHEXFile复选框以生成Proteus所需的十六进制文件,如图5.1所示,然后单击“OK”按钮。图5.1OptionsforTarget对话框在Keil中选择Project|Buildtarget命令,以产生目标程序和HEX文件。如果编译成功,则在OutputWindow子窗口中的Build选项页中出现如图5.2所示信息。如果编译错误,则会在子窗口指示错误的语句。双击错误信息,光标回自动指向错误的语句。图5.2OutputWindow子窗口5.1.3在ProteusISIS中调试首先打开ProteusISIS,完成系统电路原理图的绘制,电路原理图见附录2,图中所用到的元器件清单见附录1。双击U1即AT89C51,在弹出的EditComponent对话框ProgramFile一栏中选择在Keil中产生的Ds18B20_8.Hex文件,如图5.3所示。单击“OK”按钮。按Ctrl+S保存设计。图5.3EditComponent对话框5.2Proteus与Keil联合仿真结果在Proteus中打开已经绘制好的电路原理图,前面程序已经加载成功,所以只要单击菜单栏中的Debug|Start/RestartDebugging命令,或者按快捷键Ctrl+F12运行。系统正常启动后,液晶显示器可同时将八路温度显示出来,当我们调节DS18B20的温度值时,显示温度随着采集到温度值的变化立马变换,能够准确无误的显示每一路温度值,显示效果良好,可视性好,如图5.4所示。图5.4LCD显示结果然后我们校对一下连接在单总线上的八个DS18B20温度传感器的温度值是否与显示温度一一对应,如图5.5所示,各路温度值分别为:A:-15℃;B:-10℃;C:0℃;D:10℃;E:20.5℃;F:40.5℃;G:80℃;H:100.5℃。图5.5DS18B20采集温度值在系统正常运行时,串行口上位机通信正常,可以将数据顺利送至上位机,且更新数据速度快,传输数据准确无误,如图5.6所示。图5.6串行口送上位机数据当某一路温度值超过温度上线(90℃)或温度下限(-10℃)时,报警电路开始工作,发光二极管闪亮,蜂鸣器发出声音,如图5.7所示。图5.7报警电路工作状态结论本系统设计简单,性能稳定,为以后能够通过单片机编程进行各种功能的扩展,还增加了片外程序存储器的扩展。用数字式温度传感器DS18B20对温度进行采集,输出数字量与单片机直接通讯,无需外加A/D转换器,在降低了成本的同时简化了系统的电路,提高了系统的集成度,使用更加方便。采用LM041L液晶显示器对八路温度进行显示,显示效果好且连接方便,通过程序定义显示地址,16字×4行的屏幕显示可以将八路温度同时显示在屏幕上,当有某一路或谋几路温度超限时,可立即观察到是哪一路或哪几路温度超限,从而可以及时准确的控制该路温度回到限定范围内。报警电路采用红色发光二极管闪烁报警和蜂鸣器声响报警,由于红色能更加引起人们的警觉,所以报警电路的应用能更好的减少了生产工业方面由于温度过高或过低而未能及时控制带来的损失。串行口通信将数据准确无误的传送到上位机,更能适应当代计算机普遍应用的时代,在通信成功的前提下配之合理的人机对话界面,使系统更加人性化、智能化。利用Proteus与KEIL联合仿真对单片机八路温度采集显示系统进行了仿真设计,可以极大地简化单片机程序在目标硬件上的调试工作,大幅度节省制作电路板的时间,对于提高产品的开发效率、降低开发成本等有重要作用。从调试结果看,八路温度都准确无误的显示在液晶显示屏上,当有温度超限时,报警电路立即工作,报警灵敏度高,当控制温度回到限定范围内时,立即停止报警。串行口通信也工作正常,传送数据速度快,精确度高。经调试验证,本系统已基本完成任务要求,达到了预期目的,在以后的生产生活中有较好的应用前景。参考文献张俊谟.单片机中级教程——原理与应用[M].北京:北京航空航天大学出版社,2008.陈立周,陈宇.单片机原理及应用[M].北京:机械工业出版社,2008.蒋辉平,周国雄.基于Proteus的单片机系统设计与仿真实例[M].北京:机械工业出版社,2009.张克弄.数字电子技术基础[M].北京:高等教育出版社,2003.梁贺青.增强核内存80C51教程[M].北京:电子工业出版社,2003.高峰.单片微机应用系统设计及应用技术[M].北京:机械工业出版社,2004.张迎新.单片机原理及应用[M].北京:电子工业出版社,2004.杜树春.单片机C语言编程MCS-51单片机原理与应用[M].北京:北京航空航天大学出版社,2006.胡伟,季晓衡.单片机C程序设计及应用实例[M].北京:人民邮电出版社,2003.张靖武.单片机系统的PROTEUS设计与仿真[M].北京:电子工业出版社,2007.范风强,兰婵丽.单片机语言C51应用实践集锦[M].北京:电子工业出版社,2003.林志琦,等.基于Proteus的单片机可视化软硬件仿真[M].北京:北京航空航天大学出版社,2006.石东海.单片机数据通信技术从入门到精通[M].西安:西安电子科技大学出版社,2002.周润景,张丽娜.基于PROTUES的电路及单片机系统设计与仿真[M].北京:北京航空航天大学出版社,2006.求是科技.单片机通信技术与工程实践[M].北京:人民邮电出版社,2005.秦晓梅,陈育斌.单片机原理综合实验教程[M].大连:大连理工大学出版社,2004.严天峰.单片机应用系统设计与仿真调试[M].北京:北京航空航天大学出版社,2005.张培仁.基于C语言编程MCS-51单片机原理与应用[M].北京:清华大学出版社,2002.赵文博,刘文涛.单片机语言C51程序设计[M].北京:人民邮电出版社,2003.DallasSemiconductorCorporation.DS2430A256-Bit1-WireEEPROM.DallasSemiconductorcorporation.李光飞,等.单片机课程设计实例指导[M].北京:北京航空航天大学出版社,2004.求实科技.单片机典型外围器件及应用实例[M].北京:人民邮电出版社,2005.沙占友,等.单片机外围电路设计[M].北京:电子工业出版社,2006.AtmelCorporation.Two-WireSerialEEPROM-AT24C1024.AtmelCorporation.TexasInstrumentsIncorporated.TLC543-EP12-BitAnalog-to-DigitalConverterswithSerialControland11AnalogInputs.TexasInstrumentsIncorporated,2002.饶连周.MCS-51单片机系统中存储器的扩展技术[J].三明职业大学学报,1999,(S3).宋丹.多路温度巡检系统的设计与应用[J].自动化与仪表,2008,(09).韦哲.程自峰.数字温度传感器DS18B20在体温检测中的应用[J].医疗装备,2005,(04).杨丙聪,许忠仁,刘晓峰.基于AT89S52单片机的智能温度控制器的设计[J].测控技术,2007(10).周功明.基于AT89C2051单片机的防盗自动报警电子密码锁系统的设计[J].安防科技,2007(09).张继辉.基于AT89C51单片机的多路自动循环检测报警控制器[N].电子报,2009-10.田家淑.AT89S51/52单片机简易编程器[N].电子报,2009-02-15.晏文靖.基于DS18B20的温度测量装置[J].科技信息,2009,(33):98-99.程海婴.基于DS18B20粮仓温湿度智能控制系统[J].知识经济,2010,(01):117-118.彭小峰,雷李,张里.基于Proteus和Keil的整合构建单片机虚拟实验室[J].重庆工学院学报(自然科学版),2007,(04).徐红,权斌.关于8031单片机扩展多片外部程序存储器地址问题的探讨[J].西安工程学院学报,1998,(03).王国庆,于富强.单片机应用系统大容量外部数据存储器的扩展[J].河北师范大学学报,1998,(04).易丽华,黄俊.基于AT89C51单片机与DS18B20的温度测量系统[J].电子与封装2009,(05).杨世成.信号放大电路[M].北京:电子工业出版社,2002.DallasSemiconductorCorporation.DS18B20ProgrammableResolution1-WireDigitalThermometer.DallasSemiconductorCorporation.JohnG,Kassakian.PrinciplesofPowerElectronics.AddisonWesleypublishingcompany,1991.MSP430x4xxFamilyUser'sGuide-slau056c.TexasInstruments[EB/OL],2003.JeffersonC.Boyce.DigitalLogicandSwitchingCircuits:OperationandAnalysis.Prentice-Hall,1975.Viasala.InstruetionManualforHumidityProbeHMP21.V1997,5.BarryB.Brey.TheIntelMicroprocessors8086/8088,80486,PentiumandpentiunmproprocessorArchitecture,ProgrammingandIn-interfacing.NewJersey:PrenticeHall,1997.D·M·Ausla“der,MicroProces”UrsforMeasurementandControl,1979.ProteusKeilJ2005(8):21-24.毛德平,凌有涛.一种基于RS485总线的温度、湿度测控系统[J].现代电子技术,2007,(02):168-170.王志鹏.可编程逻辑器原理与程序设计[M].北京:北京航天航空出版社,2005.彭为,黄科,雷道仲.单片机典型系统设计实例精讲[M].北京:电子工业出版社,2006:116-134.附录1系统仿真所用元器件清单元件名称所属类所属子类AT89C51MicroprocessorICs8051FamilyCAPCapacitorsGenericCAP-ELECCapacitorsGenericCAP-POLCapacitorsGenericCRYSTALMiscellaneous—RESResistorsGenericMAX232MicroprocessorICsPeripheralsCONN-D9FConnectorsD-TypeBUTTONSwitches&RelaysSwitchesLED-REDActive—SOUNDERSpeakers&Sounders—74HC373TTL74HCseriesFlip-Flops&Latches2764MemoryICsEPROMDS18B20DataConvertersTemperaturesSensorsLM041LOptoelectronicsAlphanumericLCDs附录2系统仿真C语言程序清单#include<reg51.h>#include<intrins.h>#defineucharunsignedcharsbitRS=P3^5; //定义LCD端口sbitRW=P3^6;sbitE=P3^7;sbitDQ=P3^2; //定义DS18B20单总线端口sbitalarm_S=P3^3; //定义报警端口sbitalarm_L=P3^4;ucharLCD_3;ucharLCD_2;ucharLCD_1;ucharLCD_0;uchards18b20_romA[8]={0x8e,0x00,0x00,0x00,0xb8,0xc5,0x30,0x28};//八个DS18B20的64位ROM地址uchards18b20_romB[8]={0x52,0x00,0x00,0x00,0xb8,0xc5,0x34,0x28};uchards18b20_romC[8]={0x65,0x00,0x00,0x00,0xb8,0xc5,0x35,0x28};uchards18b20_romD[8]={0x3c,0x00,0x00,0x00,0xb8,0xc5,0x36,0x28};uchards18b20_romE[8]={0xB9,0x00,0x00,0x00,0xb8,0xc5,0x31,0x28};uchards18b20_romF[8]={0xE0,0x00,0x00,0x00,0xb8,0xc5,0x32,0x28};uchards18b20_romG[8]={0xD7,0x00,0x00,0x00,0xb8,0xc5,0x33,0x28};uchards18b20_romH[8]={0x0B,0x00,0x00,0x00,0xb8,0xc5,0x37,0x28};ucharLCDData[]="0123456789";uchardot_tab[]="0112334456678899";ucharcodestr[]="TEMPERATURE:";ucharcodestr2[]="Designedby06c";ucharcodestr3[]="ekong'sZouJie";ucharidatafirst_line[]="A:000.0B:000.0"; //LCD第一行显示缓存数组ucharidatasecond_line[]="C:000.0D:000.0"; //LCD第二行显示缓存数组ucharidatathird_line[]="E:000.0F:000.0"; //LCD第三行显示缓存数组ucharidataforth_line[]="G:000.0H:000.0"; //LCD第四行显示缓存数组//************************************//延时程序//************************************voiddelay(unsignedintN){ unsignedinti; for(i=0;i<N;i++);}//************************************ //LM041L测忙 //************************************voidcheck_busy(void){ while(1) { P1=0xff; E=0; _nop_(); RS=0; _nop_(); _nop_(); RW=1; _nop_(); _nop_(); E=1; _nop_(); _nop_(); _nop_(); _nop_(); if((P1&0x80)==0) { break; } E=0; }}//************************************//LM041L写命令//************************************voidwrite_command(uchartempdata){ E=0; _nop_(); _nop_(); RS=0; _nop_(); _nop_(); RW=0; P1=tempdata; _nop_(); _nop_(); E=1; _nop_(); _nop_(); E=0; _nop_(); check_busy();}//************************************//LM041L写数据//************************************voidwrite_data(uchartempdata){ E=0; _nop_(); _nop_(); RS=1; _nop_(); _nop_(); RW=0; P1=tempdata; _nop_(); _nop_(); E=1; _nop_(); _nop_(); E=0; _nop_(); check_busy();}//************************************//初始化LM041L//************************************voidinit_lcd1602(){ write_command(0x3f); delay(10); write_command(0x3f); delay(10); write_command(0x3f); //功能设定(8位,4行,5*7点阵式)delay(10);write_command(0x0c); //显示器ON,光标OFF,闪烁OFFdelay(10);write_command(0x06); //地址加1delay(10); write_command(0x01); //清除屏幕delay(10);}//************************************//初始化ds18b20 //************************************bitresetpulse(void){ DQ=0; delay(40); //延时500us DQ=1; delay(4); //延时60us return(DQ); //读取P1.0的状态}voidds18b20_init(void){ while(1) { if(!resetpulse()) //收到ds18b20的应答信号 { DQ=1; delay(40); //延时240us break; } else resetpulse(); //否则再发复位信号 }}//************************************//读ds18b20一位//************************************ucharread_bit(void){ DQ=0; _nop_(); _nop_(); DQ=1; delay(2); return(DQ);}//************************************//读ds18b20一个字节//************************************ucharread_byte(void){ uchari,m,receive_data; m=1; receive_data=0; for(i=0;i<8;i++) { if(read_bit()) { receive_data=receive_data+(m<<i); } delay(7); } return(receive_data);}//************************************//向ds18b20写一位//************************************voidwrite_bit(ucharbitval){ DQ=0; if(bitval==1) DQ=1; delay(5); DQ=1;}//************************************//向DS18B20写一个字节命令//************************************voidwrite_byte(ucharval){ uchari,temp; for(i=0;i<8;i++) { temp=val>>i; temp=temp&0x01; write_bit(temp); delay(5); }}//*************************************//64位的ROM序列号匹配 //*************************************bitmatch_rom(uchar*rom){ uchari; ds18b20_init(); write_byte(0x55); for(i=8;i>0;i--) { write_byte(*(rom+i-1)); } return1;}//************************************//从ds18b20中读出64位序列号 //************************************/*uchar*read_rom(void){ ucharrom[8],i; ds18b20_init(); write_byte(0x33); for(i=8;i>0;i--) { rom[i-1]=read_byte(); } return&rom[0];}*/ //*************************************//将64位序列号显示在LCD上显示出来//*************************************/*voidprint_char(uchara){ if(a>=0&&a<=9) write_data(a+0x30); elseif(a>=0x0a&&a<=0x0f) write_data(a+0x37);}*///*************************************//温度转换,将从ds18b20中读出来的温度值转化成十进制的温度值//并存放显示缓存并检测温度是否超限,超限则报警//*************************************voidconvert_T(uchartemp_data_h,uchartemp_data_l){ uchartemp; alarm_S=0; alarm_L=0;if((temp_data_h&0xf0)==0xf0) //如果温度寄存器里的高位为1, { //则温度为负 temp_data_l=~temp_data_l; //负温度将补码转成二进制, if(temp_data_l==0xff) //取反再加1 { temp_data_l=temp_data_l+0x01; temp_data_h=~temp_data_h; temp_data_h=temp_data_h+0x01; } else { temp_data_l=temp_data_l+0x01; temp_data_h=~temp_data_h;} LCD_0=dot_tab[temp_data_l&0x0f]; //查表得小数位的值 temp=((temp_data_l&0xf0)>>4)|((temp_data_h&0x0f)<<4); LCD_3='-'; //显示"-"号 LCD_2=LCDData[(temp%100)/10]; //查表得负温度温度十位 LCD_1=LCDData[(temp%100)%10]; //查表得负温度个位 if(temp<10) //温度与下限(-10℃)比较,超限则报警 alarm_S=0,alarm_L=0; else alarm_S=1,alarm_L=~alarm_L; }else //温度为正{ LCD_0=dot_tab[temp_data_l&0x0f]; //查表得小数位的值 temp=((temp_data_l&0xf0)>>4)|((temp_data_h&0x0f)<<4); LCD_3=LCDData[temp/100]; //查表得温度百位 LCD_2=LCDData[(temp%100)/10]; //查表得温度十位 LCD_1=LCDData[(temp%100)%10]; //查表得温度个位 if(temp>89) //温度与上限值(90℃)比较,超限则报警 alarm_S=1,alarm_L=~alarm_L; else alarm_S=0,alarm_L=0; }}//*************************************************//显示八路温度//*************************************************voiddisplay(void){uchari; write_command(0x80); for(i=0;i<16;i++) { write_data(first_line[i]); } write_command(0xC0); for(i=0;i<16;i++) { write_data(second_line[i]); } write_command(0x90); for(i=0;i<16;i++) { write_data(third_line[i]); } write_command(0xD0); for(i=0;i<16;i++) { write_data(forth_line[i]); }}//*********************************************//串行口上位机通信//********************************************* voidsend_int(void){ TR1=1; //启动定时器1 TMOD=0x20; //定时器1工作于8位自动重载模式,用于产生波特率 TH1=0xF3; //波特率2400 TL1=0xF3; SCON=0x50; //设定串行口工作方式 PCON&=0xef; //波特率不倍增 delay(5000); } voidsend_str(charstr[]) //传送字串{ uchari=0; send_int(); for(i=0;i<16;i++) { SBUF=str[i]; while(!TI); //等特数据传送 TI=0; //清除数据传送标志 } TR1=0; delay(6000);}//***************************************************//主函数//***************************************************voidmain(void){ uchartemp_data_l,temp_data_h; /*uchar*ds18b20_rom;*/ init_lcd1602(); send_str(str2); //向串行口发送作者信息 send_str(str3); send_str("\n\r"); delay(6000); /*while(1) { uchari; ds18b20_rom=read_rom(); //读序列号 write_command(0x80); for(i=0;i<8;i++) { ds18b20_romA[i]=*ds18b20_rom; ds18b20_rom++; } write_command(0x80); for(i=0;i<8;i++) //显示序列号 { print_char(ds18b20_romA[i]/16); print_char(ds18b20_romA[i]%16); } }*/ while(1) { ds18b20_init(); write_byte(0xcc); write_byte(0x44); //启动温度转换 delay(600); match_rom(ds18b20_romA); //匹配第一路 write_byte(0xbe); //读温度 temp_data_l=read_byte(); //温度低8位 temp_data_h=read_byte(); //温度高8位 convert_T(temp_data_h,temp_data_l); first_line[2]=LCD_3; //温度转换后的各位 first_line[3]=LCD_2; //分别存入显示缓存数组中 first_line[4]=LCD_1; first_line[6]=LCD_0; match_rom(ds18b20_romB); //匹配第二路 write_byte(0xbe); //读温度 temp_data_l=read_byte(); //温度低8位 temp_data_h=read_byte(); //温度高8位 convert_T(temp_data_h,temp_data_l); first_line[10]=LCD_3; //温度转换后的各位 first_line[11]=LCD_2; //分别存入显示缓存数组中 first_line[12]=LCD_1; first_line[14]=LCD_0; display(); match_rom(ds18b20_romC); //匹配第三路 write_byte(0xbe); //读温度 temp_data_l=read_byte(); //温度低8位 temp_data_h=read_byte(); //温度高8位 convert_T(temp_data_h,temp_data_l); second_line[2]=LCD_3; //温度转换后的各位 second_line[3]=LCD_2; //分别存入显示缓存数组中 second_line[4]=LCD_1; second_line[6]=LCD_0; match_rom(ds18b20_romD); //匹配第四路 write_byte(0xbe); //读温度 temp_data_l=read_byte(); //温度低8位 temp_data_h=read_byte(); //温度高8位 convert_T(temp_data_h,temp_data_l); second_line[10]=LCD_3; //温度转换后的各位 second_line[11]=LCD_2; //分别存入显示缓存数组中 second_line[12]=LCD_1; second_line[14]=LCD_0; display(); send_str(first_line); //往串行口发送第一行和第二行温度 send_str(second_line); send_str("\n\r"); delay(100);match_rom(ds18b20_rom
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 五年级上册数学教案 - 5.3 分饼 北师大版
- 2025年租凭合同延期申请书模板
- 五年级下册数学教案-练习一 北师大版
- 三年级上册语文部编版期中测试卷(含答案)
- 2024年水电站计算机监控装置项目资金申请报告代可行性研究报告
- 2025年济南工程职业技术学院单招职业倾向性测试题库含答案
- 《7 秋季星空》 教学设计-2023-2024学年科学六年级上册青岛版
- 我为爸爸庆祝父亲节教案教学设计
- 2025年广东省建筑安全员-A证考试题库附答案
- 2025年桂林信息工程职业学院单招职业倾向性测试题库带答案
- 小学生四年级健康知识讲座
- 中医主任述职报告
- 通防培训课件
- 撤场通知书( 模板)
- 音乐识谱节奏训练课件
- 七年级数学上册期末试卷(可打印)
- richcui美国sspc富锌底漆解读
- 学前儿童游戏(中职学前教育专业)PPT完整版全套教学课件
- 人教版高中地理必修一全册测试题(16份含答案)
- GN汽车吊吊装专项安全方案讲义
- 初中历史-《开元盛世 》教学课件设计
评论
0/150
提交评论