找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 980|回复: 7
收起左侧

STM32单片机RC522门禁程序(含保存IC卡功能掉电不丢失)

  [复制链接]
ID:1071040 发表于 2023-11-29 20:20 | 显示全部楼层 |阅读模式
STM32-RC522-门禁.png
单片机源程序如下:
  1. #include "delay.h"
  2. #include "sys.h"
  3. #include "usart.h"
  4. #include "rc522.h"
  5. #include "LED.h"
  6. #include "Key.h"
  7. #include "OLED.h"
  8. #include "Store.h"
  9. #include "Servo.h"

  10. /**
  11. *   连线说明:
  12. *   1--SDA  <----->PA4
  13. *   2--SCK  <----->PA5
  14. *   3--MOSI <----->PA7
  15. *   4--MISO <----->PA6
  16. *   5--悬空
  17. *   6--GND <----->GND
  18. *   7--RST <----->PB0
  19. *   8--VCC <----->VCC
  20. **/
  21. uint32_t num;  //
  22. uint8_t j = 0;
  23. int main(void)
  24. {
  25.     delay_init();                     //延时函数初始化
  26.     NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置中断优先级分组为组2:2位抢占优先级,2位响应优先级
  27.     uart_init(115200);                 //串口初始化为115200
  28.     RC522_Init();       //初始化射频卡模块
  29.                
  30.                 LED_Init();                //LED???
  31.                 Key_Init();                //?????
  32.                 OLED_Init();                //OLED???
  33.                 Store_Init();
  34.                 Servo_Init();                //?????
  35.        
  36.     while(1)
  37.     {
  38.                         Key_GetNum();
  39.                         //先将sn清零
  40.                         SN[0]=0X00;
  41.                         SN[1]=0X00;
  42.                         SN[2]=0X00;
  43.                         SN[3]=0X00;
  44.                        
  45.                         if (KeyNum == 1)                       
  46.                         {
  47.                                 //这里执行读卡
  48.                                 OLED_ShowString(1, 1, "moshi:       ");
  49.                                 OLED_ShowString(1, 1, "moshi:du");       
  50.                                 RC522_Handel();
  51.                                  //
  52.                                 num = (uint32_t)SN[0] << 24 | (uint32_t)SN[1] << 16 | (uint32_t)SN[2] << 8 | SN[3];  
  53.                                 OLED_ShowHexNum(2, 1, num, 8);
  54.                                         //将存储里的卡号读出来对比这个卡号是否开锁
  55.                                 for (j = 1; j < 255; j ++)                                //
  56.                                 {
  57.                                         if(num==0x00000000){
  58.                                                 //跳出循环
  59.                                                  break;
  60.                                         }else        if(Store_Data[j]==0x00000000){
  61.                                                 OLED_ShowString(3, 1, "                  ");
  62.                                                 OLED_ShowString(3, 1, "error:failed");       
  63.                                                
  64.                                                 //跳出循环
  65.                                                  break;  //
  66.                                         }
  67.                                         else if(Store_Data[j]==num){
  68.                                                 OLED_ShowString(3, 1, "                  ");
  69.                                                 OLED_ShowString(3, 1, "success:ok");
  70.                                                 //开门
  71.                                                 Servo_SetAngle(90);
  72.                                                 delay_ms(5000);       
  73.                                                 Servo_SetAngle(0);
  74.                                                 //跳出循环
  75.                                                  break;  //
  76.                                         }
  77.                                 }
  78.                                
  79.                         }
  80.                        
  81.                         if (KeyNum == 2)                       
  82.                         {
  83.                                 //这里执行授权
  84.                                 OLED_ShowString(1, 1, "moshi:shouqun");       
  85.                                 RC522_Handel();
  86.                                  //
  87.                                 num = (uint32_t)SN[0] << 24 | (uint32_t)SN[1] << 16 | (uint32_t)SN[2] << 8 | SN[3];  
  88.                                 OLED_ShowHexNum(2, 1, num, 8);
  89.                                 //将存储里的卡号读出来对比这个卡号是否存在
  90.                                 for (j = 1; j < 255; j ++)                                //
  91.                                 {
  92.                                         if(num==0x00000000){
  93.                                                 //跳出循环
  94.                                                  break;
  95.                                         }else        if(Store_Data[j]==num){
  96.                                                 OLED_ShowString(3, 1, "                  ");
  97.                                                 OLED_ShowString(3, 1, "success:exist");       
  98.                                                
  99.                                                 //跳出循环
  100.                                                  break;  //
  101.                                         }else        if(Store_Data[j]==0x00000000){
  102.                                                 Store_Data[j] = num;
  103.                                                 Store_Save();
  104.                                                 OLED_ShowString(3, 1, "                  ");
  105.                                                 OLED_ShowString(3, 1, "success:save ok");       
  106.                                                 delay_ms(5000);
  107.                                                 //跳出循环
  108.                                                  break;  //
  109.                                         }
  110.                                        
  111.                                 }
  112.                         }
  113.         
  114.     }
  115. }
复制代码

原理图: 无
仿真: 无
代码: RFID-RC522.7z (226.75 KB, 下载次数: 57)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:370644 发表于 2024-2-19 16:39 | 显示全部楼层
楼主,这个程序您测试过吗?为什么用不了呢?
回复

使用道具 举报

ID:1071040 发表于 2024-2-20 13:07 | 显示全部楼层
yinqing452 发表于 2024-2-19 16:39
楼主,这个程序您测试过吗?为什么用不了呢?

提示什么错误?
回复

使用道具 举报

ID:1071040 发表于 2024-2-20 13:30 | 显示全部楼层
yinqing452 发表于 2024-2-19 16:39
楼主,这个程序您测试过吗?为什么用不了呢?

测试的芯片是stm32f103c8t6,芯片不同内置存储的地址会有所不同。
回复

使用道具 举报

ID:1071040 发表于 2024-2-22 11:28 | 显示全部楼层
原理图是stlink的下载方式,我测试的时候是用ttl的下载方式,如果要使用stlink的方式下载想要自信再配置一下。
回复

使用道具 举报

ID:932262 发表于 2024-4-8 16:26 | 显示全部楼层
cxjbook 发表于 2024-2-20 13:30
测试的芯片是stm32f103c8t6,芯片不同内置存储的地址会有所不同。

工程打开之后的默认芯片是STM32F103ZE,改成C8之后好多报错
回复

使用道具 举报

ID:1071040 发表于 2024-4-9 13:18 | 显示全部楼层
退役的人 发表于 2024-4-8 16:26
工程打开之后的默认芯片是STM32F103ZE,改成C8之后好多报错

由于代码是多个项目拼接的,所以会有一点设置上的问题,但目前ttl的烧录方式的话是测试通过的。
回复

使用道具 举报

ID:1119044 发表于 2024-5-1 19:23 来自手机 | 显示全部楼层
大佬用什么软件画的图
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表