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)
2020-8-16 17:26 上傳
點擊文件名下載附件
硬件.7z
(645.86 KB, 下載次數: 92)
2020-8-16 17:52 上傳
點擊文件名下載附件