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

📄 386.c

📁 C开发的报警程序
💻 C
📖 第 1 页 / 共 5 页
字号:
           return;
         else
           {Number_Note=Number_Note+1;Reset=0;}
        
         if(ISD1420_REC_ZJ==0)
            goto ReadStatus;
            else return;
        }  
     if(Number_Note>=22) // 已经处理了22次电话机键盘数据
        { 
         LED_DRIVER(0,1,0,1,1,0,0,1); //出错状态,显示c
         return;           //出错,跳出
        }
     else
       {
         NUMBER[Number_Note]=Number_Key;  //把键值写入数组
         Number_Note=Number_Note+1;
      
         if(ISD1420_REC_ZJ==0)
           {
            SaveTo24C02=1;      //表示已经有数据,可以写24C02了
            goto ReadStatus;
           }
         else
           goto WriteTo24C02;
                    
       }
 
   }//读键值过程结束
  else
    {   
       MT8880_CP2=0; //停动8880总线 
       MT8880_CS=1;  //停动8880总线
       _nop_();
      if(ISD1420_REC_ZJ==0)  //是否还在摘机状态
        goto ReadStatus;
      else 
        {
         if(SaveTo24C02==1 || Reset==1) 
            goto WriteTo24C02;
         else
           {
            // LED_DRIVER(0,0,0,0,0,0,0,0); //全灭
            return;
           }
        }
    }

WriteTo24C02: if(NUMBER[0]==0)    //删除操作,目前只处理0*X形式,方法是把该X组的成员个数设为“0”个
              {
               if(Reset==1)       //全删除
                  {
                   NUMBER[0]=1; 
                   NUMBER[1]=0; 
                   Write24C02_Array(NUMBER);
                   NUMBER[0]=2; 
                   NUMBER[1]=0; 
                   Write24C02_Array(NUMBER);
                   NUMBER[0]=3; 
                   NUMBER[1]=0; 
                   Write24C02_Array(NUMBER);
                   NUMBER[0]=4; 
                   NUMBER[1]=0; 
                   Write24C02_Array(NUMBER);
                   NUMBER[0]=5; 
                   NUMBER[1]=0; 
                   Write24C02_Array(NUMBER);
                   NUMBER[0]=6; 
                   NUMBER[1]=0; 
                   Write24C02_Array(NUMBER);
                  }
               else{
               NUMBER[0]=NUMBER[2];  //设置要处理的组序号
               NUMBER[1]=0;          //设组成员个数=0;
               Write24C02_Array(NUMBER);
                   }
              }
            else
              { 
               NUMBER[1]=Number_Note-2;   //把组的序号放在[0]位置,组成员个数放在[1]位置
               Write24C02_Array(NUMBER);            //把该数组写到24C02
              }
            LED_DRIVER(0,0,0,0,0,0,0,0); 
            return;
            
}//----------------------处理在一次摘机“编程”过程中的读取 ,存储void Make_Program()子程序结束-------------------//




void Field_Listen(void)      //现场监听程序
             
                {
                 JISHUMORE=0;
                 Control_Listen=0;  //启动现场监听
                 DELAY(255);
                 DELAY(45);
                 Control_Listen=1;  //停止现场监听
                 
                 for(Time_DU=0;Time_DU<1000;Time_DU++)
                   {
                    if(Sound_Du==1){Sound_Du=0;DELAY_025ms(1);}
                    else {Sound_Du=1;DELAY_025ms(1);}
                   }
                 Sound_Du=1;
                 
     ONCEMORE_9: MT8880_StatusRegister_READ();
                 if(MT8880_D2==1)     //是否有键值生成              
                  {
                  MT8880_CP2=0; //停动8880总线 
                  MT8880_CS=1;  //停动8880总线

                  MT8880_DataRegister_READ();   //读入的一个值出现在MT8880_D0-D3
                  if(MT8880_D3==1 & MT8880_D2==0 & MT8880_D1==0 & MT8880_D0==1)  //输入“9” 
                   {
                    MT8880_CP2=0; //停动8880总线 
                    MT8880_CS=1;  //停动8880总线

                    Control_Listen=0;  //启动现场监听
                    DELAY(255);
                    DELAY(45);
                    Control_Listen=1;  //停止现场监听

                    for(Time_DU=0;Time_DU<1600;Time_DU++)
                    {
                    if(Sound_Du==1){Sound_Du=0;DELAY_025ms(1);}
                    else {Sound_Du=1;DELAY_025ms(1);}
                    }
                 Sound_Du=1;
                   }
                    J_LineToPhone=1;  //模拟挂机 
                    BJ=1;
                    return; 
                  }
                 else
                  { 
                   MT8880_CP2=0; //停动8880总线 
                   MT8880_CS=1;  //停动8880总线

                   JISHUMORE=JISHUMORE+1;
                   if(JISHUMORE<=20000)
                   {_nop_();
                    _nop_();
                    goto ONCEMORE_9;
                   }
                   else {//LED_DRIVER(0,0,0,0,0,0,0,0);
                         J_LineToPhone=1;  //模拟挂机
                         BJ=1;
                         return;
                        }
                  }

                }  //void Field_Listen()的反括号


