⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bj.c

📁 报警程序
💻 C
字号:
/*******************************DISSPLAY FOR Alarm*************************/
/*************************PROGRAM BY FANZ**2006/12/18************************/
#include   <reg52.h>
#include   <intrins.h>
#include   <absacc.h>
#include   <string.h>
#include   <math.h>

#define    Uchar        unsigned char
#define    Uint         unsigned int
#define    Ulong        unsigned long
#define    BIT0         0x01
#define    BIT1         0x02
#define    BIT2         0x04
#define    BIT3         0x08
#define    BIT4         0x10
#define    BIT5         0x20
#define    BIT6         0x40
#define    BIT7         0x80
#define    InPutPort    P0
#define    OutPutPort   P1

code       Uchar        CSOutData[11]={0x60,0x80,0x40,0xC0,0x20,0xF0,0x70,0x90,0x50,0xD0,0x30};
code       Uchar        CSInData[11] ={0x08,0x09,0x0A,0x0B,0x0C,0x00,0x01,0x02,0x03,0x04,0x0F};

/**********端口********/
sbit       WDI     =P3^3;
sbit       Buzzer  =P3^4;
sbit       AlarmOut=P3^5;
sbit       SlienKey=P3^6;
sbit       TestKey =P3^7;

sbit       LampE   =P3^0;
sbit       LampD   =P2^4;
sbit       LampC   =P2^5;
sbit       LampB   =P2^6;
sbit       LampA   =P2^7;

/**********全局变量************/
Uchar      idata LeampFlag[5][8];
Uchar      idata GatherD[5];
Uchar      idata DisBuf[5];

Uchar      idata HalfSec;
Uchar      idata TimeFlag;
Uchar      idata Flash;

/**********函数列表**************/
void       InitReg(void);
void       ReadData(void);
void       ComDisPlay();
void       DispData(void);

/******************初始化相关寄存器****************/
void InitReg(void)
{
     Uchar i,m;

     /*T0为16位定时方式一*/
     TMOD=0x01;
     /*50Ms*/
     TH0=0x3C;
     TL0=0xB0;
     HalfSec=0x00;
     TimeFlag=0;
     Flash=0x55;
     for(i=0;i<5;i++)
     for(m=0;m<8;m++)      LeampFlag[i][m]=0x11;
     for(i=0;i<5;i++)      DisBuf[i]=0x00;
     ComDisPlay();
     TR0=1;ET0=1;
     EA=1;
}

void ComDisPlay(void)
{
     OutPutPort=DisBuf[0];
     LampA=0;
     _nop_();
     LampA=1;_nop_();_nop_();_nop_();_nop_();_nop_();

     OutPutPort=DisBuf[1];
     LampB=0;
     _nop_();
     LampB=1;_nop_();_nop_();_nop_();_nop_();_nop_();

     OutPutPort=DisBuf[2];
     LampC=0;
     _nop_();
     LampC=1;_nop_();_nop_();_nop_();_nop_();_nop_();

     OutPutPort=DisBuf[3];
     LampD=0;
     _nop_();
     LampD=1;_nop_();_nop_();_nop_();_nop_();_nop_();

     OutPutPort=DisBuf[4];
     LampE=0;
     _nop_();
     LampE=1;_nop_();_nop_();_nop_();_nop_();_nop_();
}

/***************************读取开关量***************/
void ReadData(void)
{
     Uchar i,m,TData;

     WDI=~WDI;
     for(i=0;i<5;i++)
     {
      TData=P2;
      TData=TData&0xF0;
      TData=TData|CSInData[i];
      P2=TData;
      InPutPort=0xFF;
      _nop_();_nop_();_nop_();
      TData=InPutPort;
      GatherD[i]=TData;
     }
     /*断开报警*/
     //GatherD[0]=~GatherD[0];
     //GatherD[1]=~GatherD[1];
     //if(GatherD[3]&0x40)     GatherD[4]&=0xF7;
     GatherD[3]^=0x80;
     
     for(i=0;i<5;i++)
     for(m=0;m<8;m++)
     {
      if(((GatherD[i]&(0x01<<m))==0x00)&&(LeampFlag[i][m]==0x11)) LeampFlag[i][m]=0x22;
      if(GatherD[i]&(0x01<<m))                                    LeampFlag[i][m]=0x11;
     }

     if((GatherD[4]&0x80)==0x00)                                  LeampFlag[4][7]=0x33;   
     if((GatherD[4]&0x80)==0x80)                                  LeampFlag[4][7]=0x11;


}

/**************************送显示*********/
void DispData(void)
{
     Uchar  i,m;


     for(i=0;i<5;i++) DisBuf[i]=0xFF;
     for(i=0;i<5;i++)
     {
      for(m=0;m<8;m++)
      {
       if((Flash==0xAA)&&(LeampFlag[i][m]==0x22)) DisBuf[i]&=(~(0x01<<m));
       if(LeampFlag[i][m]==0x33)                  DisBuf[i]&=(~(0x01<<m));
      }
     }
     ComDisPlay();
     Flash=~Flash;
}


/************定时***************/
void Timer0(void) interrupt 1 using 2 //T0
{
     HalfSec++;
     if(HalfSec==5)
     {
      TimeFlag=1;
      HalfSec=0x00;
      WDI=~WDI;
     }
     TH0=0x3C;
     TL0=0xB0;
}

/********************主函数****************************/
void main(void)
{
     Uchar i,m;
     Uchar TData;

     EA=0;
     PSW=0;
     SP=0xD0;
     InitReg();
     while(1)
     {
      TData=0;
      for(i=0;i<5;i++)
      for(m=0;m<8;m++)
      {
       if(LeampFlag[i][m]==0x22)   TData=1;
      }
      if(TData)                    {Buzzer=0;AlarmOut=0;}
      else                         {Buzzer=1;AlarmOut=1;}
      WDI=~WDI;
      if(SlienKey==0)
      {
       for(i=0;i<5;i++)
       for(m=0;m<8;m++)
       {
        if(LeampFlag[i][m]==0x22)  LeampFlag[i][m]=0x33;
       }
       while(!SlienKey);
      }
      if(TestKey==0)
      {
       EA=0;
       OutPutPort=0x00;
       LampA=0;
       _nop_();
       LampA=1;_nop_();_nop_();_nop_();_nop_();_nop_();
       LampB=0;
       _nop_();
       LampB=1;_nop_();_nop_();_nop_();_nop_();_nop_();
       LampC=0;
       _nop_();
       LampC=1;_nop_();_nop_();_nop_();_nop_();_nop_();
       LampD=0;
       _nop_();
       LampD=1;_nop_();_nop_();_nop_();_nop_();_nop_();
       LampE=0;
       _nop_();
       LampE=1;_nop_();_nop_();_nop_();_nop_();_nop_();
       Buzzer=0;AlarmOut=0;
       while(!TestKey) WDI=~WDI;
       EA=1;
      }
      if(TimeFlag)
      {
       ReadData();
       DispData();
       TimeFlag=0;
      }
     }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -