射頻識別門禁系統
成品1.png (4.14 MB, 下載次數: 74)
下載附件
2020-5-4 15:03 上傳
51hei圖片_202005041433591.png (89.26 KB, 下載次數: 64)
下載附件
2020-5-4 14:35 上傳
單片機源程序如下:
- #include "reg52.h"
- #include "mfrc522.h"
- #include <string.h>
- #include <12864.h>
- #include <i2c.h>
- #include <waishe.h>
- #include <key.h>
- unsigned char aaddrr,addr;
- unsigned char eepromreadnum[4];
- char returnkey=1;
- void Timer0Init() //定時器0初始化
- {
- EA=0;//打開總中斷
- ET0=1;//打開定時器0中斷允許
- TR0=1;//打開定時器
- TMOD|=0X01;//選擇為定時器0模式,工作方式1,僅用TR0打開啟動。
- TH0=0XFC; //給定時器賦初值,定時1ms
- TL0=0X18;
- }
- void main( )
- {
- int failflag,y,successflag;
- int KeyValue=12;
- beep=0;
- RFID_Init();
- LCDInit();
- Timer0Init();
- if(At24c02Read(255)!=0x65) //eeprom初次上電初始化
- {
- delay(1000);
- ShowQQChar(0x82,"初次上電",4);
- ShowQQChar(0x91,"初始化中...",6);
- ShowQQChar(0x8a,"請稍等",3);
- for(y=0;y<255;y++)
- {
- At24c02Write(y,0xff); //eeprom區全部清零
- delay(1000);
- }
- At24c02Write(255,0x65);
- delay(1000);
- At24c02Write(248,0x25);
- delay(1000);
- At24c02Write(249,0x28);
- delay(1000);
- At24c02Write(250,0xa5);
- delay(1000);
- At24c02Write(251,0x51);
- delay(1000);
- }
- while(1)
- {
- unsigned char status,i,k;
- k=0;
- LCD_show();
- status = PcdRequest(PICC_REQIDL, g_ucTempbuf);//尋天線區內未進入休眠狀態的卡
- if (status != MI_OK)
- {
- PcdReset();
- PcdAntennaOff();
- PcdAntennaOn();
- continue;
- }
- status = PcdAnticoll(g_ucTempbuf); //防沖撞,此時g_ucTempbuf的值為卡號
- if(status != MI_OK)
- continue;
- ////////卡號打印////////////////////////
- led1=0;
- WRCommand(0x01); //清除顯示 DDRAM
- ShowQQChar(0x90,"卡號:",3);
- while(aaddrr<252) //卡號比對程序段
- {
- k=0;
- for(i=0;i<4;i++) //卡號占用四個地址,比對四次
- {
- eepromreadnum[i]=At24c02Read(aaddrr); //讀取EEPROM地址1內的數據保存在 g_ucTempbuf[]中
- aaddrr++;
- ShowNUMChar(0x93+i,g_ucTempbuf[i]); //顯示卡號
- if(eepromreadnum[i]==g_ucTempbuf[i]) //卡號開始進行比對
- {
- k=k+i; //四次比對成功0+1+2+3
- delay(1000);
- }
- else k=0; //比對失敗
- if(k==6)
- {
- failflag=0;
- aaddrr=252;
- }
- }
- }
- aaddrr=0; //地址回到首位,以便下次比較
- if(k==6) //卡號對比成功
- {
- relay=0;
- ShowQQChar(0x8a,"請通過\xfd",3);
- beep_Init(1);
- }
- if(k!=6) //卡號對比失敗
- {
- beep_Init(0);
- delay(50000);
- WRCommand(0x01);
- failflag=1; //卡號對比失敗標志位
- }
- if(failflag==1)
- {
- ShowQQChar(0x91,"是否輸入密碼",6);
- ShowQQChar(0x8a,"添加卡號",4);
- delay(500);
- while(returnkey)
- {
- EA=0;
- KeyValue=KeyDown();
- if(KeyValue==11)
- {
- WRCommand(0x01);
- delay(10000);
- successflag=inputmima(); //密碼輸入函數
- delay(10000);
- WRCommand(0x01);
- delay(1000);
- if(successflag==1)
- {
- for(i=0;i<4;i++) //顯示卡號 g_ucTempbuf[] 所刷卡的卡號
- {
- ShowNUMChar(0x92+i,g_ucTempbuf[i]);
- At24c02Write(addr,g_ucTempbuf[i]); //將卡號存入eeprom中,addr為存入地址
- addr++;
- delay(1000);
- }
- delay(10000);
- WRCommand(0x01);
- ShowQQChar(0x92,"存儲成功",4);
- delay(10000);
- }
- returnkey=0;
- }
- else if(KeyValue==10)
- returnkey=0;
- else
- EA=1;
- }
- }
- returnkey=1;
-
- delay(70000); //延時等待
- WRCommand(0x01); //清除顯示 DDRAM
- led1=1;
- relay=1;
-
- }
- }
- void Timer0() interrupt 1
- {
- static u16 i;
- TH0=0XFC; //給定時器賦初值,定時1ms
- TL0=0X18;
- i++;
- if(i==5000)
- {
- i=0;
- returnkey=0;
- }
- }
復制代碼
以上程序51hei提供下載 (無仿真工程):
門禁系統.rar
(115.9 KB, 下載次數: 314)
2020-5-4 14:40 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|