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

📄 door.c

📁 一体化锁主程序
💻 C
📖 第 1 页 / 共 2 页
字号:
#include "KKZQ.H"
//339724325
//=======================================================
uchar xdata new_card[14];
bit new_record_flag;        //新刷卡开门标志
bit mon_open_flag=0;        //是否监视开门过程
bit door_open_flag=0;       //=1,当前门处于开状态
bit open_okflag=0;          //=1, 已经执行了开门动作
bit shut_okflag=0;          //=1, 已经执行了关门动作
bit next_card_flag=1;       //可以读下一张卡标志

uchar idata oplock_on_time;             //程序使用的开锁继电器持续导通时间

uchar idata door_step=0;          //开门步骤寄存器
//    door_step=1 ---- 继电器已打开,等待开门状态
//    door_step=2 ---- 继电器通电时间已到, 关闭继电器
//    door_step=3 ---- 没有开门指令时监控门状态
//==============================================================================
uchar sys_state2;       //远程监控用系统状态信息
// D7      紧急驱动输入
// D6      联动输入2
// D5      联动输入1
// D4 = 0, 联动输出继电器关闭     =1 加电驱动
// D3 = 0, 门关闭,                =1 门开启
// D2 = 0, 红外输入正常           =1 报警
// D1 = 0, 手动按键松开           =1 按下
// D0 = 0, 门控电磁继电器关闭     =1 加电驱动
//---------------------------------------------------------
//uchar output_reg=0;          //输出控制及状态指示

//=0; 允许读系统时间
//=1; 禁止读写系统时间
//=2; 要求立即写系统时间


uchar mark023_status;  //刷卡开门,远程开门,手动开门,事件纪录的状态
// D7 = 0 --- 未确认用户密码;                  =1,确认
// D6 = 0 --- 原来门处于关闭状态;              =1,开状态
// D5 = 0 --- 在规定时间内进入,                =1,为开门进入
// D4 = 0 --- 在开门等待进入延时后,门已关闭,   =1,门还开着
// D3 = 0 --- =1,开门进入后关闭了红外监控;     =0,保持原状
// D2 ------- 保留
// D1 = 0 --- 外接分体卡;                      =1,内置主体卡
// D0 = 0 --- 红外监控原来是关闭的;            =0,保持原状
//==============================================================================
//==============================================================================
uchar idata open_order=0xff;           //开门命令代码
//  =1, 刷卡开门
//  =2, 远程开门
//  =3, 手动开门
//==============================================================================
//


uchar hand_step=0;                //监视手动开门步骤寄存器
uchar hwait_time=0;               //监视手动开门时间寄存器


void aralm_record(uchar as);      //初始化告警记录缓冲区
void init_date_record();          //初始化告警记录时间缓冲区
void save_open_record();          //初始化开门记录缓冲区
void mon_open_step();             //监视刷卡开门,远程开门,手动开门过程
void no_order_open();             //没有开门指令时监视门状态
void exit_mon_door();             //退出监视开关门状态
void door_onoff();
void hand_record();               //初始化手动开门记录缓冲区
void setup_record(uchar ud);      //初始化设置状态改变时事件记录缓冲区   上位机改变时调用
void monhand_open();              //手动开门时监视门状态

