2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > 基于51单片机的指纹考勤系统密码锁门禁原理图PCB程序设计

基于51单片机的指纹考勤系统密码锁门禁原理图PCB程序设计

时间:2020-11-05 20:08:30

相关推荐

基于51单片机的指纹考勤系统密码锁门禁原理图PCB程序设计

硬件设计

(末尾附文件)

1)开机:按下电源,电源指示灯点亮,液晶显示:“请先按键再刷指纹”,按下按键后,液晶显示:“请按指纹”,同时指纹模块绿灯亮起,可以进行指纹识别开锁功能。若指纹识别成功,继电器动作,LED指示灯亮起,开锁成功,人员可以进入,液晶显示:“指纹已找到,请进”; 若指纹识别不成功,继电器不动作,LED指示灯不亮,将不能开锁,人员不能进入,液晶显示:“没有搜索到指纹 请按任意键继续”。

2)管理员模式:按下按键进入管理员模式首先要输入6位密码,密码正确可以进入管理员模式,密码错误不能进入管理员模式,在管理员模式下可以完成录入指纹、删除指纹、应急开锁和修改密码的功能。进入录入指纹模式后,指纹模块绿灯亮起,将手指放到指纹头上,录入同一手指两次,此时液晶显示“指纹采集成功”。在删除指纹模式下,液晶显示“输入删去的指纹号”,输入后按确认键即可完成指定指纹的删除功能,同时液晶显示“删指纹号成功”。在非正常的情况下,如指纹模块不好用或者紧急情况下,可以使用紧急开锁功能。密码修改的功能是指可以修改并保存进入管理员的6位密码。

系统设计的总体框图如图1-3所示。

原理图:

PCB:

程序设计

