环境温度控制系统.docx
- 文档编号:15206797
- 上传时间:2023-07-02
- 格式:DOCX
- 页数:30
- 大小:2.02MB
环境温度控制系统.docx
《环境温度控制系统.docx》由会员分享,可在线阅读,更多相关《环境温度控制系统.docx(30页珍藏版)》请在冰点文库上搜索。
环境温度控制系统
设计内容与设计要求
设计内容:
本课题要求以单片机为核心设计一个环境温度检测与报警系统,要求测温范围为–10~125℃,精度误差在0.1℃以内,LED数码管直读显示,可以由用户自己设定上限温度,如果环境温度超过实际温度或在5秒内温度变化超过5度则会发出声光报警。
设计任务包括控制系统硬件设计和应用程序设计。
要求焊接好开发板,在开发板上进行调试。
设计要求:
1)确定系统设计方案;
2)进行系统的硬件设计;
3)完成必要元器件选择;
4)开发板焊接及测试;
5)系统软件设计及调试;
6)系统联调及操作说明;
7)写说明书;
主要设计条件
1、MCS-51单片机实验操作台1台;
2、PC机及单片机调试软件;
3、开发板1块;
4、制作工具1套;
5、系统设计所需的元器件。
说明书格式
封面
课程设计任务书
第1章概述
第2章课题设计的要求、目的及意义
第3章系统总体方案选择与说明
第4章系统硬件电路设计框图与工作原理
第5章硬件设计
第6章开发板焊接及其测试
第7章软件设计及调试
第8章系统联调及操作说明
第9章总结
附录A系统硬件电路原理图
附录B程序清单
参考文献
[1]单片机原理及应用王迎旭主编机械工业出版社2012年
[2]51系列单片机应用与实践教程周向红编北航出版社2008年
[5]智能化集成温度传感器原理与应用沙占友编机械工业出版社2002年
[6]微型计算机原理与接口技术吴秀清编中国科学技术出版社2001
[7]微型计算机接口技术及应用刘乐善编华中理工大学出版社2000
[8]单片机实用技术问答谢宜仁主编人民邮电出版社2002
第1章绪论………………………………………………………………1
第2章系统总体方案设计…………………………………………………2
2.1系统框图……………………………………………………………2
2.2系统结构与设计思路……………………………………………2
第3系统硬件设计……………………………………………………………3
3.1STC89C52模块…………………………………………………………3
3.2数码管模块……………………………………………………………3
3.3按键模块………………………………………………………………4
3.4DS18B20模块…………………………………………………………4
3.5报警模块………………………………………………………………5
3.6I/O分配表……………………………………………………………6
第4章系统软件设计……………………………………………………7
4.1软件设计思路…………………………………………………………7
4.2各程序流程图…………………………………………………………8
第5章硬件调试……………………………………………………………10
第6章总结…………………………………………………………………12
参考文献……………………………………………………………………13
附录…………………………………………………………………………14
附1硬件原理图…………………………………………………………14
附2源程序清单…………………………………………………………15
附2.1main.c清单……………………………………………………15
附2.218B20.c清单……………………………………………………19
附2.3alarm.c清单……………………………………………………20
附2.4delay.c清单……………………………………………………21
第1章绪论
1.1系统设计要求
本课题以单片机和DS18B20为核心设计一个环境温度检测与报警系统,测温范围为—10~125℃,精度误差在0.1℃以内,LED数码管直读显示,可以由用户自己设定上限温度,如果环境温度超过实际温度或在5秒内温度变化超过5度则会发出声光报警。
1.2系统设计的目的及意义
1.2.1课题设计的目的
掌握用51单片机控制LED数码管显示字符的方法。
掌握用单片机进行显示系统开发的方法。
掌握单片机软件、硬件调试技术。
了解单线器件DS18B20的驱动方法。
了解LED显示器的一般驱动方法。
1.2.2课题设计的意义
随着人们生活水平的不断提高,单片机控制无疑是人们追求的目标之一,它所给人带来的方便也是不可否定的,其中数字温度计就是一个典型的例子,但人们对它的要求越来越高,要为现代人工作、科研、生活、提供更好的更方便的设施就需要从数字单片机技术入手,一切向着数字化控制,智能化控制方向发展。
本设计所介绍的数字温度计与传统的温度计相比,具有读数方便,测温范围广,测温准确,其输出温度采用数字显示,主要用于对测温比较准确的场所,或科研实验室使用。
在本次设计中,主要从功能组合,硬件模块,程序算法等几个方面探讨基于单片机的数字温度计的设计。
第2章系统总体方案设计
2.1系统框图
图2-1系统框图
2.2系统结构与设计思路
系统硬件包括STC89C52RC模块、八段显示数码管模块、DS18B20模块、按键模块、报警模块。
设计好软件,下载进单片机。
启动系统后,DS18B20开始采集温度信号并把信号传给八段数码管显示。
当温度/低于高于系统设定的报警温度后,系统报警,喇叭发声,LED点亮,数码管首位显示H/L。
当温度在5分钟内超过5℃时,数码管显示T,喇叭发声报警。
第3章系统硬件设计
3.1STC8952RC模块
图表3-1STC89c52模块
3.2数码管模块
U1为段选锁存器,U2为位选锁存器,数码管的最高位为报警H/L显示,最低位显示“C”,第3~7位显示温度。
图3-2数码管显示模块
3.3按键模块
S1为进入报警温度设置键,S2键为报警温度上调键,点按微调,长按速调,S3为报警温度下调键,操作同S2,S4为退出报警温度设置键。
图3-3按键模块
3.4DS18B20模块
由于DS18B20内部已经把温度的模拟信号转化为数字信号,故只要通过对DS18B20顺序进行初始化、写ROM操作指令、读储存器操作指令来实现温度向单片机的传输。
其中温度寄存器的高8位与低8位如下图示。
图2-6高、低位温度寄存器
图中,若S=1,温度为负,temp=(~(tempH<<8+tempL)+1);若S=0,温度为正,temp=tempH<<8+tempL。
图3-6DS18B20模块
3.5报警模块
图3-5报警模块
3.6系统I/O口分配
P0~P7
八段数码管接口
P26
数码管段选
P27
数码管位选
P12
喇叭接口
P15
报警LED接口
P32~P35
S1~S4按键
P36
DS18B20DQ接口
表3-1I/O口分配
第4章系统软件设计
4.1软件设计思路
由于软件代码比较长,本系统的软件设计采用模块化编程。
工程分有main.c、18B20.c、delay.c、alram.c等几个C文件。
main.c包括数码管的初始化、温度的处理及温度的显示,其中温度的显示通过定时器1的扫描实现。
18B20.c包括18B20的初始化、读ROM、写命令、读温度。
delay.c为2ms延时函数。
alarm.c包括喇叭急鸣和LED点亮函数。
4.2各程序流流程图
4.2.1主程序块流程图
图4.1主程序块流程图
4.2.2报警程序块流程图
图4-2报警温度流程图
4.2.3DS18B20程序块流程图
图4-3DS18B20块流程图
第5章硬件调试
串口调试软件下载软件采用STC-ISPV478,开机启动单片机,DS18B20读取温度,如下
图5-1实时温度显示
设置报警温度为31.70℃,如下
图5-2设置报警温度
增加DS18B20周围的温度,使超过报警温度,图如下示
图5-3超温报警
此时数码管首位显示H,喇叭发声,LED灯点亮。
总结
在这次的课程设计中,结合了所学的单片机和电路知识,设计出满足课程设计要求的温度监测警报与控制系统。
在进行课程设计的过程中,我查阅了很多文献,了解了STCAT89S52、MAX232片、DS18B20温度传感器的功能。
拓展了我们的视野。
通过本次的课程设计,加深了我们对单片机的理解,使得我们更加熟悉单片机的程序编写。
特别是通过程序的调试,我们发现了很多程序编写的坏习惯,例如使用中断服务程序时没有保护好相关可能被改变的数据。
我们所设计的温度监测警报与控制系统原理简单,所用到的软器件较少,而且是使用STC89S52单片机来实现控制功能,使得其相关功能或参数可以根据需要进行修改。
参考文献
[1]单片机原理及应用王迎旭主编机械工业出版社2012年
[2]51系列单片机应用与实践教程周向红编北航出版社2008年
[3]微型计算机原理与接口技术吴秀清编中国科学技术出版社2001
[4]微型计算机接口技术及应用刘乐善编华中理工大学出版社2000
[5]单片机实用技术问答谢宜仁主编人民邮电出版社2002
[6]XX百科
附录
附1硬件原理图
图附-1硬件接线图
附2源程序清单
附2.1Main.c
#include
#include"18b20.h"
#include"delay.h"
#include"alarm.h"
#defineDataPortP0//定义数据端口程序中遇到DataPort则用P0替换
#definemax8
#defineOVERTEMP34*100//定义超温报警数值
#defineLOWTEMP20*100//定义低温报警数值
sbitduan=P2^6;//定义锁存使能端口段锁存
sbitwei=P2^7;//位锁存
sbitbaojin=P1^5;
sbitset_sign=P3^2;//进入设置
sbitup=P3^3;//上调
sbitdown=P3^4;//下调
sbitset_out=P3^5;//退出设置
bitReadTempFlag;//定义读时间标志
bitstarttempFlag=0;//比较温度标志
bitpoint1;//H
bitpoint2;//L
bitpoint3;//水平T
bitpoint4;//退出设置
bitpoint5;//进入设置
externunsignedchartemppoint;
unsignedcharcodetable[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//显示段码值0~9
unsignedcharcodeboot[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};//分别对应相应的数码管点亮,即位码
unsignedcharTempData[8];//存储显示值的全局变量
voidDisplay(unsignedcharFirstBit,unsignedcharNum);//数码管显示函数
voidInit_Timer0(void);//定时器初始化
voiddealdata(intt);
signedintset_temp(inttempk,charm);
voidmain(void)
{
intremember[max];
signedinttemp,tempk;
unsignedchari,j,k,m;
tempk=OVERTEMP;
for(k=0;k<8;k++)//清屏
TempData[k]=0xff;
Init_Timer0();
while
(1)
{
point4=1;
point5=1;
baojin=1;
if(point1==1)
{
alarm();
TempData[0]=0x89;//显示"H"
}
if(point2==1)
{
alarm();
TempData[0]=0xc7;
}
if(point3==1)
{
alarm();
TempData[0]=0xb9;
}
if(!
set_sign)
{
DelayMs(10);
if(!
set_sign)
tempk=set_temp(tempk,m);//设置报警温度
}
if(ReadTempFlag)//主循环
{
ReadTempFlag=0;
temp=ReadTemperature();
if(starttempFlag==0)//温度处理
{
remember[i]=temp;
i++;
}
else
{
for(j=0;j { remember[j]=remember[j+1]; remember[max-1]=temp; } if(temp>(tempk)) { point1=1; point2=0; point3=0; } else point1=0; if(temp<(LOWTEMP)) { point1=0; point2=1; point3=0; } else point2=0; if(((remember[max-1]-remember[0])>500||(remember[0]-remember[max-1])>500)) { point1=0; point2=0; point3=1; } } dealdata(temp); } } } voiddealdata(inttemp) { unsignedcharhun,ten,one,dot1,dot2; hun=temp/10000; ten=temp/1000%10; one=temp/100%10; dot1=temp%100/10; dot2=temp%10; //if(temppoint=1) TempData[0]=0x40;//负号标志 TempData[7]=0xff; TempData[0]=0xff; if(hun>0) TempData[2]=hun;//table[TempH/100];//百位 else TempData[2]=0xff; if((hun==0)&&(ten==0))//消隐 TempData[3]=0xff; else TempData[3]=table[ten];//十位温度 TempData[4]=table[one]&0x7f;//个位温度,带小数点 TempData[5]=table[dot1]; TempData[6]=table[dot2]; TempData[7]=0xc6;//显示C符号 } voidDisplay(unsignedcharFirstBit,unsignedcharNum) { staticunsignedchari=0; DataPort=0xff;//清空数据,防止有交替重影 wei=1;//段锁存 DataPort=boot[i+FirstBit];//取位码 wei=0;//位锁存 duan=1; DataPort=TempData[i];//取显示数据,段码 duan=0;//段锁存 i++; if(i==Num) i=0; } signedintset_temp(inttempQ,charm) { unsignedcharkey_press_num; up=1;//按键输入端口电平置高 down=1; while(point4) { if(! set_out) { DelayMs(10); if(! set_out) point4=0; } dealdata(tempQ); if(! up)//如果检测到低电平,说明按键按下 { DelayMs(10);//延时去抖,一般10-20ms if(! up)//再次确认按键是否按下,没有按下则退出 { while(! up) { key_press_num++; DelayMs(10);//10x200=2000ms=2s if(key_press_num==200)//大约2s { key_press_num=0;//如果达到长按键标准 //则进入长按键动作 while(! up)//这里用于识别是否按 { tempQ+=10; dealdata(tempQ); DelayMs(50); } } } key_press_num=0; tempQ+=10; } } if(! down)//如果检测到低电平,说明按键按下 { DelayMs(10);//延时去抖,一般10-20ms if(! down)//再次确认按键是否按下,没有 //按下则退出 { while(! down) { key_press_num++; DelayMs(10); if(key_press_num==200)//大约2s { key_press_num=0; while(! down) { tempQ-=10; dealdata(tempQ); DelayMs(50); } } } key_press_num=0; tempQ-=10; } } m++; dealdata(tempQ); } returntempQ; } voidInit_Timer0(void) { TMOD|=0x01;/ TH0=0x00;//给定初值 TL0=0x00; EA=1;//总中断打开 ET0=1;//定时器中断打开 TR0=1;//定时器开关打开 } voidTimer0_isr(void)interrupt1 { staticunsignedintnum,num1; TH0=(65536-2500)/256;//重新赋值2.5ms TL0=(65536-2500)%256; Display(0,8);//调用数码管扫描 num++; num1++; if(num==250)// { num=0; ReadTempFlag=1;//读标志位置1 } if(num1==2000) starttempFlag=1; } 附2.218B20.c #include"delay.h" #include"18b20.h" bitInit_DS18B20(void) { bitdat=0; DQ=1;//DQ复位 DelayUs2x(5);//稍做延时 DQ=0;//单片机将DQ拉低 DelayUs2x(200);//精确延时大于480us小于960us DelayUs2x(200); DQ=1;//拉高总线 DelayUs2x(50);//15~60us后接收60-240us的存在脉冲 dat=DQ;//如果x=0则初始化成功,x=1则初始化失败 DelayUs2x(25);//稍作延时返回 returndat; } unsignedcharReadOneChar(void) { unsignedchari=0; unsignedchardat=0; for(i=8;i>0;i--) { DQ=0;//给脉冲信号 dat>>=1; DQ=1;//给脉冲信号 if(DQ) dat|=0x80; DelayUs2x(25); } return(dat); } voidWriteOneChar(unsignedchardat) { unsignedchari=0; for(i=8;i>0;i--) { DQ=0; DQ=dat&0x01; DelayUs2x(25); DQ=1; dat>>=1; } DelayUs2x(25); } unsignedintReadTemperature(void) { unsignedchartempL=0; unsignedinttempH=0; unsignedinttemp=0; unsignedchartemppoint=0; Init_DS18B20(); WriteOneChar(0xCC);//跳过读序号列号的操作 WriteOneChar(0x44);//启动温度转换 DelayMs(10); Init_DS18B20(); WriteOneChar(0xCC);//跳过读序号列号的操作 WriteOneChar(0xBE);//读取温度寄存器等(共可读9个寄存器)前两个就是温度 tempL=ReadOneChar();//低位 tempH=ReadOneChar();//高位 tempH<<=8; temp=tempH+tempL; if(temp&0x8000)//判断正负 { temppoint=1;//负 temp=((~temp)+1); temp*=(0.0625*100); } else {temppoint=0;//正 temp*=(0.0625*100); } return(temp); } 附2.3alarm.c #include #include"delay.h" sbitbaojin=P1^5; sbitset_sign=P3^2; sbitlaba=P1^2; bitpoint; voidalarm(void) { unsignedintk; while (1) {point=0; if(! set_sign) { DelayMs(10); if(! set_sign) point=1; } baojin=0;//报警发光 for(k=0;k<200;k++) { DelayUs2x(200); laba=! laba
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 环境温度 控制系统