欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    基于单片机的室内环境检测.docx

    • 资源ID:30653317       资源大小:956KB        全文页数:24页
    • 资源格式: DOCX        下载积分:9金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要9金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    基于单片机的室内环境检测.docx

    一、设计任务本系统满足室环境变量实行全面、实时、长期监测的要求,实现室环境温湿度、可燃气体浓度检测的自动化和智能化。系统以单片机为核心,以温度、湿度传感器,气敏传感器作为测量元件,通过单片机与智能传感器相连,采集并存储智能传感器的测量数据,经过分析处理将结果显示于LCD液晶屏。在单片机系统中,还要实现超限报警和数据辅助存储功能。二、方案设计2.1硬件设计在室环境监测硬件设计上,由单片机(AT89C52)控制整个系统的运作,MQ211气敏传感器模块实现监测室可燃气体功能、SHT11温湿度传感器模块实现监测室的温度和湿度功能、按键模块实现设置报警上限功能、LCD液晶模块实现显示功能、蜂鸣器报警功能。这六大模块组成的原理图来实现家庭环境检测系统的各个功能。在该设计中,选用了AT89C52单片机作为控制芯片。该芯片有丰富的部资源,丰富的I/O接口,低电压,低功耗等优点,并且置看门狗电路,支持串口程序烧录,使用方便快捷,可以进行C语言程序编写,易于实现。温湿度测量方面选用瑞士SHT11芯片,该芯片置A/D转换芯片,管脚接线简单,测量精度高等优点,气敏传感器使用多气体测量传感器MQ211,其具有多种可燃气体的测试功能,简单高效。A/D转换模块选用ADC0831,具有接口电路简单,成本低等优点,该芯片为一路八位数转换芯片需求。环境监测系统硬件结构图如图1. 图1 系统硬件结构图2.1.1芯片管脚连接在该设计电路中,用单片机I/O口中的P1口作为LCD液晶屏的数据口,采用并口数据传输模式,P2口中P2.0、P2.1、P2.2作为控制信号输出口,分别接LCD的RS、R/W、E控制端;P2.3和P2.4分别接温湿度传感器SHT11的SCK和DATA,P2.5、P2.6和P2.7接按键电路。P1口的P1.1、P1.2分别接ADC0831的控制端,P1.4接报警器的蜂鸣器。图2 STC89C52管脚分布图2.1.2 晶振和复位电路时钟电路用于产生时钟信号,时钟信号是单片机部各种微操作的时间基准。复位对单片机来说,是程序还没有开始执行,是在做准备工作。晶振电路和复位电路见图3.图3 晶振和复位电路2.1.3 气敏传感器MQ211型气敏元件是一种通用性较强的气敏元件,气敏传感器的敏感元件是气敏电阻器,气敏电阻器的阻值随吸附气体的浓度变化而变化,利用者一特性检测气体浓度。气敏传感器的连接如图4.图4 气敏传感器的连接2.1.4 温湿度传感器传感器SHT11将温度感测、湿度感测、信号变换、A/D转换和加热器等功能集成到一个芯片上,其部结构如图5所示。该芯片包括一个电容性聚合体湿度敏感元件和一个用能隙材料制成的温度敏感元件。这两个敏感元件分别将湿度和温度转换成电信号,该电信号首先进入微弱信号放大器进行放大,然后进入一个14位的A/D转换器,最后经过二线串行数字接口输出数字信号。图5 温湿度传感器部结构图6 温湿度传感器指令代码 图7 温湿度传感器电路2.1.5 LCD显示模块设计在该设计中,LCD要显示温度、湿度、可燃气体是否超标的功能,所以使用了一块行列点阵数为128*64,每行可以显示8个字符,共显示2行字的LCD。图8 LCD管脚名称和功能LCD的连接电路:当LCD选择并口时,要把8个数据送到芯片,而LCD选择串口时,只需要把3个数据送到芯片。由于芯片的管脚丰富够用,所以LCD的连接方式选择并口。LCD的连接方式如图9所示。图9 LCD连接电路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.3 LCD1602显示模块程序设计2.2.4 SHT11温湿度测量模块程序三、程序代码#include<REG51.H>#include<intrins.h>#include<LCD1602.h>#include<sht10.h>#include<adc0831.h>#define uchar unsigned char#define uint unsigned intUnsigned char TempBuffer5;Uchar humibuffer4;Uchar qitibuffer3;Void main wendu_to_str() int i;int TempBuffer5;for(i=0;i<5;i+)Tempbutteri=i;Tempbutter0=(SHUOxts_zi);Tempbutter1=(SHUOxtg_zi);Tempbutter2=0xdf;Tempbutter3=C;Tempbutter4=0;Printf(“%d”,TempBufferi);Printf(“n”);Void main shidu_to_str()int i;for(i=0;i<4;i+)humibufferi=i;humibuffer0=(SHUOxzz_zi);humibuffer1=(SHUOxsg_zi);humibuffer2=%;humibuffer3=0;printf(“n”);Void main qiti_to_str()int I;for(i=0;i<3;i+)qitibuffer0=b1;qitibuffer1=b2;qitibuffer2=b3;printf(“%d,”qitibufferi);printf(“n”);Void show_LCD()LCD_Initial();text_jishuan_temp11();data_pro();wendu_to_str();Goto XY(6,1);Print(TempBuffer);Goto XY(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#ifndef LCD_CHAR_1602_2005_4_9#define LCD_CHAR_1602_2005_4_9#include<intrins.h>sbit LcdRs=P20;sbit LcdRw=P21;sbit LcdEn=P22;sfr DBPort=0x80;unsigned char LCD_Wait(void)LcdRs=0;LcdRw=1;_nop_();LcdEn=1;_nop_();/while(DBPort&0x80);LcdEn=0;return DBPort;/向LCD写入命令或数据#define LCD_COMMAND0 /Command#define LCD DATA 1 /DATA#define LCD_CLEAR_SCREEN 0x01 /清屏#define LCD_HOMING 0x02 /光标返回原点Void LCD_Write(bit style,unsigned char input)LcdEn=0;LcdRs=style;LcdRw=0; _nop_();DBPort=input; _nop_();/注意顺序LcdEn=1; _nop_();/注意顺序LcdEn=0; _nop_();LCD_wait(); /设置显示模式#define LCD_SHOW 0x04 /显示开#define LCD_HIDE 0x00 /显示关#define LCD_CURSOR 0x02 /显示光标#define LCD_NO_CURSOR 0x00 /无光标#define LCD_FLASH 0x01 /光标闪动#define LCD_NO_FLASH 0x00 /光标不闪动Void LCD_SetDisplay(unsigned char DisplayMode) LCD_Write(LCD_COMMAND,0x08|DisplayMode);/设置输入模式#define LCD_AC_UP 0x02#define LCD_AC_DOWN 0x00 /default#define LCD_MOVE 0x01 /画面可移动#define LCD_NO_MOVE 0x00 /defaultVoid LCD_SetInput(unsigned char InputMode)LCD_Write(LCD_COMMAND,0x04|InputMode);/移动光标或屏幕#define LCD_CURSOR 0x02#define LCD_SCREEN 0x08#define LCD_LEFT 0x00#define LCD_RIGHT 0x04Void LCD_Move(unsigned char object,unsigned char direction) if(object=LCD_CURSOR)LCD_Write(LCD_COMMAND,0x10|diriction);if(object=LCD_SCREEN)LCD_Write(LCD_COMMAND,0x18|diriction);/初始化LCDVoid LCD_Initial()LcdEn=0;LCD_Write(LCD_COMMAND,0x38);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);Void GotoXY(unsigned char x,unsigned char y)if(y=0)LCD_Write(LCD_COMMAND,0x80|x);if(y=1)LCD_Write(LCD_COMMAND,0x80|(x-0x40);Void Print(unsigned char *str)while(*str!=0)LCD_Write(LCD_DATA,*str);str+;Void LCD_LoadChar(unsigned char user8,unsigned char place)Unsigned char i;LCD_Write(LCD_COMMAND,0x40|(place*8);for(i=0;i<8;i+)LCD_Write(LCD_DATA,useri);#endif温湿度传感器驱动程序SHT11.h#include<reg51.h> /头文件#include<intrins.h>#include<stdio.h>#include<math.h> /Keil librarysbit DATA=P24; /数据sbit SCK=P23; /时钟#define TEMP_ML 0x03 /000 0001 1 温度命令#define HUMI_ML 0x05 /000 0010 1 湿度命令unsigned char error; /全局错误变量unsigned char ack; /全局错误变量/float temp_zi; /全局应答变量/float humi_zi; /全局应答变量unsigned char temp_h; /全局应答变量unsigned char temp_LL; /全局应答变量unsigned char humi_h; unsigned char temp_LL#define uchar unsigned char /定义一下方便使用#define unit unsigned int#define ulong unsigned longunsigned int recs=0;/接收次数uchar TempBuffer5;uchar humibuffer4;const unsigned char SHUO15=”0123456789.%RH”;int xts_zi=0;/温度值int xtg_zi=0;/温度个位值int xtd_zi=0;/温度点值int xss_zi=0;/湿度值int xsg_zi=0;/湿度个位值int xsd_zi=0;/湿度点值sbit soud=P14;/声音/基本驱动程序/系统初始化Void start(void) /启动DATA=1; SCK=0; /数据为1,SCK=0_nop_();SCK=1; /第一个脉冲DATA=0; /数据跌落_nop_();SCK=0; /完成一个脉冲_nop_(); _nop_(); _nop_();SCK=1; /再一个脉冲_nop_(); DATA=1; /数据变为1_nop_();SCK=0; /变为该脉冲Void sht_rest(void) /复位unsigned char I;DATA=1;SCK=0; /数据为1时钟为0for(i=0;i<9;i+) /9个脉冲为复位SCK=1;SCK=0;Start(); /启动char write(unsigned char value)/写一个字节 返回应答信号 Unsigned char I;ack=0;for(i=0x80;i>0;i/=2) /释放数据总线if(i&value)DATA=1; /写入值Else DATA=0;SCK=1; /上升沿写入_nop_(); _nop_(); _nop_(); /延时SCK=0;DATA=1; /释放数据总线SCK=1;return ack; /error=1表示没有应答char read()/读一个字节返回应答信号Unsigned char I,val=0;temp_LL=0;temp_h=0;DATA=1; /释放数据总线for(i=0x80;i>0;i/=2) /位移8位SCK=1; /上升沿读入if(DATA)val=(val|i) /确定值SCK=0;DATA=0; /读应答信号应答为1,应答为0通过CPU下拉为应答SCK=1; 第9个脉冲_nop_(); _nop_(); _nop_(); /pulswith approx.5usSCK=0;DATA=1; /释放数据总线temp_h=val;val=0;/低8位DATA=1; /释放数据总线for(i=0x80;i>0;i/=2) /位移8位SCK=1; /上升沿读入if(DATA)val=(val|i) /确定值SCK=0;DATA=1;/0; /不需要应答 通过CPU下拉为应答SCK=1; 第9个脉冲_nop_(); _nop_(); _nop_(); /pulswith approx.5usSCK=0;DATA=1; /释放数据总线temp_LL=valreturn val;/测量温度或者是湿度,返回校验值text_a(unsigned char ml)unsigned int I;start(); /启动write(ml); /写入测温度if(ack=1)sht_rest(); /复位write(ml); /写入测温度/DATA=1;/ 释放数据总线For(i=0;i<65535;i+)if(DATA=0)break;read();/度温度text_jishuan_temp()float aa=0,bb=0,temp zi;int abcd=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()float aa=0,bb=0,humi_zi;int abcd=0;aa=(float)temp_h*256+(float)temp_LL;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;abcd=abcd%100;xsg_zi=abcd/10;abcd=abcd%10;xsd_zi=abcd/1;text_jishuan_temp11()error=0;ack=0;sht_rest(); /复位text_a(TEMP_ML);text_jishuan_temp();text_a(HUMI_ML);text_jishuan_humi();unsigned int wendu,shidu;void delay_n10us(unit n) /延时n个10us12M晶振uint i;for(i=n;i>0;i-)_nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();四、心得体会通过本次课程设计的学习与实践,我逐渐对单片机产生了兴趣,并且对温度气敏传感器、LED显示器都有了一定的了解,在设计过程过图书馆、网上查阅资料,自己的专业知识也有了一定的提高,相信这次设计对我会有很大的帮助。在本系统中,采用模块化、层次化设计。单片机监测信息的采集、报警和处理,能够迅速、全面准确地获取系统的各种特征量,完成室环境温湿度参数、有害气体浓度参数的实时监测。同时LCD液晶屏显示得到的数据,供人们浏览、查询和进行控制,满足了系统监测的要求。本系统的优良功能可实现对室环境温湿度的全面、实时、自动的监测,与时发现问题,采取有效防护措施,减少或避免灾难性事故的发生。五、参考文献1朝青.单片机原理与接口技术.:航空航天大学,2006年版2素行.模拟电子技术基础简明教程(第三版).:高等教育,2006年版3徐安,耀,锐华,郭其一.微型计算机控制技术.:电子工艺,2008版4高吉祥 全国大学生电子设计竞赛培训系列教程模拟电子线路设计 . :电子工业出版,2007版5毅刚 单片机原理与应用 . :高等教育, 2003.6郭天祥 新概念单片机语言教程入门 、提高 、开发拓展全攻略 M. :电子工业,20097海成 单片机与应用系统设计原理与实践测试结果 :航空航天大学,2009. 8于勇 ,戴佳 ,长江.51 单片机 C 语言常用模块与 综合系统设计M. :电子工业,2007. 9高吉祥 全国大学生电子设计竞赛培训系列教测试结果程模拟电子线路设计 M. :电子工业 ,2007.10翟玉文 电子设计与实践 :中国电力2005.11肖忠祥 数据采集原理 西北工业 ,2002.12谭浩强 程序设计 (第三版 ) 清华大学,2005.13黄智伟 .全国大学生电子设计竞赛训练教程测试结果 :电子工业 2005.14杰 黄鸿 传感器与检测技术 高等教育,2008.15广第.单片机基础.航空航天.2001返回送显示数据送显示地址设置输入模式设置显示模式定义管脚开始返回读取数据开始P2.4=0?发测量命令启动传输24 / 24

    注意事项

    本文(基于单片机的室内环境检测.docx)为本站会员(可****阿)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开