版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、电子系统综合设计基于DS18B20的智能温度检测系统的设计 摘 要1.用STC89C52控制DS18B20,读取数据,并对DS18B20转换后的数据进行处理,最后在数码管上显示DS18B20测出的温度。2.使用4位数码管显示,最高位为符号位,如果温度值为正,不显示,如果温度为负,则显示负号。3.测量的温度上限到99度,下限超过50度。4.温度的测量值要精确到小数点的后1位。4.能设置上限温度和下限温度值,当被测量温度在上限温度和下限温度值之间时下四位灯全亮代表绿色LED亮,当被测量温度在上限温度和下限温度值之外时上四位灯全亮代表红色LED亮,并蜂鸣器报警。6.设置的上限温度和下限温度值能够断电
2、后保存(EEPROM)。7.实现上述功能人机界面简单。关键字:DS18B20; 数码管; 单片机; 目 录13 345 5 6 6 7 8 8 9 11 12 3.2智能温度检测系统的源程序代码13 23241整体设计方案根据系统设计的要求和设计思路,确定该系统的系统设计结构图。如图2.2所示。硬件电路主要由MCU微处理控制器单元、温度检测模块、四个数码管显示模块,键盘控制模块,LED灯显示模块和蜂鸣器响应模块构成。四个数码管显示 MCU微处理控制器单元温度检测LED灯显示按键控制蜂鸣器响应 图1.1 系统结构图设计 2 智能温度检测系统的硬件设计硬件电路图如下: 3智能温度检测系统的软件设计
3、 3.1 系统的软件设计也是工具系统功能的设计。各个程序流程图如下: 开始设置定时器0和1设置上下限温度值Led扫描和报警判定 按键控制扫描 图3.1.1 主程序流程图 开始N 定时中断响应Y次数清零,蜂鸣器响应 结束 图3.1.2 定时器0中断函数流程图 开始 获取温度 定时中断次数 四次 一次N N N N 三次 两次Y Y Y Y显示小数,次数清零显示整数个位显示整数十位判断正负号显示符号位 结束 图3.1.3 定时器1中断数码管显示程序流程图 开始 写入上下限值 复制到EEPROM 结束 图3.1.4 设置上下限并且复制到EEPROM 开始 上下限之间上四位灯表示的红灯亮,蜂鸣器响应下
4、四位灯表示的绿灯亮,蜂鸣器不响应Y N 结束 图3.1.5 Led显示和报警 开始读取当前温度值 整数温度负数 Y整数部分取反码加一 N处理并合成整数温度得到整数温度取出小数部分温度值 结束 图3.1.6 获取温度值程序流程图 开始 N 有键按下Y 延时等待 N 确实按下YN N 确定键 按下 减键 按下 加键按下 调节键按下 N N 调节键次数清零对所调的数减一对所调的数加一两次 一次调下限值调上限值显示实时温度数码管显示调节界面 结束 开始 图3.1.7 按键扫描控制程序流程读出上下限值 是否负数 N Y 反码加一得到正数的上下限值调上或下限? 调下限 调上限显示下限温度值个位显示下限温度
5、值十位 判断 是否负数第一个数管显下限标志标志显示上限温度值个位显示上限温度值十位 判断 是否负数第一个数管显上限标志标志负数显示负号标志正数,第二个数码管消隐负数显示负号标志正数,第二个数码管消隐 结束 图3.1.8 按键界面显示程序流程图 /* 用单片机实现 */* 控制DS18B20并且用四个数码管显示实时温度 */* 可设置上限温度和下限温度值并且可报警 */* 设置的上限温度和下限温度值能够断电后保存(EEPROM) */* 新余学院10届电信本一班 余巍峰 制作 */* 转载请注明出处 */#include<reg52.h>#define uchar unsigned
6、char#define uint unsigned int#define wei P2#define duan P0#define led P1sbit DQ=P37;sbit beep=P36;uchar tab2=0xbf,0xff,0xdf,0xfb;/数码管显示内容,分别显示负号标志,消隐,上限标志,下限标志uchar table=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90;/段码显示uchar tab1=0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x04,0x05,0x06,0x06,0x07,0x0
7、8,0x08,0x09,0x09;/小数表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();void writeonebyte(uchar dat);void displayled();void displaykey
8、();void displayset();void delay1(uint z);void setlimite(char th,tl);/*/void main()TMOD=0x11;/开两个定时中断TH1=-(1000/256);TL1=-(1000%256);TR1=1; /用于扫描显示实时温度TR0=0; /用于蜂鸣器报警ET1=1;ET0=1; TH0=-(1000/256);TL0=-(1000%256);EA=1;wei=0xff; setlimite(h,l);/首先设置的上下限温度值while(1) displayled(); displaykey(); /*/void wen
9、du () interrupt 3/定时中断1服务函数uchar temp;getwd();i+;switch(i)case 1: /判断是否显示负号 if(flag=1) temp=tab20; else temp=tab21; wei=0xfe; duan=temp;break;case 2: /显示整数温度的十位 temp=hc2;/readdat1/10; wei=0xfd; duan=tabletemp;break;case 3: /显示整数温度的个位 temp=hc3;/readdat1%10; wei=0xfb; duan=tabletemp&0x7f;break;cas
10、e 4: /显示小数位 temp=hc4;/readdat0; wei=0xf7; 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 Delay(uint j)/延时较短的函数while(j-);/*/void init()/初始化uchar x;DQ = 1; /D
11、Q复位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;i>0;i-)DQ = 0; / 给脉冲信号dat>>=1;DQ = 1; / 给脉冲信号if(DQ)dat|=0x80;Delay(4);return(dat);/*/void writeonebyte(uc
12、har dat)/写一个字节uchar i=0;for (i=8; i>0; i-)DQ = 0;DQ = dat&0x01;Delay(2);DQ = 1;dat>>=1;/*/void setlimite(char th,tl)/设置上下限温度值同时把温度值存入18b20的EEPROM函数 init();writeonebyte(0xcc);writeonebyte(0x4e);/写入上下限值writeonebyte(th);writeonebyte(tl); init();writeonebyte(0xcc);writeonebyte(0x48);/把写入的上下
13、限值复制到EEPROMDelay(20);/*/void getwd()/获取温度值函数 uint x,result;char re;init();writeonebyte(0xcc);writeonebyte(0x44); init();writeonebyte(0xcc);writeonebyte(0xbe);/读取当前的温度readdat0=readonebyte();readdat1=readonebyte();re=readdat1;if(re&0xf8)!=0)/若温度为负数,则取反码加一flag=1;readdat1=readdat1;readdat0=readdat0;
14、result=readdat0+1; readdat0=result;if(result>255)readdat1+;readdat1=readdat1<<4;readdat1=readdat1&0x70;/取出读取温度1的低三位有效位,即整数部分的高三位x=readdat0;x=x>>4;x=x&0x0f;/取出读出温度2的高四位,即整数部分的低四位readdat1=readdat1|x; /合成整数部分温度hc1=readdat1/100;hc2=readdat1%100/10;/转化温度为可以显示hc3=readdat1%100%10;rea
15、ddat0=readdat0&0x0f;/取出小数部分hc4=tab1readdat0;/*/void displayled()/led显示和报警函数uchar s0;s0=(readdat1>hc1)&&(readdat1<hc0); if(s0)/在上下限之间不报警 beep=1;/关蜂鸣器TR0=0;led=0x0f;/下四位灯全亮表示温度正常elseled=0xf0;/上四位灯全亮表示温度不正常,报警 TR0=1;/*/void displaykey()/按键检测和按键功能扫描函数 uchar tem; uchar key;h=hc0;l=hc1;k
16、ey=wei&0xf0;if(key&0xf0)!=0xf0) /如果有键按下,则延时等待delay1(100); if(key&0xf0)!=0xf0) switch(key) case 0x70: /按一次,调上限值;按两次,调下限值m+; TR1=0; if(m=3) m=1; while(key&0xf0!=0xf0); break;case 0xb0: /对当前所调的值加一if(m=1) h+; if(h>99) h=0; if(m=2) l+; if(l>99) l=0; if(l>h|l=h)/如果所调的上下限值相等,则复位 TR
17、0=1; l=-50; h=99; elseTR0=0;beep=1; setlimite(h,l); while(key&0xf0!=0xf0); break; case 0xd0: /对当前所调的值减一if(m=1) h-; if(h<-50) h=0; if(m=2) l-; if(l<-50) l=0; if(l>h|l=h)/如果所调的上下限值相等,则复位 TR0=1; l=-50; h=99; elseTR0=0;beep=1; setlimite(h,l); while(key&0xf0!=0xf0); break; case 0xe0: m=0
18、; /确定调好,返回显示时间 TR1=1; while(key&0xf0!=0xf0); break; if(TR1=0) displayset();/*/void displayset()/按键时数码管显示扫描函数 char k,p;uchar a,b,c,d;init();writeonebyte(0xcc);writeonebyte(0x44); init();writeonebyte(0xcc); writeonebyte(0xb8);/把EEPROM中的上下限值复制到暂存器中 init();writeonebyte(0xcc);writeonebyte(0xbe);/读取暂存
19、器中的内容hc5=readonebyte();hc6=readonebyte();hc0=readonebyte();/所读取的上下限温度值hc1=readonebyte();/if(hc0<0)/p=hc0;p=p;p=p+1;elsep=hc0;a=p/10;b=p%10;if(hc1<0)/若为负数,反码加一k=hc1; k=k;k=k+1;elsek=hc1;c=k/10;d=k%10;if(m=1)/按一下显示的上限温度值 wei=0xfe; duan=tab22;/上限标志delay1(5); wei=0xfd;if(hc0<0)duan=tab20;/若为负值,显示负号elseduan=tab21;/消隐表示正delay1(5);wei=0xfb; duan=tablea;/显示上限温度值 delay1(5); wei=0xf7; duan=tableb; d
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 4.1《维护秩序靠规则》教学设计 2026-2027学年度道德与法治八年级上册 统编版
- 5G万物互联技术考试题(含详细答案解析)
- 网络安全教育课件图文完美版
- 合规转利润:降本增效全指南(2026)《GBT 39322-2020电子商务交易平台追溯数据接口技术要求》
- 厂区安防系统整体布设方案
- 2026年浙江省人教版初中物理八年级上册第2章力学基础习题
- 2026年浙江省人教版初中数学九年级下册第5章概率统计综合测试卷
- 2026年浙江省高中数学选修2-6第6章数列习题
- 广东揭阳部分高中2026-2027学年高三上学期开学摸底调研数学试题(含答案)
- 外科护理小讲课
- 尿道下裂的诊疗与护理
- 美容院消毒流程及工具使用规范
- 安防监控售后服务方案
- 光学金相显微技术知到智慧树章节测试课后答案2024年秋西安理工大学
- 2024-2025学年人教版七年级生物上册全册教案
- 卵圆孔未闭规范化诊疗专家共识解读课件
- 颂钵疗愈师培训
- DB35T 1862-2019 工厂化循环水养殖系统设计技术规范
- 《出纳实务》高职财经专业全套教学课件
- 九年级物理学情分析
- JBT 9986-2013 工具热处理金相检验
评论
0/150
提交评论