功能:
0.本项目采用STC89C52作为单片机系统的控制MCU,LCD1602作为显示器
1.3张卡别代表依次是张、李、王,任何一个人刷卡成功能,1602液晶响应显示,未刷卡显示空“ ”位置上空的,刷卡成功后相应位置显示有人。
2.液晶第二行显示刷卡人数,即出勤总人数,一个功能按键,按下按键表示上课,如果签到人数和总人数不符合,蜂鸣器报警处理。
4.采用DC002作为电源接口可直接输入5V给整个系统供电

原理图:

PCB :

主程序:

#include <reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
#include <stdio.h>
#include <intrins.h>
#include "delay.h"
#include "rc522.h"
#include "lcd1602.h"sbit KEY_CHECK = P3^2;
sbit BUZZER = P1^0;/*********/
// ID由串口信息获取
unsigned char code zsID[4] = {0x4C, 0x8C, 0xE4, 0x17}; //张三卡号
unsigned char code lsID[4] = {0x2C, 0x96, 0xE4, 0x17}; //李四卡号
unsigned char code weID[4] = {0x59, 0x7B, 0x07, 0xE5}; //王二卡号
/*********/unsigned char UID[4];  //卡号
unsigned char Temp[4]; //暂存数组unsigned long time_20ms; //定时计数
char dis0[16];           //液晶显示数组
char dis1[16];
unsigned char zsFlag = ' '; //张三 是否到标志
unsigned char lsFlag = ' '; //李四 是否到标志
unsigned char weFlag = ' '; //王二 是否到标志
unsigned char disFlag = 0;  //显示标志
unsigned char manNum = 0;   //人数
bit buzFlag = 0;            //蜂鸣器报警标志
bit rekey = 0;            //蜂鸣器报警标志
void Timer0_Init(void);     //函数声明
void UART_Init(void);
void UART_SendStr(unsigned char *s, unsigned char length);
void UART_SendByte(unsigned char dat);void main(void)
{unsigned char disPlace = 0; //显示位置Timer0_Init();              //定时器0初始化UART_Init();                //串口初始化BUZZER = 0;   //报警  开LCD_Init();   //初始化液晶DelayMs(100); //延时有助于稳定LCD_Clear();BUZZER = 1; //报警  关PcdReset();     //复位RC522PcdAntennaOn(); //开启天线发射sprintf(dis0, "ZS:%c LS:%c WE:%c ", zsFlag, lsFlag, weFlag); //打印数据LCD_DispStr(0, 0, dis0);                                     //显示第二行while (1) //主循环{if (PcdRequest(0x52, Temp) == MI_OK) //检测到卡{DelayS(1);if (PcdRequest(0x52, Temp) == MI_OK) //1S后仍然检测到卡{if (PcdAnticoll(UID) == MI_OK) //读取卡号成功{UART_SendByte(0x00); //串口发送卡号UART_SendStr(UID, 4);UART_SendByte(0x00);if ((UID[0] == zsID[0]) && (UID[1] == zsID[1])) //张三 到{if (zsFlag != 0xff) //第一次刷到该卡{zsFlag = 0xff; //显示 到manNum++;}else{zsFlag = ' '; //显示 离开manNum--;}time_20ms = 8;BUZZER = 0; //蜂鸣器短暂鸣叫}else if ((UID[0] == lsID[0]) && (UID[1] == lsID[1])) //李四 到{if (lsFlag != 0xff) //第一次刷到该卡{lsFlag = 0xff; //显示 到manNum++;}else{lsFlag = ' '; //显示 离开manNum--;}time_20ms = 8;BUZZER = 0; //蜂鸣器短暂鸣叫}else if ((UID[0] == weID[0]) && (UID[1] == weID[1])) //李四 到{if (weFlag != 0xff) //第一次刷到该卡{weFlag = 0xff; //显示 到manNum++;}else{weFlag = ' '; //显示 离开manNum--;}time_20ms = 8;BUZZER = 0; //蜂鸣器短暂鸣叫}}}}if (disFlag == 1){sprintf(dis0, "ZS:%c LS:%c WE:%c ", zsFlag, lsFlag, weFlag); //打印数据LCD_DispStr(0, 0, dis0);                                     //显示第二行sprintf(dis1, "Total: %d  ", (int)manNum); //打印数据LCD_DispStr(0, 1, dis1);                    //显示第二行disFlag = 0;}if (KEY_CHECK == 0) //按键按下{DelayMs(10);if (KEY_CHECK == 0 && rekey == 0) //按键按下{rekey = 1;if (manNum < 3) //人数不够{buzFlag = ~buzFlag; //蜂鸣器报警标志}else{buzFlag = 0;}}}else{rekey = 0;}}
}void Timer0_Init(void)
{TMOD |= 0x01;                //使用模式1,16位定时器,使用"|"符号可以在使用多个定时器时不受影响TH0 = (65536 - 18432) / 256; //重新赋值 20msTL0 = (65536 - 18432) % 256;EA = 1;  //总中断打开ET0 = 1; //定时器中断打开TR0 = 1; //定时器开关打开
}void Timer0_Interrupt(void) interrupt 1
{TH0 = (65536 - 18432) / 256; //重新赋值 20msTL0 = (65536 - 18432) % 256;time_20ms++;if (time_20ms % 10 == 0) //定时显示{disFlag = 1;DelayMs(150);if (buzFlag == 1)BUZZER = !BUZZER; //蜂鸣器报警elseBUZZER = 1; //不报警}
}void UART_Init(void)
{SCON = 0x50;  // SCON: 模式 1, 8-bit UART, 使能接收TMOD |= 0x20; // TMOD: timer 1, mode 2, 8-bit 重装TH1 = 0xFD;   // TH1:  重装值 9600 波特率 晶振 11.0592MHzTL1 = TH1;TR1 = 1; // TR1:  timer 1 打开EA = 1;  //打开总中断ES = 0;  //关闭串口中断
}void UART_SendByte(unsigned char dat)
{unsigned char time_out;time_out = 0x00;SBUF = dat;                       //将数据放入SBUF中while ((!TI) && (time_out < 100)) //检测是否发送出去{time_out++;DelayUs10x(2);}       //未发送出去 进行短暂延时TI = 0; //清除ti标志
}void UART_SendStr(unsigned char *s, unsigned char length)
{unsigned char cnt;cnt = 0x00;while (cnt < length) //发送长度对比{UART_SendByte(*s); //放松单字节数据s++;              //指针++cnt++;            //下一个++}
}// void UART_Interrupt(void) interrupt 4 //串行中断服务程序
// {//     if (RI) //判断是接收中断产生
//     {//         RI = 0; //标志位清零
//     }
//     if (TI) //如果是发送标志位,清零
//         TI = 0;
// }

