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

📄 function.c

📁 灭火控制盘(XMP4-2)
💻 C
📖 第 1 页 / 共 5 页
字号:
//*************************************************************************
//**模 块 名:function.c
//**说    明:功能函数
//*************************************************************************
#include <AT89x55.H>
#include <INTRINS.H>
#include <STRING.H>
#include "main.h"
//位操作临时变量
volatile uchar bdata TemBit;
sbit TemBit0 = TemBit^0;
sbit TemBit1 = TemBit^1;
sbit TemBit2 = TemBit^2;
sbit TemBit3 = TemBit^3;
sbit TemBit4 = TemBit^4;
sbit TemBit5 = TemBit^5;
sbit TemBit6 = TemBit^6;
sbit TemBit7 = TemBit^7;
//输出口扩展1数据(D21,74HC237,29C040高7位地址,第八位????)
volatile uchar bdata CS_OUT1;
sbit PA0              = CS_OUT1^0;           //第12位地址线
sbit PA1              = CS_OUT1^1;           //第13位地址线
sbit PA2              = CS_OUT1^2;           //第14位地址线
sbit PA3              = CS_OUT1^3;           //第15位地址线
sbit PA4              = CS_OUT1^4;           //第16位地址线
sbit PA5              = CS_OUT1^5;           //第17位地址线
sbit PA6              = CS_OUT1^6;           //第18位地址线
sbit DETECT_POWER     = CS_OUT1^7;           //探测器24V控制端
//输出口扩展2数据(D13,27HC273,送键盘检测,485发送接收设置,LED灯,自检控制)
volatile uchar bdata CS_OUT2;
sbit JP_DET           = CS_OUT2^0;           //键盘检测输出
sbit DE485            = CS_OUT2^1;           //485发送
sbit RE485            = CS_OUT2^2;           //485接收
sbit MUTE_LED         = CS_OUT2^3;           //消音指示灯
sbit POWER_LED        = CS_OUT2^4;           //主电指示灯
sbit BATT_LED         = CS_OUT2^5;           //备电指示灯
sbit LCD_LAMP         = CS_OUT2^6;           //液晶显示器背光
sbit SELF_TEST        = CS_OUT2^7;           //自检输出端
//输出口扩展3数据(向赛福德的YD8000报告四个区的状态)
volatile uchar bdata CS_OUT3;
sbit FIRTSTOP         = CS_OUT3^0;            //一区停止
sbit SECONDSTOP       = CS_OUT3^1;            //二区停止
sbit THREESTOP        = CS_OUT3^2;            //三区停止
sbit FOURSTOP         = CS_OUT3^3;            //四区停止
sbit FIRTSTART        = CS_OUT3^4;            //一区启动
sbit SECONDSTART      = CS_OUT3^5;            //二区启动
sbit THREESTART       = CS_OUT3^6;            //三区启动
sbit FOURSTART        = CS_OUT3^7;            //四区启动
//一区LED显示数据(一区各种状态显示)
volatile uchar bdata CS_LED1;
sbit LED1_NOALLOW     = CS_LED1^0;            //禁止灯
sbit LED1_ALLOW       = CS_LED1^1;            //允许灯
sbit LED1_MANUAL      = CS_LED1^2;            //手动指示灯
sbit LED1_AUTO        = CS_LED1^3;            //自动指示灯
sbit LDAUTOSTOP1      = CS_LED1^4;            //联动设备自动停止
sbit PDAUTOSTART1     = CS_LED1^5;            //喷洒灯自动启动
sbit SGAUTOSTART1     = CS_LED1^6;            //声光自动启动
sbit GPAUTOSTART1     = CS_LED1^7;            //钢瓶自动启动
//二区LED显示数据(二区各种状态显示)
uchar bdata CS_LED2;
sbit LED2_NOALLOW     = CS_LED2^0;            //禁止灯
sbit LED2_ALLOW       = CS_LED2^1;            //允许灯
sbit LED2_MANUAL      = CS_LED2^2;            //手动指示灯
sbit LED2_AUTO        = CS_LED2^3;            //自动指示灯
sbit LDAUTOSTOP2      = CS_LED2^4;            //联动设备自动停止
sbit PDAUTOSTART2     = CS_LED2^5;            //喷洒灯自动启动
sbit SGAUTOSTART2     = CS_LED2^6;            //声光自动启动
sbit GPAUTOSTART2     = CS_LED2^7;            //钢瓶自动启动
//三区LED显示数据(三区各种状态显示)
volatile uchar bdata CS_LED3;
sbit LED3_NOALLOW     = CS_LED3^0;            //禁止灯
sbit LED3_ALLOW       = CS_LED3^1;            //允许灯
sbit LED3_MANUAL      = CS_LED3^2;            //手动指示灯
sbit LED3_AUTO        = CS_LED3^3;            //自动指示灯
sbit LDAUTOSTOP3      = CS_LED3^4;            //联动设备自动停止
sbit PDAUTOSTART3     = CS_LED3^5;            //喷洒灯自动启动
sbit SGAUTOSTART3     = CS_LED3^6;            //声光自动启动
sbit GPAUTOSTART3     = CS_LED3^7;            //钢瓶自动启动
//四区LED显示数据(四区各种状态显示)
volatile uchar bdata CS_LED4;
sbit LED4_NOALLOW     = CS_LED4^0;            //禁止灯
sbit LED4_ALLOW       = CS_LED4^1;            //允许灯
sbit LED4_MANUAL      = CS_LED4^2;            //手动指示灯
sbit LED4_AUTO        = CS_LED4^3;            //自动指示灯
sbit LDAUTOSTOP4      = CS_LED4^4;            //联动设备自动停止
sbit PDAUTOSTART4     = CS_LED4^5;            //喷洒灯自动启动
sbit SGAUTOSTART4     = CS_LED4^6;            //声光自动启动
sbit GPAUTOSTART4     = CS_LED4^7;            //钢瓶自动启动
//输入扩展数据(读YD8000传来的启动和停止命令)
volatile uchar bdata CS_COMMAND;
sbit YDSTART1         = CS_COMMAND^0;         //YD8000启动1区命令
sbit YDSTART2         = CS_COMMAND^1;         //YD8000启动2区命令
sbit YDSTART3         = CS_COMMAND^2;         //YD8000启动3区命令
sbit YDSTART4         = CS_COMMAND^3;         //YD8000启动4区命令
sbit YDSTOP1          = CS_COMMAND^4;         //YD8000停止1区命令
sbit YDSTOP2          = CS_COMMAND^5;         //YD8000停止2区命令
sbit YDSTOP3          = CS_COMMAND^6;         //YD8000停止3区命令
sbit YDSTOP4          = CS_COMMAND^7;         //YD8000停止4区命令
//输入扩展数据(读键盘输入的数据)
volatile uchar bdata CS_KEYL;
sbit KEY_RESET        = CS_KEYL^0;            //复位键
sbit KEY_MUTE         = CS_KEYL^1;            //消音键
sbit KEY_TEST         = CS_KEYL^2;            //自检键
sbit KEY_SETUP        = CS_KEYL^3;            //设置键
sbit KEY_SURE         = CS_KEYL^4;            //确认键
sbit KEY_INC          = CS_KEYL^5;            //增加1
sbit KEY_DEC          = CS_KEYL^6;            //减少1
sbit TONG_DETECT      = CS_KEYL^7;            //与赛福德通讯故障检测
//输入扩展数据(读四个区各种状态的数据)
volatile uchar bdata CS_STATUS;
sbit GPQD_DETECT      = CS_STATUS^0;          //钢瓶启动检测
sbit JTAN_DETECT      = CS_STATUS^1;          //紧急停止检测
sbit YLKG_DETECT      = CS_STATUS^2;          //压力开关动作检测
sbit SDJT_DETECT      = CS_STATUS^3;          //手动紧急停止检测
sbit SDJQ_DETECT      = CS_STATUS^4;          //手动紧急启动检测
sbit JQAN_DETECT      = CS_STATUS^5;          //紧急启动检测
sbit ALLOW_DETECT     = CS_STATUS^6;          //允许禁止检测
sbit MANUAL_DETECT    = CS_STATUS^7;          //手动自动检测
//输入扩展数据(读四个区各路的线路故障信号)
volatile uchar bdata CS_FAULT;
sbit DCFGZ_DET        = CS_FAULT^0;           //电磁阀线路故障检测
sbit SGGZ_DET         = CS_FAULT^1;           //声光线路故障检测
sbit PSGZ_DET         = CS_FAULT^2;           //喷洒灯线路故障检测
sbit LDGZ_DET         = CS_FAULT^3;           //联动线路故障检测
sbit YLGZ_DET         = CS_FAULT^4;           //压力开关线路故障检测
sbit TZJGZ_DET        = CS_FAULT^5;           //停止键线路故障检测
sbit QDJGZ_DET        = CS_FAULT^6;           //启动键线路故障检测
//*************************************************************************
//**函 数 名:Setup12887
//**输    入:
//**          *p:设置系统时间的时间数组
//**输    出:无
//**功能描述:
//**          1.设置系统时间
//*************************************************************************
void Setup12887(uchar *p)
{
uchar xdata i;
i=P12887d;
P12887a=0x70; P12887b=0xa2; P128870=*p++; P128871=0xff; P128872=*p++;
P128873=0xff; P128874=*p++; P128875=0xff; P128876=*p++; P128877=*p++;
P128878=*p++; P128879=*p++; P12887b=0x22; P12887a=0x20;
i=P12887c;
}
//*************************************************************************
//**函 数 名:Read12887
//**输    入:
//**          *p:读取系统时间的时间数组
//**输    出:无
//**功能描述:
//**          1.读取系统时间
//*************************************************************************
void Read12887(uchar *p)
{
uchar xdata a;
do{ a=P12887a; } while((a&0x80)==0x80);
*p++=P128870; *p++=P128872; *p++=P128874; *p++=P128876;
*p++=P128877; *p++=P128878; *p++=P128879;
}
//*************************************************************************
//**函 数 名:Start12887
//**输    入:无
//**输    出:无
//**功能描述:
//**          1.启动时钟
//*************************************************************************
void Start12887(void)       //启动时钟
{
uchar xdata i;
i=P12887d;
P12887a=0x70; P12887b=0xa2; P128871=0xff; P128873=0xff; P128875=0xff;
P12887b=0x22; P12887a=0x20;
i=P12887c;
}
//*************************************************************************
//**函 数 名:LCDLAMPCTRL
//**输    入:
//**          trun_on_off:背光开关
//**                       为1时,背光开
//**                       为0时,背光关
//**输    出:无
//**功能描述:
//**          1.背光开关控制
//*************************************************************************
void LCDLAMPCTRL(bit trun_on_off)              //背光开关
{
  if(trun_on_off == 0)
     {
      //背光控制端置高,关背光
      LCD_LAMP = 1;
      //向指定口送数
      KEYCOL_SCAN = CS_OUT2;
      }
  else
     {
      //背光控制端置低,开背光
      LCD_LAMP = 0;
      //向指定口送数
      KEYCOL_SCAN = CS_OUT2;
      }
}
//*************************************************************************
//**函 数 名:Disp_Auto_Allow
//**输    入:无
//**输    出:无
//**功能描述:
//**          1.检测四个区的手动自动状态,并送LED显示
//**          2.检测四个区的禁止允许状态,并送LED显示
//*************************************************************************
void Disp_Auto_Allow(uchar QuNumber)
{
  switch(QuNumber)
         {
          //检测一区的状态
          case 1:CS_STATUS = ONEPORTDETECT;
                 //判断手动自动锁的状态
                 if(MANUAL_DETECT)
                    {
                     //自动状态
                     LED1_MANUAL = 1;             //自动灯亮
                     LED1_AUTO   = 0;             //手动灯灭
                     auto_status[QuNumber-1] = 0;
                     }
                 else
                    {
                     //手动状态
                     LED1_MANUAL = 0;             //自动灯灭
                     LED1_AUTO   = 1;             //手动灯亮
                     auto_status[QuNumber-1] = 1;
                     }
                 //判断禁止允许锁的状态
                 if(ALLOW_DETECT)
                    {
                     //禁止状态
                     LED1_NOALLOW = 1;             //禁止灯亮
                     LED1_ALLOW   = 0;             //允许灯灭
                     allow_status[QuNumber-1] = 0;
                     }
                 else
                    {
                     //允许状态
                     LED1_NOALLOW = 0;             //禁止灯灭
                     LED1_ALLOW   = 1;             //允许灯亮
                     allow_status[QuNumber-1] = 1;
                     }
                 //送显示口
                 ONEPORTLEDDISP = CS_LED1;
                 break;
          //检测二区状态
          case 2:CS_STATUS = TWOPORTDETECT;
                 //判断手动自动锁的状态
                 if(MANUAL_DETECT)
                    {
                     //自动状态
                     LED2_MANUAL = 1;             //自动灯亮
                     LED2_AUTO   = 0;             //手动灯灭
                     auto_status[QuNumber-1] = 0;
                     }
                 else
                    {
                     //手动状态
                     LED2_MANUAL = 0;             //自动灯灭
                     LED2_AUTO   = 1;             //手动灯亮
                     auto_status[QuNumber-1] = 0;
                     }
                 //判断禁止允许锁的状态
                 if(ALLOW_DETECT)
                    {
                     //禁止状态
                     LED2_NOALLOW = 1;             //禁止灯亮
                     LED2_ALLOW   = 0;             //允许灯灭
                     allow_status[QuNumber-1] = 0;
                     }
                 else
                    {
                     //允许状态
                     LED2_NOALLOW = 0;             //禁止灯灭
                     LED2_ALLOW   = 1;             //允许灯亮
                     allow_status[QuNumber-1] = 1;
                     }
                 //送显示口
                 TWOPORTLEDDISP = CS_LED2;
                 break;
          //检测三区状态
          case 3:CS_STATUS = THREEPORTDETECT;
                 //判断手动自动锁的状态
                 if(MANUAL_DETECT)
                    {
                     //自动状态
                     LED3_MANUAL = 1;             //自动灯亮
                     LED3_AUTO   = 0;             //手动灯灭
                     auto_status[QuNumber-1] = 0;
                     }
                 else
                    {
                     //手动状态
                     LED3_MANUAL = 0;             //自动灯灭
                     LED3_AUTO   = 1;             //手动灯亮
                     auto_status[QuNumber-1] = 1;
                     }
                 //判断禁止允许锁的状态
                 if(ALLOW_DETECT)
                    {
                     //禁止状态
                     LED3_NOALLOW = 1;             //禁止灯亮
                     LED3_ALLOW   = 0;             //允许灯灭
                     allow_status[QuNumber-1] = 0;
                     }
                 else
                    {
                     //允许状态
                     LED3_NOALLOW = 0;             //禁止灯灭
                     LED3_ALLOW   = 1;             //允许灯亮
                     allow_status[QuNumber-1] = 1;
                     }
                 //送显示口
                 THREEPORTLEDDISP = CS_LED3;
                 break;
          //检测四区状态
          case 4:CS_STATUS = FOURPORTDETECT;
                 //判断手动自动锁的状态
                 if(MANUAL_DETECT)
                    {
                     //自动状态
                     LED4_MANUAL = 1;             //自动灯亮
                     LED4_AUTO   = 0;             //手动灯灭
                     auto_status[QuNumber-1] = 0;
                     }
                 else
                    {
                     //手动状态
                     LED4_MANUAL = 0;             //自动灯灭
                     LED4_AUTO   = 1;             //手动灯亮
                     auto_status[QuNumber-1] = 1;
                     }
                 //判断禁止允许锁的状态
                 if(ALLOW_DETECT)
                    {
                     //禁止状态
                     LED4_NOALLOW = 1;             //禁止灯亮
                     LED4_ALLOW   = 0;             //允许灯灭
                     allow_status[QuNumber-1] = 0;
                     }
                 else
                    {
                     //允许状态
                     LED4_NOALLOW = 0;             //禁止灯灭
                     LED4_ALLOW   = 1;             //允许灯亮
                     allow_status[QuNumber-1] = 1;
                     }
                 //送显示口
                 FOURPORTLEDDISP = CS_LED4;
                 break;
         default:break;
         }
}
//*************************************************************************
//**函 数 名:Power_TONGXU_Detect
//**输    入:无
//**输    出:无
//**功能描述:
//**          1.检测主电状态,并送LED显示
//**          2.检测备电状态,并送LED显示
//*************************************************************************
void Power_TONGXU_Detect()
{
  //判断交流电是否故障,并且故障信息未上报
  if((!ACOK)&&(!ac_report_ok))
     {
      //读取报警时间
      Read12887(Clock_Time);
      //存入显示缓冲区
      SaveAlarmToBUFF(0x00,0x05,2);

⌨️ 快捷键说明

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