毕设 您所在的位置:网站首页 刷卡进入的门禁无法避开 毕设

毕设

#毕设| 来源: 网络整理| 查看: 265

简介

厂房弄完了,开始学习关于刷卡的门禁系统。这东西说简单也简单,说难搞也有点难搞啊!

器件选型

一般的常用RFID模块就是RC522(淘宝店铺MFRC-522 RC522 RFID射频 IC卡感应模块 送S50复旦卡PN532 PN5180代码就在下面的百度云盘里面),可以识别IC卡和S50复旦卡。 在这里插入图片描述

线路连接及代码(STM32版本)

其实这东西的驱动,店家都给与了,就是看你能否读懂代码的含义。

电路连接 RC522模块连接:

RST连接PA12 MISO连接PA10 MOSI连接PA8 SCK连接PB14 NSS连接PB12 IRQ悬空 3.3连接3.3V GND连接GND

USB-TTL连接

RX接PA2 TX接PA3请添加图片描述 将IC卡放上去串口调试助手就会显示数据,这就是IC卡的卡号,然后只需要将卡号对比就可以实现开门判断是否开门或者关门。 在这里插入图片描述 最终就可以实现只有唯一的卡,可以打开门(开门或者关门这个动作可以使用舵机,不会舵机的的看这里STM32F103系列驱动舵机)。 在这里插入图片描述

代码 主函数 #include "led.h" #include "delay.h" #include "key.h" #include "sys.h" #include "usart.h" #include "main.h" #include "mfrc522.h" #include #include void GPIO_ini() { //引脚初始化 GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(MF522_RST_CLK, ENABLE); GPIO_InitStructure.GPIO_Pin = MF522_RST_PIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; GPIO_Init(MF522_RST_PORT, &GPIO_InitStructure); RCC_APB2PeriphClockCmd(MF522_MISO_CLK, ENABLE); GPIO_InitStructure.GPIO_Pin = MF522_MISO_PIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; GPIO_Init(MF522_MISO_PORT, &GPIO_InitStructure); RCC_APB2PeriphClockCmd(MF522_MOSI_CLK, ENABLE); GPIO_InitStructure.GPIO_Pin = MF522_MOSI_PIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; GPIO_Init(MF522_MOSI_PORT, &GPIO_InitStructure); RCC_APB2PeriphClockCmd(MF522_SCK_CLK, ENABLE); GPIO_InitStructure.GPIO_Pin = MF522_SCK_PIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; GPIO_Init(MF522_SCK_PORT, &GPIO_InitStructure); RCC_APB2PeriphClockCmd(MF522_NSS_CLK, ENABLE); GPIO_InitStructure.GPIO_Pin = MF522_NSS_PIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; GPIO_Init(MF522_NSS_PORT, &GPIO_InitStructure); RCC_APB2PeriphClockCmd(LED_CLK, ENABLE); GPIO_InitStructure.GPIO_Pin = LED_PIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; GPIO_Init(LED_PORT, &GPIO_InitStructure); } void InitializeSystem() { //RC522初始化 LED_OFF; delay_ms(10); PcdReset(); PcdAntennaOff(); PcdAntennaOn(); M500PcdConfigISOType( 'A' ); LED_ON; delay_ms(10); LED_OFF; delay_ms(10); LED_ON; delay_ms(10); LED_OFF; } int main(void) { u16 t; u16 len; u16 times=0; delay_init(); //延时函数初始化 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); uart_init(115200); //串口初始化为115200 char data[50]; char mydata[50]={"1771739149"}; char status; unsigned char snr, buf[16], TagType[2], SelectedSnr[4]={0xFF,0xFF,0xFF,0xFF}; GPIO_ini(); InitializeSystem( ); printf("RUN!!!"); while(1) { status= PcdRequest(REQ_ALL,TagType); //寻卡 if(!status) { status = PcdAnticoll(SelectedSnr); //防碰撞 if(!status) { sprintf(data,"%d%d%d%d",SelectedSnr[0],SelectedSnr[1],SelectedSnr[2],SelectedSnr[3]);//读到的值放入data数组中 printf("%s",data); if(strcmp(data,mydata)==0){ //添加舵机开门的代码 printf("Open!\r\n"); }else //添加舵机关门的代码 printf("Close!\r\n"); WaitCardOff(); //等待卡离开 } } } } RC522驱动