实物演示视频:
https://www.bilibili.com/video/BV1gG4y157yg/

T039基于51单片机射频RFID卡考勤人数计数系统设计原理图PCB相关推荐

  1. 基于51单片机射频RFID卡考勤上课上班统计设计

    具体实现功能 系统由STC89C52单片机电路+RFID模块电路+1602液晶显示电路+电源电路组成. 具体功能: (1)系统有3张卡,分别代表依次是张三.李四.王二: (2)任何一个人刷卡成功能,1 ...

  2. 基于51单片机的篮球赛计时计分器(仿真+源程序+原理图+PCB+论文)

    资料编号:207 功能介绍(全套毕设资料齐全) 采用51单片机一种篮球赛计时计分器的设计方法,即单片机带外围扩展来驱动数码管工作的电路.电路采用单片机作为核心元件,利用两个供阴的三位一体数码管来显示两 ...

  3. 基于51单片机的温湿度测量电力载波通信(实物+原理图+PCB+全套资料)

    资料编号:085 采用51单片机,测量温湿度,通过电力载波协议将数据通过220V供电线传到电脑显示,具体功能请看下方演示视频,全套资料齐全 85-基于51单片机温湿度测量电力载波通信系统(源码+原理图 ...

  4. 基于51单片机GPS定位系统设LCD12864显示(程序+原理图+PCB+论文)

    资料编号:202 功能介绍: (1).定位功能 GPS通过接收卫星信号,可以准确地定出其所在的位置,位置误差小于10米.利用GPS,在12864上面显示当前位置. (2).查询时间功能 GPS还可以接 ...

  5. T045基于51单片机温湿度检测系统无线蓝牙传输Proteus仿真原理图PCB

    功能: 0.本项目采用STC89C52作为单片机系统的控制MCU 1.系统内采用DHT11作为湿度传感器,支持温湿度检测上传 2.系统具备无线蓝牙模块,支持定时循环发送手机端当前的温湿度状态 3.采用 ...

  6. 基于51单片机超声波的停车场车位管理系统proteus仿真原理图PCB

    功能介绍: 0.本系统采用STC89C52作为单片机 1.LCD1602液晶实时显示当前车位状态 2.当超声波探头检测到距离小于500mm时,判断为当前车位有车,否则无车 3.超声波传感器型号采用HC ...

  7. 基于51单片机的数字音乐彩灯电子琴proteus仿真原理图PCB

    0.本系统采用STC89C52作为单片机 1.LCD1602液晶实时显示当前工作模式或曲目编号 2.支持电子琴模式和歌曲模式(内置8首歌曲) 3.按'切换'键可切换工作模式 4.电子琴模式下,按矩阵键 ...

  8. 基于51单片机的水箱水位监测控制系统proteus仿真原理图PCB

    功能介绍: 0.本系统采用STC89C52作为单片机 1.通过传感器监测水位,当水位低于水位下限时,接通加水水泵,直到水位达到水位上限,停止加水 2.水位低于水位下限时,声光报警 3.可按键手动加水, ...

  9. 基于51单片机及NB-IoT的消防管道压力检测原理图PCB

    功能介绍: 0.本系统采用STC89C52作为单片机 1.系统采用LCD1602实时显示管道压力等信息 2.通过四个功能按键可设置压力等阈值 3.压力传感器采用的型号是松下的D3B 4.采用DC002 ...

最新文章

  1. nf_conntrack: table full, dropping packet 解决方案
  2. 软考经过 之 天助自助者
  3. PyTorch ResNet 测试
  4. python之while循环用法举例,break与continue的区别,格式化输出及运算符
  5. Java数据结构和算法(八)——递归
  6. python算法实现源码_python 实现A_算法的示例代码
  7. spring和spring_Spring WebApplicationInitializer和ApplicationContextInitializer的混淆
  8. nowcoderD Xieldy And His Password
  9. Linux基础命令(1)
  10. sqlite的Query方法操作和参数详解
  11. java echarts 散点图_echarts在地图上绘制散点图(任意点)
  12. 相关系数excel_怎样征服老板?教你用excel找到数据之间隐藏信息
  13. 无人机航拍全景图拍摄教程技巧分享
  14. Springboot Web应用中服务器配置参数ServerProperties的加载
  15. Net分布式系统之七:日志采集系统(1)
  16. mysql从数据库误删.idb / .frm 文件,恢复数据方法
  17. 使用tb6612模块驱动直流电机
  18. 【0-1背包】二进制灰狼算法解决0-1背包问题【Matlab】
  19. 不宜猥琐惊世人 猥琐哥横空出世
  20. python编程基础知识入门

热门文章

  1. 埃塞俄比亚空难,人机控制权争夺后的悲剧
  2. CephFS文件存储系统
  3. python3爬虫豆瓣_Python3 爬虫实例(三) -- 爬取豆瓣首页图片
  4. WC 2019 颓废记
  5. 树莓派控制红外线收发
  6. 搭建项目-快速搭建电商平台后台管理系统及逆向生成微服务基本功能
  7. Python数据采集案例(3):豆瓣电影TOP250采集
  8. 转载自豆瓣,前端工程师成长路线
  9. FPGA 黑金XC6SLX9 08.spi_flash源码分析 spi flash数据的读取擦除写入实验(1)
  10. SMT/IC贴片元器件封装类型的识别