基于单片机指纹识别系统设计22919.pdf

上传人:得****3 文档编号:83610765 上传时间:2023-03-31 格式:PDF 页数:31 大小:1.26MB
返回 下载 相关 举报
基于单片机指纹识别系统设计22919.pdf_第1页
第1页 / 共31页
基于单片机指纹识别系统设计22919.pdf_第2页
第2页 / 共31页
点击查看更多>>
资源描述

《基于单片机指纹识别系统设计22919.pdf》由会员分享,可在线阅读,更多相关《基于单片机指纹识别系统设计22919.pdf(31页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、.任 务 书 课程设计题目:指纹识别 功能简述:1)根据所学的知识和能力,设计程序可以实现根据指纹的大小、形状等特征,识别出不同的指纹。2)利用按键标志当前指纹识别的状态,例如录入状态,识别状态,清楚状态;利用液晶 1602 能够显示当前指纹识别的状态信息。3)利用继电器,对当前信息的判断,例如提醒当前指纹识别错误;利用蜂鸣器和 LED 等提醒当前指纹识别是否正确 .目录 第一章 绪论.11、指纹识别中的基本概念 1.2 指纹识别的发展前景 1.3、指纹识别课题设计的内容与意义.第二章 方案选择 2.1 系统原理图设计 2.2 方案说明 2.3 方案比较 2.4 方案选择 第三章 硬件设计 3

2、1 AT89C52 单片机设计 3.2 电源电路设计 3.3 按键控制部分电路 3.4 LED 指示灯电路 3.5 蜂鸣器电路 3.6 指纹传感器模块 第四章 软件程序设计.4.1 程序流程图 4.2 程序.第五章 调试 5.1 硬件调试.5.2 软件调试.摘 要 随着时代的发展,社会越来越需要高效、可靠的身份识别系统传统的个人身份鉴别手段如钥匙、口令、密码、身份证件,甚至 IC 卡等识别方式,由于它们具有可假冒、可伪造、可盗用、可破译的弱点,已不能完全满足现代社会经济活动和社会安全防范的需要。随着识别技术的不断成熟和计算机技术的飞速发展,各种基于人体生理特征的身份识别系统如:指纹、手掌、声音

3、、视网膜、瞳孔和面纹等识别技术纷纷从实验室中走出来。目前,从实用的角度看,指纹识别技术是优于其它生物识别技术的身份鉴别方法。本次设计我们利用指纹识别传感器进行指纹采集与识别,在单片机中对指纹进行处理,用按键标志当前指纹识别的状态,录入状态,识别状态,清除状态,用液晶 1602 能够显示当前指纹识别的状态信息;用继电器对当前信息进行判断,例如提醒当前指纹识别错误;利用蜂鸣器和 LED 等提醒当前指纹识别是否正确 关键词:指纹识别;单片机;指纹识别传感器;液晶 1602;继电器 .第一章 绪论 进入 21 世纪后,由于国际反恐、互联网应用等因素的推动,在全球范围内,指纹识别技术得到了更加广泛的应用

4、,指纹识别市场进入高速发展阶段。利用人的生理特征,例如像指纹等来识别个人的身份,将成为今后几年 IT 产业的重要革新。指纹在所有的生物特征中,相对稳定、不随年龄而变化和采集较为便捷,同时它的研究历史最长、相对更为成熟。与现有的智能卡、身份证号码和密码的身份识别系统相比,指纹识别的性价比最高,也更适于应用到大众生活中。因此指纹识别以其革命性的便捷和安全性成为一个理想的卓越的解决方案。11、指纹识别中的基本概念 指纹识别是成熟的生物识别(Biometric)技术,由于人体的身体特征具有不可复制的特点,人们把目光转向了生物识别技术,希望可以籍此技术来应付现行系统安全所面临的的挑战。要把人体的特证用于

