收藏 分销(赏)

课程设计报告基于--单片机温度监测系统.doc

上传人:二*** 文档编号:4572232 上传时间:2024-09-30 格式:DOC 页数:23 大小:400.50KB 下载积分:5 金币
下载 相关 举报
课程设计报告基于--单片机温度监测系统.doc_第1页
第1页 / 共23页
本文档共23页,全文阅读请下载到手机保存,查看更方便
资源描述
- . 目录 一.前言1 二.根本功能与参数2 2.1系统根本功能2 2.2 参数2 三.系统总体设计2 四.硬件设计3 4.1 单片机最小系统设计3 4.1.1 电源电路3 4.1.2 振荡电路与复位电路3 4.2 DS18B20与单片机的接口电路4 4.3独立式键盘电路4 4.4报警模块5 4.5 数码管显示模块5 4.6 PROTEUS仿真图6 4.7 DS18B20简单介绍6 五.软件设计7 5.1 主程序流程图8 5.2读出温度子程序8 5.3温度转换命令子程序9 5.4计算温度子程序10 5.5按键扫描处理子程序11 六.心得及体会:11 参考文献:12 附录Ⅰ元件清单12 附录Ⅱ总体电路图13 附录Ⅲ源程序14 基于单片机的温度检测系统设计 孟祥柱 航空航天大学自动化学院 摘要:随着时代的进步和开展,单片机技术已经普及到我们生活、工作、科研等各个领域,已经成为一种比拟成熟的技术。本文主要设计了一个基于AT89C51单片机的温度监测系统,详细描述了利用数字传感器DS18B120完成监测温度的过程,重点对系统的硬件连接,软件编程,各模块系统流程以及各局部的电路进展了分析介绍。本设计是以AT89C51为核心,通过温度传感器DS18B20将温度值转换为电量输出,可以利用小键盘设定温度的最大值和最小值,对于超过最大值或者最小值的温度数据通过红黄灯进展报警,所以这个系统使用起来相当方便,具有精度高、量程宽、灵敏度高、体积小、功耗低等优点,适合我们日常生活和工、农业生产中的温度测量,具有广泛的应用前景。 关键词:单片机AT89C51;温度采集;温度传感器DS18B20;报警功能 一.前言 传统的温度检测以热敏电阻为温度敏感元件。热敏电阻的本钱低,但需后续信号处理电路,而且可靠性相对较差,测温准确度低,检测系统也有一定的误差。这里设计的数字温度计具有读数方便,测温围广,测温准确,数字显示,适用围宽等特点。本设计选用STC89C52型单片机作为主控制器件,DS18B20作为测温传感器,通过LED数码管实现温度显示。通过DS18B20直接读取被测温度值,进展数据转换,该器件的物理化学性能稳定,线性度较好,在0℃~100℃最大线性偏差小于0.01℃。该器件可直接向单片机传输数字信号,便于单片机处理及控制。另外,该温度计还能直接采用测温器件测量温度,从而简化数据传输与处理过程。 二. 根本功能与参数 2.1系统根本功能 a.实现温度的实时测量与显示。 b.可手动设置监测温度围的上限和下限。 c.超出温度监测围,可进展声光报警或执行预定操作。 2.2 参数 a. DS18B20 的温度测量围为-55°C~+125°C,在-20°C~+60°C 围,精度为±0.5°C b.显示温度值准确到0.1°C,监测温度准确到1°C c.精度误差小于0.5℃ 三.系统总体设计 本设计的温度测量报警系统以STC89C52 单片机为核心部件,外加温度采集电路、键盘及显示电路、越限报警等电路。采用数字温度芯片DS18B20 测量温度,输出信号全数字化。由数字温度计DS18B20和STC89C52单片机构成的温度测量装置,它直接输出温度的数字信号。利用STC89S52芯片控制温度传感器DS18B20进展实时温度检测并显示,快速测量环境温度,并可以根据需要设定上下限温度。系统框图如图1所示。 时钟振荡电路 STC89C52 复位电路 电源电路 LED报警显示 LED数码管显示 蜂鸣器报警 键盘调整控制模块 DS18B20 温度传感器 图1 DS18B20温度测温系统框图 四.硬件设计 4.1 单片机最小系统设计 4.1.1 电源电路 图2 电源电路 4.1.2 振荡电路与复位电路 晶振采用12MHZ。复位电路采用上电加按钮复位。 图3 振荡电路图4 复位电路 4.2 DS18B20与单片机的接口电路 图5 DS18B20与单片机的接口电路 4.3独立式键盘电路 图6 独立式键盘电路 4.4报警模块 图7 报警电路 4.5 数码管显示模块 显示电路采用4位共阴极LED数码管,P0口由上拉电阻提高驱动能力,作为段码输出并作为数码管的驱动。P2口的低四位作为数码管的位选端。采用动态扫描的方式显示。 图8 数码管显示电路 4.6 proteus仿真图 图9 proteus仿真图 4.7 DS18B20简单介绍 DS18B20 的性能特点如下 ●独特的单线接口方式,DS18B20在与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯 ●DS18B20支持多点组网功能,多个DS18B20可以并联在唯一的三线上,实现组网多点测温 ●DS18B20在使用中不需要任何外围元件,全部传感元件及转换电路集成在形如一只三极管的集成电路 ●适应电压围更宽,电压围:3.0~5.5V,在寄生电源方式下可由数据线供电 ●温围-55℃~+125℃,在-10~+85℃时精度为±0.5℃ ●零待机功耗 ●可编程的分辨率为9~12位,对应的可分辨温度分别为0.5℃、0.25℃、0.125℃和0.0625℃,可实现高精度测温 ●在9位分辨率时最多在93.75ms把温度转换为数字,12位分辨率时最多在750ms把温度值转换为数字,速度更快 ●用户可定义报警设置 ●报警搜索命令识别并标志超过程序限定温度〔温度报警条件〕的器件 ●测量结果直接输出数字温度信号,以"一线总线"串行传送给CPU,同时可传送CRC校验码,具有极强的抗干扰纠错能力 ●负电压特性,电源极性接反时,温度计不会因发热而烧毁,但不能正常工作 DS18B20部构造主要由四局部组成:64位光刻ROM、温度传感器、非挥发的温度报警触发器TH和TL、配置存放器。DS18B20的管脚排列、各种封装形式如图11所示,DQ 为数据输入/输出引脚。开漏单总线接口引脚。当被用着在寄生电源下,也可以向器件提供电源;GND为地信号;VDD为可选择的VDD引脚。当工作于寄生电源时,此引脚必须接地。 图10外部封装形式 五. 软件设计 系统程序主要包括主程序、读取温度子程序、温度转换命令子程序、计算温度子程序、按键扫描处理子程序、显示数据子程序等。 5.1 主程序流程图 主程序的主要功能是负责温度的实时显示、读出并处理DS18B20的测量的当前温度值,温度测量每1s进展一次。这样可以在一秒之测量一次被测温度,其程序流程见图11所示。 初始化 读取温度 SET键是否按下 读出温度值温度计算处理显示数据刷新 发温度转换开场命令 N Y 调用显示子程序 设置报警温度 图11 主程序流程图 5.2读出温度子程序 读出温度子程序的主要功能是读出RAM中的9字节,在读出时需进展CRC校验,校验有错时不进展温度数据的改写。其程序流程图如图12所示。 5.3温度转换命令子程序 温度转换命令子程序主要是发温度转换开场命令,当采用12位分辨率时转换时间约为750ms,在本程序设计中采用1s显示程序延时法等待转换的完成。温度转换命令子程序流程图如上图,图13所示。 Y 发DS18B20复位命令 发跳过ROM命令 发读取温度命令 读取操作,CRC校验 9字节完? CRC校验正?确? 移入温度暂存器 完毕  N N Y 发DS18B20复位命令 发跳过ROM命令 发温度转换开场命令 完毕 图12 读温度流程图 图13 温度转换流程图 5.4计算温度子程序 计算温度子程序将RAM中读取值进展BCD码的转换运算,并进展温度值正负的判定,其程序流程图如图14所示。 开场 温度零下? 温度值取补码置“1〞标志 计算小数位温度BCD值 计算整数位温度BCD值 完毕 置“0〞标志 N Y 图14 计算温度流程图 5.5按键扫描处理子程序 按键采用扫描查询方式,设置标志位,当标志位为1时,显示设置温度,否那么显示当前温度。 如下列图15示。 SET键按下 ADD键按下 DEC键按下 显示切换标志位是否为“0〞 调用显示子程序 报警温度加1 报警温度减1 Y N Y N Y N 图15 按键扫描处理子程序 六.心得及体会: 此次实习我用单片机做一个完整的系统,在完成的过程中走了很多弯路,比方由于对硬件方面的东西尚不熟,查阅资料以及准备材料时都没有考虑到实践的可行性,在这里要特别感实验室的教师给予了我们耐心的指导,并给我们提出了建立性的意见。在本次设计的过程中,我发现很多的问题,虽然以前还做过这样的设计但这次设计真的让我长进了很多,,虽然以前写过几次程序,但我觉的写好一个程序并不简单。正是通过这些弯路我们才真正学到了不少东西。在做系统的同时,和同学们之间的相互探讨也使我获益匪浅。我们必须学会独立思考,用自己的能力去完成一件作品。有好多的东西,只有我们去试着做了,才能真正的掌握。 参考文献: [1]鑫. 单片机原理与应用 电子工业 2021.1 [2]马忠梅,凯,等. 单片机的C语言应用程序设计(第四版) 航空航天大学 [3]包建华,兴奎等.单片机原理实验与实训教程 东南大学 2021.9 [4] 文涛.单片机语言C51典型应用设计. :人民邮电,1998 [5] 勇,宇.μVision2单片机应用程序开发指南. :科学,1998 [6] 蔡朝洋.单片机控制实习与专题制作. :航天航空大学出社,2000 [7] 复华. 单片机及其应用系统. :清华大学,1992 [8] 为. 单片机典型系统设计实例精讲及其应用系统. :电子工业,2006 [9] 斌,董慧颖. 可重组机器人研究和开展现状. 工业学院学报,2000,19〔4〕:23-27 [10] 道德.单片机接口技术〔C51版〕.:水利水电,1995 附录Ⅰ 元件清单 元件名称 型号 数量 单片机 AT89C51 1 电平转换芯片 74HC573 2 数码管 7SEG-MPX4-CA 1 按键 BUTTON 4 电阻 RES 2 附录Ⅱ总体电路图 附录Ⅲ 源程序 源程序如下 #include<reg52.h> #define uint unsigned int #define uchar unsigned char sbit ds = P2^0 ; sbit dula = P2^6 ; sbit wela = P2^7 ; sbit beep = P2^1 ; sbit SET1 = P2^2; //定义上限显示调整键 sbit DEC = P2^3; //定义增加减少键 sbit ADD = P2^4; //定义增加减少键 sbit SET2= P2^5; //定义下限显示调整键 int temp ; float f_temp ; int warn_l1 = 50 ; int warn_l2 = 0 ; int warn_h1 = 300 ; int warn_h2 = 1000 ; /************************xian shi *********************/ uchar code table[] = { 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f, 0xbf,0x86,0xdb,0xcf, 0xe6,0xed,0xfd,0x87, 0xff,0xef, 0x40 }; void delay(int z) { int a,b ; for(a = 0;a < z ;a++) for(b = 0;b < 120; b++); } void display(uchar num , uchar dat) { uchar i; dula = 0; wela = 0; wela = 1; i = 0x00; i = i | (~(((0x01)<<(num)))); P0 = i; wela = 0; dula = 1; P0 = table[dat]; dula = 0; P0 = 0xff; dula = 0; delay(3); } void dis_temp(int t) { uchar i; i = t/100; display(1,i); i = t%100/10; display(2,i+10); i = t%100%10; display(3,i); delay(5); } /******************************ds18b20 **********************/ void ds_reset() { uint i; ds = 0; i = 103; while(i>0) i--; ds = 1; i = 4; while(i>0) i--; } uchar temp_readbit(void) { uint i; bit dat; ds = 0; i++; ds = 1; i++;i++;i++; dat = ds; i = 8;while(i>0)i--; return(dat); } uchar temp_read(void) { uchar i,j,dat; dat = 0; for(i = 0;i < 8;i++) { j = temp_readbit(); dat = (j << 7)|(dat >> 1); } return(dat); } void temp_write(uchar dat) { uint i; uchar j; bit testb; for(j = 1;j<=8;j++) { testb = dat & 0x01; dat = dat >> 1; if(testb) { ds = 0; i++;i++;i++; ds = 1; i =8;while(i>0)i--; } else { ds = 0; i = 8;while(i>0)i--; ds = 1; i++;i++; } } } void temp_change(void) { ds_reset(); delay(1); temp_write(0xcc); temp_write(0x44); } uint get_temp() { uchar a,b; EA = 0; ds_reset(); delay(1); temp_write(0xcc); temp_write(0xbe); a = temp_read(); b = temp_read(); temp = b; temp <<=8; temp = temp | a; f_temp = temp * 0.0625; temp = f_temp*10+0.5; f_temp =f_temp + 0.05; return temp; } /****************************定时器初始化 *****************/ void init_(void) { TMOD = 0X01; PCON = 0X00; SCON = 0X50; TH0 = (65536-10000)/256; TL0 = (65536-10000)%256; EA = 1; ET0 = 1; TR0 = 1; } /****************报警**************************************/ void warn(uint s,uchar led) { uchar i; i = s; beep = 0; P1 = ~(led); while(i--) { dis_temp(get_temp()); } beep = 1; P1 = 0xff; i = s; while(i--) { dis_temp(get_temp()); } } void deal(int t) { uchar i; if((t > warn_l2)&&(t <= warn_l1)) { warn(10,0x01); } else if(t <= warn_l2) { warn(1,0x02); } else if((t <= warn_h2)&&(t >= warn_h1)) { warn(10,0x04); } else if(t >= warn_h2) { warn(1,0x08); } else { i = 40; while(i--) { dis_temp(get_temp()); } } } /********************报 警 监 测 显 示 ********************/ void bjxs(int a) { int x,y,z; x=a/100; //计算得到shi位数字 display(5,x); y=a/10-x*10; //计算得到ge位数字 display(6,y+10); z=a-x*100-y*10; //计算得到xiao数 display(7,z); } /*******************************键盘 扫描*********************/ void key() { if(SET1 == 0) { delay(100); if(SET1 == 0) { while(SET1 == 0) { bjxs( warn_h1); if(ADD==0&&SET1==0) { if(ADD==0&&SET1==0) { while(ADD==0) bjxs( warn_h1); warn_h1 = warn_h1+10; if(warn_h1>1000) warn_h1 = 1000; bjxs( warn_h1); } } else if(DEC==0&&SET1==0) { if(DEC==0&&SET1==0) { while(DEC==0) bjxs( warn_h1); warn_h1 = warn_h1-10; if(warn_l1>warn_h1) warn_h1=warn_l1; bjxs( warn_h1); } } } } } if(SET2 == 0) { delay(100); if(SET2 == 0) { while(SET2 == 0) { bjxs( warn_l1); if(ADD==0&&SET2==0) { if(ADD==0&&SET2==0) { while(ADD==0) bjxs( warn_l1); warn_l1 = warn_l1+10; if(warn_l1>warn_h1) warn_l1 = warn_h1; bjxs( warn_l1); } } else if(DEC==0&&SET2==0) { if(DEC==0&&SET2==0) { while(DEC==0) bjxs( warn_l1); warn_l1 = warn_l1-10; if(warn_l1<0) warn_l1=0; bjxs( warn_l1); } } } } } } void scan() { int i; temp_change(); deal(temp); for(i = 0;i < 10;i++) { dis_temp(get_temp()); } EA = 1; } void timer0(void)interrupt 1 { key(); TH0 = (65536-10000)/256; TL0 = (65536-10000)%256; } void main() { dula = 0; wela = 0; init_(); while(1) { scan(); } } . word.zl.
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

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

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服