单片机 智能环境监测系统程序Word格式文档下载.docx

上传人:b****6 文档编号:17497315 上传时间:2022-12-06 格式:DOCX 页数:17 大小:17.77KB
下载 相关 举报
单片机 智能环境监测系统程序Word格式文档下载.docx_第1页
第1页 / 共17页
单片机 智能环境监测系统程序Word格式文档下载.docx_第2页
第2页 / 共17页
单片机 智能环境监测系统程序Word格式文档下载.docx_第3页
第3页 / 共17页
单片机 智能环境监测系统程序Word格式文档下载.docx_第4页
第4页 / 共17页
单片机 智能环境监测系统程序Word格式文档下载.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

单片机 智能环境监测系统程序Word格式文档下载.docx

《单片机 智能环境监测系统程序Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《单片机 智能环境监测系统程序Word格式文档下载.docx(17页珍藏版)》请在冰豆网上搜索。

单片机 智能环境监测系统程序Word格式文档下载.docx

sbitalarm=P3^0;

//蜂鸣器

ucharU8FLAG,U8temp,U8comdata,U8RH_data_H_temp,U8RH_data_L_temp,U8T_data_H_temp,U8T_data_L_temp,U8checkdata_temp;

ucharU8RH_data_H,U8RH_data_L,U8T_data_H,U8T_data_L,U8checkdata;

ucharMode,humidity,temperature,smog;

bitBJ_LED1=1,BJ_LED2=1,BJ_LED3=1,BJ_LED4=1,BJ_LED5=1,BJ_LED6=1;

bitbdataFlagStartRH;

ucharflag;

//记录当前设置状态

uintcount;

//定时器0初始化

voidTimer0_Init()

{

ET0=1;

//允许定时器0中断

TMOD=0x11;

//定时器工作方式选择

TL0=0xFF;

TH0=0x4B;

//定时器赋予初值

TH1=0xdc;

TL1=0x00;

ET1=1;

TR0=1;

//启动定时器

}

//定时器0中断

voidTimer0_ISR(void)interrupt1using0

ucharRHCounter;

RHCounter++;

if(RHCounter>

=15)

{

FlagStartRH=1;

RHCounter=0;

}

voidDelay1(uintj)

uchari;

for(;

j>

0;

j--)

{

for(i=0;

i<

27;

i++);

}

voidDelay_10us(void)

i--;

voidCOM(void)

for(i=0;

8;

i++)

U8FLAG=2;

while((!

DATA)&

&

U8FLAG++);

Delay_10us();

U8temp=0;

if(DATA)U8temp=1;

while((DATA)&

//超时则跳出for循环

if(U8FLAG==1)break;

//判断数据位是0还是1

//如果高电平高过预定0高电平值则数据位为1

U8comdata<

<

=1;

U8comdata|=U8temp;

//0

}//rof

//--------------------------------

//-----温湿度读取子程序------------

//----以下变量均为全局变量--------

//----温度高8位==U8T_data_H------

//----温度低8位==U8T_data_L------

//----湿度高8位==U8RH_data_H-----

//----湿度低8位==U8RH_data_L-----

//----校验8位==U8checkdata-----

//----调用相关子程序如下----------

//----Delay();

Delay_10us();

COM();

ucharRH(void)

//主机拉低18ms

DATA=0;

Delay1(180);

//原来为5

DATA=1;

//总线由上拉电阻拉高主机延时20us

Delay_10us();

//主机设为输入判断从机响应信号

//判断从机是否有低电平响应信号如不响应则跳出,响应则向下运行

if(!

DATA)//T!

U8FLAG=2;

//判断从机是否发出80us的低电平响应信号是否结束

