《基于单片机的指纹识别系统设计.doc》由会员分享,可在线阅读,更多相关《基于单片机的指纹识别系统设计.doc(30页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、摘 要随着科学技术的发展,人们的安全意识也越来越强,因为指纹具有唯一性和终生不变性,所以指纹识别成为代替传统身份识别最安全、可靠的方法之一。本设计基于飞思卡尔Kinetis K60N512系列单片机,指纹识别模块选择的是杭州城章科技的R305F模块,该模块带有高性能的DSP芯片,该DSP芯片内嵌完整的指纹识别算法和协议,具有指纹采集,指纹比对,指纹搜索和存储等功能。模块与单片机通过串口进行通讯。指纹识别系统通过CH340G芯片实现TTL电平向RS-232电平的转换,进而实现与PC机的交互,PC机端经上位机显示指纹识别的结果。论文中介绍了基本算法的实现流程,同时介绍了K60N512芯片看门狗模块
2、的基本原理以及启动流程等。结果说明,该套指纹识别系统算法性能可靠,指纹识别率高,可以实现预先制定的目标,完成指纹识别的功能。 关键词:指纹识别;飞思卡尔单片机;串口AbstractWith the development of science and technology, peoples safety consciousness is becoming more and more strong, the fingerprint has the uniqueness and invariance for life, so the fingerprint identification is in
3、stead of the traditional identification is one of the most safe and reliable methods.This design is based on Freescale Kinetis K60N512 series microcontroller, fingerprint identification module is the product of Growup company, the module with high performance DSP chip, and the DSP chip with complete
4、 fingerprint identification algorithm and protocol, fingerprints acquisition, fingerprints search and storage, and other functions.Module and microcontroller communication through the serial port.Fingerprint identification system use CH340G chip change TTL level to RS-232 level, and then realize the
5、 interaction with a PC, the PC shows the result of fingerprint identification.The thesis introduces the basic algorithm implementation process, at the same time, this article introduces the basic principle of the watchdog module inside K60N512 chip and the start process.Results show that the algorit
6、hm of fingerprint identification system is reliable, fingerprint recognition rate is high, and can achieve target of fingerprint identification.Key Words: Fingerprint identification,Freescale Kinetis,UART目 录摘 要IAbstractII1 绪论11.1 选题背景和研究意义11.2 国内外研究现状12 指纹识别的基本原理12.1 指纹图像的采集12.2 指纹图像预处理22.3 指纹图像特征点的
7、提取42.4 指纹图像伪细节点的处理42.5 指纹特征匹配52.6 评价指纹识别系统算法性能的指标53 课题的内容和目标63.1 指纹识别系统的硬件设计63.2 本设计所使用单片机简介63.3 本设计所使用的指纹模块简介74 主程序分析74.1 Cotex-M4内核寄存器简介84.2 Cotex-M4中断机制84.3 K60N512启动代码分析94.4 K60N512看门狗程序分析114.5 Flash软件构件简介114.6 Kinetis 的FlexBus模块简介114.7 K60N512异步接收器/发送器(UART)简介114.8 指纹模块指令介绍124.8.1 指纹图像获取124.8.2
8、 生成特征154.8.3 生成模板154.8.4 储存模板164.8.5 高速搜索164.9 补充说明17结 论18致 谢19参考文献20学习文档 仅供参考1 绪论1.1 选题背景和研究意义随着我国经济的迅速发展,人民的生活水平得到了显著的提高,人们对于自己的隐私也愈发重视。传统的电子密码锁等设备在高速发展的科学技术的冲击下显得力不从心,用户隐私很大程度上存在泄露的风险。由于每个人的遗传基因不同,指纹也不相同,指纹识别技术的作用也因此越来越受到人们的重视。指纹是人身体上的一部分,是人所固有的生理特征,不用记忆,也不存在忘带的风险,而且每个人的指纹形状终身不变。所以指纹作为个人身份的标记是再合适
9、不过的了。1.2 国内外研究现状早期的指纹识别是以人工的方式进行的,由于指纹结构的复杂性以及对指纹识别要求的严格性,导致人工识别指纹工作难度大、速度慢和识别准确率受到制约,远远不能适应实际工作的需要。电脑技术的诞生与发展,为复杂的科学计算和指纹自动识别提供了可能,20世纪70年代,美、日等发达国家开始先后研究指纹识别系统。我国自动指纹识别系统的研究开发始于20世纪80年代,北京大学信息中心、清华大学自动化系、北京邮电大学、中科院以及长春光机所等都在此领域做了一定的工作,且取得了一定的成果,其中较为突出的是清华大学自动化系和北京大学信息中心两家1。当然,与国外发达国家相比,我国在自动指纹识别技术
10、的研究上还与之存在很大的差距。指纹录入设备的质量不够高,自动指纹识别算法的性能还不够好。加强这方面的研究还是很有必要的。2 指纹识别的基本原理 指纹图像的采集人的皮肤由表皮、真皮和皮下组织三部分组成。指纹指的是表皮上突起的纹线,有斗型、弓型和箕型三种基本类型。获得良好的指纹图像是进行指纹识别的前提,目前光获取指纹图像的方法主要有光学技术、硅技术(CMOS技术)和超声波技术。本设计中使用的指纹传感器基于硅技术,硅技术的优点是可以在较小的面积上获得较好的指纹图像相对于光学技术,缺点是容易受到外部条件的干扰,可靠性相对较差。 指纹图像预处理图像预处理阶段是指纹识别的第一个阶段,图像预处理阶段比较典型
11、的过程主要有图像质量评估、分割、增强、二值化和细化。指纹图像预处理的流程图如图2.1所示。图2.1 指纹图像预处理的流程图图像质量评估的目的主要是完成对传感器采集到的指纹图像的总体质量评价,对于低质量的指纹图像直接拒绝。对于质量到达要求的指纹图像才送给之后的处理环节,从而防止了不必要的运算。分割的目的是将前景与背景分割开来。分割操作中应该尽可能去除无效区域,保留有效区域。有了分割操作,指纹图像预处理的时间可以大大缩短。增强的目的主要是为了消除噪声的干扰,提高指纹图像纹线结构的清晰度。Gabor滤波的方法是一种比较理想的指纹图像增强算法,Gabor滤波器可以同时在空间域和频率域上获得最正确的分辨
12、率,具有良好的方向选择性和带通性。二值化是将原来的灰度图变换为黑白两种灰阶的图像,二值化阶段阈值的选择相当重要,阈值的选择有双峰法、P参数法、大津法(Otsu法或最大类间方差法)、最大熵阈值法和迭代法最正确阈值法等。细化阶段主要是将二值化之后指纹图像的脊线宽度降低为单个像素宽度,从而得到细化了的指纹图像。细化算法按迭代方式的不同可以分为串行算法和并行算法。预处理阶段的每个环节是紧密相关的,各个环节相互配合才可能获得高质量的指纹图像,从而方便之后特征点的提取,为之后指纹匹配奠定良好的基础。正常的指纹图像如图所示,二值化之后的指纹图像如图所示,细化之后的指纹图像如图所示。 图2.2 正常的指纹图像
13、 图2.3 二值化之后的指纹图像图2.4 细化之后的指纹图像2.3 指纹图像特征点的提取特征点提取的目的在于通过预先制定的算法检测指纹图像中奇异点和细节点这两类特征点的数量以及每个特征点的类型、位置和所在区域的纹线方向。奇异点指的是指纹图像的中心点和三角点。细节点指的是端点(Endpoint)、叉点(Bifurcation)、孤点(Dot)、环点(Loop)、短纹(short Ridge)等。一般的指纹图像提取的特征在10-100个之间,多数文献认为至少应该有12个特征点才可以进行匹配。8邻域编码纹线跟踪算法是一种常用的特征点提取算法。2.4 指纹图像伪细节点的处理伪细节点的处理一般分为两类:
14、一种在特征点提取之前,对预处理之后的指纹图像进行平滑、去除毛刺连接断纹等操作,之后提取特征作为真正的特征;另一种是特征提取之后,根据特征之间的相互关系,尽可能的识别伪特征点并滤除它们。应用以下两条真伪细节点的量化判断准则判断真伪细节点:(1) 端点不应该与其它细节点相连;(2) 分叉点不应该与其他的端点和分叉点相连。2.5 指纹特征匹配目前,指纹匹配的相关方法主要有图像相关匹配、纹理特征匹配、纹线匹配以及细节点匹配等。前两者匹配速度快,但由于忽略了指纹的细节特征,匹配准确性不高。细节点匹配算法的难点在于:(1) 细节点提取过程会产生虚假特征点和丧失真实细节点;(2) 指纹图像普遍存在平移和旋转
15、;(3) 指纹图像之间重合区域小,相同手指指纹的细节点集之间对应关系难以确 定;(4) 图像采集过程中,由于非线性映射、手指按压力度不均造成了扭转。2.6 评价指纹识别系统算法性能的指标评价指纹识别系统算法的性能指标有3个,分别为拒识率(FRR)、误识率(FAR)和正确识别率(CR)。误识率(FAR)是指在已提取的特征点的指纹样本库中,不同指纹匹配分数大于给定阈值判断为匹配的比率。其计算如下式: (2.1)拒识率(FRR)是指在已提取的特征点的指纹样本库中,相同指纹匹配分数小于给定阈值误判为不匹配的比率。其计算如下式: (2.2)正确识别率(CR)计算如下式: (2.3)式中 :可以看出,FR
16、R与FAR呈现反比例关系,随着匹配阈值的降低,拒识率(FRR)相应降低,误识率(FAR)升高,反之亦然。所以应该充分考虑系统的需要,在拒识率(FRR)与误识率(FAR)之间找到一个最正确平衡点。学习文档 仅供参考3 课题的内容和目标 指纹识别系统的硬件设计系统的结构框图如图3.1所示,该系统主要完成指纹的采集、处理和匹配等操。主要有以下几个模块,指纹采集模块,K60N512单片机模块以及显示模块等。图3.1 系统的结构框图 本设计所使用单片机简介在嵌入式设备处理器的市场争夺中,ARM系列处理器凭借其小体积、低功耗、低成本和高性能,几乎垄断了该市场。本设计所使用的飞思卡尔K60N512单片机便是
17、基于ARM Cotex-M4内核,Cotex-M4内核面向数字信号控制市场,具有高效并且易于使用的控制和信号处理能力。Cote-M4属于ARMv7架构,该架构采用了Thumb-2技术,该项技术比纯32位代码少使用31%的内存,减少了系统开销。同时,Cotex-M4内核具有一个单时钟周期乘法累加(MAC)单元、优化的单指令多数据(SIMD)指令、饱和运算指令和一个可选的单精度浮点运算单元(FPU)。此外,该内核提供最正确的代码密度和一个嵌套向量中断控制器,可以出色的完成中断处理。Cotex-M4内核框图如图所示。图3.2 Cotex-M4内核框图 本设计所使用的指纹模块简介指纹模块选择了城章科技
18、的R305F模块,该产品是该公司2011年推出的最新产品。指纹模块采用了瑞典FingerPrint Card公司的FPC1011F3型指纹传感器,这款传感器利用了反射式探测技术,成像质量高,对干湿手指都具有良好的适应性。FPC1011F3是一款电容式传感器,传感器分辨率为363dpi,内置8位数模转换器,它通过SPI接口与模块上面的高性能DSP芯片相连。高性能的DSP芯片内嵌完整的指纹识别算法和协议,具有指纹采集,指纹比对,指纹搜索和存储等功能。模块通过串口与单片机进行通讯,数据发送端接上位机的数据接收端,数据接收端接上位机的数据发送端。本系统通过单片机与指纹模块的通信实现了自动指纹识别的功能
19、。首先将个人指纹信息录入指纹模块,之后指纹传感器采集指纹信息且与存储在指纹模块里面的指纹模板进行比对,假设找到指纹,返回该指纹所对应的信息,送LCD显示,假设未找到,提示未找到信息。4 主程序分析4.1 Cotex-M4内核寄存器简介Cotex-M4的寄存器有:R0R15。其中R0R12是32位通用寄存器,其中R0R7又被称为低组寄存器,R8R12被称为高组寄存器。32位的Thumb-2指令可以访问所有通用寄存器。R13:堆栈指针寄存器(SP Stack Pointer),它分为两部分,一个叫做进程堆栈指针PSP(Process Stack Pointer),一个叫做主堆栈指针MSP(Mast
20、er Stack Pointe),但在同一时刻只用到了其中的一个,配置控制寄存器(CONTROL)的CONTROL1位来选择是使用PSP还是MSP。R14:链接寄存器(Link Register),子程序调用、函数调用以及异常处理时,由R14存储返回地址,复位时R14里面的值为0xffffffff。R15:程序计数寄存器(Program Counter),指向当前程序的地址,修改它的值,就可以改变程序的执行流。同时Cotex-M4还在内核水平上搭载了假设干特殊功能寄存器,包括程序状态字寄存器组(PSRs或xPSR)、中断屏蔽寄存器组(PRIMASK、FAULTMASK和BASEPRI)和控制寄
21、存器(CONTROL),且只能用MSR和MRS指令访问它们。4.2 Cotex-M4中断机制Cotex-M4在内核水平上搭载了一个异常响应系统NVIC,支持为数众多的系统异常和外部中断。NVIC位于内核内部,通过私有外设总线访问。编号为015的对应系统异常,编号16及以上为外部中断。与经典的ARM7TDMI,ARM926EJ-S相比较,在内核层次实现了向量中断控制器。当发生了异常并且要响应时,Cotex-M4需要定位其服务例程的入口地址,这些入口地址存储在异常向量表中。通常中断程序的处理流程为:关闭系统总中断、开启外设模块并使能该外设模块中断、配置NVIC模块中的中断寄存器以及开总中断等几个过
22、程。NVIC会根据优先级的设置来控制抢占与嵌套行为。因此,在某个异常正在响应时,所有优先级不高于它的异常都不能抢占之,而且它也不能自己抢占自己。如果一个已经被挂起的中断被使能,NVIC会根据优先级来决定是否服务这个中断。当然,一个被禁止的中断被触发挂起,无论怎样的优先级,NVIC都不会服务它。高优先级中断可以抢占并挂起低优先级中断,同时将低优先级中断上下文保存于系统中断栈中,以便下次系统恢复时继续执行。当一个高优先级中断执行完以后,系统会在挂起的中断中选择一个优先级最高的中断继续执行,这个过程由Cotex-M4的NVIC自动完成,由于中断只使用中断栈,每嵌套一级中断,至少需要保存32个字节内核
23、寄存器的内容于堆栈空间,加之中断服程序(ISR)运行过程中也需要利用中断栈空间,系统中出现较深的嵌套中断时,系统对中断栈空间的需求较高,所以中断环境初始化时,应视最深中断深度,合理分配中断栈空间大小。Cotex-M4从一个中断源发出中断请求信号到硬件响应中断请求的延迟时间固定位12个周期。这12个周期内系统执行入栈和取栈等一系列操作,假设中断信号连续发生,Cotex-M4可优化中断与中断间的硬件响应间隔时间至6个周期2。4.3 K60N512启动代码分析启动代码用来完成对系统的初始化,它通常包含以下几部分:中断向量表定义,地址重映射及中断向量表的复制,堆栈初始化,系统时钟频率设置,中断寄存器的
24、初始化和进入用户程序等部分3。K60N512上电时地址在0x00000000处,系统上电之后,从0x00000000处取堆栈指针到SP,之后从0x00000004处取程序指针到PC,然后跳转至PC指针所指向的地址开始执行程序。K60N512芯片可以在RAM和Flash中执行代码,在RAM中执行速度更快,因此通常将中断向量表和数据复制到RAM空间中。BSS段是指用于存放程序中未初始化的全局变量和静态变量的一块内存区域,数据段存放初始化后了的全局变量和静态变量。芯片主时钟是利用MCG模块中的PLL模块,倍频50MHZ有源晶振得到的。Kinetis芯片内部存在3种不同的时钟:内核时钟,总线时钟和fl
25、ash时钟。其中内核时钟是基本时钟,其他时钟均从内核时钟分频得到。MCG模块为MCU提供了多种时钟源,其内部包含一个锁频环(FLL)和一个锁相环(PLL),FLL接受内部或外部的参考时钟源,PLL接受外部参考时钟源,外部时钟参考源来自OSC模块。该部分启动代码由飞思卡尔公司提供,完成了芯片的基本初始化。K60N512芯片的启动程序流程图如图4.1所示。从流程图中可以看到芯片初始化的基本过程,启动代码的最终目的是跳转到main函数,在main函数里面加载关于指纹识别的相关操作代码,可以说这段代码的存在降低了开发的难度。 启动程序流程图4.4 K60N512看门狗程序分析本设计中采用了普通看门狗,
26、以确保程序跑飞之后及时复位,增加了系统的可靠性。K60N512的看门狗寄存器是只写一次寄存器,即上电后只能对其进行一次写入,假设要多次写入,必须先解锁看门狗。解锁看门狗是向看门狗的解锁寄存器(WDOG_UNLOCK)连续写入0xC520和0xD928,两次写入时间间隔不能超过20个时钟周期,否则解锁不成功。解锁看门狗后通过配置看门狗状态控制寄存器(WDOG_STCTRLH)的WDOGEN位来关闭看门狗。使能看门狗以后,会在溢出时间超时之后产生看门狗复位。程序中必须在溢出超时前进行喂狗操作,喂狗之后看门狗模块重新计时,MK60N512的喂狗操作是向看门狗刷新寄存器(WDOG_REFRESH)连续
27、写入0xB480和0xA602,两次写入时间间隔同样不能超过20个时钟周期。看门狗的溢出时间通过设置WDOG_TOVALH和WDOG_TOVALL寄存器实现。 Flash软件构件简介Flash存储器的特点是断电后保持数据,微控制器使用Flash存储器来存储代码和数据,有时也将系统运行状态参数保存在Flash中。K60512内部集成512K的Flash,分为256个扇区,Flash存储器的特点是只能将数据从1写为0,不能从0写为1,写入的最小单位为一个字节,擦出的最小单位一个扇区(2K)。 Flash存储器内部集成Flash控制器,控制器可以接收并执行命令。 Kinetis 的FlexBus模块
28、简介FlexBus片选地址寄存器(FB_CSARn)用来配置相应外部片选信号FB_CSn的地址范围基地址, FB_CSn为低电平时选中相应的外设。片选控制寄存器(FB_CSMRn)里面的FB_CSCRPS端口大小与FB_CSCRBLS对齐方式相配合,决定FlexBus数据总线的端口分配和大小。引脚复用功能控制寄存器(FB_CSPMCR),配置该寄存器设置FlexBus引脚复用功能。 K60N512异步接收器/发送器(UART)简介UART接收器可以容纳8、9或10位数据字符。UARTx_c2RIE位和UARTx_c2TIE位的设置决定是否允许接受和发送中断,假设使能中断,必须首先实现中断服务程
29、序。设置UARTx_C2RE位和UARTx_C2TE位使能UART接收机和发送机。UARTx_C1M位、UARTx_C1PE位和UARTx_C4M10位的状态决定数据字符的长度。UARTx_S2MSBF位设置为1时,接收器操作使得在起始位后面接收的第一位是数据字的最高有效位。奇偶校验位该位禁用的情况下选择停止位之前接收到的位被当作数据字的最低有效位,所有必要的位顺序是由模块自动处理。UARTx_BDH寄存器与UARTx_BDL寄存器一起控制UART波特率发生器的预分频因子。更新13位波特率设置时,首先写BDH缓冲新值的高半部分,然后写BDL。直到BDL被写入时BDH中的值才会变。UART初始化
30、函数主要实现了UART数据格式,波特率,UART模块时钟使能等工作。UART构建测试可以通过查询和中断两种方式实现。查询方式通过不断调用接收函数,查询接收标志是否有效来判断是否成功接收数据。中断方式通过中断服务程序实现,成功接收一个字节之后,芯片自动跳转至中断服务程序,中断服务程序中调用接收一个字节的函数来接收数据。K60N512的UART可以稳定工作在115200bps下。 指纹模块指令介绍 主程序中指纹存储程序流程图如图4.2所示,指纹搜索程序流程图如图4.3所示。用到的指纹模块指令分列如下:4.8.1 指纹图像获取发送获取指纹图像的指令,等待接收应答包。指令的指令包和应答包的格式分别如表
31、4.1和表4.2所示。表4.1 指令包格式2 bytes4 bytes1 byte2 bytes1 byte2 bytes包头模块地址包标识包长度指令码校验和0xef010xffffffff01H03H01H05H表4.2 应答包格式2 bytes4 bytes1 byte2 bytes1 byte2 bytes包头模块地址包标识包长度确认码校验和0xef010xffffffff07H03HxxHsum图4.2 指纹存储程序流程图图4.3 指纹搜索程序流程图 生成特征编程中为了提高模板质量,生成了两次特征文件,分别存于charbuffer1与charbuffer2当中,生成特征指令的指令包与应
32、答包的格式分别如表4.3和表4.4所示。表4.3 指令包格式2 bytes4 bytes1 byte2 bytes1 byte1 byte2 bytes包头模块地址包标识包长度指令码缓冲区号校验和0xef010xffffffff01H04H02HBufferIDsum表4.4 应答包格式2 bytes4 bytes1 byte2 bytes1 byte2 bytes包头模块地址包标识包长度确认码校验和0xef010xffffffff07H03HxxHsum 确认码为00H表示生成特征成功,01H表示收包有误。4.8.3 生成模板这一步的目的是将charbuffer1与charbuffer2中的
33、特征文件合并生成模板,结果存于charbuffer1与charbuffer2中。指令包和应答包格式分别如表4.5和表4.6所示。表4.5 指令包格式2 bytes4 bytes1 byte2 bytes1 byte2 bytes包头模块地址包标识包长度指令码校验和0xef010xffffffff01H03H05H09H表4.6 应答包格式2 bytes4 bytes1 byte2 bytes1 byte2 bytes包头模块地址包标识包长度确认码校验和0xef010xffffffff07H03HxxHsum确认码为00H表示生成模板成功。01H表示收包有误,0aH表示生成模板失败。4.8.4
34、储存模板这一步的作用是将charbuffer1或charbuffer2中的模板文件存到PageID号flash数据库位置。指令包和应答包格式分别如表4.7和表4.8所示。表4.7 指令包格式2 bytes4 bytes1 byte2 bytes1 byte1 byte2 bytes2 bytes包头模块地址包标识包长度指令码 缓冲区号位置号校验和0xef010xffffffff07H06H06HBufferIDPageIDsum4.8 应答包格式2 bytes4 bytes1 byte2 bytes1 byte2 bytes包头模块地址包标识包长度确认码校验和0xef010xffffffff0
35、7H03HxxHsum确认码为00H表示存储成功,01H表示收包有错,0bH表示PageID超出指纹库范围,18H表示写flash出错。4.8.5 高速搜索在此环节当中,以CharBuffer1或CharBuffer2中的特征文件高速搜索整个或部分指纹库。假设搜索到,则返回页码。这一环节是指纹识别的最后一个环节,也是最重要的一个环节。指令包和应答包的格式分别如表4.9和表4.10所示。表4.9 指令包格式2 bytes4 bytes1byte2 bytes1 byte1 byte2 bytes2 bytes2 bytes包头模块地址包标识包长度指令码缓冲区号参数参数校验0xef010xffff
36、ffff01H08H1bHBuferIDStartPagePageNumsum表4.10 应答包格式2 bytes4 bytes1 byte2 bytes1 byte2 bytes2 bytes2 bytes包头模块地址包标识包长度确认码页码得分校验和0xef010xffffffff07H07HxxHPageIDMatchScoresum 补充说明本设计中指纹搜索程序中添加了低功耗定时功能,搜索时间超过预先设定的值之后进入中断,在该中断中又添加了提示未找到指纹图像的信息以及软件复位功能,实现自动指纹识别的作用。设计中还采用了AD功能实时监测芯片工作温度。实时时钟用于获得时间。蜂鸣器以及LCD用
37、来提示指纹录入以及搜索的情况。学习文档 仅供参考结 论本设计主要是基于Kinetis K60N512单片机的指纹识别系统设计,指纹模块选择的是杭州城章科技的R305F指纹模块,得到如下结论:(1) 指纹识别的各个环节紧密相连,缺一不可;(2)据识率与误识率是一对矛盾的指标,找到平衡点至关重要;(3)K60N512可以出色的完成指纹识别的目的;(4)指纹模块算法性能优良,实测算法性能可靠,识别率高。致 谢设计是在老师的悉心指导下,经过三个月的努力完成的,在此感谢老师的指导。毕业设计是对大学四年里所学的知识的一次全面检验,本设计利用所学的专业知识,结合实际,完成对自己的一次综合测试。在设计的过程中
38、得到了导师的认真指导和严格的要求,从而在此过程中不但使所学的专业知识得到了稳固,更加重要的是从导师那学到了很多的实践经验以及对工作认真的态度。在此,我对培养和关心我的老师表示衷心的感谢。参考文献1 赵晶.指纹识别算法研究D.哈尔滨:哈尔滨工程大学,2007.2 石晶,王宜怀,苏勇等.电脑科学J,2013,40(6):41-44.3D.苏州:苏州大学,2011.4M.2012:1-44.5 Freescale Semiconductor Inc.Cotex M0+/M4 Interrupt principle and designM.6 王宜怀,吴瑾,蒋银珍.嵌入式系统原理与实践M.北京:电子工
39、业出版社,2013.学习文档 仅供参考附录A 程序源码#include gpio.h#include common.h#include uart.h#include ili9320.h#include stdio.h#include gui.h#include w25qxx.h#include wdog.h#include lptmr.h#include rtc.h#include adc.h#define LED1 PEout(6) #define LED2 PEout(7) #define LED3 PEout(11) #define LED4 PEout(12) extern GUI_B
40、ITMAP bmasdd;extern GUI_BITMAP bmgrads;extern GUI_BITMAP bmorient;extern GUI_BITMAP bmthin;extern GUI_CONST_STORAGE unsigned char acfinger;const GUI_BITMAP *pBitmap;const GUI_BITMAP *qBitmap;const GUI_BITMAP *rBitmap;const GUI_BITMAP *sBitmap;#ifndef GUI_FLASH #define GUI_FLASH #endifextern GUI_FLAS
41、H const GUI_FONT GUI_FontHZ_STXingKai_35;#define IR_PORT HW_GPIOE#define IR_PIN (28)#define IR_DATA PEin(IR_PIN)void GPIO_ISR(uint32_t pinArray);static uint8_t InfraredExec(uint8_t * code);uint32_t instance;uint8_t cnt=0;uint8_t dat24=0;unsigned char GR_Pack_Head6 = 0xEF,0x01,0xFF,0xFF,0xFF,0xFF; un
42、signed char GR_GetImage6 =0x01,0x00,0x03,0x01,0x0,0x05;unsigned char GR_GenChar17 =0x01,0x00,0x04,0x02,0x01,0x00,0x08 ; unsigned char GR_GenChar27 =0x01,0x00,0x04,0x02,0x02,0x00,0x09 ; unsigned char GR_match6 =0x01,0x00,0x03,0x03,0x00,0x07 ; unsigned char GR_search11=0x01,0x0,0x08,0x04,0x02,0x0,0x00
43、,0x00,0x08,0x00,0x17;unsigned char GR_upchar11=0x01,0x0,0x04,0x08,0x01,0x0,0x0,0x0,0x13,0x0,0x21;unsigned char GR_storechar9=0x01,0x0,0x06,0x06,0x02,0x0,0x03,0x00,0x12 unsigned charGR_speedsearch11=0x01,0x00,0x08,0x1b,0x02,0x00,0x00,0x0,0x10,0x00,0x36; unsigned char GR_regmodel6=0x01,0x0,0x03,0x05,0
44、x0,0x09;unsigned char GR_valid6=0x01,0x0,0x03,0x1d,0x00,0x21; char DispBuff1 32;char DispBuff2 32; static void UART_RX_ISR(uint16_t byteReceived) datcnt=byteReceived; cnt+; static void LPTMR_ISR(void) GUI_Init(); GUI_Clear(); GUI_DispStringAt(No such a fingerprint!,5,20); GUI_DispStringAt(please enter again!,5,35); DelayMs(3000); NVIC_SystemReset(); void FINGERPRINT_Cmd_Get_Img(void) unsigned char i; for(i=0;i6;i+) UART_WriteByte( instance, GR_Pack_Headi); for(i=0;i6;i+) UART_WriteByte( instance,GR_GetImagei ); void FINGERPRINT_Cmd_Gen_Char1(void) unsigned char i;