|
單片機(jī)源程序如下:
- /* 本程序使用的是RFID-RC522射頻模塊設(shè)計(jì)的一個(gè)門(mén)禁系統(tǒng),當(dāng)感應(yīng)卡放到射頻模塊區(qū)域內(nèi)會(huì)感應(yīng)到
- 卡,如果卡序列號(hào)和程序設(shè)計(jì)一致就會(huì)認(rèn)為是正確開(kāi)鎖,D2指示燈亮,LCD上顯示開(kāi)鎖,5秒鐘以后
- 自動(dòng)關(guān)鎖,D2指示燈滅。當(dāng)卡錯(cuò)誤時(shí)候不會(huì)顯示,D2也不會(huì)亮。卡的序列號(hào)是唯一的。
-
- 管腳接線圖:
- RST---PF4
- MISO---PF3
- MOSI---PF2
- SCK---PF1
- NSS(SDA)--PF0
-
- */
- #include "sys.h"
- #include "delay.h"
- #include "usart.h"
- #include "led.h"
- #include "lcd_driver.h"
- #include "gui.h"
- #include "tim.h"
- #include "RC522.h"
- unsigned char data1[16] = {0x12,0x34,0x56,0x78,0xED,0xCB,0xA9,0x87,0x12,0x34,0x56,0x78,0x01,0xFE,0x01,0xFE};
- //M1卡的某一塊寫(xiě)為如下格式,則該塊為錢(qián)包,可接收扣款和充值命令
- //4字節(jié)金額(低字節(jié)在前)+4字節(jié)金額取反+4字節(jié)金額+1字節(jié)塊地址+1字節(jié)塊地址取反+1字節(jié)塊地址+1字節(jié)塊地址取反
- unsigned char data2[4] = {0,0,0,0x01};
- unsigned char DefaultKey[6] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};
- unsigned char g_ucTempbuf[20];
- void lcd_display() //LCD初始化顯示
- {
- TFT_ClearScreen(BLACK);
- GUI_Show12ASCII(10,10,"PRECHIN",GREEN,BLACK);
- GUI_Show12ASCII(10,30,"123456",GREEN,BLACK);
- GUI_Show12ASCII(10,50,"RFID-RC522 Test",GREEN,BLACK);
- GUI_Show12ASCII(10,70,"2015-12-05",GREEN,BLACK);
- GUI_Show12ASCII(10,110,"Close Door...",RED,BLACK); //關(guān)門(mén)
- }
- int main(void)
- {
- unsigned char status,i;
- unsigned int temp;
- delay_init();
- NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
-
- led_init();
- TFT_Init();
- lcd_display();
- RC522_Init();
- PcdReset();
- PcdAntennaOff();
- delay_ms(10);
- PcdAntennaOn();
- delay_ms(10);
- tim3_init(1000,7199);
- uart_init(9600); //波特率使用9600
- printf("Start \r\n");
- while ( 1 )
- {
- status = PcdRequest(PICC_REQALL, g_ucTempbuf);//尋卡
- if (status != MI_OK)
- {
- PcdReset();
- PcdAntennaOff();
- PcdAntennaOn();
- continue;
- }
- printf("卡的類(lèi)型:");
- for(i=0;i<2;i++)
- {
- temp=g_ucTempbuf[i];
- printf("%X",temp);
-
- }
- status = PcdAnticoll(g_ucTempbuf);//防沖撞
- if(status != MI_OK)
- { continue; }
-
- ////////以下為超級(jí)終端打印出的內(nèi)容////////////////////////
-
- printf("卡序列號(hào):"); //超級(jí)終端顯示,
- for(i=0;i<4;i++)
- {
- temp=g_ucTempbuf[i];
- printf("%X",temp);
-
- }
- if(g_ucTempbuf[0]==0xd4&&g_ucTempbuf[1]==0xd5&&g_ucTempbuf[2]==0x34&&g_ucTempbuf[3]==0x00)
- {
- led1=0;
- GUI_Show12ASCII(10,110,"Open Door... ",RED,BLACK); //開(kāi)門(mén)
- }
- else
- {
- led1=1;
- GUI_Show12ASCII(10,110," ",RED,BLACK);
- }
- ///////////////////////////////////////////////////////////
- status = PcdSelect(g_ucTempbuf);//選定卡片
- if (status != MI_OK)
- { continue; }
-
- status = PcdAuthState(PICC_AUTHENT1A, 1, DefaultKey, g_ucTempbuf);//驗(yàn)證卡片密碼
- if (status != MI_OK)
- { continue; }
-
- status = PcdWrite(1, data1);//寫(xiě)塊
- if (status != MI_OK)
- { continue; }
- while(1)
- {
- status = PcdRequest(PICC_REQALL, g_ucTempbuf);//尋卡
- if (status != MI_OK)
- {
-
- PcdReset();
- PcdAntennaOff();
- PcdAntennaOn();
- continue;
- }
- status = PcdAnticoll(g_ucTempbuf);//防沖撞
- if (status != MI_OK)
- { continue; }
- status = PcdSelect(g_ucTempbuf);//選定卡片
- if (status != MI_OK)
- { continue; }
-
- status = PcdAuthState(PICC_AUTHENT1A, 1, DefaultKey, g_ucTempbuf);//驗(yàn)證卡片密碼
- if (status != MI_OK)
- { continue; }
- status = PcdValue(PICC_DECREMENT,1,data2);//扣款
- if (status != MI_OK)
- { continue; }
-
- status = PcdBakValue(1, 2);//塊備份
- if (status != MI_OK)
- { continue; }
-
- status = PcdRead(2, g_ucTempbuf);//讀塊
- if (status != MI_OK)
- { continue; }
- printf("卡讀塊:"); //超級(jí)終端顯示,
- for(i=0;i<16;i++)
- {
- temp=g_ucTempbuf[i];
- printf("%X",temp);
-
- }
- printf("\n");
- PcdHalt();
- ……………………
- …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼
所有資料51hei提供下載:
RFID-RC522門(mén)禁控制系統(tǒng)程序.rar
(306.48 KB, 下載次數(shù): 121)
2018-5-5 13:37 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
|
評(píng)分
-
查看全部評(píng)分
|