while((!

//判断从机是否发出80us的高电平,如发出则进入数据接收状态

while((DATA)&

//数据接收状态

COM();

U8RH_data_H_temp=U8comdata;

U8RH_data_L_temp=U8comdata;

U8T_data_H_temp=U8comdata;

U8T_data_L_temp=U8comdata;

U8checkdata_temp=U8comdata;

//数据校验

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;

return1;

else//传感器不响应

return0;

/********************************************************************

*文件名:

液晶1602显示.c

*描述:

该程序实现了对液晶1602的控制。

***********************************************************************/

*名称:

delay()

*功能:

延时,延时时间大概为140US。

*输入:

*输出:

voiddelay()

inti,j;

i<

=10;

i++)

for(j=0;

j<

=2;

j++);

enable(uchardel)

1602命令函数

输入的命令值

voidwrite_1602com(uchardel)

P0=del;

RS=0;

E=1;

delay();

E=0;

write(uchardel)

1602写数据函数

需要写入1602的数据

voidwrite_1602dat(uchardel)

RS=1;

L1602_init()

1602初始化,请参考1602的资料

voidL1602_init(void)

write_1602com(0x38);

write_1602com(0x0c);

write_1602com(0x06);

write_1602com(0x01);

//清屏要放在最后

voiddisplay()

write_1602com(0x83);

write_1602dat(temperature%100/10+0x30);

write_1602dat(temperature%100%10+0x30);

write_1602com(0x8c);

write_1602dat(humidity%100/10+0x30);

write_1602dat(humidity%100%10+0x30);

write_1602com(0xc3);

write_1602dat(smog%100/10+0x30);

write_1602dat(smog%100%10+0x30);

write_1602com(0x85);

write_1602dat(0xdf);

voiddisplay_1()

write_1602dat(TH%100/10+0x30);

write_1602dat(TH%100%10+0x30);

write_1602dat(TL%100/10+0x30);

write_1602dat(TL%100%10+0x30);

write_1602dat(HH%100/10+0x30);

write_1602dat(HH%100%10+0x30);

write_1602com(0xcc);

write_1602dat(HL%100/10+0x30);

write_1602dat(HL%100%10+0x30);

voidwrite_string(uchar*str)

while(*str)

write_1602dat(*str);

str++;

/***按键函数***/

voidKEY()

if(K1==0)

Delay1(200);

flag++;

if(flag==1)

write_1602com(0x80);

write_string("

TH:

CTL:

C"

);

write_1602com(0xc0);

HH:

%HL:

%"

write_1602com(0x85);

write_1602com(0x8e);

display_1();

write_1602com(0x84);

write_1602com(0x0f);

elseif(flag==2)

write_1602com(0x8d);

elseif(flag==3)

write_1602com(0xc4);

elseif(flag==4)

write_1602com(0xcd);

elseif(flag==5)

"

Sg:

mg/m3"

write_1602dat(SM/10+0x30);

write_1602dat(SM%10+0x30);

else

Te:

CHu:

if(bufang==1)

mg/m3B"

else

display();

flag=0;

write_eeprom();

while(!

K1);

if(K2==0)

switch(flag)

case1:

TH++;

if(TH>

99)TH=0;

if(TH<

=TL)TH=TL+1;

write_1602dat(TH/10+0x30);

write_1602dat(TH%10+0x30);

break;

case2:

TL++;

if(TL>

98)TL=0;

if(TL>

=TH)TL=TH-1;

write_1602dat(TL/10+0x30);

write_1602dat(TL%10+0x30);

write_1602com(0x8d);

break;

case3:

HH++;

if(HH>

99)HH=0;

if(HH<

=HL)HH=HL+1;

write_1602com(0xc3);

write_1602dat(HH/10+0x30);

write_1602dat(HH%10+0x30);

case4:

HL++;

if(HL>

98)HL=0;

if(HL>

=HH)HL=HH-1;

write_1602dat(HL/10+0x30);

write_1602dat(HL%10+0x30);

case5:

SM++;

if(SM>

9)SM=0;

write_1602dat(SM/10+0x30);

write_1602dat(SM%10+0x30);

write_1602com(0x84);

}

K2);

if(K3==0)

case1:

TH--;

99)TH=99;

if(TH<

case2:

TL--;

99)TL=98;

case3:

HH--;

99)HH=99;

case4:

HL--;

99)HL=98;

case5:

SM--;

99)SM=9;

K3);

if(K5==0)

if(K5==0&

flag==0)

if(bufang==2||bufang==1)

bufang=0;

count=0;

TR1=0;

write_1602com(0xcf);

write_1602dat('

'

TR1=1;

write_1602com(0xcf);

Z'

bufang=2;

while(K5==0);

voidOnealarm()

alarm=0;

alarm=1;

Main()

主函数

voidmain()

uinttestnum;

EA=0;

Timer0_Init();

//定时器0初始化

EA=1;

RW=0;

L1602_init();

write_1602com(0x80);

T'

init_eeprom();

read_eeprom();

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<

=TL)

{LED3=0;

BJ_LED3=0;

{LED3=1;

BJ_LED3=1;

if(humidity>

=HH)

{LED4=0;

BJ_LED4=0;

{LED4=1;

BJ_LED4=1;

if(humidity<

=HL)

{LED5=0;

BJ_LED5=0;

{LED5=1;

BJ_LED5=1;

convdata(adc0832(0));

smog=(dis[1]*100+dis[2]*10+dis[3]+1)*10/250;

if(flag==0)

display();

KEY();

if(smog>

=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