5、身份识别,这些特征必须具有唯一性和稳定性。研究和经验表明,人的指纹、掌纹、面孔、发音、虹膜、视网膜、骨架等都具有唯一性和稳定性的特征,即每个人的这些特征都与别人不同、且终生不变,因此就可以据此识别出人的身份。基于这些特征,人们发展了指纹识别、面部识别、发音识别等多种生物识别技术,目前许多技术都已经成熟并得以应用,其中的指纹识别技术更是生物识别技术的热点。1.2 指纹识别的发展前景 指纹行业是一个新兴的行业,本身具有很高的科技含量,相对利润高发展前景广阔。经专家预计,指纹产品将是未来 IT 产业新的增长点:利润率最高、发展潜力最大。于是,世界顶尖的指纹识别技术得到了全球范围内的高度重视,指纹识别

6、技术的应用如火如荼地迅速发展起来。目前,国内已经有不少企业在参与指纹识别技术的开发和应用。指纹技术在现代生活和工作中的应用已越来越普遍,例如:指纹考勤、指纹社保、指纹银行、指纹商场、指纹接送幼儿等等生活和工作的新现象已广为人知,指纹技术正在日益刷新着我们的现代化生活方式。1.3、指纹识别课题设计的内容与意义 指纹识别技术相对于其他识别方法有许多独到之处,具有很高的实用性和可行性。因此,指纹识别成为最流行、最方便、最可靠的身份认证方式,己经在社会生活的诸多方面得到广泛应用。这是由于指纹是独一无二的,两人之间不存在着相同的指纹,指纹是独一无二的,两人之间不存在着相同的指纹,同时指纹样本易于采集,难

7、以伪造,便于开发,实用性强,可以利用多个指纹构成多重口令,提高系统的安全性。本文主要通过对 MCS-51 系列单片机的结构和功能进行分析,来研究基于单片机指纹识别系统的内部结构特点和功能阐述以及工作原理,更好的了解了指纹识别系统的未来前景。第二章 方案选择 2.1 系统原理图设计.2.2 方案说明 2.1.1 方案一:摄像头采集、飞思卡尔单片机处理 这种方案由指纹图像采集、指纹图像预处理、指纹特征提取、指纹特征匹配、特征数据库等几部分组成。指纹识别系统的原理框图如图 1 所示。图 2-1、指纹识别系统框图 该系统首先由数字摄像头 ov6620 采集指纹,并将指纹图像转化为数字图像;然后用 16

8、 位的飞思卡尔 X128 单片机对指纹数字图像进行预处理,再通过图像增强、分割、平滑、细化等处理过程得到便于指纹特征提取的数字图像:接着提取细化后的图像细节特征点;然后将指纹信息数据送入 STC89C52 单片机中,一块液晶 1602 与 STC89C52 单片机相连,液晶用于显示当前指纹采集系统的工作状态和经对比后指纹采集的信息是否正确,用一个蜂鸣器和 LED 指示灯指示当前采集的指纹信息正确。当采集到的指纹信息正确,蜂鸣器发出响声并且 LED 指示灯点亮。2.1.2 方案二 指纹识别传感器 代替第一种方案中的摄像头和飞思卡尔单片机,我们利用一个指纹识别传感器来对指纹进行采集,识别以及部分处

9、理,然后将信息输送到 AT89C52 单片机中,.利用按键控制当前指纹识别的状态,用 LED 灯进行显示,即录入状态,识别状态,清除状态;利用液晶 1602 能够显示当前指纹识别的状态信息,即录入指纹的编号以及当前指纹;利用继电器,对当前信息的判断,例如提醒当前指纹识别错误;利用蜂鸣器提醒当前指纹识别是否正确,如果指纹录入正确,蜂鸣器发出响声。2.3 方案比较 1)复杂性:方案一采取用数字摄像头 ov6620 采集指纹图像,然后用 16 位的飞思卡尔 X128 单片机进行图像处理,还要进行图像增强、分割、平滑、细化等处理过程才能得到便于指纹特征提取的数字图像;而这些过程在方案二中只用一个指纹传

10、感器模块就可以代替,所以方案二设计简单。2)准确性:方案一中所采集的摄像头分辨率有限,所以采集的指纹信息有一定的误差,方案二中指纹传感器模块是利用集成的光学头进行处理的,比较精确。3)局限性:由于方案一中使用的飞思卡尔单片机处理程序比较复杂,超出了我们的学习范围,而方案二传感器就使程序简单化了。2.4 方案选择 鉴于各种原因,我们最终选择第二种方案,使用指纹传感器模块来设计系统。第三章 硬件设计 31 AT89C52 单片机设计 3.1.1 主要性能 有 12k 字节 Flash 闪速存储器,1024 字节内部 RAM,32 个 I/O 口线,两个 16 位定时/计数器,5 个中断向量,一个全

