基于单片机指纹识别系统设计内容摘要:

ms(10)。 if(k3==0)//如果仍为低电平,表示按键有效 { while(k3==0)。 //等待松手 clearallflag=1。 changeflag=1。 . . } } } void Timer0(void) interrupt 1//定时器 0 中断函数 { TL0=0x97。 TH0=0xBD。 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=1。 //模式发生了转换 } } } 第五 章 调试 完成了硬件的设计、制作和软件编程之后,要使系统能够按设计正常运行,必须进行硬件调试和软件调试。 硬件调试 硬件调试的主要任务是排除硬件故障,其中包括设计错误和工艺性故障。 (1) 在电路的电源焊接一个电源指示灯,判断电路中通电是否正常。 (2)将电路中的电源线布置在通用板的四周,这样使用电源很方便,减少干 扰,同时可以减少短路故障发生的可能。 ( 3)元器件合理布局,且尽量减少占用板子的面积,力争做到节俭。 特别是单片机的晶振尽量靠近单片机,减少干扰。 ( 4)液晶的焊接注意方向,且调节背光的电位器不可以少。 软件调试 软件调试的任务是利用开发工具进行在线仿真调试,发现和纠正程序错误,同时也能发现硬件故障。 程序的调试应一个模块一个模块地进行,首先单独调试各功能子程序,检验程序是否能够实现预期的功能,接口电路的控制是否正常等;最后逐步将各子程序连接起来总调。 联调需要注意的是,各程序模块间能否正确传递参数,特 别要注意各子程序的现场保护与恢复。 本设计主要有: ○ 1 指纹识别传感器图像采集模块 . . ○ 2 单片机图像处理 ○ 3 按键模块和指示灯模块 ○ 4 指纹液晶显示和蜂鸣器、继电器模块 不断地对单片机下程序,观看调试结果。 参考文献 [1] 河桥 ,段清明 ,邱春玲 .单片机原理及应用 .北京:中国铁道出版社, [2] 冯星奎 ,李林艳,颜祖泉 .一种新的指纹图像细化算法 .中国图像图形学报,1999, 4(10)835838. [3]吕凤军 .数字图象处理编程入门一一做一个自己的 :清华大学出版社, 1999. [4] 刘文星,王雄沂,母国光 .纹线跟踪及其在细化指纹后处理中的应用 .光电子傲光, 2020, 13 (2): 184187. [5] 刘家锋,唐降龙,赵泉 .一个基于特征点匹配的联机指纹鉴别系统 .哈尔滨工业大学学报, (1): 132136 [6] 简兵,庄镇泉等 .基于脊线跟踪的指纹图细节提取算法 .电路与系统学报,2020 [7] 刘旭,田捷 .自动指纹识别算法在嵌入式系统的实现 [ J].计算机工程与应用, 2020. [8] 周毅,等著 .基于 SPI协议的实现,计算机仿真 .2020. [9] 窦振中 .单片机外围器件实用手册 (存储器分册 ).北京:北京航空航天大学出版社, 20O0 [10] 李华. MCS51 系列单片机实用接口技术.北京:北京航空航天大学出版社,1998 [11] 张培仁,孙占辉,张村峰.基于 c 语言编程 MCS 一 51 单片机原理与应用[M].北京:清华大学出版社, 2020. . . 附件 2 程序清单 include include include sbit relay =P1^4。 //继电器引脚 sbit buzzer=P1^5。 //蜂鸣器引脚 sbit red= P2^7。 //录入模式指示灯 在板子靠近单片机处 sbit green= P2^0。 //识别模式指示灯 在板子远离单片机处 sbit k2=P3^4。 //录入一次指纹 sbit k1=P3^3。 //模式识别转换 sbit k3=P3^2。 //清除所有指纹( 10 个指纹清除) define Max_User 10 define error 2 unsigned char SaveNumber=0,searchnum=0。 unsigned int SearchNumber=0。 unsigned int clk0=0。 unsigned char str[3]={0,39。 \039。 ,39。 \039。 }。 unsigned char code Identify[16]=Lock: Idenfity。 unsigned char code Input[16] =Lock: Input。 bit modeflag=0,clearallflag=0,changeflag=0。 //默认为识别模式 ////////////////常用指令定义 ///////////////////////////// //Verify Password :验证设备握手口令 unsigned char code VPWD[16]={16,0X01 ,0Xff,0xff,0xff,0xff, 0x01,0,7,0x13,0x00,0x00,0x00,0x00,0x00,0x1b}。 //回送 12个 //设置设备 握手口令 unsigned char code STWD[16]={16,0X01 ,0Xff,0xff,0xff,0xff, 0x01,0,7,0x12,0x00,0x00,0x00,0x00,0x00,0x1a}。 //回送 12个 //GetImage :探测手指并从传感器上读入图像 unsigned char code GIMG[14]={12, 0X01 ,0Xff,0xff,0xff,0xff, 0x01, 0,3,1,0x00,0x05}。 //回送 12个 //Gen Templet1 :根据原始图像生成指纹特征 1 unsigned char code GENT1[14]={13,0X01 ,0Xff,0xff,0xff,0xff,0x01,0,4,2,1,0x00,0x08}。 //回送 12 个 //Gen Templet2 :根据原始图像生成指纹特征 2 unsigned char code . . GENT2[14]={13,0X01 ,0Xff,0xff,0xff,0xff,0x01,0,4,2,2,0x00,0x09}。 //回送 12 个 //Search Finger :以 CharBufferA 或 CharBufferB 中的特征文件搜索整个或部分指纹库 unsigned char code SEAT[18]={17, 0X01 ,0Xff,0xff,0xff,0xff, 0x01, 0,8, 4,1,0,0, 0,0x65, 0x00,0x73}。 //回送 16个 //Merge Templet。 将 CharBufferA与 CharBufferB中的特征文件合并生成模板,结果存于 ModelBuffer。 unsigned char code MERG[14]={12, 0X01 ,0Xff,0xff,0xff,0xff, 0x01, 0,3,5 , 0x00,0x09}。 //回送 12 个 //Store Templet :将 ModelBuffer 中的文件储存到 flash 指纹库中 unsigned char code STOR[16]={15, 0X01 ,0Xff,0xff,0xff,0xff, 0x01, 0,6,6,2, 0x00,0x00, 0x00,0x0f}。 //回 送 12 个 //Read Note unsigned char code RDNT[14]={13,0X01 ,0Xff,0xff,0xff,0xff, 0x01, 0,4,0x19, 0, 0x00,0x1e}。 //Clear Note unsigned char code DENT[46]={45,0X01 ,0Xff,0xff,0xff,0xff, 0x01, 0,36,0x18,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,0x00,0x3d}。 //DEL one templet unsigned char code DELE_one[16]={16, 0X01 ,0Xff,0xff,0xff,0xff, 0x01, 0,7, 0x0c, 0x00,0x00, 0,1, 0x00,0x15}。 //DEL templet。 清空指纹库 unsigned char code DELE_all[12]={12,0X01 ,0Xff,0xff,0xff,0xff, 0x01, 0,3, 0x0d,0x00,0x11}。 ////////常用指令定义 结束 ////////////////// /////////宏定义 /////////////////// 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 FIFO[MAX_NUMBER+1]={0}。 . . /*********1 毫秒延时程序 **********/ void delay1ms(unsigned int t) { unsigned int i,j。 for(i=0。 it。 i++) for(j=0。 j120。 j++)。 } void TxdByte(unsigned char dat)//串口发送信息 ,通过查询方式发送一个字符 { TI = 0。 //让 TI= 0 SBUF = dat。 //读入数据 while(!TI)。 //等待发送完毕 TI = 0。 //清零 } bit Command(unsigned char *p,unsigned char MaxTime) //命令解析 ,给模块发送一个命令 { unsigned char count=0,tmpdat=0,temp=0,i=0,package=0,flag=0,checksum=0。 bit result=。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。