一、主要功能
运行程序后,LCD1602液晶显示屏,显示输入密码,通过键盘输入密码,密码正确吸合继电器,反之不吸合继电器。通过键盘也修改密码,并保存在24c02寄存器中,RC522门禁卡可实现识别一张卡的卡号,并绑定保存在24c02中,实现掉电保存密码的效果。
二、硬件资源
1、51单片机最小系统
2、蜂鸣器
3、LCD1602液晶显示屏
4、矩阵按键
5、TTL下载器
三、硬件连接图
(注意!!!)以上为按键密码锁的引脚连接图,无IC卡连接图。、
四、主程序
//==============================主函数===============================
void main()
{
unsigned char KEY1,NUM;
unsigned char i,j;
P1=0xFF;
EA=1;
TMOD=0x11;
IT1=1;//下降沿有效
EX1=1;//外部中断1开
TH0=0;//T0赋初值
TL0=0;
TR0=0;//t0开始计时
TL1=0xB0;
TH1=0x3C;
ET1=1;
TR1=0;
Delay400Ms(); //启动等待,等LCM讲入工作状态
lcd_init(); //LCD初始化
write_1602com(yi);//日历显示固定符号从第一行第0个位置之后开始显示
for(i=0;i<16;i++)
{
write_1602dat(start_line[i]);//向液晶屏写日历显示的固定符号部分
}
write_1602com(er);//时间显示固定符号写入位置,从第2个位置后开始显示
for(i=0;i<16;i++)
{
write_1602dat(start_line[i]);//写显示时间固定符号,两个冒号
}
write_1602com(er+9); //设置光标位置
write_1602com(0x0f); //设置光标为闪烁
Delay5Ms(); //延时片刻(可不要)
//以上为上电的初始化配置//
N=0; //初始化数据输入位数
RdFromROM(TempPassword,0,6); //从24C02里读出存储密码
RdFromROM(UID2,1,4); //从24C02里读出存储密码
IC_Init();
while(1)
{
RFID_Check(); //实现检测IC卡是否存在,并对比IC卡号
if(key_disable==1)
Alam_KeyUnable();
else
ALAM=1; //关报警
KEY1=keynum();
if(KEY1!=0xff || IrOK==1)
{
if(key_disable==1)
{
second=0;
}
else
{
NUM=coding(Im[2],KEY1);
{
switch(NUM)
{
case ('A'):WrToROM(UID3,1,4); RdFromROM(UID2,1,4); break;
case ('B'): ; break;
case ('C'): ; break;
case ('D'):ResetPassword(); break; //重新设置密码
case ('*'): Cancel(); break; //取消当前输入
case ('#'): Ensure(); break; //确认键,
default:
{
//DisplayListChar(0,1,Input);
write_1602com(er);
for(i=0;i<16;i++)
{
write_1602dat(Input[i]);
}
operation=0;
if(N<6) //当输入的密码少于6位时,接受输入并保存,大于6位时则无效。
{
OneAlam(); //按键提示音
//DisplayOneChar(6+N,1,'*');
for(j=0;j<=N;j++)
{
write_1602com(er+6+j);
write_1602dat('*');
}
InputData[N]=NUM;
N++;
}
else //输入数据位数大于6后,忽略输入
{
N=6;
break;
}
}
}
}
}
}
}
}
以上位主程序的逻辑程序,感兴趣可练习我分享代码。