51单片机射频RFID卡考勤人数计数系统

一.硬件方案

         “考勤管理系统”是以RFID射频卡为信息识别载体的适用于企业单位或学校的考勤管理系统。整体电路由51单片机电路最小系统,RFID模块电路,1602液晶显示电路,按键电路,蜂鸣器报警电路+电源电路组成。原理图如下:

二.设计功能

  1. 系统有3张卡,分别代表依次是张三、李四、王二。
  2. 任何一个人刷卡成功能,1602液晶响应显示,未刷卡显示空“ ”位置上空的,刷卡成功后相应位置显示有人。液晶第二行显示刷卡人数,即出勤总人数。
  3. 按下按键表示上课,如果签到人数和总人数不符合,蜂鸣器报警处理。


三.软件设计

主程序源码

void main (void)
{     
    unsigned char disPlace=0;    //显示位置
    Init_Timer0();        //定时器0初始化
    UART_Init();      //串口初始化

    buzzer = 0; //报警     开
    LCD_Init();           //初始化液晶
    DelayMs(100);          //延时有助于稳定
    LCD_Clear(); 
    buzzer = 0; //报警     关

    PcdReset();//复位RC522
    PcdAntennaOn();//开启天线发射 

    sprintf(dis0,"ZS:%c LS:%c WE:%c ",zsFlag,lsFlag,weFlag);//打印数据    
    LCD_Write_String(0,0,dis0);//显示第二行

    while (1)         //主循环
    {

         if(PcdRequest(0x52,Temp)==MI_OK)  //检测到卡号
        {
          if(PcdAnticoll(UID)==MI_OK) //读取卡号成功
          { 
            uartSendByte(0x00);    //串口发送卡号
            uartSendStr(UID,4);
            uartSendByte(0x00);
            if((UID[0]==zsID[0])&&(UID[1]==zsID[1]))//张三 到
            {
                if(zsFlag != 0xff)    //第一次刷到该卡
                {                            
                    zsFlag =0xff;       //显示 到
                    time_20ms = 8;buzzer = 0;      //蜂鸣器短暂鸣叫
                }
            }
            else if((UID[0]==lsID[0])&&(UID[1]==lsID[1]))//李四 到
            {
                if(lsFlag != 0xff)      //第一次刷到该卡
                {
                    lsFlag =0xff;      //显示 到
                    time_20ms = 8;buzzer = 0;     //蜂鸣器短暂鸣叫
                }
            }
            else if((UID[0]==weID[0])&&(UID[1]==weID[1]))//李四 到
            {
                if(weFlag != 0xff)     //第一次刷到该卡
                {
                    weFlag =0xff;      //显示 到
                    time_20ms = 8;buzzer = 0;    //蜂鸣器短暂鸣叫
                }
            }
          }
        }
        if(disFlag  == 1)
        {
            sprintf(dis0,"ZS:%c LS:%c WE:%c ",zsFlag,lsFlag,weFlag);//打印数据    
            LCD_Write_String(0,0,dis0);//显示第二行
            manNum=0;            //清空总人数
            if(zsFlag==0xff)        //张三到 +1
            {manNum=manNum+1;}
            if(lsFlag==0xff)
            {manNum=manNum+1;}    //李四到 +1
            if(weFlag==0xff)
            {manNum=manNum+1;}    //王二到 +1    
            sprintf(dis1,"ZongRen:%d  ",(int)manNum);//打印数据    
            LCD_Write_String(0,1,dis1);//显示第二行                                
            disFlag =0;        
        }

        if(key == 0) //按键按下
        {
            if(manNum != 3)      //人数不够
            {
                buzFlag = 1; //蜂鸣器报警标志
            }        
        } 

    }
}

资料链接:https://pan.baidu.com/s/1Pf3SxyMqWG799btx7hUUbw?pwd=4sb9 
提取码:4sb9

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值