第一范文网 - 专业文章范例文档资料分享平台

基于单片机的温湿度报警器设计

来源:用户分享 时间:2025/5/28 9:39:31 本文由loading 分享 下载这篇文档手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

基于单片机的温湿度监控报警系统设计

Write_byte(0xa1); Check_Ack(); temp=Read_byte(); SEND1(); IICStop();

return temp; }

void wrteeprom(unsigned char addr,unsigned char dat) { IICStart(); Write_byte(0xa0); Check_Ack(); Write_byte(addr); Check_Ack(); Write_byte(dat); Check_Ack(); IICStop(); }

#ifndef _2402_H_ #define _2402_H_ #include

sbit SCL = P1^0; //模拟I2C 总线的引脚定义

sbit SDA = P1^1; //定义2402在I2C总线协议中从机地址 void DELAY(unsigned int t); //延时函数 void IICStart(void); //I2C开始函数 void IICStop(void); //I2C结束函数 void Ack(void); //I2C应答函数 void NOAck(void); //I2C应答非函数 bit Check_Ack(void); //I2C应答检测函数 void SEND0(void); //I2C发送0函数

void SEND1(void); //I2C发送1函数 void Write_byte(unsigned char dat); //I2C发送字节函数 unsigned char Read_byte(void); //I2C读取字节函数

unsigned char rdeeprom(unsigned char addr); //读AT2402函数 void wrteeprom(unsigned char addr,unsigned char dat); //写AT2402函数

- 32 -

基于单片机的温湿度监控报警系统设计

#endif //_2402_H_ A1.3 DHT11传感器程序

#include \U8 U8FLAG,k;

U8 U8count,U8temp; U8

U8T_data_H,U8T_data_L,U8RH_data_H,U8RH_data_L,U8checkdata; U8

U8T_data_H_temp,U8T_data_L_temp,U8RH_data_H_temp,U8RH_data_L_temp,U8checkdata_temp; U8 U8comdata;

U8 count, count_r=0; void Delay1(U16 j) { U8 i;

for(;j>0;j--)

{ for(i=0;i<27;i++); } }

void Delay_10us(void)

{ U8 i; i--; i--;

i--; i--; i--; i--; } void COM(void) { U8 i;

for(i=0;i<8;i++) { U8FLAG=2; while((!DATA)&&U8FLAG++); Delay_10us(); Delay_10us(); Delay_10us(); U8temp=0;

if(DATA)U8temp=1;

- 33 -

基于单片机的温湿度监控报警系统设计

U8FLAG=2;

while((DATA)&&U8FLAG++); //超时则跳出for循环 if(U8FLAG==1)break; //判断数据位是0还是1.如果高电平高过预定0高电平值则数据位为 1 U8comdata<<=1; U8comdata|=U8temp; } //0 }

//温湿度读取子程序 -以下变量均为全局变量

//温度高8位== U8T_data_H-温度低8位== U8T_data_L //湿度高8位== U8RH_data_H-湿度低8位== U8RH_data_L //校验 8位 == U8checkdata-调用相关子程序如下 U8 RH(void)

{ DATA=0; //主机拉低18ms Delay1(180); //原来为5 DATA=1;

Delay_10us(); //总线由上拉电阻拉高 主机延时20us Delay_10us(); Delay_10us(); Delay_10us();

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();

- 34 -

基于单片机的温湿度监控报警系统设计

U8T_data_H_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_L=U8T_data_L_temp; U8checkdata=U8checkdata_temp; } return 1; }

else //传感器不响应 { return 0; }

A1.4 1602程序

/************该程序实现了对液晶1602的控制**************/ #include \#include \

void delay() //功能.延时,延时时间大概为140US。 { int i,j; for(i=0; i<=10; i++) for(j=0; j<=2; j++); } uchar Convert(uchar In_Date) { return In_Date; }

void enable(uchar del) //1602命令函数,输入的命令值 { P0 = Convert(del); RS = 0; RW = 0; E = 0; delay();

- 35 -

搜索更多关于: 基于单片机的温湿度报警器设计 的文档
基于单片机的温湿度报警器设计.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/c0qyds9kso31ujtp7zfug_10.html(转载请注明文章来源)
热门推荐
Copyright © 2012-2023 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top