温度报警器Word文档格式.docx
- 文档编号:20994524
- 上传时间:2023-01-26
- 格式:DOCX
- 页数:37
- 大小:1.28MB
温度报警器Word文档格式.docx
《温度报警器Word文档格式.docx》由会员分享,可在线阅读,更多相关《温度报警器Word文档格式.docx(37页珍藏版)》请在冰豆网上搜索。
6.2组员1沈欢20
6.3组员2瞿安捷21
七参考文献22
八附录23
8.1附录123
8.2附录224
8.3附录325
一课程设计任务
1.1功能说明
1.完成温度进行测量,理论测量范围-55°
C~+125°
C
2.将温度测量值LCD液晶显示模块显示;
3.可以通过按键进行温度上下限报警设定并实现功能;
二整体设计方案
2.1设计思路
根据功能要求,必须有单片机控制模块,LCD1602显示模块以及DS18B20的温度传感模块。
各个模块都有其自己的功能。
上电后,通过DS18B20可以检测到温度,并在显示器上显示。
2.2整体框图
图1温度报警器总电路图
2.3模块功能说明
本系统共分为三块模块。
单片机模块,这部分主要实现数据的处理,输出执行,报警设置功能
显示模块可以分别显示实时温度值,温度上下限。
温度传感模块的主要功能是通过DS18B20的强大功能实现对温度的采集及发送到计算机。
图2温度报警器流程图
Yes
No
三硬件电路设计
3.1各模块设计
3.1.1传感器的选择
采用DALLAS最新单线数字温度传感器DS18B20。
新的“一线器件”体积更小、适用电压更宽、更经济。
一线总线独特而且经济的特点,使用户可轻松地组建传感器网络,为测量系统的构建引入全新概念。
DS18B20“一线总线”数字化温度传感器也支持“一线总线”接口,测量温度范围为-55°
C,在-10~+85°
C范围内,精度为±
0.5°
C。
现场温度直接以“一线总线”的数字方式传输,大大提高了系统的抗干扰性。
适合于恶劣环境的现场温度测量,如:
环境控制、设备或过程控制、测温类消费电子产品等。
与前一代产品不同,新的产品支持3V~5.5V的电压范围,使系统设计更灵活、方便。
而且新一代产品更便宜,体积更小。
DS18B20的特性:
DS18B20可以程序设定9~12位的分辨率,精度为±
可选更小的封装方式,更宽的电压适用范围。
分辨率设定,及用户设定的报警温度存储在EEPROM中,掉电后依然保存。
DS18B20的性能是新一代产品中最好的!
性能价格比也非常出色!
继“一线总线”的早期产品后,DS1820开辟了温度传感器技术的新概念。
DS18B20使电压、特性及封装有更多的选择,让我们可以构建适合自己的经济的测温系统。
3.1.2单片机的选择
89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—FalshProgrammableandErasableReadOnlyMemory)的低电压、高性能CMOS8位微处理器,俗称单片机。
单片机的可擦除只读存储器可以反复擦除100次。
该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。
由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的89C51是一种高效微控制器。
3.1.3液晶的选择
采用LCD1602液晶显示模块,有体积小、功耗低、显示内容丰富、超薄轻巧等优点,在袖珍式仪表和低功耗应用系统中得到广泛的应用。
目前字符型液晶显示模块已经是单片机应用设计中最常用的信息显示器件。
它可以显示两行,每行16个字符,采用单+5V电源供电,外围电路配置简单,价格便宜,具有很高的性价比。
3.2各模块分析
3.2.1单片机89C51管脚图
注:
引脚说明:
①电源引脚
Vcc(40脚):
典型值+5V。
Vss(20脚):
接低电平。
②外部晶振
X1、X2分别与晶体两端相连接。
当采用外部时钟信号时,X2接振荡信号,X1接地
。
③输入输出口引脚:
P0口:
I/O双向口。
作输入口时,应先软件置“1”。
P1口:
P2口:
P3口:
④控制引脚:
RST/Vpd、ALE/-PROG、-PSEN、-EA/Vpp组成了MSC-51的控制总线。
RST/Vpd(9脚):
复位信号输入端(高电平有效)。
第二功能:
加+5V备用电源,可以实现掉电保护RAM信息不丢失。
ALE/-PROG(30脚):
地址锁存信号输出端。
编程脉冲输入。
-PSEN(29脚):
外部程序存储器读选通信号。
-EA/Vpp(31脚):
外部程序存储器使能端。
编程电压输入端(+21V)。
3.2.2DS18B20引脚及管脚功能介绍
注
DQ:
数字信号输入/输出端。
GND:
电源地端。
VDD:
外接供电电源输入端(在寄生电源接线时此脚应接地)。
3.2.3LCD1602液晶显示介绍
管脚功能
1602采用标准的16脚接口
第1脚:
VSS为电源地
第2脚:
VDD接5V电源正极
第3脚:
V0为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高。
第4脚:
RS为寄存器选择,高电平1时选择数据寄存器、低电平0时选择指令寄存器。
第5脚:
RW为读写信号线,高电平
(1)时进行读操作,低电平(0)时进行写操作。
第6脚:
E(或EN)端为使能(enable)端。
第7~14脚:
D0~D7为8位双向数据端。
第15~16脚:
空脚或背灯电源。
15脚背光正极,16脚背光负极。
四控制软件设计及电路图
4.1单片机模块电路图及分析
图3单片机接线图
P1接液晶数据口,P0接3个二极管,P2接8个按钮,P3.3接蜂鸣器,P3.4接液晶的RS,P3.5接液晶的R/W,P3.6接液晶的EN,P3.7接温度传感器,其他按单片机最小系统连接。
4.2液晶显示模块电路图及分析
图3液晶接线图
液晶显示模块的子程序:
/*************************lcd1602程序**************************/
voiddelay1ms(unsignedintms)//延时1毫秒(不够精确的)
{unsignedinti,j;
for(i=0;
i<
ms;
i++)
for(j=0;
j<
100;
j++);
}
voidwr_com(unsignedcharcom)//写指令//
{delay1ms
(1);
RS=0;
RW=0;
EN=0;
P1=com;
delay1ms
(1);
EN=1;
voidwr_dat(unsignedchardat)//写数据//
{delay1ms
(1);
;
RS=1;
P1=dat;
}
voidlcd_init()//初始化设置//
{delay1ms(15);
wr_com(0x38);
delay1ms(5);
wr_com(0x08);
wr_com(0x0e);
wr_com(0x06);
wr_com(0x01);
voiddisplay(unsignedchar*p)//显示//
{
while(*p!
='
\0'
)
wr_dat(*p);
p++;
delay1ms
(1);
4.3温度传感器模块电路图及分析
图4温度传感器接线图
温度传感器读取温度以及显示温度的子程序:
/******************************ds1820程序***************************************/
voiddelay_18B20(unsignedinti)//延时1微秒
while(i--);
voidds1820rst()/*ds1820复位*/
{unsignedcharx=0;
DQ=1;
//DQ复位
delay_18B20(4);
//延时
DQ=0;
//DQ拉低
delay_18B20(100);
//精确延时大于480us
//拉高
delay_18B20(40);
}
uchards1820rd()/*读数据*/
{unsignedchari=0;
unsignedchardat=0;
for(i=8;
i>
0;
i--)
{DQ=0;
//给脉冲信号
dat>
>
=1;
DQ=1;
if(DQ)
dat|=0x80;
delay_18B20(10);
return(dat);
voidds1820wr(ucharwdata)/*写数据*/
{unsignedchari=0;
i>
i--)
DQ=wdata&
0x01;
delay_18B20(10);
wdata>
read_temp()/*读取温度值并转换*/
{uchara,b;
ds1820rst();
ds1820wr(0xcc);
//*跳过读序列号*/
ds1820wr(0x44);
//*启动温度转换*/
//*跳过读序列号*/
ds1820wr(0xbe);
//*读取温度*/
a=ds1820rd();
b=ds1820rd();
tvalue=b;
tvalue<
<
=8;
tvalue=tvalue|a;
if(tvalue<
0x0fff)
tflag=0;
else
{tvalue=~tvalue+1;
tflag=1;
tvalue=tvalue*(0.625);
//温度值扩大10倍,精确到1位小数
return(tvalue);
/*******************************************************************/
voidds1820disp()//温度值显示
{ucharflagdat;
disdata[0]=tvalue/1000+0x30;
//百位数
disdata[1]=tvalue%1000/100+0x30;
//十位数
disdata[2]=tvalue%100/10+0x30;
//个位数
disdata[3]=tvalue%10+0x30;
//小数位
if(tflag==0)
flagdat=0x20;
//正温度不显示符号
flagdat=0x2d;
//负温度显示负号:
-
if(disdata[0]==0x30)
{disdata[0]=0x20;
//如果百位为0,不显示
if(disdata[1]==0x30)
{disdata[1]=0x20;
//如果百位为0,十位为0也不显示
}
wr_com(0x89);
wr_dat(flagdat);
//显示符号位
wr_com(0x8a);
wr_dat(disdata[0]);
//显示百位
wr_com(0x8b);
wr_dat(disdata[1]);
//显示十位
wr_com(0x8c);
wr_dat(disdata[2]);
//显示个位
wr_com(0x8d);
wr_dat(0x2e);
//显示小数点
wr_com(0x8e);
wr_dat(disdata[3]);
//显示小数位
五系统调试及遇到的问题
开始我们只是做温度报警,因为温度传感器选择的是数字式温度传感器,老师觉得过于简单,所以帮我们也想了很多其他功能。
1.开机复位欢迎词的移动显示
unsignedcharcodestr3[]={"
Welcome!
"
};
unsignedcharcodestr4[]={"
================"
init_play()//初始化显示
{
wr_com(0x80+0x10);
//屏幕外等待
display(str3);
wr_com(0xc0+0x10);
display(str4);
for(num=0;
num<
16;
num++)//屏幕左移
wr_com(0x18);
delay1ms(200);
2.得到键盘值
ucharGetKey()//读取键值
ucharK;
if(P2==0xff)return0;
//检查是否有键按下
delay1ms(10);
switch(P2)
case0xfe:
K=1;
break;
case0xfd:
K=2;
case0xfb:
K=3;
case0xf7:
K=4;
case0xef:
K=5;
case0xdf:
K=6;
case0xbf:
K=7;
case0x7f:
K=8;
default:
K=0;
while(P2!
=0xff);
Beep();
returnK;
3.键盘值处理
voidKeyProcess(ucharKey)//键盘处理
uchart=0;
switch(Key)
case1:
if((h1<
h2)&
&
(l<
h1))h1--;
case2:
h1))h1++;
delay1ms(10);
case3:
h1))h2--;
case4:
h1))h2++;
case5:
h1))l--;
case6:
h1))l++;
case7:
lcd_init();
init_play2();
4.按键提示音
voidBeep()//蜂鸣器按键提示音
uchari,j=70;
for(i=0;
200;
{
while(--j);
baojing=0;
delay1ms(300);
baojing=1;
5.温度比较以及处理都直接放在主程序中
voidmain()
{
uchark;
ucharKey;
P2=0xff;
init_play();
//初始化显示
delay1ms(1000);
init_play2();
while
(1)
read_temp();
//读取温度
ds1820disp();
//显示
Key=GetKey();
if(Key!
=0)
{KeyProcess(Key);
=7)
{lcd_init();
init_play1();
k=tvalue/10;
if((k<
h1)&
(k>
l))//温度比较处理
{led1=1;
led2=0;
led3=0;
baojing=1;
elseif((k>
=h1)&
(k<
=h2))
while((k>
led1=0;
led2=1;
Key=GetKey();
delay1ms(600);
led2=~led2;
baojing=~baojing;
elseif(k>
h2)
{led1=0;
led3=1;
baojing=0;
elseif(k<
=l)
一开始老师给我们加的功能让我们很为难,不知道怎么编所以我们都想推辞掉,不过在编写这些子程序的过程中慢慢的感觉很有趣,反而觉得挺简单的还是,但也会碰到很多问题,比如说显示温度上下限的时候一开始无法显示数字出来的是乱码,重新编写后又变成了日文,后来看了参考书后,最后用了一个0到9的数组,要显示的数字从数组中取得,这样就好了,终于能显示出来了,但是发现它无法记时改变数字,要重新按键才会显示新的上下限温度,后来发现时键盘处理中有点问题,这个我们花了好久才解决的,就是把去掉一个按键处理,把它用if语句独立出来,这样后就能记时改变温度,还有一个问题是我们发现在报警时我们无法改变其温度上下限和其他按键,也就是报警时按键无效了,后来知道了我们的报警程序是用while组成,所以报警时一直在while语句中做循环,按键当然无效,这个的解决办法马上就能想到了,就是在while语句中再加入读取键盘值和键盘值处理的子程序就ok了。
其他别的小问题什么的我们组最后都很好的及时的解决了,这次的设计我们组觉得还是比较成功的,做出了比预期更好的设计来。
六个人小结
6.1组长
为期一周的单片机课程设计终于结束了,这一个星期真的蛮累的,大家都是忙忙碌碌的,我也不例外,这次实训我被安排到了组长,因为寒假里带回家的面包板调试不出来,所以寒假里没怎么做,这礼拜就有点忙了,但还是感谢学校给我这次学习的机会,让我更加了解到单片机的有趣,和它的无穷魅力。
我给我的其他组员分别安排了工作,他们也积极地配合我一起完成这次的单片机设计,一开始我过了一个寒假有点生疏,想到编程就感觉自己这个不会那个不会的,后来慢慢的看点书慢慢的就开始有感觉了,老师觉得我们的设计太简单,不停地给我们组的设计加功能,一开始觉得挺为难的,不过还是会慢慢做出来,完成老师提的要求,并且也对自己的编程能力也得到了提高,几乎每天对我都有新的挑战,每天都要克服新的困难。
我在组中的工作主要是编程和监制吧,帮助和监督他们焊接和调试还有拟论文等工作,大家学习和工作
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 温度 报警器