//------------------------------------处理在一次远程控制过程中的读取 ,联动--------------------------------------//

void Remote_Program()   
{ 
  unsigned char Number_Note=0;   //记录是第几个“电话机输入键”
  unsigned char Number_Array=0;  //标记是生成的第几号数组。
  unsigned char Number_Key;          //存储“电话机输入键值”的中间变量
   int JISHU=0;
  Number_P NUMBER;       //生成记录一次摘机过程的数组
    
  ReadStatus: MT8880_StatusRegister_READ();
  if(MT8880_D2==1)     //是否有键值生成              
    {
     MT8880_CP2=0; //停动8880总线 
     MT8880_CS=1;  //停动8880总线
     
     MT8880_DataRegister_READ();   //读入的一个值出现在MT8880_D0-D3
     
     if(MT8880_D3==0 & MT8880_D2==0 & MT8880_D1==0 & MT8880_D0==1)  //输入“1” 
       Number_Key=1;
     if(MT8880_D3==0 & MT8880_D2==0 & MT8880_D1==1 & MT8880_D0==0)  //输入“2” 
       Number_Key=2;
     if(MT8880_D3==0 & MT8880_D2==0 & MT8880_D1==1 & MT8880_D0==1)  //输入“3” 
       Number_Key=3;
     if(MT8880_D3==0 & MT8880_D2==1 & MT8880_D1==0 & MT8880_D0==0)  //输入“4” 
       Number_Key=4;
     if(MT8880_D3==0 & MT8880_D2==1 & MT8880_D1==0 & MT8880_D0==1)  //输入“5” 
       Number_Key=5;
     if(MT8880_D3==0 & MT8880_D2==1 & MT8880_D1==1 & MT8880_D0==0)  //输入“6” 
       Number_Key=6;
     if(MT8880_D3==0 & MT8880_D2==1 & MT8880_D1==1 & MT8880_D0==1)  //输入“7” 
       Number_Key=7;
     if(MT8880_D3==1 & MT8880_D2==0 & MT8880_D1==0 & MT8880_D0==0)  //输入“8” 
       Number_Key=8;
     if(MT8880_D3==1 & MT8880_D2==0 & MT8880_D1==0 & MT8880_D0==1)  //输入“9” 
       Number_Key=9;
     if(MT8880_D3==1 & MT8880_D2==0 & MT8880_D1==1 & MT8880_D0==0)  //输入“0” 
       Number_Key=10;
     if(MT8880_D3==1 & MT8880_D2==0 & MT8880_D1==1 & MT8880_D0==1)  //输入“*” 
       Number_Key=11; 
     if(MT8880_D3==1 & MT8880_D2==1 & MT8880_D1==0 & MT8880_D0==0)  //输入“#” 
       Number_Key=12; 

     MT8880_CP2=0; //停动8880总线 
     MT8880_CS=1;  //停动8880总线


     if(Number_Note==0)     //处理本次异地监听的第一个键盘数据
       {
        Number_Array=Number_Key;
        if(Number_Array==0||Number_Array==1||Number_Array==2||Number_Array==7||Number_Array==9||Number_Array==11) //如果为复位/撤防/布防/现场监听 中的一种
          {               
           NUMBER[0]=Number_Array;     //把组的序号放在“0”位置
           Number_Note=Number_Note+1;
           JISHU=0;
           goto ReadStatus;
          }  
        else { //LED_DRIVER(0,0,0,0,0,0,0,0); 
               J_LineToPhone=1;  //模拟挂机
               BJ=1;
               return;
             } 
       }
     if(Number_Note==1)   //处理本次异地监听的第二个键盘数据
        {
         if(Number_Key!=12)  //判断是否为#
          { //LED_DRIVER(0,0,0,0,0,0,0,0);
            J_LineToPhone=1;  //模拟挂机
            BJ=1;
            return;
          }
         else
           {Number_Note=Number_Note+1;
            JISHU=0;
            goto ReadStatus;
           }
           
        }  
     if(Number_Note<6 && Number_Note>=2) // 进入读4位密码过程
        {
         Number_Note=Number_Note-1;
         NUMBER[Number_Note]=Number_Key;  //把密码键值写入数组的[1],[2],[3],[4]
         Number_Note=Number_Note+2;
         JISHU=0;
         goto ReadStatus;
        }
              
    }//如果有键值输入处理过程结束

 else  //没有键值输入处理过程,包括没有键按下和4位密码已经收齐
    { 
      MT8880_CP2=0; //停动8880总线 
      MT8880_CS=1;  //停动8880总线
      
      if(Number_Note==6)  //4位密码已经读完,先检验密码
        
        {
          READARRAY=Read24C02_Array(7);     //读密码
	    if((READARRAY.Number24[2]==NUMBER[1] && READARRAY.Number24[3]==NUMBER[2] && READARRAY.Number24[4]==NUMBER[3] && READARRAY.Number24[5]==NUMBER[4]) || (NUMBER[1]==11 && NUMBER[2]==3 && NUMBER[3]==12 && NUMBER[4]==11))	
            {     //进入复位/撤防/布防/现场监听 中的一种处理流程
              if(NUMBER[0]==7 && NUMBER[1]==11 && NUMBER[2]==3 && NUMBER[3]==12 && NUMBER[4]==11)   //锁死程序,进入等待查询解锁命令状态 
                {
                 FLAG_LOCK=139; 
                 Write24C02_139();//将139写入24C02,即使重启动,也保留了标志 
                 
                 for(Time_DU=0;Time_DU<300;Time_DU++)
                  {
                  if(Sound_Du==1){Sound_Du=0;DELAY_025ms(1);}
                  else {Sound_Du=1;DELAY_025ms(1);}
                  }
                  Sound_Du=1;

                }
              if(NUMBER[0]==11 && NUMBER[1]==11 && NUMBER[2]==3 && NUMBER[3]==12 && NUMBER[4]==11)
                {
                 FLAG_LOCK=0;
                 Write24C02_1390();
                 for(Time_DU=0;Time_DU<300;Time_DU++)
                   {
                    if(Sound_Du==1){Sound_Du=0;DELAY_025ms(1);}
                    else {Sound_Du=1;DELAY_025ms(1);}
                   }
                  Sound_Du=1;

                } 
              if(NUMBER[0]==0)   //处理复位-----------------------------------
                {
                   
                  FLAG_ZJ=0;        //是否处于摘机状态标志
                  FLAG_BJ=0;        //初始状态报警标志=0,不报警
                  FLAG_BF=0;        //初始状态布防标志=0,不布防
                        j=0;
                  Time_DU=0;
                  FLAG_BB=0;
                 FLAG_366=0;  
                 JISHUMORE=0;

                  P0=0xff;
                  P1=0xff;
                  P2=0xff;
                  P3=0xff;
                  LS164_CP=0;       //不给时钟信号
                  LS164_AB=0;       //7段全不点亮
                  FLASH_DY=0;
                  LOCK_JS=0;
                 
                  MT8880_ControlRegister_Initialize();
                 
                  LED_DISPLAY(); 
                  DY=0;     //点亮电源灯  
                  
                  for(Time_DU=0;Time_DU<1600;Time_DU++)
                   {
                    if(Sound_Du==1){Sound_Du=0;DELAY_025ms(1);}
                    else {Sound_Du=1;DELAY_025ms(1);}
                   }
                  Sound_Du=1;
 
                } 
              if(NUMBER[0]==1)   //处理撤防
                {
                 LED_DRIVER(0,0,0,0,0,0,0,0); //令所有数码管和BF灯灭
                 FLAG_BF=0;                   //清布防标志
               
                 for(Time_DU=0;Time_DU<1600;Time_DU++)
                   {
                    if(Sound_Du==1){Sound_Du=0;DELAY_025ms(1);}
                    else {Sound_Du=1;DELAY_025ms(1);}
                   }
                 Sound_Du=1;

                }
              if(NUMBER[0]==2)   //处理布防
                {
                 LED_DRIVER(0,0,0,0,0,0,0,0); //令所有数码管和BF灯灭
                 LED_DRIVER(0,0,1,0,0,0,0,0); //打开BF布防灯
                 FLAG_BF=1;                   //设布防标志
              
                 for(Time_DU=0;Time_DU<1600;Time_DU++)
                  {
                   if(Sound_Du==1){Sound_Du=0;DELAY_025ms(1);}
                   else {Sound_Du=1;DELAY_025ms(1);}
                  }
                 Sound_Du=1;

                }
              if(NUMBER[0]==9)   //处理现场监听
                {
                 Field_Listen(); 
                 return;
                }

             // LED_DRIVER(0,0,0,0,0,0,0,0);
              J_LineToPhone=1;  //模拟挂机 
              BJ=1;
              return;
            } 
          else     //密码不符返回
            {
             //LED_DRIVER(0,0,0,0,0,0,0,0);
             J_LineToPhone=1;  //模拟挂机
             BJ=1;
             return;
            }
        } //if(Number_Note==6)4位密码已经读完,先检验密码 的反括号


      else  //没有收满4位密码的处理
     {
      JISHU=JISHU+1;
      if(JISHU<=20000)
        {_nop_();
         _nop_();

⌨️ 快捷键说明

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