ImageVerifierCode 换一换
格式:DOCX , 页数:17 ,大小:17.77KB ,
资源ID:8831995      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/8831995.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(单片机 智能环境监测系统程序.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

单片机 智能环境监测系统程序.docx

1、单片机 智能环境监测系统程序51单片机 智能环境监测系统程序王维进#include #include #include #include #include 0832.h#define uchar unsigned char#define uint unsigned int#include eeprom52.hsbit DATA = P37; /温湿度sbit E=P25; /1602使能引脚sbit RS=P27; /1602数据/命令选择引脚sbit RW=P26;sbit K1=P13;/设置键sbit K2=P14;/加sbit K3=P15;/减sbit K4=P17; /人体sbit

2、 K5=P16; /布防撤防按键sbit LED1=P31; /烟雾报警sbit LED2=P32; /温度上限sbit LED3=P33; /温度下限sbit LED4=P34; /湿度上限sbit LED5=P35; /湿度下限sbit LED6=P36; /红外报警sbit alarm=P30; /蜂鸣器uchar U8FLAG,U8temp,U8comdata,U8RH_data_H_temp,U8RH_data_L_temp,U8T_data_H_temp,U8T_data_L_temp,U8checkdata_temp;uchar U8RH_data_H,U8RH_data_L,U

3、8T_data_H,U8T_data_L,U8checkdata;uchar Mode,humidity,temperature,smog;bit BJ_LED1=1,BJ_LED2=1,BJ_LED3=1,BJ_LED4=1,BJ_LED5=1,BJ_LED6=1;bit bdata FlagStartRH;uchar flag ;/记录当前设置状态uint count;/定时器0初始化void Timer0_Init() ET0 = 1; /允许定时器0中断 TMOD = 0x11; /定时器工作方式选择 TL0 = 0xFF; TH0 = 0x4B; /定时器赋予初值 TH1=0xdc;

4、 TL1=0x00; ET1=1; TR0 = 1; /启动定时器/定时器0中断void Timer0_ISR (void) interrupt 1 using 0 uchar RHCounter; TL0 = 0xFF; TH0 = 0x4B; /定时器赋予初值 RHCounter+; if (RHCounter = 15) FlagStartRH = 1; RHCounter = 0; void Delay1(uint j) uchar i; for(;j0;j-) for(i=0;i27;i+); void Delay_10us(void) uchar i; i-; i-; i-; i-

5、; i-; i-; void COM(void) uchar i; for(i=0;i8;i+) U8FLAG=2; while(!DATA)&U8FLAG+); Delay_10us(); Delay_10us(); Delay_10us(); U8temp=0; if(DATA)U8temp=1; U8FLAG=2; while(DATA)&U8FLAG+); /超时则跳出for循环 if(U8FLAG=1)break; /判断数据位是0还是1 / 如果高电平高过预定0高电平值则数据位为 1 U8comdata=1; U8comdata|=U8temp; /0 /rof/-/-温湿度读取子

6、程序 -/-/-以下变量均为全局变量-/-温度高8位= U8T_data_H-/-温度低8位= U8T_data_L-/-湿度高8位= U8RH_data_H-/-湿度低8位= U8RH_data_L-/-校验 8位 = U8checkdata-/-调用相关子程序如下-/- Delay();, Delay_10us();,COM(); /-uchar RH(void) /主机拉低18ms DATA=0; Delay1(180); /原来为5 DATA=1; /总线由上拉电阻拉高 主机延时20us Delay_10us(); Delay_10us(); Delay_10us(); Delay_1

7、0us(); /主机设为输入 判断从机响应信号 DATA=1; /判断从机是否有低电平响应信号 如不响应则跳出,响应则向下运行 if(!DATA) /T ! U8FLAG=2; /判断从机是否发出 80us 的低电平响应信号是否结束 while(!DATA)&U8FLAG+); U8FLAG=2; /判断从机是否发出 80us 的高电平,如发出则进入数据接收状态 while(DATA)&U8FLAG+); /数据接收状态 COM(); U8RH_data_H_temp=U8comdata; COM(); U8RH_data_L_temp=U8comdata; COM(); U8T_data_H

8、_temp=U8comdata; COM(); U8T_data_L_temp=U8comdata; COM(); U8checkdata_temp=U8comdata; DATA=1; /数据校验 U8temp=(U8T_data_H_temp+U8T_data_L_temp+U8RH_data_H_temp+U8RH_data_L_temp); if(U8temp=U8checkdata_temp) U8RH_data_H=U8RH_data_H_temp; U8RH_data_L=U8RH_data_L_temp; U8T_data_H=U8T_data_H_temp; U8T_data

9、_L=U8T_data_L_temp; U8checkdata=U8checkdata_temp; return 1; else /传感器不响应 return 0; /* 文件名 : 液晶1602显示.c* 描述 : 该程序实现了对液晶1602的控制。*/* 名称 : delay()* 功能 : 延时,延时时间大概为140US。* 输入 : 无* 输出 : 无*/void delay() int i,j; for(i=0; i=10; i+) for(j=0; j99) TH=0;if(TH98) TL=0; if(TL=TH) TL=TH-1; write_1602com(0x8c);wri

10、te_1602dat(TL/10+0x30);write_1602dat(TL%10+0x30);write_1602com(0x8d); break; case 3: HH+;if(HH99) HH=0; if(HH98) HL=0; if(HL=HH) HL=HH-1; write_1602com(0xcc);write_1602dat(HL/10+0x30);write_1602dat(HL%10+0x30); write_1602com(0xcd);break; case 5: SM+;if(SM9) SM=0; write_1602com(0x83);write_1602dat(SM

11、/10+0x30);write_1602dat(SM%10+0x30);write_1602com(0x84); break; while(!K2); if(K3=0) Delay1(200); if(K3=0) switch (flag) case 1: TH-;if(TH99) TH=99; if(TH99) TL=98;if(TL=TH) TL=TH-1; write_1602com(0x8c);write_1602dat(TL/10+0x30);write_1602dat(TL%10+0x30);write_1602com(0x8d); break; case 3: HH-;if(HH

12、99) HH=99; if(HH99) HL=98;if(HL=HH) HL=HH-1; write_1602com(0xcc);write_1602dat(HL/10+0x30);write_1602dat(HL%10+0x30); write_1602com(0xcd);break; case 5: SM-;if(SM99) SM=9; write_1602com(0x83);write_1602dat(SM/10+0x30);write_1602dat(SM%10+0x30);write_1602com(0x84); break; while(!K3); if(K5=0) Delay1(

13、200); if(K5=0&flag=0) if(bufang=2|bufang=1) bufang=0; count=0; TR1=0; write_eeprom(); write_1602com(0xcf); write_1602dat( ); else TR1=1; write_1602com(0xcf); write_1602dat(Z); bufang=2; while(K5=0); void Onealarm() alarm=0; Delay1(200); alarm=1;/* 名称 : Main()* 功能 : 主函数*/void main() uint testnum; EA

14、= 0; Timer0_Init(); /定时器0初始化 EA = 1; RW=0; L1602_init(); write_1602com(0x85); write_1602dat(0xdf); write_1602com(0x80); write_1602dat(T); display(); init_eeprom(); read_eeprom(); write_1602com(0x80); write_string(Te: C Hu: % ); write_1602com(0xc0); if(bufang=1) write_string(Sg: mg/m3 B); else write_

15、string(Sg: mg/m3 ); while(1) if (FlagStartRH = 1) /温湿度转换标志检查 TR0 = 0; testnum = RH(); FlagStartRH = 0; TR0 = 1; humidity = U8RH_data_H; /读出温湿度,只取整数部分 temperature = U8T_data_H; if(temperature=TH) LED2=0;BJ_LED2=0; else LED2=1;BJ_LED2=1; if(temperature=HH) LED4=0;BJ_LED4=0; else LED4=1;BJ_LED4=1; if(humidity=SM) LED1=0;BJ_LED1=0; else LED1=1;BJ_LED1=1; if(K4=0&bufang=1) LED6=0;BJ_LED6=0; else if(count=0|count=2000) LED6=1;BJ_LED6=1; if(BJ_LED1=0|BJ_LED2=0|BJ_LED3=0|

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1