一.硬件方案
本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);//写入EEPROM
break;
}
}
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 test
beep1(); //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