|
我們來介紹下本設(shè)計(jì)的過程:1、最終的實(shí)物圖片
2、設(shè)計(jì)原理圖
3、系統(tǒng)的功能
單片機(jī)IC門禁GSM報(bào)警系統(tǒng)采用51單片機(jī)+按鍵+IC讀寫模塊+繼電器+LCD1602液晶+LED燈+GSM模塊+蜂鳴器設(shè)計(jì)而成。
1、本設(shè)計(jì)默認(rèn)采用STC89C52單片。
2、本設(shè)計(jì)具有普通密碼鎖開鎖功能并且加入了射頻卡開鎖功能,二者兼容,功能強(qiáng)大。
3、可以添加或者刪除IC卡的記憶功能,讓使用者更加的靈活自如。
4、具有指示燈和蜂鳴器雙重提示功能,綠燈表示進(jìn)入,紅燈表示禁止進(jìn)入。
5、繼電器模擬電子鎖,閉合狀態(tài)即是開鎖狀態(tài),反之則關(guān)鎖狀態(tài)。
6、密碼鎖功能下可以修改密碼。
7、當(dāng)密碼輸入錯(cuò)誤三次時(shí),蜂鳴器報(bào)警并且鎖死鍵盤15S,向主人發(fā)送報(bào)警短信。
4、主要代碼:
#include <intrins.h>
#include "reg52.h"
#include "main.h"
#include "mfrc522.h"
#include <string.h>
#define MAXRLEN 18
/////////////////////////////////////////////////////////////////////
//功 能:尋卡
//參數(shù)說明: req_code[IN]:尋卡方式
// 0x52 = 尋感應(yīng)區(qū)內(nèi)所有符合14443A標(biāo)準(zhǔn)的卡
// 0x26 = 尋未進(jìn)入休眠狀態(tài)的卡
// pTagType[OUT]:卡片類型代碼
// 0x4400 = Mifare_UltraLight
// 0x0400 = Mifare_One(S50)
// 0x0200 = Mifare_One(S70)
// 0x0800 = Mifare_Pro(X)
// 0x4403 = Mifare_DESFire
//返 回: 成功返回MI_OK
/////////////////////////////////////////////////////////////////////
char PcdRequest(unsigned char req_code,unsigned char *pTagType)
{
char status;
unsigned int unLen;
unsigned char ucComMF522Buf[MAXRLEN];
// unsigned char xTest ;
ClearBitMask(Status2Reg,0x08);
WriteRawRC(BitFramingReg,0x07);
// xTest = ReadRawRC(BitFramingReg);
// if(xTest == 0x07 )
// { LED_GREEN =0 ;}
// else {LED_GREEN =1 ;while(1){}}
SetBitMask(TxControlReg,0x03);
ucComMF522Buf[0] = req_code;
status = PcdComMF522(PCD_TRANSCEIVE,ucComMF522Buf,1,ucComMF522Buf,&unLen);
// if(status == MI_OK )
// { LED_GREEN =0 ;}
// else {LED_GREEN =1 ;}
if ((status == MI_OK) && (unLen == 0x10))
{
*pTagType = ucComMF522Buf[0];
*(pTagType+1) = ucComMF522Buf[1];
}
else
{ status = MI_ERR; }
return status;
}
/////////////////////////////////////////////////////////////////////
//功 能:防沖撞
//參數(shù)說明: pSnr[OUT]:卡片序列號(hào),4字節(jié)
//返 回: 成功返回MI_OK
/////////////////////////////////////////////////////////////////////
char PcdAnticoll(unsigned char *pSnr)
{
char status;
unsigned char i,snr_check=0;
unsigned int unLen;
unsigned char ucComMF522Buf[MAXRLEN];
ClearBitMask(Status2Reg,0x08);
WriteRawRC(BitFramingReg,0x00);
ClearBitMask(CollReg,0x80);
ucComMF522Buf[0] = PICC_ANTICOLL1;
ucComMF522Buf[1] = 0x20;
status = PcdComMF522(PCD_TRANSCEIVE,ucComMF522Buf,2,ucComMF522Buf,&unLen);
if (status == MI_OK)
{
|
|