芯片复制RFID RC522门禁系统STM32源码
芯片复制单片机源程序如下:
- 芯片复制//硬件环境:德飞莱STM32开发板
- 芯片复制//接线:SDA--PA3 SCK--PB13 MOSI--PB15 MISO--PB14 IRQ悬空 RST--PA4
- #include "var.h"
- #include "led.h"
- #include "delay.h"
- #include "key.h"
- #include "sys.h"
- #include "usart.h"
- #include "rtc.h"
- #include "wkup.h"
- #include "ADC.h"
- #include "DAC.h"
- #include "DMA.h"
- #include "24c02.h"
- #include "w25qxx.h"
- #include "timer.h"
- #include "oled.h"
- #include "stmflash.h"
- #include "rc522.h"
- //要写入到STM32 FLASH的字符串数组
- u16 m=1212;
- /*常量定义*/
- #define N 10 //最大管理员数目
- /*全局变量*/
- u16 flash_adder=0;//闪存地址变化量
- u16 people_num=0;
- u16 root_num=0;
- u16 ROOT_ID[4]= {174,115,14,46};
- u16 user1[4]= {222,181,4,46};
- u16 user2[4]= {219,225,48,47};
- u8 key_flage=0;
- u8 Key_Value=0;
- u16 ID[4];//卡号
- u16 id1[4];//卡号
- u16 id2[4];//卡号
- unsigned char CT[2];//卡类型
- /*函数声明*/
- u8 Get_RC522_ID(u16 *p);
- u8 ROOT_ID_Cheak(u16 *p);
- u8 root_ID_Cheak(u16 *p);
- u8 NormalUser_Input(u16 *p);
- u8 RootUser_Input(u16 *p);
- void unlock_check(u16 *p);
- void User_ID_Play(u8 y,u8 x,u16 *p);
- void Progress_Bar(u8 y,u8 x,u16 num,u8 n);
- /*主函数*/
- int main(void)
- {
- u8 keyvalue,i,j=0;
- delay_init(); //延时函数初始化
- uart_init(9600); //串口初始化为115200
- LED_Init();//初始化
- KEY_Init();
- InitRc522();
- OLED_Init(); //初始化OLED
- OLED_Clear();
- BEEP=0;
- STMFLASH_Write(FLASH_SAVE_ADDR+2,(u16*)&people_num,1);
- STMFLASH_Write(FLASH_SAVE_ADDR,(u16*)&flash_adder,1);
- STMFLASH_Write(FLASH_SAVE_ADDR+4,(u16*)&root_num,1);
- printf("*%d\r\n",RootUser_Input(ROOT_ID));
- ROOT_ID[0]=174;
- printf("***********************\r\n");
- while(1)
- {
- if(j==0) OLED_ShowString(10,-1,"Unocking model");
- j++;
- if(Get_RC522_ID(ID))
- {
- User_ID_Play(0,0,ID);
- unlock_check(ID);
- for(i=0; i<4; i++)
- {
- ID[i]=0;
- }
- }
- /**********************************************************************/
- if(Key_Test()==1)
- {
- OLED_Clear_Hang(0);
- printf("用户录入模式\r\n");
- j=1;
- while(1)
- {
-
- if(j==1)
- {
- OLED_ShowString(0,-1,"User Entering");
- OLED_ShowString(0,0,"Key2:Common User");
- OLED_ShowString(0,1,"Key3:root User");
- OLED_ShowString(0,2,"Key4:Exit");
- }
- j++;
- printf("key2管理员用户录入 key3普通用户录入 key4退出录入模式\r\n");
- if(key_flage==0)
- {
- Key_Value=Key_Test();
- if(Key_Value==2||Key_Value==3) key_flage=1;
- }
- /*******************************************************************************/
- if(Key_Value==2)
- {
- OLED_Clear_Hang(1);
- OLED_Clear_Hang(2);
- OLED_Clear_Hang(3);
- OLED_ShowString(0,0,"ROOT Cheak");
- while(1)
- {
- printf("ROOT身份验证\r\n");
-
- if(Get_RC522_ID(ID))
- {
- if(ROOT_ID_Cheak(ID)==0)
- {
- printf("ROOT身份验证成功,请录入管理员卡号\r\n");
- OLED_Clear_Hang(1);
- OLED_ShowString(0,0,"ROOT Cheak OK");
- OLED_ShowString(0,1,"Entering root ID");
- while(1)
- {
- if(Get_RC522_ID(id1))
- {
- if(id1[0]!=ID[0]||id1[1]!=ID[1]||id1[2]!=ID[2]||id1[3]!=ID[3])
- {
- if(RootUser_Input(id1))
- {
- printf("管理员录入成功\r\n");
- key_flage=0;
- break;
- }
- }
- }
- if(Key_Test()==4) break;
- }
- key_flage=0;
- OLED_Clear();
- break;
- }
- }
- if(Key_Test()==4) break;
- }
- key_flage=0;
- j=1;
- OLED_Clear();
- }

芯片解密