- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
51单片机智能坏境监测系统程序
王维进
^include reg52? h tiinclude intrins? h ftinclude absacc? h ttinclude math? h
ttinclude 0832. h ftdefine uchar unsigned char
ttdefine uint unsigned int
^include eeprom52? h〃
sbit DATA = P37; //温湿度
sbit E=P2~5; //1602 使能引脚
sbit RS二P27; //1602数据/命令选择引脚
sbit RW二P2飞;
sbit KI二P「3;〃设置键
sbit K2二P「4;//加 sbit K3=Pr5;//减
sbit
K4 二P「7; //人体
sbit
K5二Pl飞;//布防撤防按键
sbit
LED1二P3J; //烟雾报警
sbit
LED2二P3 2;
//温度上限
sbit
LED3二P3 3;
〃温度下限
sbit
LED4-P3 4;
〃湿度上限
sbit
LED5二P35;
//湿度下限
sbit
LED6二P3 6;
//红外报警
sbit
alarm 二 P30; //蜂鸣器
uchar
U8FLAG, UStemp, UScomdata, U8RH_data_H_temp, U8RH_data_L_temp, U8T_d ataj_temp, U8T_data_L_temp, U8checkdata_temp;
uchar U8RH_data_H, U8RH_data丄 U8T_data_H, U8T_data_L, UScheckdata;
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 TimerO_Init()
{
ETO = 1; //允许定时器0中断
TMOD = Oxll; //定时器工作方式选择
TLO = OxFF;
THO = 0x4B; //定时器赋予初值
THl=0xdc;
TL1二0x00;
ET1=1;
TRO = 1; //启动定时器
}
//定时器0中断
void TimerO_ISR (void) interrupt 1 using 0
uchar RHCounter;
TLO = OxFF;
THO = 0x4B; //定时器赋予初值
RHCounter++;
if (RHCounter = 15)
{
FlagStartRH = 1;
RHCounter = 0;
}
}
void Delayl(uint j)
{
uchar i;
for(:j0;j―)
{
for(i=0;i27;i++);
void Delay_10us(void)
uchar i;
i—;
i—;
i--;
i―;
i―;
i—;
}
void COM(void)
{
uchar i;
for(i=0;i8;i++) {
U8FLAG=2;
while((!DATA)U8FLAG++);
//
//总线由上拉电阻拉高主机延时20us
Delay_10us ();
Delay_10us ();
Delay_10us ();
Delay_10us ();
U8temp=0;
if(DATA)U8temp=l;
U8FLAG=2;
wh订e((DATA)U8FLAG++);
〃超时则跳出for循环
if(U8FLAG==1)break;
//判断数据位是0还是1
//如果高电平高过预定0高电平值则数据位为1
UScomdata?=l;
UScomda ta^UStemp; //0
}//rof
}
//
//——温湿度读取子程序
//
//一一以下变量均为全局变量
// 温度高8位二二U8T data H// 温度低8位二二U8T data L
// 温度高8位二二
U8T data H
// 温度低8位二二
U8T data L
// 湿度高8位二二
U8RH data H
// 湿度低8位二二
U8RH data L
// 校验 8 位二二 LScheckdata
//一一调用相关子程序如下
// Delay () Delay_10us () ;, COM ();
// uchar RH(void)
{
//主机拉低18ms
DATA=0;
Delayl(lSO) ; //原来为 5
DATA^l;
Delay_10us ();
文档评论(0)