首页 单片机温度传感器设计报告

单片机温度传感器设计报告

举报
开通vip

单片机温度传感器设计报告泰州职业技术学院 电子与信息工程系 课程名称: 51单片机开发 课题名称:用1602LCD与DS18B20设计的温度报警器 班 级: 10信息 课题小组成员: 林淑云 朱翠竹 刘苏慧 指导老师: 蔡菁 摘要 现代社会是信息社会,随着现代农业技术的发展及人们对生活环境要求的提高,人们也迫切需要检测与控制温度,所以对于温...

单片机温度传感器设计报告
泰州职业技术学院 电子与信息 工程 路基工程安全技术交底工程项目施工成本控制工程量增项单年度零星工程技术标正投影法基本原理 系 课程名称: 51单片机开发 课题名称:用1602LCD与DS18B20设计的温度报警器 班 级: 10信息 课题小组成员: 林淑云 朱翠竹 刘苏慧 指导老师: 蔡菁 摘要 现代社会是信息社会,随着现代农业技术的发展及人们对生活环境要求的提高,人们也迫切需要 检测 工程第三方检测合同工程防雷检测合同植筋拉拔检测方案传感器技术课后答案检测机构通用要求培训 与控制温度,所以对于温度的测量控制具有十分重要的意义。 随着全球温度的普遍升高,高温火灾更是无处不在:电气线路短路、过载、接触电阻过大等引发高温火灾;静电产生高温火灾;雷电等强电入侵导致高温火灾;最主要是机房内电脑、空调等用电设备长时间工作,导致设备老化,空调发生故障,而不能降温。因此,机房内所属的电子产品发热快,在短时间内机房温度升高超出设备正常温度,导致系统瘫痪或产生火灾,这时温度报警系统就会发挥应有的功能。 本课题介绍的就是利用温度传感DS18B20制作的温度报警器,自动测量当前环境温度。由单片机AT89C52控制,并通过1602LCD显示,若当前环境温度超过此温度,系统发出报警。 目 录 一、系统总体设计要求 二、系统硬件设计 三、系统程序设计 四、调试与性能分析 五、源程序清单 六、 心得体会 决胜全面小康心得体会学党史心得下载党史学习心得下载军训心得免费下载党史学习心得下载 一、系统总体设计要求 1. 本设计采用集成温度传感器的的s18b20,设计一个数字显示的温度报警器。定安全温度值范围为20°C~30°C(可根据具体需要在程序中进行调整),对在这一范围内的温度变化采集后送入A/D转换器,A/D转换器的模拟电压范围为0~5V。例如传感器采集的温度为25°C,则对应液晶显示器的显示值为25°C。而温度高出30°C或者低于20°C时,不在安全温度范围之内,喇叭会进行报警、二极管发光显示 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的一些特殊功能口,如下 关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf 所示: 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).清屏指令 指令 RS R/W D7 D6 D5 D4 D3 D2 D1 D0 清显示 0 0 0 0 0 0 0 0 0 1 功能:<1> 清除液晶显示器,即将DDRAM的内容全部填入"空白"的ASCII码20H; <2> 光标归位,即将光标撤回液晶显示屏的左上方; <3> 将地址计数器(AC)的值设为0。 (2).光标归位指令 指令 RS R/W D7 D6 D5 D4 D3 D2 D1 D0 光标返回 0 0 0 0 0 0 0 0 1 * 功能:<1> 把光标撤回到显示器的左上方; <2> 把地址计数器(AC)的值设置为0; <3> 保持DDRAM的内容不变。 (3).进入模式设置指令 指令 RS R/W D7 D6 D5 D4 D3 D2 D1 D0 置输入模式 0 0 0 0 0 0 0 1 I/D S 功能:设定每次定入1位数据后光标的移位方向,并且设定每次写入的一个字符是否移动。参数设定的情况如下所示: 位名 设置 I/D 0=写入新数据后光标左移 1=写入新数据后光标右移 S 0=写入新数据后显示屏不移动 1=写入新数据后显示屏整体右移1个字符 (4).显示开关控制指令 指令 RS R/W D7 D6 D5 D4 D3 D2 D1 D0 显示开/关控制指令 0 0 0 0 0 0 1 D C B 功能:控制显示器开/关、光标显示/关闭以及光标是否闪烁。参数设定的情况如下: 位名 设置 D 0=显示功能关 1=显示功能开 C 0=无光标 1=有光标 B 0=光标闪烁 1=光标不闪烁 (5).设定显示屏或光标移动方向指令 指令 RS R/W D7 D6 D5 D4 D3 D2 D1 D0 光标或字符移位 0 0 0 0 0 1 S/C R/L * * 功能:使光标移位或使整个显示屏幕移位。参数设定的情况如下: S/C R/L 设定情况 0 0 光标左移1格,且AC值减1 0 1 光标右移1格,且AC值加1 1 0 显示器上字符全部左移一格,但光标不动 1 1 显示器上字符全部右移一格,但光标不动 (6).功能设定指令 指令 RS R/W D7 D6 D5 D4 D3 D2 D1 D0 置功键 0 0 0 0 1 DL N F * * 功能:设定数据总线位数、显示的行数及字型。参数设定的情况如下: 位名 设置 DL 0=数据总线为4位 1=数据总线为8位 N 0=显示1行 1=显示2行 F 0=5×7点阵/每字符 1=5×10点阵/每字符 (7).设定CGRAM地址指令 指令 RS R/W D7 D6 D5 D4 D3 D2 D1 D0 置字符发生存贮器地址 0 0 0 1 字符发生存贮器地址 功能:设定下一个要存入数据的CGRAM的地址。 (8).设定DDRAM地址指令 指令 RS R/W D7 D6 D5 D4 D3 D2 D1 D0 置数据存贮器地址 0 0 1 显示数据存贮器地址 功能:设定下一个要存入数据的CGRAM的地址。 (9).读取忙信号或AC地址指令 指令 RS R/W D7 D6 D5 D4 D3 D2 D1 D0 读忙标志或地址 0 1 BF 计数器地址 功能:<1> 读取忙碌信号BF的内容,BF=1表示液晶显示器忙,暂时无法接收单片机送来的数据或指令;当BF=0时,液晶显示器可以接收单片机送来的数据或指令; <2> 读取地址计数器(AC)的内容。 (10).数据写入DDRAM或CGRAM指令一览 指令 RS R/W D7 D6 D5 D4 D3 D2 D1 D0 写数到DDRAM或CGRAM 1 0 要写的数据内容 功能:<1> 将字符码写入DDRAM,以使液晶显示屏显示出相对应的字符; <2> 将使用者自己设计的图形存入CGRAM。 (11).从CGRAM或DDRAM读出数据的指令一览 指令 RS R/W D7 D6 D5 D4 D3 D2 D1 D0 从CGRAM或DDRAM读数 1 1 读出数据内容 功能:读取DDRAM或CGRAM中的内容。 3.1602LCD基本操作时序: 读状态 输入 RS=L,RW=H,E=H 输出 D0~D7=状态字 写指令 输入 RS=L,RW=L,E=高脉冲,D0~D7=指令码 输出 无 读数据 输入 RS=H,RW=H,E=H 输出 D0~D7=数据 写数据 输入 RS=H,RW=L,E=高脉冲,D0~D7=数据 输出 无 3、DS18B20温度传感器介绍 传感器DS18B20具有体积更小、精度更高、适用电压更宽、采用一线总线、可组网等优点,在实际应用中取得了良好的测温效果。 美国Dallas半导体公司的数字化温度传感器DS1820是世界上第一片支持 “一线总线”接口的温度传感器,在其内部使用了在板(ON-B0ARD)专利技术。全部传感元件及转换电路集成在形如一只三极管的集成电路内。“一线总线”独特而且经济的特点,使用户可轻松地组建传感器网络,为测量系统的构建引入全新概念。现在,新一代的DS18B20体积更小、更经济、更灵活。使你可以充分发挥“一线总线”的优点。 同DS1820一样,DS18B20也支持“一线总线”接口,测量温度范围为-55°C~+125°C,在-10~+85°C范围内,精度为±0.5°C。现场温度直接以“一线总线”的数字方式传输,大大提高了系统的抗干扰性。适合于恶劣环境的现场温度测量,如:环境控制、设备或过程控制、测温类消费电子产品等。与前一代产品不同,新的产品支持3V~5.5V的电压范围,使系统设计更灵活、方便。而且新一代产品更便宜,体积更小[8]。 1. DS18B20的特性 [9] (1)适应电压范围更宽,电压范围:3.0~5.5V,寄生电源方式下可由数据线供。 (2)独特的单线接口方式,DS18B20在与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯。 (3)DS18B20支持多点组网功能,多个DS18B20可以并联在唯一的三线上,实现组网多点测温。 (4)DS18B20在使用中不需要任何外围元件,全部传感元件及转换电路集成在形如一只三极管的集成电路内。 (5)温范围-55℃~+125℃,在-10~+85℃时精度为±0.5℃。 (6)可编程的分辨率为9~12位,对应的可分辨温度分别为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=P2^3; sbit LO_LED=P2^6; sbit DQ=P3^2; sbit BEEP=P1^5; sbit RS=P1^0; sbit RW=P1^1; sbit EN=P1^2; sbit k1=P3^5; sbit k2=P3^4; sbit k3=P3^6; uchar code RomCodeStr[]={" -- ROM CODE -- "}; uchar RomCode[8]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; uchar code Temp_Disp_Title[] = {" Current Temp : "}; uchar Current_Temp_Display_Buffer[] = {" TEMP: "}; uchar code Temperature_Char[8] = {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_data[2] = {0x00,0x00}; uchar temp_alarm[2] = {0x00,0x00}; uchar display[5] = {0x00,0x00,0x00,0x00,0x00}; uchar display1[3] = {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_HL[2] = {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;i<200;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;i<8;i++) Write_LCD_Data(Temperature_Char[i]); } void Delay(uint num) { while(--num ); } //初始化DS18B20 uchar 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<8;i++) { DQ=0;dat >>=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<8;i++) { DQ=0;DQ=dat&0x01;Delay(5);DQ=1;dat>>=1; } } //读取温度值 void Read_Temperature() { if(Init_DS18B20() ==1) //DS18B20故障 DS18B20_IS_OK=0; else { WriteOneByte(0xcc); //跳过序列号 WriteOneByte(0x44); //启动温度转换 Init_DS18B20(); WriteOneByte(0xcc); //跳过序列号 WriteOneByte(0xbe); //读取温度寄存器 Temp_Value[0]=ReadOneByte(); //温度低8位 Temp_Value[1]=ReadOneByte(); //温度高8位 Alarm_Temp_HL[0]=ReadOneByte(); //报警温度TH Alarm_Temp_HL[1]=ReadOneByte(); //报警温度TL DS18B20_IS_OK=1; } } //设置DS18B20的温度报警值 void Set_Alarm_Temp_Value() { Init_DS18B20(); WriteOneByte(0xcc); //跳过序列号 WriteOneByte(0x4e); //将设定的温度报警值写入DS18B20 WriteOneByte(Alarm_Temp_HL[0]); //写TH WriteOneByte(Alarm_Temp_HL[1]); //写TL WriteOneByte(0x7f); //12位精度 Init_DS18B20(); WriteOneByte(0xcc); //跳过序列号 WriteOneByte(0x48); //温度报警值存入DS18B20 } void Display_Temperature() { uchar i; uchar t =150; uchar ng =0; char Signed_Current_Temp; // if((Temp_Value[1]&0xF8)==0xF8) { Temp_Value[1]=~Temp_Value[1]; Temp_Value[0]=~Temp_Value[0]+1; if (Temp_Value[0]==0x00) Temp_Value[1]++; ng = 1; } Display_Digit[0]=df_Table[ Temp_Value[0] & 0x0F ]; CurrentT=((Temp_Value[0] & 0xF0)>>4)|((Temp_Value[1] & 0x07)<<4); Signed_Current_Temp = ng? -CurrentT:CurrentT; HI_Alarm = Signed_Current_Temp >=Alarm_Temp_HL[0]?1:0; LO_Alarm = Signed_Current_Temp <=Alarm_Temp_HL[1]?1:0; Display_Digit[2]=CurrentT/10; Display_Digit[1]=CurrentT%10; Current_Temp_Display_Buffer[10]=Display_Digit[0]+'0'; Current_Temp_Display_Buffer[9]='.'; Current_Temp_Display_Buffer[8]=Display_Digit[1]+'0'; Current_Temp_Display_Buffer[7]=Display_Digit[2]+'0'; if (Display_Digit[2]==0) Current_Temp_Display_Buffer[8]=' '; if (ng) { if(Current_Temp_Display_Buffer[8] == ' ') Current_Temp_Display_Buffer[8] = '-'; else if(Current_Temp_Display_Buffer[7] == ' ') Current_Temp_Display_Buffer[7] = '-'; else Current_Temp_Display_Buffer[6] = '-'; } Set_LCD_POS(0x00); for(i=0;i<16;i++) Write_LCD_Data( Temp_Disp_Title[i]); Set_LCD_POS(0x40); for(i=0;i<14;i++) Write_LCD_Data( Current_Temp_Display_Buffer[i] ); Set_LCD_POS(0x4D);Write_LCD_Data(0xdf); Set_LCD_POS(0x4E);Write_LCD_Data('C'); } void TO_INT() interrupt 1 { TH0=-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;i<8;i++) { t=((RomCode[i]&0xF0)>>4); if(t>9) t += 0x37;else t +='0'; Write_LCD_Data(t); t = RomCode[i] &0x0F; if(t>9) t += 0x37;else t +='0'; Write_LCD_Data(t); } } void Read_Rom_Code() { uchar i; Init_DS18B20(); WriteOneByte(0x33); for (i=0;i<8;i++) RomCode[i] = ReadOneByte(); } void Display_RomCode() { uchar i; Set_LCD_POS(0x00); for (i=0;i<16;i++) Write_LCD_Data(RomCodeStr[i]); Read_Rom_Code(); Display_Rom_Code(); } void Disp_Alarm_Temperature() { uchar i,ng; ng=0; if(Alarm_Temp_HL[0]<0) { Alarm_Temp_HL[0]=~Alarm_Temp_HL[0] +1; ng=1; } Alarm_HI_LO_STR[4]=Alarm_Temp_HL[0]/100+'0'; Alarm_HI_LO_STR[5]=Alarm_Temp_HL[0]/10%10+'0'; Alarm_HI_LO_STR[6]=Alarm_Temp_HL[0]%10+'0'; if(Alarm_HI_LO_STR[4]=='0') Alarm_HI_LO_STR[4]=' '; if(Alarm_HI_LO_STR[4]==' ' && Alarm_HI_LO_STR[5]=='0') Alarm_HI_LO_STR[5]=' '; if (ng) { if(Alarm_HI_LO_STR[5]==' ') Alarm_HI_LO_STR[5]='-'; else if(Alarm_HI_LO_STR[4]==' ') Alarm_HI_LO_STR[4]='-'; else Alarm_HI_LO_STR[3]='-'; } ng=0; if(Alarm_Temp_HL[1]<0) { Alarm_Temp_HL[1]=~Alarm_Temp_HL[1]+1; ng=1; } Alarm_HI_LO_STR[12]=Alarm_Temp_HL[1]/100+'0'; Alarm_HI_LO_STR[13]=Alarm_Temp_HL[1]/10%10+'0'; Alarm_HI_LO_STR[14]=Alarm_Temp_HL[1]%10+'0'; if(Alarm_HI_LO_STR[12]=='0') Alarm_HI_LO_STR[12]=' '; if(Alarm_HI_LO_STR[12]==' ' && Alarm_HI_LO_STR[13]=='0') Alarm_HI_LO_STR[13]=' '; if (ng) { if(Alarm_HI_LO_STR[13]==' ') Alarm_HI_LO_STR[13]='-'; else if(Alarm_HI_LO_STR[12]==' ') Alarm_HI_LO_STR[12]='-'; else Alarm_HI_LO_STR[11]='-'; } Set_LCD_POS(0x00); for (i=0;i<16;i++) Write_LCD_Data(Alarm_Temp[i]); Set_LCD_POS(0x40); for (i=0;i<16;i++) Write_LCD_Data(Alarm_HI_LO_STR[i]); } 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接口供电,也可外接6V~16V的直流电源.温度显示(和控制)的范围为:-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()&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 TO_INT() interrupt 1 { TH0=-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; } } DS18B20报警函数 void Set_Alarm_Temp_Value() { Init_DS18B20(); WriteOneByte(0xcc); //跳过序列号 WriteOneByte(0x4e); //将设定的温度报警值写入DS18B20 WriteOneByte(Alarm_Temp_HL[0]); //写TH WriteOneByte(Alarm_Temp_HL[1]); //写TL WriteOneByte(0x7f); //12位精度 Init_DS18B20(); WriteOneByte(0xcc); //跳过序列号 WriteOneByte(0x48); //温度报警值存入DS18B20 } 六、心得体会 在本次毕业设计的过程中,发现很多的问题,虽然以前还做过类似这样的课程设计,但这次毕业设计,从一无所有到最终产品的完成真的是一个很难的过程.我们不仅要选好材料,还要学着把这些材料合理的组织起来,所以我们要学会如何寻找和搜索自己需要的电路图,而且还要知道各个部分的作用.每个环节都不是一样简单的事.通过这次设计,也学到了许多,了解了传感器能够把自然界的各种非电量转换为电信号的物理思想,并且可将报警装置应用到与自己专业相关的行业中去.有好多的东西,只有我们去试着做了,才能真正的掌握,只学习理论有些东西是很难理解的,更谈不上掌握,因此要理论与实践并重. 从这次的毕业论文设计中,我们真正的意识到,在以后的学习中,要理论联系实践,把我们所学的理论知识用到实际当中,实践是检验真理的唯一标准.我们电子专业的学习更是如此,不仅要有丰富的理论知识,还要有很强的动手能力,只有理论与实践并重,我们的专业水平才能提高,这就是我们在这次毕业设计中的最大收获. 最后要感谢老师们在毕业设计过程中对我们毕业生的关心和支持! 其次要向同班同学们表示感谢,在我们遇到困难的时候,他们能够帮助我,俗话说,三个臭皮匠顶个诸葛亮,在大家你一点我一点的帮助下,我们才能顺利完成这次设计,感谢同窗好友们! _1234567890.vsd 按键 主控芯片 (89C52) LCD显示 蜂鸣器
本文档为【单片机温度传感器设计报告】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
机构认证用户
金水文库
鑫淼网络科技有限公司主要经营:PPT设计 、课件制作,软文策划、合同简历设计、计划书策划案、各类模板等。公司秉着用户至上的原则服务好每一位客户
格式:doc
大小:394KB
软件:Word
页数:32
分类:企业经营
上传时间:2019-01-30
浏览量:27