这部分代码都是copy的,可以去百度,这边就带一部分代码!

char PcdRequest(unsigned char req_code,unsigned char *pTagType) { char status; unsigned int unLen; unsigned char ucComMF522Buf[MAXRLEN]; ClearBitMask(Status2Reg,0x08); WriteRawRC(BitFramingReg,0x07); SetBitMask(TxControlReg,0x03); ucComMF522Buf[0] = req_code; status = PcdComMF522(PCD_TRANSCEIVE,ucComMF522Buf,1,ucComMF522Buf,&unLen); if ((status == MI_OK) && (unLen == 0x10)) { *pTagType = ucComMF522Buf[0]; *(pTagType+1) = ucComMF522Buf[1]; } else { status = MI_ERR; } return status; } char PcdAnticoll(unsigned char *pSnr) { char status; unsigned char i,snr_check=0; unsigned int unLen; unsigned char ucComMF522Buf[MAXRLEN]; ClearBitMask(Status2Reg,0x08); WriteRawRC(BitFramingReg,0x00); ClearBitMask(CollReg,0x80); ucComMF522Buf[0] = PICC_ANTICOLL1; ucComMF522Buf[1] = 0x20; status = PcdComMF522(PCD_TRANSCEIVE,ucComMF522Buf,2,ucComMF522Buf,&unLen); if (status == MI_OK) { for (i=0; i status = MI_ERR; } } SetBitMask(CollReg,0x80); return status; } 线路连接及代码(51版本) 电路连接 RC522模块连接

RST连接P1_6 NSS连接P2_4 SCK连接P2_5 MISO连接P2_2 MOSI连接P2_3

USB-TTL连接

略!——————————

代码 主函数 #include "reg52.h" #include "main.h" #include "mfrc522.h" #include #include unsigned char data TagType[2]; unsigned char data SelectedSnr[4]={0xFF,0xFF,0xFF,0xFF}; void InitializeSystem() { P0 = 0xFF; P1 = 0xFF; P3 = 0xFF; LED_GREEN = 1; delay_10ms(10); PcdReset(); PcdAntennaOff(); PcdAntennaOn(); LED_GREEN = 0; delay_10ms(10); LED_GREEN = 1; delay_10ms(10); LED_GREEN = 0; delay_10ms(10); LED_GREEN = 1; } void main( ) { char status; unsigned char snr, buf[16]; InitializeSystem( ); while (1) { status= PcdRequest(REQ_ALL,TagType); if(!status) { status = PcdAnticoll(SelectedSnr); if(!status) { sprintf(data,"%d%d%d%d",SelectedSnr[0],SelectedSnr[1],SelectedSnr[2],SelectedSnr[3]);//读到的值放入data数组中 if(strcmp(data,mydata)==0){ //添加舵机开门的代码 OpenDoor(); }else //添加舵机关门的代码 CloseDoor(); WaitCardOff(); //等待卡离开 } } LED_GREEN = 1; } } RC522驱动

这部分还是拷贝然后改了改,能看懂绝不动手的本质! 代码直接拷贝吧,不想写了,主要代码和STM32的基本一样。

后续

这只是最简单的门禁系统,后期可以考虑一下如何修改主人的卡号,或者在加入一个上位远程控制开门关门,修改主人的卡号。还可以加入管理员模式,只有在管理员认证后才可以修改白名单。

有问题评论或私信 讨论群985432073 源码地址: https://gitee.com/heiha_ha/stm32-project-sharing.git



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有