11、双工串行通信口,片内振荡器及时钟电路。3.1.2 引脚结构图(如图 3-1)XTAL218XTAL119ALE30EA31PSEN29RST9P0.0/AD039P0.1/AD138P0.2/AD237P0.3/AD336P0.4/AD435P0.5/AD534P0.6/AD633P0.7/AD732P1.0/T21P1.1/T2EX2P1.23P1.34P1.45P1.56P1.67P1.78P3.0/RXD10P3.1/TXD11P3.2/INT012P3.3/INT113P3.4/T014P3.7/RD17P3.6/WR16P3.5/T115P2.7/A1528P2.0/A821P2.1

12、/A922P2.2/A1023P2.3/A1124P2.4/A1225P2.5/A1326P2.6/A1427U1AT89C52 图 3-1 AT89C52 管脚图.3.1.3 一些端口的介绍:P30 口:RXD(串行输入口)P31 口:TXD(串行输出口)XTAL1:振荡器反相放大器的及内部时钟发生器的输入端。XTAL2:振荡器反相放大器的输出端。3.1.4 单片机最小系统 1)外部晶振的设计 STC89C52 的内部有一个用于构成振荡器的高增益反相放大器,通过 XTAL1,ATAL2 外部接上一片作为反馈元件的晶体,与 C1 和 C2 构成了并联谐振电路,使其构成自激振荡器,电容的值具有微

13、调的作用,我们取 30PF,具体的接法如图3-2 外部晶振电路。X112MC122pFC222pF 图 3-2 外部晶振电路 STC89C52 的工作频率范围在 0-24MHZ。我们选用的是 11.0592MHZ 的晶振,振荡周期约为 1us 机器周期约为 0.1us,所以这个晶振可以满足这个系统的要求。并且晶振不能离单片机太远,不然使用外部晶振进行软件调试时就会发现找不到信号。2)复位电路的设计 MCS51 单片机通常采用上电自动复位和按钮复位两种方式,本系统采用简单的自动复位电路如图 2-2 所示。单片机在上电瞬间,RC 电路充电,RST 引脚端出现正脉冲,只要 RST 端保持两个机器周期

14、以上的高电平,就能使单片机有效复位。其中电容选 10uF、电容选 10K。012C222pFC310ufR110K 图 3-3 复位电路 .3.2 电源电路设计 本系统采用的 5V 电源主要采用两种方法,第一是直接用 9V 电池然后通过一个变压电路,利用 7805 将转化成 5V 供单片机和液晶显示部分使用;其二是用220V 通过变压器等将其转化成 5V。两种方法都可以,但是由于第一种方法便于携带、而且成本相对较低所以我们选用第一种方案。图 3-4 电源电路 3.3 按键控制部分电路 1)消除抖动 按键的闭合与否反应在电压上就是呈现出高电平或低电平,如果高电平表示断开,那么低电平则表示闭合,通

15、过电平的高低状态的检测可确认键按下与否。为了确保 CPU 对一次按键动作只确认一次,并且防止干扰信号的影响,必需加入消除电平抖动的措施,下图 3-5 为按键抖动示意图:图 3-5 按键闭合及断开前后的电压 消除抖动通常有硬、软硬两种方法,硬件消除抖动可采取双稳态电路或滤波消抖电路;软件消抖是在第一次检测到有键按下时,执行一段延时程序再确认该键是否仍闭合,如果还是闭合状态则确认该键按下,从而消除抖动和干扰影响。当按键较多时,我们多采用硬件件消抖法。本系统中按键少直接采用直接接入的方式。2)按键接口设计 按键接口设计有两种方法,独立式按键和矩阵式键盘。独立式按键各键相独立,每个按键各接入一根输入线

