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

📄 door.c

📁 一体化锁主程序
💻 C
📖 第 1 页 / 共 2 页
字号:
                {   door_step=3;            //开始退电机
                    oplock_on_time=20;      //退电机时间2s
                    motor_power=0;          //电机供电, 退电机
                }
                break;
//--------------------------------------------------------------------------------
//退电机, 如果门正常开启并关闭或根本就没开门推出监控状态
        case 3:
                if(--oplock_on_time==0)     //退电机结束
                {   motor_power=1;          //电机断电
                    next_card_flag=1;       //可以读下一张卡标志
                    sys_state2&=0x0e;       //设置继电器断电状态
                    sys_state1&=0xfd;       //设置继电器断电状态
                    oplock_on_time=200;     //等待关门时间=20s
                    relay=1;                //继电器断电
                    if(shut_okflag)
                    {   exit_mon_door();           //已执行开关门动作,退出监视开关门状态
                        mark023_status=0;          //置门原来状态 --- 开着的, =0关着的
                    }
                    else  door_step=4;            //等待关门
                }
                break;
//--------------------------------------------------------------------------------
        case 4: if(shut_okflag)
                {   exit_mon_door();           //已执行开关门动作,退出监视开关门状态
                    mark023_status=0;          //置门原来状态 --- 开着的, =0关着的
                }
                else if(--oplock_on_time==0)   //等待关门时间到
                {   mark023_status=0x10;       //在开门等待进入延时后,门仍然开的
                    save_open_record();        //开门过程记录缓冲区
                    exit_mon_door();
                    mark023_status=0x50;       //置门原来状态 --- =0x40开着的, =0关着的
                }
                break;
        default:break;
    }

}
//-----------------------------------------------------------------------
//uchar sys_state1;       //远程监控用系统状态信息
// D7 = 0, 实时时钟芯片工作正常
// D6 = 0, 数据存储器工作正常
// D5 = 0, 系统共电电源工作正常
// D4      保留
// D3 = 0, 不监视门磁,            =1 监视门磁
// D2 = 0, 不监视红外,            =1 监视红外
// D1 = 0, 门控电磁继电器关闭,    =1 门控电磁继电器处于加电状态
// D0 = 0, 正常工作,              =1 处于报警状态
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
//uchar sys_state2;       //远程监控用系统状态信息
// D7      紧急驱动输入
// D6      联动输入2
// D5      联动输入1
// D4 = 0, 联动输出继电器关闭     =1 加电驱动
// D3 = 0, 门关闭,                =1 门开启
// D2 = 0, 红外输入正常           =1 报警
// D1 = 0, 手动按键松开           =1 按下
// D0 = 0, 门控电磁继电器关闭     =1 加电驱动
//
//==============================================================================
//filename : exit_mon_door()
//功    能 : 退出监视开关门状态
//==============================================================================
//
void exit_mon_door()//退出监视开关门状态
{
    relay=1;
    open_order=0xff;
    door_step=0;
    sys_state1|=0x02;       //继电器断电
    mon_open_flag =0;
    motor_power=1;          //电机断电
    shut_okflag=0;
    open_okflag=0;
}
//==============================================================================
//filename : aralm_record(uchar as)
//功    能 : 初始化告警记录缓冲区
//寄 存 器 : as --- 告警记录事件来源
//           as = 0,  红外报警开始(本程序未用)
//           as = 1,  红外报警停止(本程序未用)
//           as = 2,  非正常开门
//           as = 3,  门已关闭(由非正常开门引起的)
//           as = 7,  红外监测被关闭(本程序未用)
//           as = 8,  红外监测被开启(本程序未用)
//           as = 9,  门监测被关闭
//           as = 10, 门监测被开启
//
//           byte0 ------ byte4   事件来源
//           byte5 ------ byte11  年月日时分秒
//           byte12 -----         状态
//           byte13 -----         事件代码
//==============================================================================
//
void aralm_record(uchar as)//初始化告警记录缓冲区
{
    uchar i;
    for(i=0;i<4;i++)eeprom_buf[i]=0;
    eeprom_buf[4]=as;               //报警源
    init_date_record();             //初始化报警时间
    eeprom_buf[12]=sys_state2;      //报警时监控线状态
    eeprom_buf[13]=5;               //报警代码
    write_his_data();
}


//
//==============================================================================
//filename : hand_record()
//功    能 : 手动开门记录,  "事件来源" = 5字节全0
//寄 存 器 :
// 1:  REMARK=0 刷卡开门记录
//"事件来源" = 5字节卡号
//STATUS :
//D7=0
//D6=0  原来门处于关状态,    =1 开状态;
//D5=0  在规定时间内开门进入,  =1 未开门进入;
//D4=0  在开门等待进入延时后,门已正常关闭, =1 仍然开的;
//D3=0
//D2=0
//D1=0
//D0=0

//==============================================================================
//
void hand_record()//初始化告警记录缓冲区
{
    uchar i;
    for(i=0;i<5;i++)eeprom_buf[i]=0;
    init_date_record();                  //初始化报警时间
    eeprom_buf[12]=mark023_status;
    eeprom_buf[13]=3;                    //备注=手动开门
    write_his_data();
}
//
//==============================================================================
//filename : init_date_record()
//功    能 : 初始化告警记录时间缓冲区
//寄 存 器 :
//==============================================================================
//
void init_date_record()//初始化告警记录时间缓冲区
{
    eeprom_buf[5]=0x20;       //世纪号
    eeprom_buf[6]=sys_year;   //当前时间 -- 年
    eeprom_buf[7]=sys_mon;    //当前时间 -- 月
    eeprom_buf[8]=sys_date;   //当前时间 -- 日
    eeprom_buf[9]=sys_hour;   //当前时间 -- 时
    eeprom_buf[10]=sys_min;   //当前时间 -- 分
    eeprom_buf[11]=sys_second;//当前时间 -- 秒
}

//==============================================================================
//filename : save_open_record()
//功    能 : 保存事件
//参    数 :
//           open_order=0 --- 刷卡开门成功
//           open_order=2 --- 远程开门
//           open_order=3 --- 手动开门
//           open_order=8 --- 无效的刷卡开门
//           open_order=9 --- 用户卡的有效期已过
//           open_order=10 -- 当前时间该用户无权进入
//==============================================================================
//
void save_open_record()//初始化开门记录缓冲区
{
    uchar i;
    for(i=0;i<16;i++)eeprom_buf[i]=set_user_buf[i];
    init_date_record();                //初始化告警记录时间
    eeprom_buf[12]=mark023_status;
    eeprom_buf[13]=open_order;
    if((open_order==2)||(open_order==3)||(open_order==4))//远程开门,手动开门
    {   for(i=0;i<5;i++)eeprom_buf[i]=0;
        new_record_flag=0;             //当前记录为非刷卡记录
    }
    else
    {   new_record_flag=1;
        for(i=0;i<14;i++)new_card[i]=eeprom_buf[i];
    }
    write_his_data();
}


//==============================================================================
//filename : setup_record(uchar ud)              上位机改变时调用
//功    能 : 初始化设置状态改变时事件记录缓冲区
//寄 存 器 :
//==============================================================================
//
void setup_record(uchar ud)//初始化设置状态改变时事件记录缓冲区
{
    uchar i;
    for(i=0;i<4;i++)eeprom_buf[i]=0;
    eeprom_buf[4]=ud;
    init_date_record();
    eeprom_buf[12]=0;          //当前个输入线状态
    eeprom_buf[13]=7;          //记录代码
    write_his_data();
}

⌨️ 快捷键说明

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