找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3509|回復: 2
打印 上一主題 下一主題
收起左側

藍牙控LED+煙霧報警(含排氣系統(tǒng))+紅外報警

[復制鏈接]
跳轉到指定樓層
樓主
ID:78027 發(fā)表于 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工作于方式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();  //紅外報警函數
          }
   }
}

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的積分獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏2 分享淘帖 頂 踩
回復

使用道具 舉報

沙發(fā)
ID:102488 發(fā)表于 2016-1-11 21:36 | 只看該作者
要是附圖就好咯
回復

使用道具 舉報

板凳
ID:88498 發(fā)表于 2016-3-18 20:31 | 只看該作者
謝謝分享。。。。。!
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表