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

上传人:tbuqq 文档编号:5259720 上传时间:2020-03-04 格式:PDF 页数:23 大小:1.32MB
返回 下载 相关 举报
基于单片机室内环境检测.pdf_第1页
第1页 / 共23页
基于单片机室内环境检测.pdf_第2页
第2页 / 共23页
基于单片机室内环境检测.pdf_第3页
第3页 / 共23页
基于单片机室内环境检测.pdf_第4页
第4页 / 共23页
基于单片机室内环境检测.pdf_第5页
第5页 / 共23页
点击查看更多>>
资源描述

《基于单片机室内环境检测.pdf》由会员分享,可在线阅读,更多相关《基于单片机室内环境检测.pdf(23页珍藏版)》请在三一文库上搜索。

1、一、设计任务 本系统满足室内环境变量实行全面、实时、长期监测的要求,实现室内环境温湿度、 可燃气体浓度检测的自动化和智能化。系统以单片机为核心,以温度、湿度传感器,气敏 传感器作为测量元件,通过单片机与智能传感器相连,采集并存储智能传感器的测量数 据,经过分析处理将结果显示于LCD 液晶屏。在单片机系统中,还要实现超限报警和数据 辅助存储功能。 二、方案设计 2.1 硬件设计 在室内环境监测硬件设计上,由单片机 #include #include #include #include #define uchar unsigned char #define uint unsigned int Un

2、signed char TempBuffer5。 Uchar humibuffer4。 Uchar qitibuffer3。 Void main wendu_to_str( int i。 int TempBuffer5。 for(i=0。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(

3、 int i。 for(i=0。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 qitibuffer0=b1。 qitibuffer1=b2。 qitibuffer2=b3。 printf(“%d,”qitibufferi。 printf(“n ”。 Void show_LCD( LCD_Initial(。 text_jishuan_te

4、mp11(。 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_1

5、602_2005_4_9 #define LCD_CHAR_1602_2005_4_9 #include 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_COMMAND 0/Command #define LCD DATA 1 /

6、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 /显示关

7、 #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

8、/画面可移动 #define LCD_NO_MOVE 0x00 /default Void 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 0x04 Void LCD_Move(unsigned char object,unsigned char direction if(object=LCD_CU

9、RSOR LCD_Write(LCD_COMMAND,0x10|diriction。 if(object=LCD_SCREEN LCD_Write(LCD_COMMAND,0x18|diriction。 / 初始化 LCD Void 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

10、_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

11、_COMMAND,0x40|(place*8 。 for(i=0。i LCD_Write(LCD_DATA,useri。 #endif 温湿度传感器驱动程序 SHT11.h #include /头文件 #include #include #include /Keil library sbit DATA=P24 。 /数据 sbit SCK=P23 。 /时钟 #define TEMP_ML 0x03 /000 0001 1 温度命令 #define HUMI_ML 0x05 /000 0010 1 湿度命令 unsigned char error。 /全局错误变量 unsigned char

12、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 long unsigned int recs=0。/ 接收次数 uchar TempBuff

13、er5。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 。 /第一个脉冲 D

14、ATA=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 时钟为 0 for/写一个字节返回应答信号 Unsigned char I。 ack=0。 for(i=0x80。i0 。i/=2 /释放数据总线 if(i&valueDATA=1。 /写入值 Else DATA=0。

15、 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 。 /释放数据总线 for0 。i/=2 ) /位移 8 位 SCK=1。 /上升沿读入 if(DATAval=(val|i /确定值 SCK=0 。 DATA=0 。 /读应答信号应答为1,应答为0 通过 CPU下拉为应答 SCK=1 。

16、第 9 个脉冲 _nop_( 。 _nop_( 。 _nop_(。 /pulswith approx.5us SCK=0 。 DATA=1 。 /释放数据总线 temp_h=val 。 val=0 。 / 低 8 位 DATA=1 。 /释放数据总线 for(i=0x80。i0 。i/=2 /位移 8 位 SCK=1。 /上升沿读入 if(DATAval=(val|i /确定值 SCK=0 。 DATA=1 。/0 。 /不需要应答通过 CPU下拉为应答 SCK=1 。第 9 个脉冲 _nop_( 。 _nop_( 。 _nop_(。 /pulswith approx.5us SCK=0 。

17、DATA=1 。 /释放数据总线 temp_LL=val return val。 / 测量温度或者是湿度,返回校验值 text_a(unsigned char ml unsigned int I。 start(。 /启动 write(ml。 /写入测温度 if。 /复位 write(ml。 /写入测温度 /DATA=1。/ 释放数据总线 For(i=0 。iif(DATA=0break。 read( 。/ 度温度 text_jishuan_temp( float aa=0,bb=0,temp zi。 int abcd=0。 aa=(floattemp_h*256+(floattemp_LL。

18、temp_zi=0.01*aa-40。 if (temp_zi 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=(floattemp_h*256+(floattemp_LL。 baa*aa*2.8/1000000。 aa=0.0405*aa 。 aa=aa-

19、4-bb 。 humi_zi= humi_zi*10。 abcd=(inthumi_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 /

20、延时 n 个 10us12M 晶振 uint i。 for(i=n。i0 。i _nop_( 。 _nop_( 。 _nop_(。 _nop_(。 _nop_( 。 _nop_(。 四、心得体会 通过本次课程设计的学习与实践,我逐渐对单片机产生了兴趣,并且对温度气敏传感 器、 LED 显示器都有了一定的了解,在设计过程中通过图书馆、网上查阅资料,自己的专 业知识也有了一定的提高,相信这次设计对我会有很大的帮助。 在本系统中,采用模块化、层次化设计。单片机监测信息的采集、报警和处理,能够 迅速、全面准确地获取系统的各种特征量,完成室内环境温湿度参数、有害气体浓度参数 的实时监测。同时LCD 液晶

21、屏显示得到的数据,供人们浏览、查询和进行控制,满足了系 统监测的要求。本系统的优良功能可实现对室内环境温湿度的全面、实时、自动的监测, 及时发现问题,采取有效防护措施,减少或避免灾难性事故的发生。 五、参考文献 【1】李朝青 . 单片机原理及接口技术. 北京:北京航空航天大学出版社,2006 年版 【2】杨素行 . 模拟电子技术基础简明教程第三版) . 北京:高等教育出版社,2006 年版 【3】徐安,陈耀,李锐华,郭其一. 微型计算机控制技术. 北京:电子工艺出版社,2008 版 【4】高吉祥全国大学生电子设计竞赛培训系列教程模拟电子线路设计 . 北京:电子工业 出版 ,2007 版 【5】

22、张毅刚单片机原理及应用 . 北京 :高等教育出版社, 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 开始 定义管脚 设置显示模式 送显示地址 设置输入模式 送显示数据 返回 开始 启动传输 发测量命令 读取数据 返回 P2.4=0?

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1