单片机温度传感器设计报告.doc_第1页
单片机温度传感器设计报告.doc_第2页
单片机温度传感器设计报告.doc_第3页
单片机温度传感器设计报告.doc_第4页
单片机温度传感器设计报告.doc_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

泰州职业技术学院电子与信息工程系课程名称: 51单片机开发 课题名称:用1602LCD与DS18B20设计的温度报警器班 级: 10信息 课题小组成员: 林淑云 朱翠竹 刘苏慧 指导老师: 蔡菁 摘要现代社会是信息社会,随着现代农业技术的发展及人们对生活环境要求的提高,人们也迫切需要检测与控制温度,所以对于温度的测量控制具有十分重要的意义。随着全球温度的普遍升高,高温火灾更是无处不在:电气线路短路、过载、接触电阻过大等引发高温火灾;静电产生高温火灾;雷电等强电入侵导致高温火灾;最主要是机房内电脑、空调等用电设备长时间工作,导致设备老化,空调发生故障,而不能降温。因此,机房内所属的电子产品发热快,在短时间内机房温度升高超出设备正常温度,导致系统瘫痪或产生火灾,这时温度报警系统就会发挥应有的功能。本课题介绍的就是利用温度传感DS18B20制作的温度报警器,自动测量当前环境温度。由单片机AT89C52控制,并通过1602LCD显示,若当前环境温度超过此温度,系统发出报警。目 录一、系统总体设计要求二、系统硬件设计三、系统程序设计四、调试与性能分析五、源程序清单六、心得体会一、系统总体设计要求1.本设计采用集成温度传感器的的s18b20,设计一个数字显示的温度报警器。定安全温度值范围为20C30C(可根据具体需要在程序中进行调整),对在这一范围内的温度变化采集后送入A/D转换器,A/D转换器的模拟电压范围为05V。例如传感器采集的温度为25C,则对应液晶显示器的显示值为25C。而温度高出30C或者低于20C时,不在安全温度范围之内,喇叭会进行报警、二极管发光显示 2 总体设计框图本设计采用AT89C52作为主控芯片,蜂鸣器作为输出设备产生报警声,LCD1602能够实时的显示当前的的温度。其中P3.3和P3.2外接按键,P0口用作LCD输出数据端口,P2.3接蜂鸣器端口。详细原理图见附件设计框图如图一所示。二、系统硬件设计1 主控芯片设计中所采用主控芯片为AT89C52。因其价格便宜,在市场上已经很成熟,各个方面都能够满足设计要求故选择它。其采用标准双列直插式引脚DIP-40大规模集成电路封装。它的引脚排列如下图二所示图二AT89C52的引脚排列引脚介绍:VCC:供电电压。 GND:接地。 P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P1口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在FIASH编程时,P0 口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。 P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH编程和校验时,P1口作为第八位地址接收。 P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。 P3口: P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。 P3口也可作为AT89C51的一些特殊功能口,如下表所示: P3口管脚 备选功能: P3.0 RXD(串行输入口) P3.1 TXD(串行输出口) P3.2 INT0(外部中断0) P3.3 INT1(外部中断1) P3.4 T0(记时器0外部输入) P3.5 T1(记时器1外部输入) P3.6 WR(外部数据存储器写选通) P3.7 RD(外部数据存储器读选通) P3口同时为闪烁编程和编程校验接收一些控制信号。RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此时, ALE只有在执行MOVX,MOVC指令是ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效。PSEN: 外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。EA/VPP:当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。XTAL2:来自反向振荡器的输出。振荡器特性: XTAL1和XTAL2分别为反向放大器的输入和输出。该反向放大器可以配置为片内振荡器。石晶振荡和陶瓷振荡均可采用。如采用外部时钟源驱动器件,XTAL2应不接。有余输入至内部时钟信号要通过一个二分频触发器,因此对外部时钟信号的脉宽无任何要求,但必须保证脉冲的高低电平要求的宽度。2、液晶模块显示原理:在智能控制系统中越来越多的使用了液晶显示屏LCD。LCD是一种介于液体和固体之间热力学的中间稳定相,它本身不会发光,是利用外部光的反射原理进行显示。液晶显示功耗小,字形美观,在系统中可用集成电池来供电。字符型液晶显示模块是一种专门用于字母、数字、符号等点阵式LCD,目前常用16*1,16*2,20*2,40*行等的模块,下面以1602字符型液晶显示器为例介绍其用法:1.1602LCD采用标准的14脚(无背光)或16脚(带背光)接口,各引脚接口说明如表所示:2.1602液晶模块内部的控制器共11条指令:(1).清屏指令指令RSR/WD7D6D5D4D3D2D1D0清显示0000000001功能: 清除液晶显示器,即将DDRAM的内容全部填入空白的ASCII码20H; 光标归位,即将光标撤回液晶显示屏的左上方; 将地址计数器(AC)的值设为0。(2).光标归位指令指令RSR/WD7D6D5D4D3D2D1D0光标返回000000001*功能: 把光标撤回到显示器的左上方; 把地址计数器(AC)的值设置为0; 保持DDRAM的内容不变。(3).进入模式设置指令指令RSR/WD7D6D5D4D3D2D1D0置输入模式00000001I/DS功能:设定每次定入1位数据后光标的移位方向,并且设定每次写入的一个字符是否移动。参数设定的情况如下所示: 位名设置 I/D0=写入新数据后光标左移1=写入新数据后光标右移 S0=写入新数据后显示屏不移动1=写入新数据后显示屏整体右移1个字符 (4).显示开关控制指令指令RSR/WD7D6D5D4D3D2D1D0显示开/关控制指令0000001DCB功能:控制显示器开/关、光标显示/关闭以及光标是否闪烁。参数设定的情况如下: 位名设置 D0=显示功能关1=显示功能开 C0=无光标1=有光标 B0=光标闪烁1=光标不闪烁 (5).设定显示屏或光标移动方向指令指令RSR/WD7D6D5D4D3D2D1D0光标或字符移位000001S/CR/L*功能:使光标移位或使整个显示屏幕移位。参数设定的情况如下: S/CR/L设定情况 00光标左移1格,且AC值减1 01光标右移1格,且AC值加1 10显示器上字符全部左移一格,但光标不动11显示器上字符全部右移一格,但光标不动 (6).功能设定指令指令RSR/WD7D6D5D4D3D2D1D0置功键00001DLNF*功能:设定数据总线位数、显示的行数及字型。参数设定的情况如下: 位名设置 DL0=数据总线为4位1=数据总线为8位 N0=显示1行1=显示2行 F0=57点阵/每字符1=510点阵/每字符 (7).设定CGRAM地址指令指令RSR/WD7D6D5D4D3D2D1D0置字符发生存贮器地址0001字符发生存贮器地址功能:设定下一个要存入数据的CGRAM的地址。(8).设定DDRAM地址指令指令RSR/WD7D6D5D4D3D2D1D0置数据存贮器地址001显示数据存贮器地址功能:设定下一个要存入数据的CGRAM的地址。(9).读取忙信号或AC地址指令指令RSR/WD7D6D5D4D3D2D1D0读忙标志或地址01BF计数器地址功能: 读取忙碌信号BF的内容,BF=1表示液晶显示器忙,暂时无法接收单片机送来的数据或指令;当BF=0时,液晶显示器可以接收单片机送来的数据或指令; 读取地址计数器(AC)的内容。(10).数据写入DDRAM或CGRAM指令一览指令RSR/WD7D6D5D4D3D2D1D0写数到DDRAM或CGRAM10要写的数据内容功能: 将字符码写入DDRAM,以使液晶显示屏显示出相对应的字符; 将使用者自己设计的图形存入CGRAM。(11).从CGRAM或DDRAM读出数据的指令一览指令RSR/WD7D6D5D4D3D2D1D0从CGRAM或DDRAM读数11读出数据内容功能:读取DDRAM或CGRAM中的内容。3.1602LCD基本操作时序:读状态输入RS=L,RW=H,E=H输出D0D7=状态字写指令输入RS=L,RW=L,E=高脉冲,D0D7=指令码输出无读数据输入RS=H,RW=H,E=H输出D0D7=数据写数据输入RS=H,RW=L,E=高脉冲,D0D7=数据输出无3、DS18B20温度传感器介绍传感器DS18B20具有体积更小、精度更高、适用电压更宽、采用一线总线、可组网等优点,在实际应用中取得了良好的测温效果。 美国Dallas半导体公司的数字化温度传感器DS1820是世界上第一片支持 “一线总线”接口的温度传感器,在其内部使用了在板(ON-B0ARD)专利技术。全部传感元件及转换电路集成在形如一只三极管的集成电路内。“一线总线”独特而且经济的特点,使用户可轻松地组建传感器网络,为测量系统的构建引入全新概念。现在,新一代的DS18B20体积更小、更经济、更灵活。使你可以充分发挥“一线总线”的优点。 同DS1820一样,DS18B20也支持“一线总线”接口,测量温度范围为-55C+125C,在-10+85C范围内,精度为0.5C。现场温度直接以“一线总线”的数字方式传输,大大提高了系统的抗干扰性。适合于恶劣环境的现场温度测量,如:环境控制、设备或过程控制、测温类消费电子产品等。与前一代产品不同,新的产品支持3V5.5V的电压范围,使系统设计更灵活、方便。而且新一代产品更便宜,体积更小8。1. DS18B20的特性 9 (1)适应电压范围更宽,电压范围:3.05.5V,寄生电源方式下可由数据线供。(2)独特的单线接口方式,DS18B20在与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯。(3)DS18B20支持多点组网功能,多个DS18B20可以并联在唯一的三线上,实现组网多点测温。(4)DS18B20在使用中不需要任何外围元件,全部传感元件及转换电路集成在形如一只三极管的集成电路内。(5)温范围55125,在-10+85时精度为0.5。(6)可编程的分辨率为912位,对应的可分辨温度分别为0.5、0.25、0.125和0.0625,可实现高精度测温。(7)在9位分辨率时最多在93.75ms内把温度转换为数字,12位分辨率时最多在750ms内把温度值转换为数字,速度更快。(8)测量结果直接输出数字温度信号,以“一线总线”串行传送给CPU,同时可传送CRC校验码,具有极强的抗干扰纠错能力。(9)负压特性:电源极性接反时,芯片不会因发热而烧毁,但不能正常工作。2.DS18B20内部结构及DS18B20的管脚排列64位光刻ROM是出厂前被光刻好的,它可以看作是该DS18B20的地址序列号。不同的器件地址序列号不同。DS18B20内部结构主要由四部分组成:64位光刻ROM,温度传感器,非挥发的温度报警触发器TH和TL,高速暂存器。 DS18B20的引脚定义:(1)DQ为数字信号输入/输出端(2)GND为电源地(3)VDD为外接供电电源输入端(在寄生电源接线方式时接地)(4)NC 空三、系统程序设计/名称:用1602LCD与DS18B20设计的温度报警器(含ROM CODE,温度上下限显示)/说明:本例将报警器温度设为高:70摄氏度,低-20摄氏度,当DS18B20感知温度达到此临界值时,对应的LCD闪烁,且发出报警声音。/本例还可以单独显示DS18B20的ROM CODE及报警温度上下限。#include#include#define uchar unsigned char#define uint unsigned int#define delayNOP() _nop_();_nop_();_nop_();_nop_();sbit HI_LED=P23;sbit LO_LED=P26;sbit DQ=P32;sbit BEEP=P15;sbit RS=P10;sbit RW=P11;sbit EN=P12;sbit k1=P35;sbit k2=P34;sbit k3=P36;uchar code RomCodeStr= - ROM CODE - ;uchar RomCode8=0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00;uchar code Temp_Disp_Title = Current Temp : ;uchar Current_Temp_Display_Buffer = TEMP: ;uchar code Temperature_Char8 = 0x0c,0x12,0x12,0x0c,0x00,0x00,0x00,0x00;uchar code Alarm_Temp = ALARM TEMP Hi Lo;uchar Alarm_HI_LO_STR = Hi: Lo: ;uchar temp_data2 = 0x00,0x00;uchar temp_alarm2 = 0x00,0x00;uchar display5 = 0x00,0x00,0x00,0x00,0x00;uchar display13 = 0x00,0x00,0x00;uchar code df_Table = 0,1,1,2,3,3,4,4,5,6,6,7,8,8,9,9;char Alarm_Temp_HL2 = 20,-20;uchar CurrentT=0;uchar Temp_Value=0x00,0x00;uchar Display_Digit=0,0,0,0;bit HI_Alarm=0,LO_Alarm=0;bit DS18B20_IS_OK =1;uint Time0_Count = 0;void DelayXue(int x)uchar i;while(x-) for(i=0;i200;i+);/uchar Busy_Check()uchar LCD_Status;RS=0;RW=1;EN=1;DelayXue(1);LCD_Status=P0;EN=0;return LCD_Status;void Write_LCD_Command(uchar cmd)while (Busy_Check()&0x80)=0x80);RS=0;RW=0;EN=0;P0=cmd;EN=1;DelayXue(1);EN=0;void Write_LCD_Data(uchar dat)while (Busy_Check()&0x80)=0x80);RS=1;RW=0;EN=0;P0=dat;EN=1;DelayXue(1);EN=0;void Set_LCD_POS(uchar p)Write_LCD_Command(p |0x80);void Initialize_LCD ()Write_LCD_Command(0x38);DelayXue(1);Write_LCD_Command(0x01);DelayXue(1);Write_LCD_Command(0x06);DelayXue(1);Write_LCD_Command(0x0c);DelayXue(1);void Write_NEW_LCD_Char()uchar i;Write_LCD_Command(0x40);for (i=0;i8;i+)Write_LCD_Data(Temperature_Chari);void Delay(uint num)while(-num );/初始化DS18B20uchar Init_DS18B20()uchar status;DQ=1;Delay(8);DQ=0;Delay(90);DQ=1;Delay(8);status=DQ;Delay(100);DQ=1;return status;/初始化成功时返回0/读一字节uchar ReadOneByte()uchar i,dat=0;DQ=1;_nop_();for (i=0;i=1;DQ=1;_nop_();_nop_();if(DQ) dat |=0x80;Delay(30);DQ=1;return dat;/写一字节void WriteOneByte(uchar dat)uchar i;for (i=0;i=1;/读取温度值void Read_Temperature()if(Init_DS18B20() =1)/DS18B20故障DS18B20_IS_OK=0;elseWriteOneByte(0xcc);/跳过序列号WriteOneByte(0x44);/启动温度转换Init_DS18B20();WriteOneByte(0xcc);/跳过序列号WriteOneByte(0xbe);/读取温度寄存器Temp_Value0=ReadOneByte();/温度低8位Temp_Value1=ReadOneByte();/温度高8位Alarm_Temp_HL0=ReadOneByte();/报警温度THAlarm_Temp_HL1=ReadOneByte();/报警温度TLDS18B20_IS_OK=1;/设置DS18B20的温度报警值void Set_Alarm_Temp_Value()Init_DS18B20();WriteOneByte(0xcc);/跳过序列号WriteOneByte(0x4e);/将设定的温度报警值写入DS18B20WriteOneByte(Alarm_Temp_HL0);/写THWriteOneByte(Alarm_Temp_HL1);/写TLWriteOneByte(0x7f);/12位精度Init_DS18B20();WriteOneByte(0xcc);/跳过序列号WriteOneByte(0x48);/温度报警值存入DS18B20void Display_Temperature()uchar i;uchar t =150;uchar ng =0;char Signed_Current_Temp;/if(Temp_Value1&0xF8)=0xF8)Temp_Value1=Temp_Value1;Temp_Value0=Temp_Value0+1;if (Temp_Value0=0x00) Temp_Value1+;ng = 1;Display_Digit0=df_Table Temp_Value0 & 0x0F ;CurrentT=(Temp_Value0 & 0xF0)4)|(Temp_Value1 & 0x07)=Alarm_Temp_HL0?1:0;LO_Alarm = Signed_Current_Temp =Alarm_Temp_HL1?1:0;Display_Digit2=CurrentT/10;Display_Digit1=CurrentT%10;Current_Temp_Display_Buffer10=Display_Digit0+0;Current_Temp_Display_Buffer9=.;Current_Temp_Display_Buffer8=Display_Digit1+0;Current_Temp_Display_Buffer7=Display_Digit2+0;if (Display_Digit2=0) Current_Temp_Display_Buffer8= ;if (ng)if(Current_Temp_Display_Buffer8 = ) Current_Temp_Display_Buffer8 = -; else if(Current_Temp_Display_Buffer7 = ) Current_Temp_Display_Buffer7 = -; else Current_Temp_Display_Buffer6 = -;Set_LCD_POS(0x00);for(i=0;i16;i+) Write_LCD_Data( Temp_Disp_Titlei);Set_LCD_POS(0x40);for(i=0;i14;i+) Write_LCD_Data( Current_Temp_Display_Bufferi );Set_LCD_POS(0x4D);Write_LCD_Data(0xdf);Set_LCD_POS(0x4E);Write_LCD_Data(C);void TO_INT() interrupt 1TH0=-1000/256;TL0=-1000%256;BEEP=!BEEP;if(+Time0_Count=400)Time0_Count=0;if(HI_Alarm) HI_LED=HI_LED;else HI_LED=0;if(LO_Alarm) LO_LED=LO_LED;else LO_LED=0;TR0=0;void Display_Rom_Code()uchar i,t;Set_LCD_POS(0x40);for(i=0;i4);if(t9) t += 0x37;else t +=0;Write_LCD_Data(t);t = RomCodei &0x0F;if(t9) t += 0x37;else t +=0;Write_LCD_Data(t);void Read_Rom_Code()uchar i;Init_DS18B20();WriteOneByte(0x33);for (i=0;i8;i+) RomCodei = ReadOneByte();void Display_RomCode()uchar i;Set_LCD_POS(0x00);for (i=0;i16;i+)Write_LCD_Data(RomCodeStri);Read_Rom_Code();Display_Rom_Code();void Disp_Alarm_Temperature()uchar i,ng;ng=0;if(Alarm_Temp_HL00)Alarm_Temp_HL0=Alarm_Temp_HL0 +1;ng=1;Alarm_HI_LO_STR4=Alarm_Temp_HL0/100+0;Alarm_HI_LO_STR5=Alarm_Temp_HL0/10%10+0;Alarm_HI_LO_STR6=Alarm_Temp_HL0%10+0;if(Alarm_HI_LO_STR4=0) Alarm_HI_LO_STR4= ;if(Alarm_HI_LO_STR4= & Alarm_HI_LO_STR5=0)Alarm_HI_LO_STR5= ;if (ng)if(Alarm_HI_LO_STR5= ) Alarm_HI_LO_STR5=-;elseif(Alarm_HI_LO_STR4= ) Alarm_HI_LO_STR4=-;elseAlarm_HI_LO_STR3=-;ng=0;if(Alarm_Temp_HL10)Alarm_Temp_HL1=Alarm_Temp_HL1+1;ng=1;Alarm_HI_LO_STR12=Alarm_Temp_HL1/100+0;Alarm_HI_LO_STR13=Alarm_Temp_HL1/10%10+0;Alarm_HI_LO_STR14=Alarm_Temp_HL1%10+0;if(Alarm_HI_LO_STR12=0) Alarm_HI_LO_STR12= ;if(Alarm_HI_LO_STR12= & Alarm_HI_LO_STR13=0)Alarm_HI_LO_STR13= ;if (ng)if(Alarm_HI_LO_STR13= ) Alarm_HI_LO_STR13=-;elseif(Alarm_HI_LO_STR12= ) Alarm_HI_LO_STR12=-;elseAlarm_HI_LO_STR11=-;Set_LCD_POS(0x00);for (i=0;i16;i+) Write_LCD_Data(Alarm_Tempi);Set_LCD_POS(0x40);for (i=0;i16;i+) Write_LCD_Data(Alarm_HI_LO_STRi);void main()uchar Current_Operation=1;Initialize_LCD();IE=0x82;TMOD=0x01;TH0=-1000/256;TL0=-1000%256;TR0=0;HI_LED=0;LO_LED=0;Set_Alarm_Temp_Value();Read_Temperature();Delay(50000);Delay(50000);while(1)if(k1=0) Current_Operation =1;if(k2=0) Current_Operation =2;if(k3=0) Current_Operation =3;switch (Current_Operation)case 1:Read_Temperature();if(DS18B20_IS_OK)if(HI_Alarm=1|LO_Alarm=1)TR0=1;else TR0=0;Display_Temperature();DelayXue(100);break;case 2:Read_Temperature();Disp_Alarm_Temperature();DelayXue(100);break;case 3:Display_RomCode();DelayXue(50);break;四、调试与性能分析1 功能说明该温度报警器电路是由但是18B20温度传感器作为温度传感器材,由AT89C2052单片机进行数据处理.,由电脑USB接口供电,也可外接6V16V的直流电源.温度显示(和控制)的范围为:-55到125之间,精度为1,也就是显示整数。如果设定报警的温度为20,则当环境温度达到21时,报警发光二级管发光,同时继电器工作,如果不需要对温度控制(报警),可以将报警温度值设置高些.如果控制的是某局部的温度,可将但是18B20用引线引出,但距离不宜过大,注意其引脚绝缘.2 电路操作说明如电路正常,接通电源后,只显示“”符号,无温度值:按下AN3,先显示上次存贮下来的设定温度(报警控制)值,然后再显示环境温度值,并随环境温度的变化而变化:再按下AN3,温度数字闪烁,得调节:接着按AN1或AN2:按AN1为报警温度值变大,最大为125:按AN2为报警温度值变小,最小为-55:调好后再按一下AN3,调好的报警温度值被存贮,数码管又显示环境温度,当温度达到存贮的报警值时,电路发出报警信号和动作.3 本设计是基于89C52的温度报警器,它可以时实显示当前温度,报警温度,只读编码;设计中有三个按键,其中第一个按键为显示当前温度,第二个按键为报警温度的显示, 第三个按键为只读编码的显示。五、源程序清单主函数 void main() uchar Current_Operation=1; Initialize_LCD(); IE=0x82; TMOD=0x01; TH0=-1000/256; TL0=-1000%256; TR0=0; HI_LED=0; LO_LED=0; Set_Alarm_Temp_Value(); Read_Temperature(); Delay(50000); Delay(50000); while(1) if(k1=0) Current_Operation =1; if(k2=0) Current_Operation =2; if(k3=0) Current_Operation =3; switch (Current_Operation) case 1: Read_Temperature(); if(DS18B20_IS_OK) if(HI_Alarm=1|LO_Alarm=1)TR0=1; else TR0=0; Display_Temperature(); DelayXue(100); break; case 2: Read_Temperature(); Disp_Alarm_Temperature(); DelayXue(100); break; case 3: Display_RomCode(); DelayXue(50); break; 液晶显示控制函数void Write_LCD_Command(uchar cmd)while (Busy_Check(

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论