找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3494|回复: 2
打印 上一主题 下一主题
收起左侧

蓝牙控LED+烟雾报警(含排气系统)+红外报警

[复制链接]
跳转到指定楼层
楼主
ID:78027 发表于 2015-4-25 15:39 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#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工作于方式28位自动重载模式,用于产生波特率
  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();  //红外报警函数
          }
   }
}

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的积分奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏2 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:102488 发表于 2016-1-11 21:36 | 只看该作者
要是附图就好咯
回复

使用道具 举报

板凳
ID:88498 发表于 2016-3-18 20:31 | 只看该作者
谢谢分享!!!!!!!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表