1 系統功能介紹
本設計基于STC89C52單片機,集成RFID讀卡器、紅外避障傳感器、繼電器、LCD1602液晶顯示和蜂鳴器,實現智能門禁與人流量統計功能。系統能夠識別合法的RFID卡開門,并實時統計通過人數,具有安全報警和直觀顯示功能。具體功能包括:
- 合法RFID卡刷卡成功后,繼電器閉合控制門禁開門,LCD顯示“通過”,3秒后自動斷開繼電器關閉門。
- 非法或未注冊RFID卡刷卡時,繼電器不動作,蜂鳴器報警,LCD顯示“不通過”。
- 通過紅外避障傳感器檢測人員通過,LCD顯示人數計數累加。
- 系統穩定運行,適用于門禁管理、人流監控等場景。
2 系統電路設計
2.1 STC89C52單片機核心電路
STC89C52單片機為系統核心,負責管理各模塊數據交互、處理邏輯控制及輸出。
- 時鐘電路:采用12MHz晶振,確保單片機工作穩定。
- 復位電路:上電自動復位及手動復位功能,保證系統可靠啟動。
- 供電電路:5V穩壓電源,滿足單片機及外圍模塊的電壓需求。
- I/O口連接:分配專用端口連接RFID模塊、繼電器驅動、紅外傳感器、LCD1602顯示和蜂鳴器。
通過合理的引腳分配和濾波處理,確保信號傳輸穩定、抗干擾能力強。
2.2 RFID讀卡器模塊電路
RFID模塊負責識別刷卡用戶身份。
- 模塊類型:常用MFRC522或類似低頻/高頻讀卡模塊。
- 接口方式:采用SPI或串口與單片機通信,傳輸卡片UID數據。
- 信號處理:模塊輸出卡號數據,經單片機比對數據庫判斷合法性。
- 供電:5V電源,配備濾波電容保證模塊穩定工作。
該模塊能快速讀取卡號,延遲低,適合門禁應用。
2.3 繼電器驅動電路
繼電器用于控制門禁的機械開關動作。
- 驅動方式:單片機IO口通過三極管或驅動芯片控制繼電器線圈通斷。
- 繼電器參數:通常為5V繼電器,線圈電流匹配驅動能力。
- 保護電路:繼電器線圈并聯反向二極管,防止反向電壓沖擊單片機。
繼電器閉合時門禁打開,3秒后斷開自動復位。
2.4 LCD1602液晶顯示電路
LCD1602液晶用于顯示系統狀態和人數統計信息。
- 接口:采用并行接口(通常4或8位),連接單片機對應端口。
- 顯示內容:第一行顯示“通過”或“不通過”提示,第二行顯示累計人數。
- 背光:配備背光燈,便于弱光環境觀察。
顯示內容實時更新,方便用戶直觀了解門禁情況。
2.5 紅外避障傳感器電路
紅外避障傳感器用于檢測人員通過,實現人數計數。
- 傳感器類型:紅外反射式或對射式傳感器,靈敏度可調。
- 接口連接:傳感器輸出數字信號,連接單片機輸入端口。
- 計數邏輯:檢測到信號變化即有人通過,觸發計數器加1。
該模塊配合繼電器門控,形成完整的人員出入監控。
2.6 蜂鳴器報警電路
蜂鳴器用于非法刷卡報警提示。
- 驅動方式:單片機IO口直接驅動有源蜂鳴器或通過晶體管驅動無源蜂鳴器。
- 報警邏輯:刷卡失敗即蜂鳴器發聲,提示非法訪問。
蜂鳴器聲音清晰,警示效果明顯。
3 程序設計
3.1 系統初始化模塊
負責單片機各模塊初始化設置。
void System_Init(void) {// 初始化時鐘、IO口CLK_Init();GPIO_Init();// 初始化串口/SPI用于RFID模塊通信RFID_Init();// 初始化LCD1602顯示模塊LCD_Init();// 初始化蜂鳴器IO口Buzzer_Init();// 初始化紅外傳感器IO口Infrared_Init();// 初始化繼電器控制端口Relay_Init();
}
3.2 RFID卡片識別處理模塊
讀取RFID模塊數據,判斷卡片合法性并控制繼電器。
#define MAX_CARD_NUM 3unsigned char authorized_cards[MAX_CARD_NUM][5] = {{0xDE, 0xAD, 0xBE, 0xEF, 0x01}, // 張三卡號示例{0xDE, 0xAD, 0xBE, 0xEF, 0x02}, // 李四卡號示例{0xDE, 0xAD, 0xBE, 0xEF, 0x03} // 王二卡號示例
};bit Is_Card_Authorized(unsigned char *card_id) {for (int i = 0; i < MAX_CARD_NUM; i++) {if (memcmp(card_id, authorized_cards[i], 5) == 0)return 1;}return 0;
}void RFID_Process(void) {unsigned char card_id[5];if (RFID_ReadCard(card_id)) { // 讀取卡號函數,返回1成功if (Is_Card_Authorized(card_id)) {Relay_Control(1); // 繼電器閉合,開門LCD_DisplayString(0, 0, "通過");Delay_ms(3000);Relay_Control(0); // 繼電器斷開,關門} else {Buzzer_On();LCD_DisplayString(0, 0, "不通過");Delay_ms(3000);Buzzer_Off();}}
}
3.3 紅外避障計數模塊
檢測紅外傳感器信號變化,實現人員計數。
unsigned int people_count = 0;void Infrared_Process(void) {static bit last_state = 1; // 傳感器常態高電平bit current_state = Infrared_Read();if (last_state == 1 && current_state == 0) {// 檢測到有人通過people_count++;LCD_DisplayNumber(1, 0, people_count);}last_state = current_state;
}
3.4 主程序循環
整體邏輯主循環,輪詢處理刷卡和人員計數。
void main(void) {System_Init();LCD_Clear();LCD_DisplayString(1, 0, "人數: 0");people_count = 0;while (1) {RFID_Process();Infrared_Process();Delay_ms(100);}
}
4 總結
本系統基于STC89C52單片機,成功實現了RFID智能門禁和紅外人流量計數功能。系統設計涵蓋核心單片機電路、RFID讀卡模塊、繼電器驅動、LCD1602顯示、紅外避障傳感器及蜂鳴器報警等關鍵模塊,保證了系統的穩定性和實用性。程序設計采用模塊化結構,方便維護和擴展。系統具備實時響應能力和用戶友好的交互界面,適合實際門禁管理及人員統計應用。未來可增加網絡通信模塊,實現遠程監控和數據上傳,提升智能化水平。