?? function.c
字號:
//*************************************************************************
//**模 塊 名: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 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 + -