找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 6600|回复: 7
打印 上一主题 下一主题
收起左侧

单片机指纹控制系统设计

  [复制链接]
跳转到指定楼层
楼主
ID:399148 发表于 2018-9-17 18:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
这是我的毕业设计,里面设计到电路图和源程序,请 各位查看
任 务 书
课程设计题目:指纹识别
功能简述:
1)根据所学的知识和能力,设计程序可以实现根据指纹的大小、形状等特征,识别出不同的指纹。
2)利用按键标志当前指纹识别的状态,例如录入状态,识别状态,清楚状态;利用液晶1602能够显示当前指纹识别的状态信息。
3)利用继电器,对当前信息的判断,例如提醒当前指纹识别错误;利用蜂鸣器和LED等提醒当前指纹识别是否正确
目录
第一章  绪论
1.1、指纹识别中的基本概念
1.2 指纹识别的发展前景
1.3、指纹识别课题设计的内容与意义
第二章 方案选择
2.1 系统原理图设计
2.2方案说明
2.3 方案比较
2.4 方案选择
第三章 硬件设计
3.1 AT89C52单片机设计
3.2 电源电路设计
3.3 按键控制部分电路
3.4  LED指示灯电路
3.5 蜂鸣器电路
3.6 指纹传感器模块
第四章 软件程序设计
4.1程序流程图         
4.2程序
第五章  调试
5.1硬件调试
5.2软件调试
摘      要
随着时代的发展,社会越来越需要高效、可靠的身份识别系统传统的个人身份鉴别手段如钥匙、口令、密码、身份证件,甚至IC卡等识别方式,由于它们具有可假冒、可伪造、可盗用、可破译的弱点,已不能完全满足现代社会经济活动和社会安全防范的需要。随着识别技术的不断成熟和计算机技术的飞速发展,各种基于人体生理特征的身份识别系统如:指纹、手掌、声音、视网膜、瞳孔和面纹等识别技术纷纷从实验室中走出来。目前,从实用的角度看,指纹识别技术是优于其它生物识别技术的身份鉴别方法。本次设计我们利用指纹识别传感器进行指纹采集与识别,在单片机中对指纹进行处理, 用按键标志当前指纹识别的状态,录入状态,识别状态,清除状态,用液晶1602能够显示当前指纹识别的状态信息;用继电器对当前信息进行判断,例如提醒当前指纹识别错误;利用蜂鸣器和LED等提醒当前指纹识别是否正确
关键词:指纹识别;单片机;指纹识别传感器;液晶1602;继电器
第一章  绪论
进入21世纪后,由于国际反恐、互联网应用等因素的推动,在全球范围内,指纹识别技术得到了更加广泛的应用,指纹识别市场进入高速发展阶段。利用人的生理特征,例如像指纹等来识别个人的身份,将成为今后几年IT产业的重要革新。指纹在所有的生物特征中,相对稳定、不随年龄而变化和采集较为便捷,同时它的研究历史最长、相对更为成熟。与现有的智能卡、身份证号码和密码的身份识别系统相比,指纹识别的性价比最高,也更适于应用到大众生活中。因此指纹识别以其革命性的便捷和安全性成为一个理想的卓越的解决方案。
1.1、指纹识别中的基本概念
指纹识别是成熟的生物识别(Biometric)技术,由于人体的身体特征具有不可复制的特点,人们把目光转向了生物识别技术,希望可以籍此技术来应付现行系统安全所面临的的挑战。要把人体的特证用于身份识别,这些特征必须具有唯一性和稳定性。研究和经验表明,人的指纹、掌纹、面孔、发音、虹膜、视网膜、骨架等都具有唯一性和稳定性的特征,即每个人的这些特征都与别人不同、且终生不变,因此就可以据此识别出人的身份。基于这些特征,人们发展了指纹识别、面部识别、发音识别等多种生物识别技术,目前许多技术都已经成熟并得以应用,其中的指纹识别技术更是生物识别技术的热点。
1.2 指纹识别的发展前景
指纹行业是一个新兴的行业,本身具有很高的科技含量,相对利润高发展前景广阔。经专家预计,指纹产品将是未来IT产业新的增长点:利润率最高、发展潜力最大。于是,世界顶尖的指纹识别技术得到了全球范围内的高度重视,指纹识别技术的应用如火如荼地迅速发展起来。目前,国内已经有不少企业在参与指纹识别技术的开发和应用。指纹技术在现代生活和工作中的应用已越来越普遍,例如:指纹考勤、指纹社保、指纹银行、指纹商场、指纹接送幼儿等等生活和工作的新现象已广为人知,指纹技术正在日益刷新着我们的现代化生活方式。
1.3、指纹识别课题设计的内容与意义
指纹识别技术相对于其他识别方法有许多独到之处,具有很高的实用性和可行性。因此,指纹识别成为最流行、最方便、最可靠的身份认证方式,己经在社会生活的诸多方面得到广泛应用。这是由于指纹是独一无二的,两人之间不存在着相同的指纹,指纹是独一无二的,两人之间不存在着相同的指纹,同时指纹样本易于采集,难以伪造,便于开发,实用性强,可以利用多个指纹构成多重口令,提高系统的安全性。
本文主要通过对MCS-51系列单片机的结构和功能进行分析,来研究基于单片机指纹识别系统的内部结构特点和功能阐述以及工作原理,更好的了解了指纹识别系统的未来前景。
第二章 方案选择
2.1系统原理图设计
2.2方案说明
2.1.1方案一:摄像头采集、飞思卡尔单片机处理
这种方案由指纹图像采集、指纹图像预处理、指纹特征提取、指纹特征匹配、特征数据库等几部分组成。指纹识别系统的原理框图如图1所示。
               
               图2-1、指纹识别系统框图
