【51单片机】RC522门禁系统设计

文章目录

  • 一、主要功能
  • 二、硬件资源
    • 1.硬件准备
    • 2.硬件连接
  • 三、软件设计
    • 1.软件结构
    • 2.主要代码
  • 四、实验现象
  • 联系作者


一、主要功能

系统运行后,LCD12864显示开机界面,默认门锁处于关闭状态,当使用正确的磁卡感应后,蜂鸣器发出开锁提示音,且LCD12864显示门锁开,舵机运行,一段时间后自动关闭。


二、硬件资源

1.硬件准备

项目所需要的硬件资源如下:
1、51单片机开发板1个
2、RC522射频模块1个
3、LCD12864液晶模块1个
4、USB线1条(用于供电和程序下载)
5、杜邦线若干
6、SG90舵机1个

2.硬件连接

      蜂鸣器模块-->单片机IO
	  BEEP-->P25

	  SG90舵机模块-->单片机IO
	  MOTOR-->P10
	  VCC-->5V
	  GND-->GND

	  LCD12864液晶-->单片机IO
	  RS->P26
	  RW->P25
	  E->P27
	  DB0-DB7-->P00-P07
	  PSB->P32

	  RC522射频模块-->单片机IO
	  RST-->P24
	  SDA-->P20
	  SCK-->P21
	  SI-->P22
	  SO-->P23
	  3.3V-->3.3V
	  GND-->GND

三、软件设计

1.软件结构

【51单片机】RC522门禁系统设计_第1张图片

2.主要代码

#include "app_demo.h"
#include "key.h"
#include "time.h"
#include "beep.h"
#include "lcd12864.h"
#include "rc522.h"
#include "uart.h"


//舵机控制脚
sbit MOTOR=P1^0;

//定义全局结构体变量
xdata _sys_str sys_str;


//定时器0中断函数
void time0() interrupt 1
{
	static u8 i=0;

	TH0=0XDC;	//给定时器赋初值,定时10ms
	TL0=0X00;

	i++;
	
}


//开机界面显示
void open_show(void)
{
	lcd12864_show_string(0,0,"-->RC522门禁系统");
	lcd12864_show_string(0,1,"门锁:关");
	lcd12864_show_string(0,2,"****************");
	lcd12864_show_string(0,3,"  >>嗨小易<<  ");
}

//门锁控制
void gate_lock_control(void)
{
	u8 status=0;
	u8 i=0;
	xdata u8 buf[MAXRLEN];
	u16 temp=0;
	steer_control(0);//舵机控制关
	while(1)
	{
		status=PcdRequest(PICC_REQALL, buf);//寻卡
		if(status!= MI_OK)
		{    
			PcdReset();
			PcdAntennaOff(); 
			PcdAntennaOn();
			continue;
		}
		printf("\r\n卡的类型:");
	    for(i=0;i<18;i++)
		{
			temp=buf[i];
			printf("%X",temp);	
		}
		status=PcdAnticoll(buf);//防冲撞
        if(status != MI_OK)
			continue;
		printf("\r\n卡序列号:");
		for(i=0;i<4;i++)
		{
			temp=buf[i];
			printf("0X%X ",temp);	
		}
		printf("\r\n");
		//通过串口输出的序列号进行对比验证
		if(buf[0]==0xFC&&buf[1]==0X9F&&buf[2]==0X0C&&buf[3]==0X22)
		{
			beep_alarm(100,20);//蜂鸣器提示音
			lcd12864_show_string(3,1,"开");
			steer_control(1);//舵机控制开
			delay_ms(3000);
			lcd12864_show_string(3,1,"关");
			steer_control(0);//舵机控制关
		}			
	}	
}

//应用控制系统
void app_control_sys(void)
{
	time0_init();//初始化定时器0
	time0_start();//开启定时器0
	lcd12864_init();//LCD12864初始化
	UART_Init();
	printf("Test\r\n");
	rc522_init();//RC522初始化
	
	sys_parm_init();//系统参数初始化
	open_show();//开机界面显示

	while(1)
	{
		gate_lock_control();//门锁控制								
	}	
}

四、实验现象

B站演示视频:https://space.bilibili.com/444388619


联系作者

作者B站链接:https://space.bilibili.com/444388619
可提供手把手教学服务,资料获取请联系作者QQ:3443792007
专注于51单片机、STM32、国产32、DSP、Proteus、ardunio、ESP32、物联网软件开发,PCB设计,视频分享,技术交流。

你可能感兴趣的:(【51单片机】趣味项目设计,单片机,c语言,数据结构,51单片机,射频工程)