实物图
功能
利用单片机和指纹识别模块实现指纹密码锁,通过指纹模块采集识别指纹,4*4矩阵键盘输入密码,能够进入管理系统,进入管理后能修改密码、注册指纹,删除指纹等操作。
要求:
(1)查阅相关文献,熟悉课题背景、任务;
(2)深入学习51系列单片机原理及C语言并且会用Keil软件进行编程;
(3)学习矩阵键盘和LCD的工作原理;
(4)学会利用Protel99se或DXP软件进行原理图绘制;
(5)焊接并完成作品调试。
原理图
PCB图
程序源代码
/************************************************************* 指纹密码锁 补充说明: ***************************************************************/ #include//头文件 #include #include #include #include #include #define uchar unsigned char //宏定义 #define uint unsigned int #define ulong unsigned long /************************引脚定义************************/ sbit buzz=P3^7; //蜂鸣器 sbit led=P0^0; //LED灯 /************************变量定义************************/ #define MAX 5 //指纹最大数量 #define ID_MAX 3//输入ID最大位数 uchar mode=0; //0正常解锁,1管理界面,2注册模式,3删除模式,4修改密码 uchar mode_num=0;//管理界面选择项 uint ID=0; //存储输入编号ID uchar n=0; //输入的位数 bit zhiwen_f=0; //1=标记进入指纹采集 uchar a; //存储按键值 uchar num; //记录输入的密码位数 bit in_f; //输入密码的标志 bit reset_f; //重设密码的标志 bit input_f; //六位密码输完的标志 uchar reset_num; //标记修改密码阶段,=1输入旧密码,=2输入新密码,=3再次输入新密码 ulong low_mima=0;//系统密码 ulong in_mima=0; //暂存输入的密码 ulong new_mima=0;//暂存输入新密码 uchar temp[5]=" �";//存储显示内容 /******************************************************** 函数名称:void delayms(uint ms) 函数作用:毫秒延时函数 参数说明: ********************************************************/ void delayms(uint ms) { unsigned char i=100,j; for(;ms;ms--) { while(--i) { j=10; while(--j); } } } /******************************************************** 函数名称:void didi(uchar i) 函数作用:蜂鸣器鸣叫 参数说明:i为鸣叫次数 ********************************************************/ void didi(uchar i) { uchar j; for(j=0;j=1&&searchnum<=MAX)||searchnum==255)//最多MAX个指纹 { if(searchnum>=1&&searchnum<=MAX) //指纹识别成功 { temp[0]=searchnum%1000/100+0x30; temp[1]=searchnum%100/10+0x30; temp[2]=searchnum%10+0x30; temp[3]=' '; LCD12864_display_string(3,2,temp);//显示卡号 LCD12864_display_string(3,3,"指纹解锁"); LCD12864_display_string(1,4," "); in_mima=0; //清除以输入的密码 num=0; //清除以输入的密码位数 input_f=0; //清除输入密码标志 jdq=0; //打开电磁锁 T2_num=0; //开启重新开始计时 TR2=1; } else //不正确的指纹 { LCD12864_display_string(3,3,"无效指纹"); didi(3); //报警三次 } delay1ms(500); //延时后自动清除显示内容 LCD12864_display_string(3,2," "); LCD12864_display_string(3,3," "); } } /******************************************************** 函数名称:void cunchu() 函数作用:存储指纹 参数说明: ********************************************************/ void cunchu() { LCD12864_display_string(0,3,"状态: "); if(ID>0&&ID<=MAX) //输入的存储指纹位置正确 { if(enroll()==1)//采集两次,生成1个指纹模板成功 { if(savefingure(ID)==1)//保存指纹成功 { LCD12864_display_string(3,3,"录入成功"); } else //保存指纹失败 LCD12864_display_string(3,3,"存储失败"); } else //采集指纹失败 LCD12864_display_string(3,3,"采集失败"); } else //输入指纹编号错误 LCD12864_display_string(3,3,"编号错误"); n=0; //清除输入编号位数 ID=0; //清除输入编号 zhiwen_f=0;//关闭指纹采集 } /******************************************************** 函数名称:void shanchu() 函数作用:删除指纹 参数说明: ********************************************************/ void shanchu() { LCD12864_display_string(0,3,"状态: "); if(ID>0&&ID<=MAX) //输入的存储指纹位置正确 { if(dellfingure(ID)==1)//删除指纹成功 { LCD12864_display_string(3,3,"删除成功"); } else //删除指纹失败 LCD12864_display_string(3,3,"删除失败"); } else { if(ID==999) //如果输入的是999表示清空指纹 { if(Clear_All()==1)//清空指纹成功 LCD12864_display_string(3,3,"清空指纹"); else //清空指纹失败 LCD12864_display_string(3,3,"清空失败"); } else //输入的是其它错误编号 LCD12864_display_string(3,3,"编号错误"); } n=0; //清除输入编号位数 ID=0; //清除输入编号 zhiwen_f=0;//关闭指纹采集 }
审核编辑:汤梓红
全部0条评论
快来发表一下你的评论吧 !