该系统首先由数字摄像头ov6620采集指纹,并将指纹图像转化为数字图像;然后用16位的飞思卡尔X128单片机对指纹数字图像进行预处理,再通过图像增强、分割、平滑、细化等处理过程得到便于指纹特征提取的数字图像:接着提取细化后的图像细节特征点; 然后将指纹信息数据送入STC89C52单片机中,一块液晶1602与STC89C52单片机相连,液晶用于显示当前指纹采集系统的工作状态和经对比后指纹采集的信息是否正确,用一个蜂鸣器和LED指示灯指示当前采集的指纹信息正确。当采集到的指纹信息正确,蜂鸣器发出响声并且LED指示灯点亮。
2.1.2方案二 指纹识别传感器
代替第一种方案中的摄像头和飞思卡尔单片机,我们利用一个指纹识别传感器来对指纹进行采集,识别以及部分处理,然后将信息输送到AT89C52单片机中,利用按键控制当前指纹识别的状态,用LED灯进行显示,即录入状态,识别状态,清除状态;利用液晶1602能够显示当前指纹识别的状态信息,即录入指纹的编号以及当前指纹;利用继电器,对当前信息的判断,例如提醒当前指纹识别错误;利用蜂鸣器提醒当前指纹识别是否正确,如果指纹录入正确,蜂鸣器发出响声。
2.3 方案比较
1)复杂性:方案一采取用数字摄像头ov6620采集指纹图像,然后用16位的飞思卡尔X128单片机进行图像处理,还要进行图像增强、分割、平滑、细化等处理过程才能得到便于指纹特征提取的数字图像;而这些过程在方案二中只用一个指纹传感器模块就可以代替,所以方案二设计简单。
2)准确性:方案一中所采集的摄像头分辨率有限,所以采集的指纹信息有一定的误差,方案二中指纹传感器模块是利用集成的光学头进行处理的,比较精确。
3)局限性:由于方案一中使用的飞思卡尔单片机处理程序比较复杂,超出了我们的学习范围,而方案二传感器就使程序简单化了。
2.4 方案选择
鉴于各种原因,我们最终选择第二种方案,使用指纹传感器模块来设计系统。
第三章 硬件设计
3.1 AT89C52单片机设计
3.1.1 主要性能
有12k字节Flash闪速存储器,1024字节内部RAM,32个I/O口线,两个16位定时/计数器,5个中断向量,一个全双工串行通信口,片内振荡器及时钟电路。
3.1.2引脚结构图(如图3-1)
                    
