102 基于51单片机RFID刷卡门禁控制系统设计【毕设课设】

本设计由STC89C52单片机电路+WIFI_ESP8266模块+RFID_RC522模块+ISD1820语音模块电路+LED指示灯电路+电源电路组成。

1、有2张卡,分别在系统中设定为:zhangsan、lisi。另外再增加一张空卡。

2、如果有卡刷到,则将卡对应的人名通过wifi模块上传到电脑。如果检测到未标记的空卡,则将卡号上传。

3、如果刷卡通过,则语音播报:刷卡通过。同时,绿灯亮3秒,然后绿灯灭。

4、如果刷卡不通过,则语音播报:禁止入内。同时,红灯亮3秒,然后红灯灭。

5、语音内容可以自行录制。

 

#include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
#include<stdio.h>
#include <intrins.h>
#include "delay.h"
#include "rc522.h"

/*********/
unsigned char code zsID[4]={0xF7,0xD0,0x70,0x8b};	//张三卡号
unsigned char code lsID[4]={0x25,0xED,0x45,0xBE};	//李四卡号
/*********/

sbit yuyin1 = P1^0;//通过语音控制引脚
sbit yuyin2 = P1^1;//不通过语音控制引脚

sbit ledgre = P1^2;//不通过语音控制引脚
sbit ledred = P1^3;//不通过语音控制引脚

unsigned char UID[5];	//卡号
unsigned char Temp[4] ; //暂存数组  

unsigned long time_20ms;   //定时计数
char dis0[16];		//液晶显示数组
char dis1[16];
unsigned char reReadLater = 0;//防止重复上报
unsigned int leddisCount = 300;	//刷卡指示灯指示
unsigned char i;

void Init_Timer0(void);		 //函数声明
void UART_Init(void);
void uartSendStr(unsigned char *s,unsigned char length);
void uartSendByte(unsigned char dat);
void cardDeal(void);

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

	PcdReset();//复位RC522
	PcdAntennaOn();//开启天线发射 
	
	ledgre = 0;//打开绿灯
	ledred = 0; //打开红灯

	for(i=0;i<40;i++)
	{DelayMs(100);}	

	uartSendStr("AT+CIPMUX=1\r\n",13);		   //打开多连接
	for(i=0;i<10;i++)
	{DelayMs(100);}

	
	ledgre = 1;//关闭绿灯
	ledred = 1; //关闭红灯

	while (1)         //主循环
	{
	 	if(PcdRequest(0x52,Temp)==MI_OK)  //检测到卡号
	    {
	      if(PcdAnticoll(UID)==MI_OK) //读取卡号成功
	      { 
			if(reReadLater == 0)	 //防止重复刷卡
			{
				cardDeal();	  //卡号处理
				leddisCount = 200 ;//延时处理灯	
				if((UID[0]==zsID[0])&&(UID[1]==zsID[1]))//张三 到
				{				
					uartSendStr("AT+CIPSEND=0,34\r\n",17);		//发送4位数据
					
					yuyin1 = 0;  //	播报通过语音
					
					
					for(i=0;i<2;i++)	  //延时
					{DelayMs(100);}
					ledgre = 0;//打开绿灯
					ledred = 1; //关闭红灯
				}
				else if((UID[0]==lsID[0])&&(UID[1]==lsID[1]))//李四 到
				{
					uartSendStr("AT+CIPSEND=0,30\r\n",17);		//发送4位数据
				
					yuyin1 = 0;  //	播报通过语音
					
					for(i=0;i<2;i++)	   //短暂延时
					{DelayMs(100);}

					yuyin1 = 1;  //	关闭 播报通过语音	

					uartSendStr("Name:LiSi CardID:",17);		   //发送人名
					
				}
				else 
				{
					uartSendStr("AT+CIPSEND=0,32\r\n",17);		//发送4位数据

					yuyin2 = 0;  //	播报未通过语音				

					for(i=0;i<2;i++)	   //短暂延时
					{DelayMs(100);}

					yuyin2 = 1;  //	关闭 播报未通过语音		

					uartSendStr("Name:Unknow CardID:",19);		   //发送人名
					uartSendStr(dis1,11);		   //发送卡号
					uartSendStr("\r\n ",3);		   //回车
	
					for(i=0;i<2;i++)	  //延时
					{DelayMs(100);}
					ledgre = 1;//关闭绿灯
					ledred = 0; //打开红灯
				}
				reReadLater = 50;	//防止重复读取卡号延时		
			}

	      }
	    }
	}
}


void Init_Timer0(void)
{
	TMOD |= 0x01;	  //使用模式1,16位定时器,使用"|"符号可以在使用多个定时器时不受影响		     
	TH0=(65536-20000)/256;		  //重新赋值 20ms
	TL0=(65536-20000)%256;
	EA=1;            //总中断打开
	ET0=1;           //定时器中断打开
	TR0=1;           //定时器开关打开
}

void Timer0_isr(void) interrupt 1 
{
	TH0=(65536-20000)/256;		  //重新赋值 20ms
	TL0=(65536-20000)%256;	
	time_20ms++;
	if(reReadLater>0)	//读取时间防止重复读
	{
		reReadLater--;
	}
	if(leddisCount>0)	//打开灯时间处理
	{leddisCount--;}
	else 
	{
		ledgre = 1;//关闭绿灯
		ledred = 1; //关闭红灯
	}	

}

  资料下载地址

https://pan.baidu.com/s/1kJB6-WXREEZAV6TDuJwxzQ?pwd=8888

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值