单片机源程序如下:- #include "delay.h"
- #include "sys.h"
- #include "usart.h"
- #include "rc522.h"
- #include "LED.h"
- #include "Key.h"
- #include "OLED.h"
- #include "Store.h"
- #include "Servo.h"
- /**
- * 连线说明:
- * 1--SDA <----->PA4
- * 2--SCK <----->PA5
- * 3--MOSI <----->PA7
- * 4--MISO <----->PA6
- * 5--悬空
- * 6--GND <----->GND
- * 7--RST <----->PB0
- * 8--VCC <----->VCC
- **/
- uint32_t num; //
- uint8_t j = 0;
- int main(void)
- {
- delay_init(); //延时函数初始化
- NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置中断优先级分组为组2:2位抢占优先级,2位响应优先级
- uart_init(115200); //串口初始化为115200
- RC522_Init(); //初始化射频卡模块
-
- LED_Init(); //LED???
- Key_Init(); //?????
- OLED_Init(); //OLED???
- Store_Init();
- Servo_Init(); //?????
-
- while(1)
- {
- Key_GetNum();
- //先将sn清零
- SN[0]=0X00;
- SN[1]=0X00;
- SN[2]=0X00;
- SN[3]=0X00;
-
- if (KeyNum == 1)
- {
- //这里执行读卡
- OLED_ShowString(1, 1, "moshi: ");
- OLED_ShowString(1, 1, "moshi:du");
- RC522_Handel();
- //
- num = (uint32_t)SN[0] << 24 | (uint32_t)SN[1] << 16 | (uint32_t)SN[2] << 8 | SN[3];
- OLED_ShowHexNum(2, 1, num, 8);
- //将存储里的卡号读出来对比这个卡号是否开锁
- for (j = 1; j < 255; j ++) //
- {
- if(num==0x00000000){
- //跳出循环
- break;
- }else if(Store_Data[j]==0x00000000){
- OLED_ShowString(3, 1, " ");
- OLED_ShowString(3, 1, "error:failed");
-
- //跳出循环
- break; //
- }
- else if(Store_Data[j]==num){
- OLED_ShowString(3, 1, " ");
- OLED_ShowString(3, 1, "success:ok");
- //开门
- Servo_SetAngle(90);
- delay_ms(5000);
- Servo_SetAngle(0);
- //跳出循环
- break; //
- }
- }
-
- }
-
- if (KeyNum == 2)
- {
- //这里执行授权
- OLED_ShowString(1, 1, "moshi:shouqun");
- RC522_Handel();
- //
- num = (uint32_t)SN[0] << 24 | (uint32_t)SN[1] << 16 | (uint32_t)SN[2] << 8 | SN[3];
- OLED_ShowHexNum(2, 1, num, 8);
- //将存储里的卡号读出来对比这个卡号是否存在
- for (j = 1; j < 255; j ++) //
- {
- if(num==0x00000000){
- //跳出循环
- break;
- }else if(Store_Data[j]==num){
- OLED_ShowString(3, 1, " ");
- OLED_ShowString(3, 1, "success:exist");
-
- //跳出循环
- break; //
- }else if(Store_Data[j]==0x00000000){
- Store_Data[j] = num;
- Store_Save();
- OLED_ShowString(3, 1, " ");
- OLED_ShowString(3, 1, "success:save ok");
- delay_ms(5000);
- //跳出循环
- break; //
- }
-
- }
- }
-
- }
- }
复制代码
原理图: 无
仿真: 无
代码:
RFID-RC522.7z
(226.75 KB, 下载次数: 83)
|