图3-1   AT89C52管脚图
3.1.3 一些端口的介绍:
P30口:RXD(串行输入口)
P31口:TXD(串行输出口)
XTAL1:振荡器反相放大器的及内部时钟发生器的输入端。
XTAL2:振荡器反相放大器的输出端。
3.1.4 单片机最小系统
1)外部晶振的设计
STC89C52的内部有一个用于构成振荡器的高增益反相放大器,通过XTAL1,ATAL2外部接上一片作为反馈元件的晶体,与C1和C2构成了并联谐振电路,使其构成自激振荡器,电容的值具有微调的作用,我们取30PF,具体的接法如图3-2外部晶振电路。
图3-2  外部晶振电路
STC89C52的工作频率范围在 0-24MHZ。我们选用的是11.0592MHZ的晶振,振荡周期约为1us机器周期约为0.1us,所以这个晶振可以满足这个系统的要求。并且晶振不能离单片机太远,不然使用外部晶振进行软件调试时就会发现找不到信号。
2)复位电路的设计
MCS51单片机通常采用上电自动复位和按钮复位两种方式,本系统采用简单的自动复位电路如图2-2所示。单片机在上电瞬间,RC电路充电,RST引脚端出现正脉冲,只要RST端保持两个机器周期以上的高电平,就能使单片机有效复位。其中电容选10uF、电容选10K。
图3-3复位电路
3.2 电源电路设计
本系统采用的5V电源主要采用两种方法,第一是直接用9V电池然后通过一个变压电路,利用7805将转化成5V供单片机和液晶显示部分使用;其二是用220V通过变压器等将其转化成5V。
两种方法都可以,但是由于第一种方法便于携带、而且成本相对较低所以我们选用第一种方案。
图3-4  电源电路
3.3 按键控制部分电路
1)消除抖动
按键的闭合与否反应在电压上就是呈现出高电平或低电平,如果高电平表示断开,那么低电平则表示闭合,通过电平的高低状态的检测可确认键按下与否。为了确保CPU对一次按键动作只确认一次,并且防止干扰信号的影响,必需加入消除电平抖动的措施,下图3-5为按键抖动示意图:
图3-5按键闭合及断开前后的电压
消除抖动通常有硬、软硬两种方法,硬件消除抖动可采取双稳态电路或滤波消抖电路;软件消抖是在第一次检测到有键按下时,执行一段延时程序再确认该键是否仍闭合,如果还是闭合状态则确认该键按下,从而消除抖动和干扰影响。当按键较多时,我们多采用硬件件消抖法。本系统中按键少直接采用直接接入的方式。
2)按键接口设计
按键接口设计有两种方法,独立式按键和矩阵式键盘。独立式按键各键相独立,每个按键各接入一根输入线,只要检测输入线的电平就可以识别按键状态。这种方法电路配置灵活,软件结构简单,但每个按键需占用一根输入口。由于该设计方案IO资源浪费大。故此方法只适用于按键少或其他控制功能很简单的场合。由于本设计中的按键只有3个,考虑系统可靠性和键盘设计的简单所以采用独立式按键。本系统的按键电路如图3-6所示:
图3-6独立按键电路
按键按下是呈低电平,我们采用软件消抖来减少对的单片机影响。
3.4 LED指示灯电路
图3-7 LED灯指示电路
当k2键按下时,录入模式指示灯red亮;当k1键按下时,识别模式指示灯green亮。
3.5 蜂鸣器电路
图3-8蜂鸣器电路
3.6 指纹传感器模块
1)指纹模块电路如下所示:
图3-9指纹识别模块
指纹模块里面主要是DSP芯片,型号为PS1802,加上外面的CMOS芯片,CMOS芯片主要是对指纹进行“照相”,生成指纹特征,如图3-8所示就是一个指纹模板,录入两次这样的指纹特征就能生成一个指纹模板。
具体的工作过程是:扫描指纹(录入图像)、生成特征、合成模板(建立一个指纹库文件,成功录入一个指纹)。
图 3-10 指纹模板
指纹模板就是“照一次相”,指纹模块里面的CMOS芯片采集一次指纹信息,然后进行模糊处理生成0和1两种记录信息,存入指纹模块的FLASH芯片里面。
当切换到识别模式的时候,指纹模块就会先让CMOS芯片采集一次指纹,然后和FLASH芯片的数据进行对比。看是不是存在,如果存在就能返回是几号指纹。这样我们就能通过单片机或者电脑进行指纹识别与登记了。
2)指纹传感器模块实物图
指纹模块型号是:FM-180,此模块上里面包含了:
1、光学头   2、通信连接线 3、DSP芯片(在模块里面)
4、稳压芯片5、FLASH芯片  6、CMSO传感器(在模块里面) 等部件组成。