16、,只要检测输入线的电平就可以识别按键状态。这种方法电路配置灵活,软件结构简单,但每个按键需占用一根输入口。由于该.设计方案 IO 资源浪费大。故此方法只适用于按键少或其他控制功能很简单的场合。由于本设计中的按键只有 3 个,考虑系统可靠性和键盘设计的简单所以采用独立式按键。本系统的按键电路如图 3-6 所示:图 3-6 独立按键电路 按键按下是呈低电平,我们采用软件消抖来减少对的单片机影响。3.4 LED 指示灯电路 图 3-7 LED 灯指示电路 当 k2 键按下时,录入模式指示灯 red 亮;当 k1 键按下时,识别模式指示灯 green亮。3.5 蜂鸣器电路 图 3-8 蜂鸣器电路 3.

17、6 指纹传感器模块 1)指纹模块电路如下所示:.图 3-9 指纹识别模块 指纹模块里面主要是 DSP 芯片,型号为 PS1802,加上外面的 CMOS 芯片,CMOS芯片主要是对指纹进行“照相”,生成指纹特征,如图 3-8 所示就是一个指纹模板,录入两次这样的指纹特征就能生成一个指纹模板。具体的工作过程是:扫描指纹(录入图像)、生成特征、合成模板(建立一个指纹库文件,成功录入一个指纹)。图 3-10 指纹模板 指纹模板就是“照一次相”,指纹模块里面的 CMOS 芯片采集一次指纹信息,然后进行模糊处理生成 0 和 1 两种记录信息,存入指纹模块的 FLASH 芯片里面。当切换到识别模式的时候,指

18、纹模块就会先让 CMOS 芯片采集一次指纹,然后和FLASH 芯片的数据进行对比。看是不是存在,如果存在就能返回是几号指纹。这样我们就能通过单片机或者电脑进行指纹识别与登记了。2)指纹传感器模块实物图 指纹模块型号是:FM-180,此模块上里面包含了:1、光学头 2、通信连接线 3、DSP 芯片(在模块里面).4、稳压芯片 5、FLASH 芯片 6、CMSO 传感器(在模块里面)等部件组成。图 3-11 指纹传感器模块实物图 第四章 软件程序设计 该设计主要通过设定的 3 个按键来实现一定的功能,3 个按键分别为模式切换(识别模式和录入指纹模式)、指纹录入、删除所有指纹。41 程序流程图 4.

19、1.1程序主流程图(1)指纹录入:先进行录入模式,然后按一下录入指纹,灯会闪烁,录入成功一次,蜂鸣器响一次,这时候拿开手指,1 秒放入同一个手指,会再录入一次,如果两次都成功,就成功录入了一个指纹。蜂鸣器会响两次,同时显示录入指纹成功。如果不成功就会显示录入失败。录入完成后,可以进入识别模式,或者接着录入下一个指纹。录入完成,按一次指纹转换,进入指纹识别开锁模式。单片机主程序流程设计:1、光学头 2、通信连接线 3、DSP 芯片 4、稳压芯片 5、FLASH 芯片 6、CMOS 传感器.4.2 系统关键代码 引脚使用:sbit relay=P14;/继电器引脚 sbit buzzer=P15;

20、/蜂鸣器引脚 sbit red=P27;/录入模式指示灯 在板子靠近单片机处 sbit green=P20;/识别模式指示灯 在板子远离单片机处 sbit k2=P34;/录入一次指纹 sbit k1=P33;/模式识别转换 sbit k3=P32;/清除所有指纹(10 个指纹清除)部分主函数代码:void main(void)/主函数 unsigned char i=0;ET0=1;/定时器 0 开中断 TL0=0 x97;/17ms 的初值 TH0=0 xBD;delay1ms(5);LcdRw=0;/只对液晶进行写操作,不进行读操作 delay1ms(5);LCD_Initial();/

21、液晶初始化 delay1ms(5);GotoXY(0,0);/x,y.Print(Identify);/串口初始化 SCON=0 x50;/UART方式 1:8 位 UART;REN=1:允许接收 PCON=0 x00;/SMOD=0:波特率不加倍 TMOD=0 x21;/T1 方式 2,用于 UART 波特率 TH1=0 xFD;TL1=0 xFD;/UART波特率设置:9600 TR1=1;TR0=1;/开定时器 0 IT0=0;/中断 0 低电平中断 IT1=1;/中断 1 低电平中断 EX0=1;/开中断 0 EX1=1;/开中断 1 EA=1;mode();/看当前是什么模式 for

