一.硬件方案
本RFID系统设计可分为硬件部分和软件部分。硬件部分以MFRC522射频识别模块为核心,结合主控模块STC89C52设计系统的外围硬件电路,实现对射频卡的控制与MCU之间的互通。软件部分采用C语言进行系统的下位机程序的开发,完成与IC卡之间的通信,实现数据交换功能。
电路主要由51单片机+最小系统+LCD12864液晶显示模块+RFID无线模块+5V转3.3V稳压电路+蜂鸣器模块+AT24C02存储电路+继电器控制电路+按键模块;
二.设计功能
(1)通过按键输入密码,根据密码的正确与否来进行相应的操作;
(2)可使用管理员密码可以自行设定和修改密码;修改的密码自动保存至存储芯片,支持掉电保存;
(3)IC卡感应,匹配成功开锁;匹配三次不成功,蜂鸣器报警;
(4)输入正确的密码后,驱动开锁电路。
三.设计原理图
(1)原理图主要采用AD软件进行设计,如图:
(2)PCB图如下:
四.软件设计
(1)LCD初始化
/*******************************************************************/
void lcd_init()
{ LCD_PSB = 1; //并口方式 ,部分液晶不需要write_cmd(0x36); //扩充指令操作delay(5);write_cmd(0x30); //基本指令操delay(5);write_cmd(0x0C); //显示开,关光标delay(5);write_cmd(0x01); //清除LCD的显示内容delay(5);
}
(2)修改密码
case 3: display(1,0,4); //密码设置display2(3,0,table,8);key_count=0;while(1){ key_value=key_scan(); if(key_value==12) { states--;return;}if(key_value>=0 && key_value <=9)//有按键输入{ table[key_count++]=key_value+'0';display2(3,0,table,8); }if(key_value==11)//退格{ table[--key_count]='-';display2(3,0,table,8); }if(key_count==8 && key_value == 15) //按下确定键{ for(i=0;i<8;i++)KEY_BUF[i]=table[i]; EEPROM_WRITE(7,KEY_BUF,8);//写入EEPROMbreak;}} break ;
(3)匹配密码
case 1: display(1,0,2); //密码输入display2(3,0,table,8);key_count=0;while(1){ key_value=key_scan(); if(key_value==12) { states--;return;}if(key_value==13){states++;return;} if(key_value>=0 && key_value <=9)//有按键输入{ table[key_count++]=key_value+'0';display2(3,0,table,8); }if(key_value==11)//退格{ table[--key_count]='-';display2(3,0,table,8); }if(key_count==8){if( table[0]==KEY_BUF[0] &&table[1]==KEY_BUF[1] &&table[2]==KEY_BUF[2] &&table[3]==KEY_BUF[3] &&table[4]==KEY_BUF[4] &&table[5]==KEY_BUF[5] &&table[6]==KEY_BUF[6] &&table[7]==KEY_BUF[7] ) //密吗正确 { bPass=1;relay_ON();//灯开关display(2,0,5);relay_OFF();break; }else //密码错误{ relay_OFF();beep1() ;bWarn=1;display(2,0,6);break;} }}break ;
(3)主程序源码
void main(void) //主函数
{ INT8U key;Delay_ms(50); //让硬件稳定init_all(); //执行初始化函数relay_OFF(); //关继电器LED_BLINK_1(); //led testbeep1(); //beep test display(0,0,0); //显示初始化while(1){key=key_scan(); //按键操作if(key==12) if(states>0) states--;else states=0; //上一功能if(key==13) if(++states>3) states=3; //下一功能ctrl_process(); //进入RC522操作}
}
资料链接:https://pan.baidu.com/s/1sXGJ3kVkt7C5CQdGZSkXLA?pwd=ra6q