图3-11指纹传感器模块实物图
第四章 软件程序设计
该设计主要通过设定的3个按键来实现一定的功能,3个按键分别为模式切换(识别模式和录入指纹模式)、指纹录入、删除所有指纹。
4.1程序流程图            
4.1.1程序主流程图
(1)指纹录入: 先进行录入模式,然后按一下录入指纹,灯会闪烁,录入成功一次,蜂鸣器响一次,这时候拿开手指,1秒放入同一个手指,会再录入一次,如果两次都成功,就成功录入了一个指纹。蜂鸣器会响两次,同时显示录入指纹成功。如果不成功就会显示录入失败。录入完成后,可以进入识别模式,或者接着录入下一个指纹。录入完成,按一次指纹转换,进入指纹识别开锁模式。
单片机主程序流程设计:

  1. void main(void)//主函数
  2. {
  3.               unsigned char i=0;

  4.               ET0=1;     //定时器0开中断
  5.               TL0=0x97;  //17ms的初值
  6.               TH0=0xBD;
  7.    delay1ms(5);
  8.    LcdRw=0;      //只对液晶进行写操作,不进行读操作
  9.    delay1ms(5);
  10.    LCD_Initial();//液晶初始化
  11.    delay1ms(5);
  12.    GotoXY(0,0);//x,y
  13.    Print(Identify);
  14.     //串口初始化
  15.     SCON=0x50;   //UART方式1:8位UART;   REN=1:允许接收
  16.     PCON=0x00;   //SMOD=0:波特率不加倍
  17.     TMOD=0x21;   //T1方式2,用于UART波特率
  18.     TH1=0xFD;
  19.     TL1=0xFD;   //UART波特率设置:9600
  20.     TR1=1;
  21.     TR0=1;// 开定时器0
  22.             
  23.               IT0=0;//中断0低电平中断
  24.               IT1=1;//中断1低电平中断
  25.               EX0=1;//开中断0
  26.               EX1=1;//开中断1
  27. EA=1;

  28.               mode();//看当前是什么模式
  29.             
  30.               for(i=0;i<6;i++)//开始握手6次,如果没有一次成功,表示模块通信不正常。只要成功就跳出此循环
  31.               {
  32.                             if(VefPSW())//与模块握手通过,绿灯亮起。进入识别模式
  33.                               {
  34.                                                         green=0; //读一次
  35.                                                         buzzer=0;
  36.                                                         shownum(0);
  37.                                     delay1ms(300);
  38.                                     buzzer=1;
  39.                                                         break;            
  40.                               }
  41.                   else
  42.                             {
  43.                                           red=1;
  44.                                           green=1;
  45.                                           break;
  46.                             }
  47.               }
  48.     while(1)
  49.               {
  50.                             if(k2==0)//录入一个指纹
  51.                             {
  52.                                                           delay1ms(10);            
  53.                                                           if(k2==0)//如果仍为低电平,表示按键有效
  54.                                                                         {
  55.                                                                           while(k2==0);//等待松手
  56.                                                                         if(VefPSW()==1&&modeflag==1&&SaveNumber<10)//与模块握手通过
  57.                                                                                       {
  58.                                                                                                       if(enroll()==1)//采集两次,生成1个指纹模板成功
  59.                                                                                                                   {
  60.                                                                                                                    if(savefingure(SaveNumber+1)==1)//保存也成功
  61.                                                                                                                                  {
  62.                                                                                                                                             SaveNumber++;//加一次
  63.                                                                                                                                             shownum(SaveNumber);
  64.                                                                                                                               }
  65.                                                                                                                 }
  66.                                                                                       }
  67.                                                                                     else
  68.                                                                                     {
  69.                                                                                                                 buzzer=0;
  70.                                                                                                                 for(i=0;i<8;i++)
  71.                                                                                                                 {
  72.                                                                                                                   delay1ms(100);
  73.                                                                                                                   red=~red;
  74.                                                                                                                 }
  75.                                                                                                                 red=0;
  76.                                                                                                                 buzzer=1;
  77.                                                                                                                              
  78.                                                                                     }               
  79.                                                                         }
  80.                                                                      
  81.                             }
  82.                             if(modeflag==0)//为识别模式
  83.                             {
  84.                                             searchnum=search();
  85.                                             if(searchnum>=1&&searchnum<=162)//最多是162个指纹
  86.                                             {
  87.                                                             shownum(searchnum);
  88.                                                  //蜂鸣器响一声
  89.                                                            relay=0;
  90.                                                  buzzer=0;
  91.                                                  delay1ms(100);
  92.                                                  buzzer=1;
  93.                                                            for(i=0;i<20;i++)
  94.                                                            {
  95.                                                             delay1ms(150);
  96.                                                            }
  97.                                                            relay=1;
  98.                                             }
  99.                                             if(searchnum==255)//不正确的指纹 蜂鸣器响三声
  100.                                             {
  101.                                                              shownum(0);
  102.                                                            buzzer=0;delay1ms(100); buzzer=1;delay1ms(100);
  103.                                                  buzzer=0;delay1ms(100); buzzer=1;delay1ms(100);
  104.                                                  buzzer=0;delay1ms(100); buzzer=1;delay1ms(100);
  105.                                             }
  106.                             }
  107.                             if(clearallflag==1)
  108.                             {
  109.                                           clearallflag=0;
  110.                                           Clear_All();
  111.                                 red=0;                   //红色灯亮
  112.                                 green=1;
  113.                                           //蜂鸣器长响一次,表示清除所有指纹结束
  114. ……………………

  115. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

完整的Word格式文档51黑下载地址(含源程序):
指纹答辩问题.docx (49.88 KB, 下载次数: 49)
硬件原理图.docx (35.8 KB, 下载次数: 48)
基于单片机指纹识别系统设计.doc (423 KB, 下载次数: 165)


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏6 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:451311 发表于 2018-12-21 09:42 | 只看该作者
不错,顶一个,学习一下~
回复

使用道具 举报

板凳
ID:636603 发表于 2019-11-17 16:41 | 只看该作者
很不错,学习一下
回复

使用道具 举报

地板
ID:689378 发表于 2020-3-24 23:54 | 只看该作者
为什莫没有lcd1602那段程序
回复

使用道具 举报

5#
ID:505380 发表于 2020-4-7 14:44 | 只看该作者
有没有仿真文件啊
回复

使用道具 举报

6#
ID:728647 发表于 2020-4-13 23:59 | 只看该作者
我也想学习一下
回复

使用道具 举报

7#
ID:240604 发表于 2020-4-14 15:32 | 只看该作者
请问有工程文件么
回复

使用道具 举报

8#
ID:166543 发表于 2020-4-14 17:43 | 只看该作者
很不错,学习一下
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表