標題: 藍牙控LED+煙霧報警(含排氣系統)+紅外報警 [打印本頁]
作者: 北極星18 時間: 2015-4-25 15:39
標題: 藍牙控LED+煙霧報警(含排氣系統)+紅外報警
#include<reg52.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
#define key_io P1
uchar key_can;
unsigned char tmp;
unsigned int k;
void delay(unsigned int x)
{ unsigned int i,j;
for(i=x;i>0;i--)
for(j=110;j>0;j--);
}
sbit LED1=P0^0;//指示燈0
sbit LED2=P0^1;//指示燈1
sbit LED3=P0^2; //指示燈2
sbit LED4=P0^3;
sbit LED5=P0^4;
sbit LED6=P0^5;
sbit LED7=P0^6;
sbit hw=P2^4;
sbit beep=P2^3;
sbit red=P2^2;
sbit green=P2^1;
sbit yellow=P2^0;
bit flag_300ms=0;
sbit fm=P2^5; //定義單片機P1口的第1位 (即P1.0)為蜂鳴器
sbit qd=P2^6;// 定義單片機P1口的第2位 驅動風扇
sbit DOUT=P2^7; //定義單片機P2口的第1位 (即P2.0)為傳感器的輸入端
void delay1()//延時程序
{
uchar m,n;
for(n=20;n>0;n--)
for(m=125;m>0;m--);
}
void key()
{
static uchar key_new=0,key_old=0,key_value=0;
if(key_new==0)
{
if((key_io&0x07)==0x07)
key_value++;
else
key_value=0;
if(key_value>=5)
{
key_value=0;
key_new=1;
}
}
else
{
if((key_io&0x07)!=0x07)
key_value++;
else
key_value=0;
if(key_value>=5)
{
key_value=0;
key_new=0;
}
}
key_can=20;
if((key_new==0)&&key_old==1)
{
switch(key_io&0x07)
{
case 0x06:key_can=1;break;
case 0x05:key_can=2;break;
case 0x03:key_can=3;break;
}
}
key_old=key_new;
}
void time_init()
{
EA=1;
TMOD=0X01;
ET0=1;
TR0=1;
}
uchar flag_alarm;
uchar flag_bufang;
uchar flag_bufang_en;
uchar flag_value;
void hongwai_dis()
{ uint k;
if(flag_alarm==1)
{
red=0;
beep=1;
}
if(flag_bufang_en==1) //準備開始防御
{
green=0;
red=1;
yellow=1;
k=1;
}
if((k==1)&&(hw==1))
{ k=2 ;
red=~red;
beep=1;
}
if((k==1)&&(hw==0))
{ k=2 ;
beep=0;
}
if((k==2)&&(flag_alarm==1))
{
red=~red;
beep=~beep;
}
}
void key_with()
{
if(key_can==1)
{
flag_alarm=1;
}
if(key_can==2)
{
flag_bufang_en=1;
}
if(key_can==3)
{
flag_alarm=0;
flag_bufang=0;
flag_bufang_en=0;
flag_value=0;
P2=0xf7;
}
}
void time0_int() interrupt 1
{
static uint value;
TH0=0x3c;
TL0=0xb0; //50ms
value++;
if(value%6==0)
{
flag_300ms=1;
}
if(flag_bufang_en==1)
{
flag_value++;
if(flag_value>=600)
{
flag_bufang=1;
flag_bufang_en=0;
flag_value=0;
}
}
}
void main()
{
beep=0;
time_init();
TMOD=0x20;//定時器1工作于方式2,8位自動重載模式,用于產生波特率
TH1=0xfd;
TL1=0xfd;
SCON=0X50;
PCON=0X00;
TR1=1;
while(1)
{
if(RI==1)
{
RI=0;
tmp=SBUF;
switch(tmp)
{
case 1: LED1=0;break;
case 2: LED2=0;break;
case 3: LED3=0;break;
case 4: LED4=0;break;
case 5: LED5=0;break;
case 6: LED6=0;break;
case 7: LED7=0;break;
case 8: P0=0x00;break;
default : P0=0xff;break;
}
}
if(DOUT==1)
{ fm=0;
qd=0; }
else if(DOUT==0)
{ delay(); //防止誤判
if(DOUT==0)
{
qd=1;
fm=1;
delay1();}
else
{ fm=0;
qd=0;}
}
key();
yellow=hw;//紅外熱釋電指示燈,有輸出亮黃燈
if(key_can<10)
{
key_with();
}
if(flag_300ms==1)
{
flag_300ms=0;
hongwai_dis(); //紅外報警函數
}
}
}
作者: 玲瓏ABC 時間: 2016-1-11 21:36
要是附圖就好咯
作者: lyseg01 時間: 2016-3-18 20:31
謝謝分享!!!!!!!
| 歡迎光臨 (http://www.raoushi.com/bbs/) |
Powered by Discuz! X3.1 |