//
//==============================================================================
//filename : no_order_open()
//功    能 : 没有开门指令时监视门状态
//           如果处于打开状态, 如果没有报警则报警并保存记录
//           door_aralm_flag=1;  //置非法开门告警标志
//           aralm_record(2);    //保存非法开门纪录
//STATUS :
//D7=0
//D6=0  原来门处于关状态,    =1 开状态;
//D5=0  在规定时间内开门进入,  =1 未开门进入;
//D4=0  在开门等待进入延时后,门已正常关闭, =1 仍然开的;
//D3=0
//D2=0
//D1=0
//D0=0
//==============================================================================
//
void no_order_open()//没有开门指令时监视门状态
{
//------------------------------------------------------------------------------
//开门状态
    if(door_open_flag)           //开门状态
    {   if((mark023_status&0x40)==0)  //门原来是关着的
        {   mark023_status=0x40;
            door_aralm_flag=1;   //置非法开门告警标志
            aralm_record(2);     //纪录报警程序
        }
    }
//------------------------------------------------------------------------------
//关门状态
    else if(mark023_status&0x40)  //门原来是开着的
    {   aralm_record(3);          //非法开门, 现在关闭
        door_aralm_flag=0;        //清非法开门告警标志
        open_order=0xff;
        mark023_status=0;
    }
}
//==============================================================================
//filename : monhand_open()
//功    能 : 监控手动开门的开与关动作
//           wait_hopflag=1; 手动开门动作已发出等待开门
//           hand_step=0,    监视解除
//           hand_step=1,    等待开门  等待时间= 5秒
//           hand_step=2,    等待关门,等待时间=20秒
//           hand_step=3,    等待关门,等待时间=无限时间
//
//           手动开门命令发出后如果在5秒时间内开门则转到监视关门状态,如果在
//           5秒时间内没有开门则解除手动开门命令,再有开门动作视为非法开门
//           开门后必须在20秒内关门否则告警并解除手动开门命令
//==============================================================================
//
void monhand_open()              //没有开门指令时监视门状态
{   if(hand_step==1)             //手动开门动作已发出等待开门,等待时间5秒
    {   if(door_open_flag)       //开门状态
        {   hand_step=2;         //门已开,等待关门。等待时间20秒
            hwait_time=200;
            mark023_status&=0x50;  //在规定时间内开门进入
            hand_record();
        }
        else if(--hwait_time==0)   //等待时间已到,手动开门命令解除
        {   hand_step=0;
            wait_hopflag=0;
            mark023_status|=0x20;  //在规定时间内没有开门进入
            hand_record();
            mark023_status=0;      //置门原来状态 --- 开着的, =0关着的
        }
    }
    else if(hand_step==2)        //等待关门,等待时间20秒
    {   if(!door_open_flag)      //关门状态
        {   hand_step=0;         //门已关
            wait_hopflag=0;      //手动开门监视解除
            mark023_status&=0x60;//在规定时间内没有开门进入
            hand_record();
            mark023_status=0;    //门原来状态是关着的
        }
        else if(--hwait_time==0) //等待时间已到,手动开门命令解除
        {   hand_step=0;         //进入无限期等待关门动作
            wait_hopflag=0;      //手动开门监视解除
            mark023_status|=0x10;  //在规定时间内没有开门进入
            hand_record();
            mark023_status=0x40;   //置门原来状态 --- 开着的, =0关着的
        }
    }
    else if(hand_step==0)wait_hopflag=0;
}
//
//==============================================================================
//filename : mon_open_step()
//功    能 : 监视刷卡开门,远程开门,手动开门过程
//寄 存 器 : 1.  door_step=1 ---- 驱动电机前进,时间1.2s
//               door_step=2 ---- 电机断电,时间5s.在此期间检测们是否打开
//                                在断电1秒后,关闭继电器
//               door_step=3 ---- 等待关门
//           2.  open_order ---   非法开门=0; 刷卡开门=1; 远程开门=2; 手动开门=3
//==============================================================================
//relay=1;                        //继电器断电
//uchar sys_state1;       //远程监控用系统状态信息
// D7 = 0, 实时时钟芯片工作正常
// D6 = 0, 数据存储器工作正常
// D5 = 0, 系统共电电源工作正常
// D4      保留
// D3 = 0, 不监视门磁,            =1 监视门磁
// D2 = 0, 不监视红外,            =1 监视红外
// D1 = 0, 门控电磁继电器关闭,    =1 门控电磁继电器处于加电状态
// D0 = 0, 正常工作,              =1 处于报警状态


void mon_open_step()
{   switch(door_step)
    {   case 1: if(++oplock_on_time>20)     //2S
                {   motor_power=1;          //电机断电
                    oplock_on_time=50;      //电机断电,等待开门时间=5s
                    door_step=2;
                    relay=0;                //继电器供电
                }
                break;
        case 2:
                if(!open_okflag)
                {   if(door_open_flag)
                    {   mark023_status&=0x50;//门已开,在规定时间内进入
                        open_okflag=1;       //已经执行了开门动作
                        save_open_record();  //开门过程记录缓冲区
                    }
                }
                else if(!shut_okflag)
                {   if(open_okflag&&!door_open_flag)
                    {   shut_okflag=1;       //已经执行了关门动作
                        mark023_status&=0x40;//在开门等待进入延时后,门已关闭
                        save_open_record();  //开门过程记录缓冲区
                    }
                }
                if(--oplock_on_time==0)     //等待开门时间已到

⌨️ 快捷键说明

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