#include"reg52.h"#include"12864.h"#include"eeprom.h"#include"matrixkey.h"#include"AT24CXX.h"#include"finger.h"uchar code table1[]="A:签到 B:添加 ";uchar code table2[]="C:清空 D:上课 ";uchar code table3[]=" *查询缺勤人员 ";uchar code table4[]=" #查询迟到人员 ";uchar code table5[]="请输入删去密码: ";uchar code table6[]=" 开始签到 ";uchar code table7[]=" 请按指纹签到 ";uchar code table8[]="";uchar code table9[]="按D: 开始上课 ";uchar code table10[]="请输入密码:";uchar code table11[]=" 签到成功 ";uchar code table12[]="请按任意按键继续";uchar code table13[]=" 编号为:";uchar code table14[]=" 请按手指 ";uchar code table15[]=" 请再按一次 ";uchar code table16[]=" 采集指纹成功 ";uchar code table17[]="输入删去的指纹号";uchar code table18[]="删去指纹库成功 ";uchar code table19[]="删去指纹库失败 ";uchar code table20[]=" 请输入新密码 ";uchar code table21[]="请再次输入新密码";uchar code table22[]=" 密码修改成功 ";uchar code table23[]=" 两次密码不一样";uchar code table24[]=" 输入密码错误 ";uchar code table25[]=" 还有 机会 ";uchar code table26[]=" 该指纹已存储 ";uchar code table27[]=" 采集指纹失败 ";uchar code table28[]="确定删去指纹库?";uchar code table29[]="按D: 本节课结束";uchar code table30[]="当前缺勤人";uchar code table31[]="当前迟到人";uchar code digital[15]={0x90,0x92,0x94,0x96,0x88,0x8a,0x8c,0x8e,0x98,0x9a,0x9c,0x9e};uchar xdata table_qiandao[100];uchar queqing=0;//缺勤人数uchar zz;uchar chidao=0;//迟到人数uchar codeadmin[6]={1,3,1,4,2,0};//管理员的固定密码uchar code init_code[6]={0,0,0,0,0,0};//上电第一次一般的初始化密码uchar now_code[6]={0,0,0,0,0,0};//当前存储器中存储的密码uchar user[6]={0,0,0,0,0,0};//用户输入的密码uchar user2[6]={0,0,0,0,0,0};//输入第二次修改的密码sbit relay=P3^7;//开锁继电器sbit wake=P3^6;//检测手指按压,有手指按下就是高电平uchar jishu=0;uchar err_user=3;//用户三次输入错误密码uchar err_admin=3;//管理员三次输入错误密码uchar num;//存储矩阵键盘转换的对应按键值uchar number=0;//输入密码的个数默认0uchar key_flag=0;//进入手动密码标志uchar i;uchar code_flag=0;//密码修改标志第一次输入密码时候是等于0再次输入是等于1void init_dispay(void)//初始化界面{PutStr(0,0,table1);PutStr(1,0,table2);PutStr(2,0,table3);PutStr(3,0,table4); }void admin_dispay(void)//管理员界面{PutStr(0,0,table6);PutStr(1,0,table7);PutStr(2,0,table8);PutStr(3,0,table9);}void init_shuju(void){uchar i;for(i=0;i<100;i++){table_qiandao[i]=0x00;}}void que_renshu(void){queqing=0;//缺勤人数// WriteCommand(0x80+2);// WriteData(jishu/10+0x30);// WriteData(jishu%10+0x30);for(i=0;i<jishu;i++){if(table_qiandao[i]==0x00){queqing++;WriteCommand(digital[queqing-1]);WriteData((i+1)/10+0x30);WriteData((i+1)%10+0x30); }}}void chidao_renshu(void){ queqing=0;//缺勤人数// WriteCommand(0x80+2);// WriteData(jishu/10+0x30);// WriteData(jishu%10+0x30);for(i=0;i<jishu;i++){if(table_qiandao[i]>=2){ queqing++;WriteCommand(digital[queqing-1]);WriteData((i+1)/10+0x30);WriteData((i+1)%10+0x30); }}}void key(void){ num=keynum();if((num==12)&&(key_flag==0))//查看缺勤人数{LcmClearTXT();//清屏PutStr(0,0,table30);que_renshu();WriteCommand(0x80+6);WriteData(queqing/10+0x30);WriteData(queqing%10+0x30); while((keynum()>=16));init_dispay(); }if((num==14)&&(key_flag==0))//查看迟到人数{LcmClearTXT();//清屏PutStr(0,0,table31);chidao_renshu();WriteCommand(0x80+6);WriteData(queqing/10+0x30);WriteData(queqing%10+0x30);while((keynum()>=16));init_dispay(); }if((num==11)&&(key_flag==0))//如果按下C按键进{key_flag=1;//只显示“请输入密码开锁:“LcmClearTXT();//清屏PutStr(0,0,table28);PutStr(1,0,table5); }if((num==7)&&(key_flag==0))//如果按下B按键进入添加指纹{LcmClearTXT();//清屏PutStr(1,0,table14);//显示请按指纹if(regist(0)==1)//如果第一次按手指成功{PutStr(1,0,table15);//显示请再按一次Delay(10);//延时一会if(regist(1)==1)//两次采集手指成功{PutStr(1,0,table16);//采集指纹成功PutStr(2,0,table13);//指纹编号:WriteCommand(0x88+5);//指定第三行显示位置WriteData(' ');id=id+1;WriteData(id/100+0x30);WriteData(id%100/10+0x30);WriteData(id%10+0x30);SectorErase(0x2200);jishu=id%256;byte_write(0x2200, id%256);}else PutStr(1,0,table27);//采集指纹失败 }else if(regist(0)==2)//已经注册过指纹{PutStr(1,0,table26);//指纹已经存储}PutStr(3,0,table12);//请按任意键退出while(keynum()>=16); init_dispay();//管理员设置界面key_flag=0;num=0xff;}if((num==3)&&(key_flag==0))//如果按下A按键管理员模式{key_flag=2;//进入输入管理员密码界面//只显示“请输入密码:“LcmClearTXT();//清屏PutStr(1,0,table10);}if((key_flag==1)&&(num!=0xff))//非管理员模式下输入密码{num=coding(num);//转换成可以识别的if((number<6)&&(num<10)){user[number]=num;//用户输入的密码进行记忆WriteCommand(0x88+number);//指定第三行显示位置WriteData('*');//WriteData(num+0x30);//明码显示number++;}if((num=='B')&&(number>0))//密码删除按键{number--;WriteCommand(0x88+number);//指定第三行显示位置WriteData(' ');}if(number==6)//按下D键确定按键并且输入六位密码之后{LcmClearTXT();//清屏number=0;key_flag=0;//如果管理员密码正确,进入添加指纹,删除指纹,收到开锁,修改密码界面if((user[0]==now_code[0])&&(user[1]==now_code[1])&&(user[2]==now_code[2])&&(user[3]==now_code[3])&&(user[4]==now_code[4])&&(user[5]==now_code[5])){if(cancel(0x63)==1){PutStr(0,0,table18);//输入删去的指纹号成功SectorErase(0x2200);byte_write(0x2200, 0x00);

.

文件仅供参考:

链接:/s/1gVJJLnp6FxLZPikoezMXig

提取码:rrv9

.

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。