1、氧气浓度采集:本设计采用ZE03-O2(工作电压3.7V-9V DC 温度0-50度 湿度20%-90%RH)氧气浓度传感器,适用于浴室氧气浓度检测,虽内置温度传感器进行温度补偿,但程序算法上需将采集数据和输出氧气浓度建立线性关系。
4、浴室模型:本课题是基于浴室,采用CAD对模型进行设计与绘制,模型确定为底面面积为0.64平方米高1米的长方体,长方体内部布满泡沫以此来构建封闭、透气性差和保温性强的环境条件。
#include <stc12c5a60s2.h>
#include <lcd.h>
#include <uart.h>
#include <onewire.h>
#include <Key.h>
#include <stdio.h>
#include "24c02.h"
#include "iic.h"
//#include <AT24C02.h>
#define uchar unsigned char
#define uint unsigned int
sbit LED = P2^5;
sbit LED1 = P2^6;
sbit LED2 = P2^7;
sbit bell = P1^3;
sbit relay = P1^0;
sbit relay1 = P1^1;
uchar tt[3], pp[3], flag = 0, flag1 = 0, K = 0, modes = 0,bai = 0, shi = 0,ge = 0,yqnd = 0;
uchar wendu,wdbj = 38, yqbj = 18, sjbj = 20, wd[3], yq[3], sj[3], kt = 0;
uint num = 0;
void cherh(void);
void time(void);
void bj_cronl(void);
void main(void)
{
P1M1 = 0x00;
P1M0 = 0xff;
relay = 0;
relay1 = 0;
bell = 0;
CH11 = 0;
delay(1);
lcdinit();
delay(10);
UartInit();
ES = 1;
EA = 1;
while(1)
{
time();
wendu = DS18b20_Convert();
write_com(0x93);
sprintf(tt,"%d",(uint)wendu);
hzkdis(tt);
write_com(0x90);
hzkdis("温度:");
write_com(0x94);
hzkdis("度");
write_com(0x88);
hzkdis("氧气浓度:");
write_com(0x98);
hzkdis("设定时间:");
if(Uart_RxFlag)
{
write_com(0x8d);
sprintf(pp,"%d",(uint)UartRxTab[3]);
hzkdis(pp);
write_com(0x8e);
hzkdis("%");
Uart_RxFlag = 0;
}
K = Key();
if (K == 5)
{
K = 0;
lcdinit();
flag = 1;
modes = 0;
K = 0;
wdbj = Eeprom_Read(0x01);
delay(10);
yqbj = Eeprom_Read(0x02);
delay(10);
sjbj = Eeprom_Read(0x03);
delay(10);
while (flag == 1)
{
write_com(0x80);
hzkdis("用户:A");
write_com(0x90);
hzkdis("报警温度: 度");
write_com(0x94);
sprintf(wd,"%d",(uint)wdbj);
hzkdis(wd);
write_com(0x88);
hzkdis("报警氧气: %");
write_com(0x8c);
sprintf(yq,"%d",(uint)yqbj);
hzkdis(yq);
write_com(0x98);
hzkdis("报警时间: min");
write_com(0x9c);
sprintf(sj,"%d",(uint)sjbj);
hzkdis(sj);
K = 0;
K = Key();
if (K == 3)
{
modes++;
switch(modes)
{
case 1:
write_com(0x97);
hzkdis("*");
break;
case 2:
write_com(0x8f);
hzkdis("*");
break;
case 3:
write_com(0x9f);
hzkdis("*");
break;
}
}
if (modes == 4)
{
flag = 2;
modes = 0;
}
if (K == 2)
{
switch(modes)
{
case 1:
wdbj++;
break;
case 2:
yqbj++;
break;
case 3:
sjbj++;
break;
}
}
write_com(0x94);
sprintf(wd,"%d",(uint)wdbj);
hzkdis(wd);
write_com(0x8c);
sprintf(yq,"%d",(uint)yqbj);
hzkdis(yq);
write_com(0x9c);
sprintf(sj,"%d",(uint)sjbj);
hzkdis(sj);
if (K == 1)
{
switch(modes)
{
case 1:
wdbj--;
break;
case 2:
yqbj--;
break;
case 3:
sjbj--;
break;
}
}
write_com(0x94);
sprintf(wd,"%d",(uint)wdbj);
hzkdis(wd);
write_com(0x8c);
sprintf(yq,"%d",(uint)yqbj);
hzkdis(yq);
write_com(0x9c);
sprintf(sj,"%d",(uint)sjbj);
hzkdis(sj);
}
Eeprom_Write(0x01,wdbj);
delay(100);
Eeprom_Write(0x02,yqbj);
delay(100);
Eeprom_Write(0x03,sjbj);
delay(100);
lcdinit();
wdbj = Eeprom_Read(0x04);
delay(10);
yqbj = Eeprom_Read(0x05);
delay(10);
sjbj = Eeprom_Read(0x06);
delay(10);
while (flag == 2)
{
write_com(0x80);
hzkdis("用户:B");
write_com(0x90);
hzkdis("报警温度: 度");
write_com(0x94);
sprintf(wd,"%d",(uint)wdbj);
hzkdis(wd);
write_com(0x88);
hzkdis("报警氧气: %");
write_com(0x8c);
sprintf(yq,"%d",(uint)yqbj);
hzkdis(yq);
write_com(0x98);
hzkdis("报警时间: min");
write_com(0x9c);
sprintf(sj,"%d",(uint)sjbj);
hzkdis(sj);
K = 0;
K = Key();
if (K == 3)
{
modes++;
switch(modes)
{
case 1:
write_com(0x97);
hzkdis("*");
break;
case 2:
write_com(0x8f);
hzkdis("*");
break;
case 3:
write_com(0x9f);
hzkdis("*");
break;
}
}
if (modes == 4)
{
flag = 3;
modes = 0;
}
if (K == 2)
{
switch(modes)
{
case 1:
wdbj++;
break;
case 2:
yqbj++;
break;
case 3:
sjbj++;
break;
}
}
write_com(0x94);
sprintf(wd,"%d",(uint)wdbj);
hzkdis(wd);
write_com(0x8c);
sprintf(yq,"%d",(uint)yqbj);
hzkdis(yq);
write_com(0x9c);
sprintf(sj,"%d",(uint)sjbj);
hzkdis(sj);
if (K == 1)
{
switch(modes)
{
case 1:
wdbj--;
break;
case 2:
yqbj--;
break;
case 3:
sjbj--;
break;
}
}
write_com(0x94);
sprintf(wd,"%d",(uint)wdbj);
hzkdis(wd);
write_com(0x8c);
sprintf(yq,"%d",(uint)yqbj);
hzkdis(yq);
write_com(0x9c);
sprintf(sj,"%d",(uint)sjbj);
hzkdis(sj);
}
Eeprom_Write(0x04,wdbj);
delay(100);
Eeprom_Write(0x05,yqbj);
delay(100);
Eeprom_Write(0x06,sjbj);
delay(100);
lcdinit();
wdbj = Eeprom_Read(0x07);
delay(10);
yqbj = Eeprom_Read(0x08);
delay(10);
sjbj = Eeprom_Read(0x09);
delay(10);
while (flag == 3)
{
write_com(0x80);
hzkdis("用户:C");
write_com(0x90);
hzkdis("报警温度: 度");
write_com(0x94);
sprintf(wd,"%d",(uint)wdbj);
hzkdis(wd);
write_com(0x88);
hzkdis("报警氧气: %");
write_com(0x8c);
sprintf(yq,"%d",(uint)yqbj);
hzkdis(yq);
write_com(0x98);
hzkdis("报警时间: min");
write_com(0x9c);
sprintf(sj,"%d",(uint)sjbj);
hzkdis(sj);
K = 0;
K = Key();
if (K == 3)
{
modes++;
switch(modes)
{
case 1:
write_com(0x97);
hzkdis("*");
break;
case 2:
write_com(0x8f);
hzkdis("*");
break;
case 3:
write_com(0x9f);
hzkdis("*");
break;
}
}
if (modes == 4)
{
flag = 0;
modes = 0;
}
if (K == 2)
{
switch(modes)
{
case 1:
wdbj++;
break;
case 2:
yqbj++;
break;
case 3:
sjbj++;
break;
}
}
write_com(0x94);
sprintf(wd,"%d",(uint)wdbj);
hzkdis(wd);
write_com(0x8c);
sprintf(yq,"%d",(uint)yqbj);
hzkdis(yq);
write_com(0x9c);
sprintf(sj,"%d",(uint)sjbj);
hzkdis(sj);
if (K == 1)
{
switch(modes)
{
case 1:
wdbj--;
break;
case 2:
yqbj--;
break;
case 3:
sjbj--;
break;
}
}
write_com(0x94);
sprintf(wd,"%d",(uint)wdbj);
hzkdis(wd);
write_com(0x8c);
sprintf(yq,"%d",(uint)yqbj);
hzkdis(yq);
write_com(0x9c);
sprintf(sj,"%d",(uint)sjbj);
hzkdis(sj);
}
Eeprom_Write(0x07,wdbj);
delay(100);
Eeprom_Write(0x08,yqbj);
delay(100);
Eeprom_Write(0x09,sjbj);
delay(100);
lcdinit();
}
if (K == 3)
{
cherh();
write_com(0x80);
hzkdis("用户:A");
wdbj = Eeprom_Read(0x01);
delay(10);
yqbj = Eeprom_Read(0x02);
delay(10);
sjbj = Eeprom_Read(0x03);
delay(10);
write_com(0x9d);
sprintf(sj,"%d",(uint)sjbj);
hzkdis(sj);
write_com(0x9e);
hzkdis("min");
}
if (K == 2)
{
cherh();
write_com(0x80);
hzkdis("用户:B");
wdbj = Eeprom_Read(0x04);
delay(10);
yqbj = Eeprom_Read(0x05);
delay(10);
sjbj = Eeprom_Read(0x06);
delay(10);
write_com(0x9d);
sprintf(sj,"%d",(uint)sjbj);
hzkdis(sj);
write_com(0x9e);
hzkdis("min");
}
if (K == 1)
{
cherh();
write_com(0x80);
hzkdis("用户:C");
wdbj = Eeprom_Read(0x07);
delay(10);
yqbj = Eeprom_Read(0x08);
delay(10);
sjbj = Eeprom_Read(0x09);
delay(10);
write_com(0x9d);
sprintf(sj,"%d",(uint)sjbj);
hzkdis(sj);
write_com(0x9e);
hzkdis("min");
}
bj_cronl();
}
}
void cherh()
{
num=0;
kt=0;
TMOD=0x01;
EA=1;
ET0=1;
TR0=1;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
}
void exter() interrupt 1
{
kt++;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
}
void time(void)
{
if(kt==20)
{
num++;
if(num==2000)
{
num=0;
}
kt=0;
}
}
void bj_cronl(void)
{
if (wendu > wdbj)
{
LED = 0;
relay = 1;
relay1 = 1;
bell = 1;
if (UartRxTab[3]>((uint)yqbj*10))
{
LED1 = 1;
}
if (num < ((uint)sjbj*60))
{
LED2 = 1;
}
}
if (UartRxTab[3]<((uint)yqbj*10))
{
LED1 = 0;
relay = 1;
relay1 = 1;
bell = 1;
if (wendu < wdbj)
{
LED = 1;
}
if (num < ((uint)sjbj*60))
{
LED2 = 1;
}
}
if (num > ((uint)sjbj*60))
{
LED2 = 0;
relay = 1;
relay1 = 1;
bell = 1;
if (wendu < wdbj)
{
LED = 1;
}
if (UartRxTab[3]>((uint)yqbj*10))
{
LED1 = 1;
}
}
if ((num < ((uint)sjbj*60)) && (UartRxTab[3]>((uint)yqbj*10)) && (wendu < wdbj))
{
LED = 1;
LED1 = 1;
LED2 = 1;
relay = 0;
relay1 = 0;
bell = 0;
}
}
程序.zip
(244.96 KB, 下载次数: 74)
硬件.7z
(645.86 KB, 下载次数: 92)