22、(i=0;i6;i+)/开始握手 6 次,如果没有一次成功,表示模块通信不正常。只要成功就跳出此循环 if(VefPSW()/与模块握手通过,绿灯亮起。进入识别模式 green=0;/读一次 buzzer=0;shownum(0);delay1ms(300);buzzer=1;break;else red=1;green=1;break;while(1)if(k2=0)/录入一个指纹 delay1ms(10);if(k2=0)/如果仍为低电平,表示按键有效 .while(k2=0);/等待松手 if(VefPSW()=1&modeflag=1&SaveNumber10)/与模块握手通过 if(

23、enroll()=1)/采集两次,生成 1 个指纹模板成功 if(savefingure(SaveNumber+1)=1)/保存也成功 SaveNumber+;/加一次 shownum(SaveNumber);else buzzer=0;for(i=0;i=1&searchnum=162)/最多是162个指纹 shownum(searchnum);/蜂鸣器响一声 relay=0;buzzer=0;delay1ms(100);buzzer=1;for(i=0;i20;i+)delay1ms(150);.relay=1;if(searchnum=255)/不正确的指纹 蜂鸣器响三声 shownum

24、(0);buzzer=0;delay1ms(100);buzzer=1;delay1ms(100);buzzer=0;delay1ms(100);buzzer=1;delay1ms(100);buzzer=0;delay1ms(100);buzzer=1;delay1ms(100);if(clearallflag=1)clearallflag=0;Clear_All();red=0;/红色灯亮 green=1;/蜂鸣器长响一次,表示清除所有指纹结束 modeflag=1;/进入录入指纹模式 GotoXY(0,0);/x,y Print(Input);shownum(0);buzzer=0;de

25、lay1ms(800);buzzer=1;SaveNumber=0;if(changeflag=1)mode();/显示当前模式 changeflag=0;/while(1)结束/void int0(void)interrupt 0/中断 0,清除所有指纹 if(k3=0)/清除所有指纹 delay1ms(10);if(k3=0)/如果仍为低电平,表示按键有效 while(k3=0);/等待松手 clearallflag=1;changeflag=1;.void Timer0(void)interrupt 1/定时器 0 中断函数 TL0=0 x97;TH0=0 xBD;clk0+;/延时 1

26、7ms void int1(void)interrupt 2/中断 1,模式转换 if(k1=0)/模式转换 其中用 modeflag 来标志,默认从第 1 个指纹开始录入 delay1ms(10);if(k1=0)/如果仍为低电平,表示按键有效 while(k1=0);/等待松手 modeflag=modeflag;/0 表示录入指纹 1 表示识别指纹 changeflag=1;/模式发生了转换 第五章 调试 完成了硬件的设计、制作和软件编程之后,要使系统能够按设计正常运行,必须进行硬件调试和软件调试。5.1 硬件调试 硬件调试的主要任务是排除硬件故障,其中包括设计错误和工艺性故障。(1)在

27、电路的电源焊接一个电源指示灯,判断电路中通电是否正常。(2)将电路中的电源线布置在通用板的四周,这样使用电源很方便,减少干扰,同时可以减少短路故障发生的可能。(3)元器件合理布局,且尽量减少占用板子的面积,力争做到节俭。特别是单片机的晶振尽量靠近单片机,减少干扰。(4)液晶的焊接注意方向,且调节背光的电位器不可以少。5.2 软件调试 软件调试的任务是利用开发工具进行在线仿真调试,发现和纠正程序错误,同时也能发现硬件故障。程序的调试应一个模块一个模块地进行,首先单独调试各功能子程序,检验程序是否能够实现预期的功能,接口电路的控制是否正常等;最后逐步将各子程序连接起来总调。联调需要注意的是,各程序

28、模块间能否正确传递参数,特别要注意各子程序的现场保护与恢复。本设计主要有:1 指纹识别传感器图像采集模块.2 单片机图像处理 3 按键模块和指示灯模块 4 指纹液晶显示和蜂鸣器、继电器模块 不断地对单片机下程序,观看调试结果。参考文献 1 河桥,段清明,邱春玲.单片机原理及应用.北京:中国铁道出版社,2007.12 2 冯星奎,李林艳,颜祖泉.一种新的指纹图像细化算法.中国图像图形学报,1999,4(10)835-838.3吕凤军.数字图象处理编程入门一一做一个自己的 Photoshop.北京:清华大学出版社,1999.4 刘文星,王雄沂,母国光.纹线跟踪及其在细化指纹后处理中的应用.光电子傲

29、光,2002,13(2):184-187.5 刘家锋,唐降龙,赵泉.一个基于特征点匹配的联机指纹鉴别系统.哈尔滨工业大学学报,2002.34(1):132-136 6 简兵,庄镇泉等.基于脊线跟踪的指纹图细节提取算法.电路与系统学报,2001 7 刘旭,田捷.自动指纹识别算法在嵌入式系统的实现 J.计算机工程与应用,2002.8 周毅,等著.基于 SPI 协议的实现,计算机仿真.2003.9 窦振中.单片机外围器件实用手册(存储器分册)北京:北京航空航天大学出版社,20O0 10 李华 MCS-51 系列单片机实用接口技术 北京:北京航空航天大学出版社,1998 11 张培仁,孙占辉,张村峰基

30、于 c 语言编程 MCS 一 51 单片机原理与应用M北京:清华大学出版社,2003 .附件 2 程序清单#include#include#includelcd1602.h sbit relay=P14;/继电器引脚 sbit buzzer=P15;/蜂鸣器引脚 sbit red=P27;/录入模式指示灯 在板子靠近单片机处 sbit green=P20;/识别模式指示灯 在板子远离单片机处 sbit k2=P34;/录入一次指纹 sbit k1=P33;/模式识别转换 sbit k3=P32;/清除所有指纹(10 个指纹清除)#define Max_User 10#define error

31、2 unsigned char SaveNumber=0,searchnum=0;unsigned int SearchNumber=0;unsigned int clk0=0;unsigned char str3=0,0,0;unsigned char code Identify16=Lock:Idenfity;unsigned char code Input16 =Lock:Input ;bit modeflag=0,clearallflag=0,changeflag=0;/默认为识别模式/常用指令定义/Verify Password :验证设备握手口令 unsigned char cod

32、e VPWD16=16,0X01,0Xff,0 xff,0 xff,0 xff,0 x01,0,7,0 x13,0 x00,0 x00,0 x00,0 x00,0 x00,0 x1b;/回送 12 个/设置设备握手口令 unsigned char code STWD16=16,0X01,0Xff,0 xff,0 xff,0 xff,0 x01,0,7,0 x12,0 x00,0 x00,0 x00,0 x00,0 x00,0 x1a;/回送 12 个/GetImage :探测手指并从传感器上读入图像 unsigned char code GIMG14=12,0X01,0Xff,0 xff,0

33、xff,0 xff,0 x01,0,3,1,0 x00,0 x05;/回送 12 个/Gen Templet1 :根据原始图像生成指纹特征 1 unsigned char code GENT114=13,0X01,0Xff,0 xff,0 xff,0 xff,0 x01,0,4,2,1,0 x00,0 x08;/回送 12 个/Gen Templet2 :根据原始图像生成指纹特征 2 unsigned char code.GENT214=13,0X01,0Xff,0 xff,0 xff,0 xff,0 x01,0,4,2,2,0 x00,0 x09;/回送 12 个 /Search Finge

34、r :以 CharBufferA 或 CharBufferB 中的特征文件搜索整个或部分指纹库 unsigned char code SEAT18=17,0X01,0Xff,0 xff,0 xff,0 xff,0 x01,0,8,4,1,0,0,0,0 x65,0 x00,0 x73;/回送 16 个/Merge Templet ;将 CharBufferA与 CharBufferB 中的特征文件合并生成模板,结果存于 ModelBuffer。unsigned char code MERG14=12,0X01,0Xff,0 xff,0 xff,0 xff,0 x01,0,3,5,0 x00,0

35、 x09;/回送 12 个 /Store Templet :将 ModelBuffer 中的文件储存到 flash 指纹库中 unsigned char code STOR16=15,0X01,0Xff,0 xff,0 xff,0 xff,0 x01,0,6,6,2,0 x00,0 x00,0 x00,0 x0f;/回送 12 个/Read Note unsigned char code RDNT14=13,0X01,0Xff,0 xff,0 xff,0 xff,0 x01,0,4,0 x19,0,0 x00,0 x1e;/Clear Note unsigned char code DENT4

36、6=45,0X01,0Xff,0 xff,0 xff,0 xff,0 x01,0,36,0 x18,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 x00,0 x3d;/DEL one templet unsigned char code DELE_one16=16,0X01,0Xff,0 xff,0 xff,0 xff,0 x01,0,7,0 x0c,0 x00,0 x00,0,1,0 x00,0 x15;/DEL templet ;清空指纹库 unsigned char code DELE_all12=

37、12,0X01,0Xff,0 xff,0 xff,0 xff,0 x01,0,3,0 x0d,0 x00,0 x11;/常用指令定义-结束/宏定义/#define FALSE 0#define TURE 1 /状态定义表#define on 1#define off 0#define MAX_NUMBER 63#define _Nop()_nop_()/宏定义-结束/unsigned char FifoNumber=0;xdata unsigned char FIFOMAX_NUMBER+1=0;./*1 毫秒延时程序*/void delay1ms(unsigned int t)unsigne

38、d int i,j;for(i=0;it;i+)for(j=0;j=6)checksum=FIFOcount+checksum;/计算校验和 if(count=8)package=FIFO7*0X100+FIFO8;/计算包长度 stop=TURE;if(stop)if(count=package+8)checksum=checksum-FIFOcount-1;if(checksum!=FIFOcount&0 xff)result=FALSE;/校验失败,置结果标志为0 else result=TURE;flag=0;break;/do的内容-结束/while(clk0=MaxTime)&(c

39、ount=2)/如果不成功,再验证一次,如果两次不成功,返回失败 return(0);void Clear_All(void)/清空指纹库 delay1ms(200);Command(DELE_all,50);/清空指纹库 unsigned char ImgProcess(unsigned char BUFID)/发获取图像并生成特征文件,存入 BUFID 中/输入参数为缓冲区号 if(Command(GIMG,89)&(FifoNumber=11)&(FIFO9=0 x00)if(BUFID=1)if(Command(GENT1,60)&(FifoNumber=11)&(FIFO9=0 x0

40、0)return 1;else return 0;else if(BUFID=2)if(Command(GENT2,60)&(FifoNumber=11)&(FIFO9=0 x00)return 1;else return 0;.else return 0;return 0;bit Searchfinger(void)/搜索指纹(发送搜索命令、以及根据返回值确定是否存在)if(Command(SEAT,60)&(FifoNumber=15)&(FIFO9=0 x00)/搜索到指纹 SearchNumber=FIFO10*0 x100+FIFO11;/搜索到的页码 /MatchScore=FIF

41、O12*0 x100+FIFO13 可以在此计算得分,从而进行安全级别设定,本程序忽略 return 1;else return 0;unsigned char search(void)/搜索用户 unsigned char SearchBuf=0,i=0;while(i20)if(ImgProcess(1)=1)/首先读入一次指纹 SearchBuf=Searchfinger();/进行指纹比对,如果搜索到,返回搜索到的指纹序号 if(SearchBuf=1)return SearchNumber;else return 255;/表示搜索到的指纹不正确 .i+;return 0;bit s

42、avefingure(unsigned char ID)/保存指纹 unsigned char i=0;/现在开始进行存储指纹模板的操作 for(i=0;i=40)/如果采集了40次,还不成功,直接采集失败,直接退出 enroll 函数返回 0 return(0);/采集第一个特征成功 .count=0;buzzer=0;delay1ms(100);buzzer=1;delay1ms(2000);/延时 2S 开始采集下一个特征 /开始采集第二个特征 while(1)temp=ImgProcess(2);/生成特征 2 if(temp=1)/生成特征文件 2 成功 if(Command(MER

43、G,40)&(FifoNumber=11)&(FIFO9=0 x00)=0 )/合并不成功返回 0,成功返回 1 return 0;else/特征文件合并生成模板,结果存于 ModelBuffer buzzer=0;delay1ms(100);buzzer=1;delay1ms(100);buzzer=0;delay1ms(100);/响两声,表示生成一个模板成功 buzzer=1;return 1;else if(temp=1)/采集指纹没有成功 count+;if(count=25)return(0);.void shownum(unsigned char dat)unsigned cha

44、r numdat=0;numdat=dat;GotoXY(0,1);/x,y Print(Finger:);GotoXY(0,8);/x,y str0=0 x30+numdat/10;str1=0 x30+numdat%10;Print(str);void mode(void)if(modeflag=0)GotoXY(0,0);/x,y Print(Identify);green=0;red=1;else GotoXY(0,0);/x,y Print(Input);red=0;green=1;shownum(0);void main(void)/主函数 unsigned char i=0;ET

45、0=1;/定时器 0 开中断 TL0=0 x97;/17ms 的初值 TH0=0 xBD;delay1ms(5);LcdRw=0;/只对液晶进行写操作,不进行读操作 delay1ms(5);LCD_Initial();/液晶初始化 delay1ms(5);.GotoXY(0,0);/x,y Print(Identify);/串口初始化 SCON=0 x50;/UART方式 1:8 位 UART;REN=1:允许接收 PCON=0 x00;/SMOD=0:波特率不加倍 TMOD=0 x21;/T1 方式 2,用于 UART 波特率 TH1=0 xFD;TL1=0 xFD;/UART波特率设置:9

46、600 TR1=1;TR0=1;/开定时器 0 IT0=0;/中断 0 低电平中断 IT1=1;/中断 1 低电平中断 EX0=1;/开中断 0 EX1=1;/开中断 1 EA=1;mode();/看当前是什么模式 for(i=0;i6;i+)/开始握手 6 次,如果没有一次成功,表示模块通信不正常。只要成功就跳出此循环 if(VefPSW()/与模块握手通过,绿灯亮起。进入识别模式 green=0;/读一次 buzzer=0;shownum(0);delay1ms(300);buzzer=1;break;else red=1;green=1;break;while(1)if(k2=0)/录入

47、一个指纹 delay1ms(10);.if(k2=0)/如果仍为低电平,表示按键有效 while(k2=0);/等待松手 if(VefPSW()=1&modeflag=1&SaveNumber10)/与模块握手通过 if(enroll()=1)/采集两次,生成 1 个指纹模板成功 if(savefingure(SaveNumber+1)=1)/保存也成功 SaveNumber+;/加一次 shownum(SaveNumber);else buzzer=0;for(i=0;i=1&searchnum=162)/最多是162个指纹 shownum(searchnum);/蜂鸣器响一声 relay=

48、0;buzzer=0;delay1ms(100);buzzer=1;for(i=0;i20;i+).delay1ms(150);relay=1;if(searchnum=255)/不正确的指纹 蜂鸣器响三声 shownum(0);buzzer=0;delay1ms(100);buzzer=1;delay1ms(100);buzzer=0;delay1ms(100);buzzer=1;delay1ms(100);buzzer=0;delay1ms(100);buzzer=1;delay1ms(100);if(clearallflag=1)clearallflag=0;Clear_All();re

49、d=0;/红色灯亮 green=1;/蜂鸣器长响一次,表示清除所有指纹结束 modeflag=1;/进入录入指纹模式 GotoXY(0,0);/x,y Print(Input);shownum(0);buzzer=0;delay1ms(800);buzzer=1;SaveNumber=0;if(changeflag=1)mode();/显示当前模式 changeflag=0;/while(1)结束/void int0(void)interrupt 0/中断 0,清除所有指纹 if(k3=0)/清除所有指纹 delay1ms(10);if(k3=0)/如果仍为低电平,表示按键有效 while(k

50、3=0);/等待松手 .clearallflag=1;changeflag=1;void Timer0(void)interrupt 1/定时器 0 中断函数 TL0=0 x97;TH0=0 xBD;clk0+;/延时 17ms void int1(void)interrupt 2/中断 1,模式转换 if(k1=0)/模式转换 其中用 modeflag 来标志,默认从第 1 个指纹开始录入 delay1ms(10);if(k1=0)/如果仍为低电平,表示按键有效 while(k1=0);/等待松手 modeflag=modeflag;/0 表示录入指纹 1 表示识别指纹 changeflag

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 应用文书 > 工作报告

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