版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、题 目 基于DS18B20的智能温度检测系统 学 号 * 姓 名 转载请注明出处 所 属 系 机械工程学院 专 业 电子信息工程 班 级 10级电信本一班 指导教师 熊春如 基于DS18B20的智能温度检测系统的设计 摘 要在这次设计中,1.用STC89C52控制DS18B20,读取数据,并对DS18B20转换后的数据进行处理,最后在数码管上显示DS18B20测出的温度。2.使用4位数码管显示,最高位为符号位,如果温度值为正,不显示,如果温度为负,则显示负号。3.测量的温度上限到99度,下限超过50度。4.温度的测量值要精确到小数点的后1位。4.能设置上限温度和下限温度值,当被测量温度在上限温
2、度和下限温度值之间时下四位灯全亮代表绿色LED亮,当被测量温度在上限温度和下限温度值之外时上四位灯全亮代表红色LED亮,并蜂鸣器报警。6.设置的上限温度和下限温度值能够断电后保存(EEPROM)。7.实现上述功能人机界面简单。关键字:DS18B20; 数码管; 单片机; 目 录TOC o 1-3 h u HYPERLINK l _Toc311828600 摘 要 PAGEREF _Toc311828600 h 1 HYPERLINK l _Toc311828606 1整体设计方案3 HYPERLINK l _Toc311828610 1.1系统设计结构图3 HYPERLINK l _Toc31
3、1828611 2智能温度检测系统的硬件设计4 HYPERLINK l _Toc311828611 3 智能温度检测系统的软件设计5 HYPERLINK l _Toc311828612 3.1 各个程序流程图5 HYPERLINK l _Toc311828613 主程序流程图6 HYPERLINK l _Toc311828614 3. 定时器0流程图6 HYPERLINK l _Toc311828615 3.定时器1流程图7 HYPERLINK l _Toc311828617 3.8 HYPERLINK l _Toc311828618 3. led显示和报警流程图8 HYPERLINK l _
4、Toc311828618 3.9 HYPERLINK l _Toc311828618 3.11 HYPERLINK l _Toc311828618 3. 按键界面显示流程图12 HYPERLINK l _Toc311828620 智能温度检测系统的源程序代码13 HYPERLINK l _Toc311828623 4 系统硬件调试 PAGEREF _Toc311828623 h 23 HYPERLINK l _Toc311828630 5 总结241整体设计方案 系统设计结构图根据系统设计的要求和设计思路,确定该系统的系统设计结构图。如图2.2所示。硬件电路主要由MCU微处理控制器单元、温度检
5、测模块、四个数码管显示模块,键盘控制模块,LED灯显示模块和蜂鸣器响应模块构成。四个数码管显示四个数码管显示 MCU微处理控制器单元温度检测温度检测LED灯显示LED灯显示按键控制按键控制蜂鸣器响应蜂鸣器响应 图 系统结构图设计 2 智能温度检测系统的硬件设计硬件电路图如下: 3智能温度检测系统的软件设计 3.1 系统的软件设计也是工具系统功能的设计。各个程序流程图如下: 开始 开始设置定时器0和1设置定时器0和1设置上下限温度值设置上下限温度值Led扫描和报警判定Led扫描和报警判定 按键控制扫描 按键控制扫描 图3.1.1 主程序流程图 开始 开始N 定时中断响应 定时中断响应Y次数清零,
6、蜂鸣器响应次数清零,蜂鸣器响应 结束 结束 图3.1.2 定时器0中断函数流程图 开始 开始 获取温度 获取温度 定时中断次数 定时中断次数 四次 一次N N N N 四次 一次 三次 两次 三次 两次Y Y Y Y显示小数,次数清零显示整数个位显示整数十位判断正负号显示符号位显示小数,次数清零显示整数个位显示整数十位判断正负号显示符号位 结束 结束 图3.1.3 定时器1中断数码管显示程序流程图 开始 开始 写入上下限值 写入上下限值 复制到EEPROM 复制到EEPROM 结束 结束 图3.1.4 设置上下限并且复制到EEPROM 开始 开始 上下限之间 上下限之间上四位灯表示的红灯亮,蜂
7、鸣器响应下四位灯表示的绿灯亮,蜂鸣器不上四位灯表示的红灯亮,蜂鸣器响应下四位灯表示的绿灯亮,蜂鸣器不响应 结束 结束 图3.1.5 Led显示和报警 开始 开始读取当前温度值读取当前温度值 整数温度负数 整数温度负数 Y整数部分取反码加一 N整数部分取反码加一处理并合成整数温度得到整数温度处理并合成整数温度得到整数温度取出小数部分温度值取出小数部分温度值 结束 结束 图3.1.6 获取温度值程序流程图 开始 开始 N 有键按下 有键按下Y 延时等待 延时等待 N 确实按下 确实按下YN N 确定键 按下 减键 按下 加键按下 调节键按下 N N 确定键 按下 减键 按下 加键按下 调节键按下
8、调节键次数清零对所调的数减一对所调的数加一调节键次数清零对所调的数减一对所调的数加一两次 一次两次 一次调下限值调上限值调下限值调上限值显示实时温度数码管显示调节界面显示实时温度数码管显示调节界面 结束 结束 开始 图3.1.7 按键扫描控制程序流程开始读出上下限值读出上下限值 是否负数 是否负数 N Y 反码加一 反码加一得到正数的上下限值得到正数的上下限值调上或下限?调上或下限? 调下限 调下限 调上限 调上限显示下限温度值个位显示下限温度值十位 判断 是否负数第一个数管显下限标志标志显示上限温度值个位显示上限温度值十位 判断 是否负数第一个数管显上限标志标志显示下限温度值个位显示下限温度
9、值十位 判断 是否负数第一个数管显下限标志标志显示上限温度值个位显示上限温度值十位 判断 是否负数第一个数管显上限标志标志负数显示负号标志正数,第二个数码管消隐负数显示负号标志正数,第二个数码管消隐负数显示负号标志正数,第二个数码管消隐负数显示负号标志正数,第二个数码管消隐 结束 结束 图3.1.8 按键界面显示程序流程图 的源程序代码/* 用单片机实现 */* 控制DS18B20并且用四个数码管显示实时温度 */* 可设置上限温度和下限温度值并且可报警 */* 设置的上限温度和下限温度值能够断电后保存(EEPROM) */* 新余学院10届电信本一班 余巍峰 制作 */* 转载请注明出处 *
10、/#include#define uchar unsigned char#define uint unsigned int#define wei P2#define duan P0#define led P1sbit DQ=P37;sbit beep=P36;uchar tab2=0 xbf,0 xff,0 xdf,0 xfb;/数码管显示内容,分别显示负号标志,消隐,上限标志,下限标志uchar table=0 xc0,0 xf9,0 xa4,0 xb0,0 x99,0 x92,0 x82,0 xf8,0 x80,0 x90;/段码显示uchar tab1=0 x00,0 x01,0 x01
11、,0 x02,0 x03,0 x03,0 x04,0 x04,0 x05,0 x06,0 x06,0 x07,0 x08,0 x08,0 x09,0 x09;/小数表uchar readdat2;/取出温度存储的变量数组uchar hc9;char hc0=99;char hc1=-50;uchar flag=0; /负号标志uchar i=0;uchar count=0;uchar m=0; /调上下限的标志位char h; /上限值变量char l; /下限值变量void getwd();void Delay(uint j);void init();uchar readonebyte();
12、void writeonebyte(uchar dat);void displayled();void displaykey();void displayset();void delay1(uint z);void setlimite(char th,tl);/*/void main()TMOD=0 x11;/开两个定时中断TH1=-(1000/256);TL1=-(1000%256);TR1=1; /用于扫描显示实时温度TR0=0; /用于蜂鸣器报警ET1=1;ET0=1; TH0=-(1000/256);TL0=-(1000%256);EA=1;wei=0 xff; setlimite(h
13、,l);/首先设置的上下限温度值while(1) displayled(); displaykey(); /*/void wendu () interrupt 3/定时中断1服务函数uchar temp;getwd();i+;switch(i)case 1: /判断是否显示负号 if(flag=1) temp=tab20; else temp=tab21; wei=0 xfe; duan=temp;break;case 2: /显示整数温度的十位 temp=hc2;/readdat1/10; wei=0 xfd; duan=tabletemp;break;case 3: /显示整数温度的个位
14、temp=hc3;/readdat1%10; wei=0 xfb; duan=tabletemp&0 x7f;break;case 4: /显示小数位 temp=hc4;/readdat0; wei=0 xf7; duan=tabletemp;break;if(i=4)i=0;TH1=-(1000/256);TL1=-(1000%256);/*/void beep1 () interrupt 1/定时中断0服务函数 count+;if(count=100)count=0;beep=beep;/蜂鸣器发出警报 TH0=-(1000/256); TL0=-(1000%256);/*/void De
15、lay(uint j)/延时较短的函数while(j-);/*/void init()/初始化uchar x;DQ = 1; /DQ复位Delay(8); /稍做延时DQ = 0; /单片机将DQ拉低Delay(80); /精确延时 大于 480usDQ = 1; /拉高总线Delay(14);x=DQ; /稍做延时后 如果x=0则初始化成功 x=1则初始化失败Delay(20);/*/uchar readonebyte()/读一个字节uchar i=0;uchar dat=0;for (i=8;i0;i-)DQ = 0; / 给脉冲信号dat=1;DQ = 1; / 给脉冲信号if(DQ)d
16、at|=0 x80;Delay(4);return(dat);/*/void writeonebyte(uchar dat)/写一个字节uchar i=0;for (i=8; i0; i-)DQ = 0;DQ = dat&0 x01;Delay(2);DQ = 1;dat=1;/*/void setlimite(char th,tl)/设置上下限温度值同时把温度值存入18b20的EEPROM函数 init();writeonebyte(0 xcc);writeonebyte(0 x4e);/写入上下限值writeonebyte(th);writeonebyte(tl); init();writ
17、eonebyte(0 xcc);writeonebyte(0 x48);/把写入的上下限值复制到EEPROMDelay(20);/*/void getwd()/获取温度值函数 uint x,result;char re;init();writeonebyte(0 xcc);writeonebyte(0 x44); init();writeonebyte(0 xcc);writeonebyte(0 xbe);/读取当前的温度readdat0=readonebyte();readdat1=readonebyte();re=readdat1;if(re&0 xf8)!=0)/若温度为负数,则取反码加
18、一flag=1;readdat1=readdat1;readdat0=readdat0;result=readdat0+1; readdat0=result;if(result255)readdat1+;readdat1=readdat14;x=x&0 x0f;/取出读出温度2的高四位,即整数部分的低四位readdat1=readdat1|x; /合成整数部分温度hc1=readdat1/100;hc2=readdat1%100/10;/转化温度为可以显示hc3=readdat1%100%10;readdat0=readdat0&0 x0f;/取出小数部分hc4=tab1readdat0;/*
19、/void displayled()/led显示和报警函数uchar s0;s0=(readdat1hc1)&(readdat199) h=0; if(m=2) l+; if(l99) l=0; if(lh|l=h)/如果所调的上下限值相等,则复位 TR0=1; l=-50; h=99; elseTR0=0;beep=1; setlimite(h,l); while(key&0 xf0!=0 xf0); break; case 0 xd0: /对当前所调的值减一if(m=1) h-; if(h-50) h=0; if(m=2) l-; if(lh|l=h)/如果所调的上下限值相等,则复位 TR
20、0=1; l=-50; h=99; elseTR0=0;beep=1; setlimite(h,l); while(key&0 xf0!=0 xf0); break; case 0 xe0: m=0; /确定调好,返回显示时间 TR1=1; while(key&0 xf0!=0 xf0); break; if(TR1=0) displayset();/*/void displayset()/按键时数码管显示扫描函数 char k,p;uchar a,b,c,d;init();writeonebyte(0 xcc);writeonebyte(0 x44); init();writeonebyte
21、(0 xcc); writeonebyte(0 xb8);/把EEPROM中的上下限值复制到暂存器中 init();writeonebyte(0 xcc);writeonebyte(0 xbe);/读取暂存器中的内容hc5=readonebyte();hc6=readonebyte();hc0=readonebyte();/所读取的上下限温度值hc1=readonebyte();/if(hc00)/p=hc0;p=p;p=p+1;elsep=hc0;a=p/10;b=p%10;if(hc10)/若为负数,反码加一k=hc1; k=k;k=k+1;elsek=hc1;c=k/10;d=k%10;if(m=1)/按一下显示的上限温度值 wei=0 xfe; duan=tab22;/上限标志delay1(5); wei=0 xfd;if(hc00)duan=tab20;/若为负值,显示负
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 老师门卫室值班制度规范
- 值班备勤操作规范制度
- 医院康复服务规范制度
- 严格执行各项制度规范
- 业务人员出行制度规范
- 信访基础业务规范制度
- 学校食材配送规范制度
- 应急短信发送制度规范
- 人事制度规范管理要求
- 值班热线制度规范要求
- 登高作业监理实施细则
- 2025食品机械行业智能化分析及技术升级趋势与投资可行性评估报告
- 《经济法学》2025-2025期末试题及答案
- CAICV智能网联汽车远程升级(OTA)发展现状及建议
- (标准)警局赔偿协议书
- GB/T 20921-2025机器状态监测与诊断词汇
- 护工培训课件内容
- 瘦西湖景区槐泗河片区水系整治项目(二期)李庄涧环境影响报告表
- 学校维修监控合同协议书
- 贵州省贵阳市云岩区2024-2025学年上学期八年级数学期末试题卷(原卷版+解析版)
- 湖南省2023年普通高等学校对口招生考试英语试卷
评论
0/150
提交评论