51单片机项目 门禁系统



/**
 * 项目名:门禁系统
 * 文件名:main.h
 */

#ifndef _MAIN_H
#define _MAIN_H

sbit RELAY_PIN = P0^4;
sbit BUZZER_PIN = P0^6;

void sys_init();
void samplingDS1302();
void samplingUlt();
void initDispMode1();
void initDispMode2();
void initDispMode3();
void refreshTimeDisplay();

#endif


/**
 * 项目名:门禁系统
 * 
 * 7:00-22:00工作在模式0(自动门状态)
 * 22:00-7:00工作在模式1(密码门状态)
 * 难点:继电器在接通5s后断开
 *         蜂鸣器报警3s
 * 文件名:main.c
 */

#include <stc15f2k60s2.h>
#include <string.h>
#include "stdint.h"
#include "timer.h"
#include "digitalTube.h"
#include "matrixKey.h"
#include "DS1302.h"
#include "EEPROM.h"
#include "ultrasonic.h"
#include "electromagneticDev.h"
#include "main.h"

volatile bit flag50ms = 0, flag200ms = 0, flag500ms = 0;    //任务标志

bit workingMode = 1;    //工作模式,初始化时间为06:59:00
uint8_t dispMode = 0;    //在密码门状态下的显示模式{0, 1, 2, 3}

uint8_t code initPassword[7] = "654321";    //初始密码
uint8_t password[7];    //当前密码

bit isOpen = 0;    //继电器是否打开
volatile bit enBuzzer = 0;

sTime_t time;

static uint8_t wrongTimes = 0, passwdTmpIndex = 0;    //!!!here

void main() {
    uint8_t cnt500ms = 0;

    sys_init();

    while (1) {
        if (flag50ms) {
            flag50ms = 0;
            
            keyDriver();
        }

        if (flag200ms) {
            flag200ms = 0;
            
            samplingDS1302();

            if (workingMode == 0) {        //如果工作于自动门状态
                samplingUlt();            //采样超声波模块
            }
        }

        if (flag500ms) {
            flag500ms = 0;

          
  • 7
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值