功能:
0.本项目采用STM32F103C8T6作为单片机系统的控制MCU
1.采用电磁锁模拟车位锁,正常情况下闭合不允许其他车辆驶入,如果刷卡成功继电器控制锁断开,车辆驶入。
2.本项目采用RC-522作为射频卡模块,通过刷卡来识别信息
3.同时具备一个隐藏的按键可以手动控制车锁的状态
4.采用DC002作为电源接口可直接输入5V给整个系统供电
原理图:
PCB :
主程序:
#include "led.h"
#include "delay.h"
#include "sys.h"
#include "usart.h"
#include <stdio.h>
#include "timer.h"
#include "key.h"
#include "rc522.h"
/**************/
unsigned char idCard[4] = {0x0C, 0x59, 0xB3, 0x16}; // 有效卡号
/**************/
u8 rekey = 0; // 按键防止重复
u8 i;
unsigned char UID[5]; // 读取到的卡号
unsigned char Temp[4];
int main(void)
{
Delay_Init(); // 延时函数初始化
// UART_Init(9600); // 串口初始化为9600
TIM3_Int_Init(499, 7199); // 50ms
Relay_GPIO_Init(); // 初始化与LED连接的硬件接口
KEY_Init(); // 初始化按键
Relay1 = 0;
Rc522IoInit();
PcdReset(); // 复位RC522
PcdAntennaOn(); // 开启天线发射
while (1)
{
if (KEY1 == 0) // 检测到按键按下
{
Delay_ms(10); // 小抖动
if (KEY1 == 0) // 检测是否按下
{
Relay1 = 1;
Delay_ms(200);
Relay1 = 0;
}
while (KEY1 == 0);
}
if (PcdRequest(0x52, Temp) == MI_OK) // 读取到卡
{
Delay_ms(500); //延迟响应
if (PcdAnticoll(UID) == MI_OK) // 卡号获取成功
{
Delay_ms(500);
if ((UID[0] == idCard[0]) && (UID[2] == idCard[2]) && (UID[3] == idCard[3])) // 匹配卡号
{
Relay1 = 1;
Delay_ms(200);
Relay1 = 0;
}
Delay_ms(10);
}
while (PcdAnticoll(UID) == MI_OK);
}
}
}