基于单片机的室内环境检测word文档良心出品Word格式文档下载.docx
- 文档编号:6454057
- 上传时间:2023-05-06
- 格式:DOCX
- 页数:27
- 大小:970.86KB
基于单片机的室内环境检测word文档良心出品Word格式文档下载.docx
《基于单片机的室内环境检测word文档良心出品Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《基于单片机的室内环境检测word文档良心出品Word格式文档下载.docx(27页珍藏版)》请在冰点文库上搜索。
当LCD选择并口时,要把8个数据送到芯片,而LCD选择串口时,只需要把3个数据送到芯片。
由于芯片的管脚丰富够用,所以LCD的连接方式选择并口。
LCD的连接方式如图9所示。
图9LCD连接电路
2.1.6按键电路块
图10是按键输入的典型电路,按键S1、S2、S3断开时,端口P2.5、P2.6、P2.7上的信号为高电平,按键S1、S2、S3合上时,端口P2.5、P2.6、P2.7上的信号为低电平。
电阻起到分压、限流作用。
当按键电路设计成这种硬件连接时,按键可以采取中断的形式进行读取,也可以采用循环扫描的形式读取,为程序的编写提供了选择的余地。
图10按键电路
2.1.7报警电路设计
图11,在本系统中,采用P1.4口为报警电路输出口,当有报警信号时,蜂鸣器鸣叫,提醒安全指标超标或不正常,须采取安全措施改变室内环境质量,如配合智能建筑系统,可实现自动化无人操作,方便又安全。
图11报警电路
2.2软件设计
在上述硬件基础上,编写系统程序,实现以下几项功能:
(1)通电时蜂鸣器响一声,LCD液晶显示室内温度、湿度、可燃气体浓度状态。
(2)当室内温度大于设定的温度、湿度(例如温度28度、湿度80%)、检测到可燃气体超标时,蜂鸣器报警。
(3)当第一次按设置键:
温度值闪烁,这是可以通过按“+”或者“—”按键设定温度上限值,4秒钟无键按下停止闪烁,按“+”或者“—”设置温度下限值;
第二次按设置按键:
湿度值闪烁,这时可以通过按“+”或者“—”设置湿度上限值,4秒钟无键按下停止闪烁,按“+”或“—”设置湿度下限值;
第三次按设置按键,退出设置状态。
2.2.1软件系统设计
系统的软件设计采用C语言编程,软件结构为模块化结构,由主程序、自检程序、SHT11数据采集与处理程序、ADC0831数据采集处理程序、报警控制程序及显示程序等模块组成,其软件模块结构如图12所示。
图12软件结构方框图
2.2.2主程序设计
2.2.3LCD1602显示模块程序设计
2.2.4SHT11温湿度测量模块程序
三、程序代码
#include<
REG51.H>
intrins.h>
LCD1602.h>
sht10.h>
adc0831.h>
#defineucharunsignedchar
#defineuintunsignedint
UnsignedcharTempBuffer[5];
Ucharhumibuffer[4];
Ucharqitibuffer[3];
Voidmainwendu_to_str()
{inti;
intTempBuffer[5];
for(i=0;
i<
5;
i++)
Tempbutter[i]=i;
Tempbutter[0]=(SHUO[xts_zi]);
Tempbutter[1]=(SHUO[xtg_zi]);
Tempbutter[2]=0xdf;
Tempbutter[3]=’C’;
Tempbutter[4]=’\0’;
Printf(“%d”,TempBuffer[i]);
Printf(“\n”);
}
Voidmainshidu_to_str()
{inti;
4;
humibuffer[i]=i;
humibuffer[0]=(SHUO[xzz_zi]);
humibuffer[1]=(SHUO[xsg_zi]);
humibuffer[2]=’%’;
humibuffer[3]=’\0’;
printf(“\n”);
Voidmainqiti_to_str()
{intI;
3;
qitibuffer[0]=b1;
qitibuffer[1]=b2;
qitibuffer[2]=b3;
printf(“%d,”qitibuffer[i]);
Voidshow_LCD()
{
LCD_Initial();
text_jishuan_temp11();
data_pro();
wendu_to_str();
GotoXY(6,1);
Print(TempBuffer);
GotoXY(0,1);
Print(“wendu”);
shidu_to_str();
GotoXY(11,1);
Print(“shidu”);
GotoXY(17,1);
Print(humibuffer);
GotoXY(13,0);
Print(qitibuffer);
csh()
P2.0=0;
main()
csh();
show_LCD();
delay_n10us(100000);
LCD显示屏驱动程序
1602.h
#ifndefLCD_CHAR_1602_2005_4_9
#defineLCD_CHAR_1602_2005_4_9
sbitLcdRs=P2^0;
sbitLcdRw=P2^1;
sbitLcdEn=P2^2;
sfrDBPort=0x80;
unsignedcharLCD_Wait(void)
LcdRs=0;
LcdRw=1;
_nop_();
LcdEn=1;
//while(DBPort&
0x80);
LcdEn=0;
returnDBPort;
//向LCD写入命令或数据
#defineLCD_COMMAND
1//Command
#defineLCDDATA1//DATA
#defineLCD_CLEAR_SCREEN0x01//清屏
#defineLCD_HOMING0x02//光标返回原点
VoidLCD_Write(bitstyle,unsignedcharinput)
LcdRs=style;
LcdRw=0;
_nop_();
DBPort=input;
//注意顺序
LCD_wait();
//设置显示模式
#defineLCD_SHOW0x04//显示开
#defineLCD_HIDE0x00//显示关
#defineLCD_CURSOR0x02//显示光标
#defineLCD_NO_CURSOR0x00//无光标
#defineLCD_FLASH0x01//光标闪动
#defineLCD_NO_FLASH0x00//光标不闪动
VoidLCD_SetDisplay(unsignedcharDisplayMode)
LCD_Write(LCD_COMMAND,0x08|DisplayMode);
//设置输入模式
#defineLCD_AC_UP0x02
#defineLCD_AC_DOWN0x00//default
#defineLCD_MOVE0x01//画面可移动
#defineLCD_NO_MOVE0x00//default
VoidLCD_SetInput(unsignedcharInputMode)
LCD_Write(LCD_COMMAND,0x04|InputMode);
//移动光标或屏幕
#defineLCD_CURSOR0x02
#defineLCD_SCREEN0x08
#defineLCD_LEFT0x00
#defineLCD_RIGHT0x04
VoidLCD_Move(unsignedcharobject,unsignedchardirection)
if(object==LCD_CURSOR)
LCD_Write(LCD_COMMAND,0x10|diriction);
if(object==LCD_SCREEN)
LCD_Write(LCD_COMMAND,0x18|diriction);
//初始化LCD
VoidLCD_Initial()
LCD_Write(LCD_COMMAND,0x38);
LCD_SetDisplay(LCD_SHOW|LCD_NO_CURSOR);
LCD_Write(LCD_COMMAND,LCD_CLEAR_SCREEN);
LCD_SetInput(LCD_AC_UP|LCD_NO_MOVE);
VoidGotoXY(unsignedcharx,unsignedchary)
if(y==0)
LCD_Write(LCD_COMMAND,0x80|x);
if(y==1)
LCD_Write(LCD_COMMAND,0x80|(x-0x40));
VoidPrint(unsignedchar*str)
while(*str!
=’\0’)
LCD_Write(LCD_DATA,*str);
str++;
VoidLCD_LoadChar(unsignedcharuser[8],unsignedcharplace)
Unsignedchari;
LCD_Write(LCD_COMMAND,0x40|(place*8));
8;
LCD_Write(LCD_DATA,user[i]);
#endif
温湿度传感器驱动程序
SHT11.h
reg51.h>
//头文件
stdio.h>
math.h>
//Keillibrary
sbitDATA=P2^4;
//数据
sbitSCK=P2^3;
//时钟
#defineTEMP_ML0x03//00000011温度命令
#defineHUMI_ML0x05//00000101湿度命令
unsignedcharerror;
//全局错误变量
unsignedcharack;
//floattemp_zi;
//全局应答变量
//floathumi_zi;
unsignedchartemp_h;
unsignedchartemp_LL;
unsignedcharhumi_h;
unsignedchartemp_LL
#defineucharunsignedchar//定义一下方便使用
#defineunitunsignedint
#defineulongunsignedlong
unsignedintrecs=0;
//接收次数
ucharTempBuffer[5];
ucharhumibuffer[4];
constunsignedcharSHUO[15]=”0123456789.%RH”;
intxts_zi=0;
//温度值
intxtg_zi=0;
//温度个位值
intxtd_zi=0;
//温度点值
intxss_zi=0;
//湿度值
intxsg_zi=0;
//湿度个位值
intxsd_zi=0;
//湿度点值
sbitsoud=P1^4;
//声音
//基本驱动程序
//系统初始化
Voidstart(void)//启动
DATA=1;
SCK=0;
//数据为1,SCK=0
SCK=1;
//第一个脉冲
DATA=0;
//数据跌落
SCK=0;
//完成一个脉冲
//再一个脉冲
DATA=1;
//数据变为1
//变为该脉冲
Voidsht_rest(void)//复位
unsignedcharI;
//数据为1时钟为0
9;
i++)//9个脉冲为复位
{SCK=1;
Start();
//启动
charwrite(unsignedcharvalue)//写一个字节返回应答信号
{
UnsignedcharI;
ack=0;
for(i=0x80;
i>
0;
i/=2)//释放数据总线
{if(i&
value)DATA=1;
//写入值
ElseDATA=0;
//上升沿写入
//延时
}DATA=1;
//释放数据总线
returnack;
//error=1表示没有应答
charread()//读一个字节返回应答信号
UnsignedcharI,val=0;
temp_LL=0;
temp_h=0;
i/=2)//位移8位
//上升沿读入
if(DATA)val=(val|i)//确定值
//读应答信号应答为1,应答为0通过CPU下拉为应答
第9个脉冲
//pulswithapprox.5us
temp_h=val;
val=0;
//低8位
//0;
//不需要应答通过CPU下拉为应答
temp_LL=val
returnval;
//测量温度或者是湿度,返回校验值
text_a(unsignedcharml)
unsignedintI;
start();
write(ml);
//写入测温度
if(ack==1)
sht_rest();
//复位
//DATA=1;
//释放数据总线
For(i=0;
65535;
i++)if(DATA==0)break;
read();
//度温度
text_jishuan_temp()
floataa=0,bb=0,tempzi;
intabcd=0;
aa=(float)temp_h*256+(float)temp_LL;
temp_zi=0.01*aa-40;
if(temp_zi<
0)
temp_zi=-temp_zi;
temp_zi=temp_zi*10;
abcd=(int)temp_zi;
xts_zi=abcd/100;
abcd=abcd%100;
xtg_zi=abcd/10;
abcd=abcd%10;
xtd_zi=abcd/1;
text_jishuan_humi()
floataa=0,bb=0,humi_zi;
baa*aa*2.8/1000000;
aa=0.0405*aa;
aa=aa-4-bb;
humi_zi=humi_zi*10;
abcd=(int)humi_zi;
xss_zi=abcd/100;
xsg_zi=abcd/10;
xsd_zi=abcd/1;
text_jishuan_temp11()
error=0;
text_a(TEMP_ML);
text_jishuan_temp();
text_a(HUMI_ML);
text_jishuan_humi();
unsignedintwendu,shidu;
voiddelay_n10us(unitn)//延时n个10us@12M晶振
uinti;
for(i=n;
i--)
四、心得体会
通过本次课程设计的学习与实践,我逐渐对单片机产生了兴趣,并且对温度气敏传感器、LED显示器都有了一定的了解,在设计过程中通过图书馆、网上查阅资料,自己的专业知识也有了一定的提高,相信这次设计对我会有很大的帮助。
在本系统中,采用模块化、层次化设计。
单片机监测信息的采集、报警和处理,能够迅速、全面准确地获取系统的各种特征量,完成室内环境温湿度参数、有害气体浓度参数的实时监测。
同时LCD液晶屏显示得到的数据,供人们浏览、查询和进行控制,满足了系统监测的要求。
本系统的优良功能可实现对室内环境温湿度的全面、实时、自动的监测,及时发现问题,采取有效防护措施,减少或避免灾难性事故的发生。
五、参考文献
【1】李朝青.单片机原理及接口技术.北京:
北京航空航天大学出版社,2006年版
【2】杨素行.模拟电子技术基础简明教程(第三版).北京:
高等教育出版社,2006年版
【3】徐安,陈耀,李锐华,郭其一.微型计算机控制技术.北京:
电子工艺出版社,2008版
【4】高吉祥全国大学生电子设计竞赛培训系列教程模拟电子线路设计.北京:
电子工业出版,2007版
【5】张毅刚单片机原理及应用.北京:
高等教育出版社,2003.
【6】郭天祥新概念单片机语言教程—入门、提高、开发拓展全攻略[M].北京:
电子工业出版社,2009
【7】刘海成单片机及应用系统设计原理与实践测试结果北京:
北京航空航天大学出版社,2009.
【8】于勇,戴佳,长江.51单片机C语言常用模块与综合系统设计[M].北京:
电子工业出版社,2007.
【9】高吉祥全国大学生电子设计竞赛培训系列教测试结果程模拟电子线路设计[M].北京:
电子工业出版社,2007.
【10】翟玉文电子设计与实践北京:
北京中国电力出版社2005.
【11】肖忠祥数据采集原理西安西北工业出版社,2002.
【12】谭浩强程序设计(第三版)北京清华大学出版社,2005.
【13】黄智伟.全国大学生电子设计竞赛训练教程测试结果北京:
电子工业出版社2005.
【14】陈杰黄鸿传感器与检测技术北京高等教育出版社,2008.
【15】李广第.单片机基础.北京航空航天出版社.2001
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 单片机 室内环境 检测 word 文档 良心 出品