基于stc59c52指纹考勤系统设计.docx
《基于stc59c52指纹考勤系统设计.docx》由会员分享,可在线阅读,更多相关《基于stc59c52指纹考勤系统设计.docx(15页珍藏版)》请在冰豆网上搜索。
基于stc59c52指纹考勤系统设计
指纹考勤系统实验报告
班级:
电信092班
姓名:
保昆200916022218
邵苗苗200916022217
何郭微200916022207
马政仑200916022222
指导老师:
陶福寿
2012年5月6日
1指纹识别技术概述3
1.1指纹识别技术的发展系统简介3
1.2系统简介4
2指纹识别系统的设计5
2.1指纹识别系统的硬件设计5
2.1.1FM—180指纹识别模块5
2.1.289C52RC单片机7
2.1.3UART接口9
2.2指纹识别系统的软件件设计9
3设计内容10
3.1指纹识别流程图10
3.2程序代码10
4测试结果14
5心得体会15
保昆:
stc89c52邵苗苗:
FM-180指纹识别模块何郭微:
UART串口马政仑:
1062液晶显示
1指纹识别技术概述
1.1指纹识别技术的发展系统简介
人们使用指纹进行个人身份鉴定已经有很长的历史考古证实,公元前7000年到6000年以前,古叙利亚和中国,指纹作为身份鉴别己经开始应用。
考古发现,在这个时代,一些粘土陶器上留有陶艺匠人的指纹,中国的一些文件上印有起草者的大拇指指纹,在Jercho的古城市的房屋留有砖匠一对大拇指指纹的印记等。
在我国,早在公元650年,唐代作家贾公秀在其作品中就着重提到了指纹是确认个人身份的方法。
我国将指纹应用于民间契约及断案有悠久的历史,但是由于缺乏专门性研究,未能将指纹识别技术上升为一门科学。
虽然指纹的一些特征己经被人们认识和接受但不能证明,但指纹己经广泛应用社会的各个方面。
用指纹采集仪采集指纹,提取出细节点,然后将细节点保存到数据库中,形成指纹模板库。
在线部分——用指纹采集仪采集指纹,提取出细节点,然后将这些细节点与保存在数据库中模板细节点进行匹配,判断输入细节点与模板细节点是否来自同一个手指的指纹。
一般来说,离线处理允许人工因素介入,可根据需要手动调整系统参数,而在线处理应完全由系统自动完成所有操作。
自动指纹识别系统框图如图1所示:
离线部分
匹配
指纹图像降噪后的图像细节点
在线部分
图1自动指纹识别系统框图
预处理是将输入的(直接采集进来的)低质量、有噪音的指纹源图象处理成已细化了的清晰的二值图像。
它的目的是减少低质量的图像对分类识别结果的影响,预处理中一般包括图像增强、滤波、二值化、细化等步骤。
在上图中提到细节提取,该细节所指的是指纹纹路。
指纹纹路有3种基本类型——环型、弓型和螺旋型。
现在,科学家已能够通过模型再现那些较为常见的指纹,也能重复不太复杂的罕见指纹的形成过程。
目前尚未发现有不同的人拥有相同的指纹,所以每个人的指纹也是独一无二。
由于指纹是每个人独有的标记,近几百年来,罪犯在犯案现场留下的指纹,均成为警方追捕疑犯的重要线索。
现今鉴别指纹方法已经电脑化,使鉴别程序更快更准。
每一个人的指纹纹路都有各自的特点,所以每一个指纹纹路的细节也是有所不同的。
要识别一个指纹,其关键所在就是提取每一个指纹纹路的细节,只有提取到更多的细节点数才能更加准确的识别一个指纹。
离线部分进行的是指纹录入操作:
当开始指纹采集的时候,指纹识别模块将对所读取指纹进行图像增强,着重对指纹纹路进行扫描,并提取其特有的纹路。
在将其进行保存。
在线部分进行的是指纹录入操作:
当识别源置于指纹识别区域时,指纹识别模块同样进行图像增强的操作,此时指纹识别模块将对指纹纹路进行扫描,读取指纹纹路的特点并将其与指纹库的存储资源进行比对。
当所读取指纹纹路与所读取指纹相似度超过90%,则表示读取成功。
1.2系统简介
指纹识别系统的基本结构和整体流过程,并且从硬件系统和软件系统两个主要方面探讨了设计指纹识别系统的基本方法。
硬件系统的设计主要是基于89C52RC单片机、FM—180指纹识别模块、以及相关的程序设计;软件系统的设计主要是指纹识别系统算法的设计,其中包括图像处理和图像识别两个方面。
通过实验显示,该系统采集的指纹图像较清晰、失真较小,处理后的图像轮廓分明、特征突出,利于指纹分类与识别。
通过对指纹识别系统的研究、设计与开发,综合运用了信号采集及接收技术,
图像处理及识别技术,基本实现了利用单片机进行指纹识别系统开发的目的。
2指纹识别系统的设计
2.1指纹识别系统的硬件设计
硬件系统是实现一切系统功能的物质基础,它是系统不可缺少的一个整体,一个工程系统的建立都是在硬件基础上展开的。
本次设计任务的硬件设施已经配备,其核心是89C52RC单片机与FM—180指纹识别模块,我们的任务是完成两者的主电路连接,实现指纹图像采集的功能。
2.1.1FM—180指纹识别模块
FM-180亮背景光学头指纹识别设备采用光学指纹传感器,由高性能DSP处理器和FLASH等芯片构成,具有指纹图像处理,模版提取,模版匹配,质问搜索和模版存储等功能。
指纹特征:
指纹算法是从指纹图像中提取的特征,代表了指纹的信息。
指纹的保存,比对,搜索都是通过操作指纹特征来完成。
图二系统参数与接口(A型)
FM-180是完整的指纹识别模块,不需挂接任何外围部件,模块始终处于从属地位,主机需要通过不同的指令让模块完成各种功能。
主机的指令,模块的应答以及数据交换都是按照规定格式的数据包来进行的。
主机必须按照格式封装要发送的指令或数据,也必须按格式解析收到的数据包。
FM—180指纹识别模块使用USB供电,使用拓展的+5V电源接口。
该模块的正常工作电流为100-170mA。
峰值电流将可达到200mA。
在该模块进行指纹录入操作时,其时长约为1.5s。
而当其进行指纹识别操作时,由于要进行特征提取和指纹对比等步骤,所以其操作时长约为3-5s。
该模块可以存储约900组指纹数据。
经过小组成员100次的反复操作,该模块的识别率为100%,该数据将在更多的实验数据下长生变动。
图三1602液晶显示
此模块包括液晶初始化、命令的输入、显示数据的输入。
其中命令是用于控制液晶状态是否显示光标,光标是否闪烁,是否清除原来数据以及显示的具体位置。
数据显示主要是将要显示的信息按需要准时显示出来。
按键电路:
其按键共有三个。
K1:
复位。
K2:
指纹录入。
K3:
指纹读出。
按下k1系统处于复位状态,将清空之前的所有操作!
按下k2键后,FM-180指纹识别模块开始处于工作状态,工作灯闪亮。
此时可以进行指纹录入工作,将所需录入的指纹置于识别区1-2秒,显示testfinger1.2.3….表示录入成功!
按下k3键后模块处于识别工作模式,将之前多录入的指纹体置于识别区3-5秒,显示finger1.2.3…表示读取成功
模式指示灯:
共有两个灯,一红一绿。
与模块握手通过,绿灯亮起。
进入识别模式;红色灯亮,进入录入指纹模式。
电源与指示灯:
该模块使用USB供电,使用拓展的+5V电源接口。
当与计算机接通后,按下开关,电源指示灯亮起。
2.1.289C52RC单片机
STC89C52是一种低功耗、高性能CMOS8位微控制器,具有8K在系统可编程Flash存储器。
在单芯片上,拥有灵巧的8位CPU和在系统可编程Flash,使得STC89C52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。
具有以下标准功能:
8k字节Flash,512字节RAM,32位I/O口线,看门狗定时器,内置4KBEEPROM,MAX810复位电路,三个16位定时器/计数器,一个6向量2级中断结构,全双工串行口。
另外STC89X52可降至0Hz静态逻辑操作,支持2种软件可选择节电模式。
空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。
掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。
最高运作频率35Mhz,12T。
STC89C52具体介绍:
1主电源引脚(2根)
VCC(Pin40):
电源输入,接+5V电源
GND(Pin20):
接地线
2外接晶振引脚(2根)
XTAL1(Pin19):
片内振荡电路的输入端
XTAL2(Pin20):
片内振荡电路的输出端
3控制引脚(4根)
RST/VPP(Pin9):
复位引脚,引脚上出现2个机器周期的高电平将使单片机复位。
ALE/PROG(Pin30):
地址锁存允许信号
PSEN(Pin29):
外部存储器读选通信号
EA/VPP(Pin31):
程序存储器的内外部选通,接低电平从外部程序存储器读指令,如果接高电平则从内部程序存储器读指令。
4可编程输入/输出引脚(32根)
STC89C52单片机有4组8位的可编程I/O口,分别位P0、P1、P2、P3口,每个口有8位(8根引脚),共32根。
PO口(Pin39~Pin32):
8位双向I/O口线,名称为P0.0~P0.7
P1口(Pin1~Pin8):
8位准双向I/O口线,名称为P1.0~P1.7
P2口(Pin21~Pin28):
8位准双向I/O口线,名称为P2.0~P2.7
P3口(Pin10~Pin17):
8位准双向I/O口线,名称为P3.0~P3.7
1.I/O口
输入/输出口经过特殊处理,很多干扰是从I/O进去的,每个I/O均有对VCC/对GND二级管箝位保护。
2.电源单片机内部的电源供电系统经过特殊处理,很多干扰是从电源进去的
3.时钟单片机内部的时钟电路经过特殊处理,很多干扰是从时钟部分进去的
4.复位电路单片机内部的复位电路经过特殊处理,很多干扰是从复位电路部分进去的.
工作流程:
当读取主函数时定时器0开中断设17ms的初值。
只对液晶进行写操作,不进行读操作。
液晶初始化,串口初始化。
UART方式1:
8位UART,REN=1:
允许接,SMOD=0波特率不加倍。
T1方式,用于UART波特率,UART波特率设置:
9600。
打开定时器0,中断0,低电平中断。
中断1,低电平中断。
开中断0,开中断1。
开始握手6次,如果没有一次成功,表示模块通信不正常。
只要成功就跳出此循
环。
与模块握手通过,绿灯亮起。
进入识别模式。
录入一个指纹,如果仍为低电平,表示按键有效。
此时等待松手与模块握手通过。
采集两次,生成1个指纹模板成功,保存也成功,进入录入指纹模式。
循环一结束。
模式转换,其中用modeflag来标志,默认从第1个指纹开始录入。
如果仍为低电平,表示按键有效,等待松手。
0表示录入指纹,1表示识别指纹。
2.1.3UART接口
UART:
UniversalAsynchronousReceiver/Transmitter,通用异步接收/发送装置,UART是一个并行输入成为串行输出的芯片。
用于控制计算机与串行设备的芯片。
有一点要注意的是,它提供了RS-232C数据终端设备接口,这样计算机就可以和调制解调器或其它使用RS-232C接口的串行设备通信了。
作为接口的一部分,UART还提供以下功能:
将由计算机内部传送过来的并行数据转换为输出的串行数据流。
将计算机外部来的串行数据转换为字节,供计算机内部使用并行数据的器件使用。
在输出的串行数据流中加入奇偶校验位,并对从外部接收的数据流进行奇偶校验。
在输出数据流中加入启停标记,并从接收数据流中删除启停标记。
处理由键盘或鼠标发出的中断信号(键盘和鼠标也是串行设备)。
可以处理计算机与外部串行设备的同步管理问题。
2.2
指纹识别系统的软件件设计
图六ALIENTEKMiniSTM32开发板编辑器
3设计内容
3.1指纹识别流程图
图七指纹识别流程图
3.2程序代码
voidmain(void)//主函数
{
unsignedchari=0;
ET0=1;//定时器0开中断
TL0=0x97;//17ms的初值TH0=0xBD;
delay1ms(5);
LcdRw=0;//只对液晶进行写操作,不进行读操作
delay1ms(5);
LCD_Initial();//液晶初始化
delay1ms(5);
GotoXY(0,0);//x,y
Print("test");
//串口初始化
SCON=0x50;//UART方式1:
8位UART;REN=1:
允许接收
PCON=0x00;//SMOD=0:
波特率不加倍
TMOD=0x21;//T1方式2,用于UART波特率
TH1=0xFD;
TL1=0xFD;//UART波特率设置:
9600
TR1=1;
TR0=1;//开定时器0
IT0=0;//中断0低电平中断
IT1=1;//中断1低电平中断
EX0=1;//开中断0
EX1=1;//开中断1
EA=1;
//P0=0;//tab[0];//显示0
for(i=0;i<6;i++)//开始握手6次,如果没有一次成功,表示模块通信不正常。
只要成功就跳出此循环
{
if(VefPSW())//与模块握手通过,绿灯亮起。
进入识别模式
{
green=0;
buzzer=0;delay1ms(300);
buzzer=1;green=1;red=0;break;
}
else
{
red=0;break;
}
}
while
(1)
{
if(k2==0)//录入一个指纹
delay1ms(10);if(k2==0)//如果仍为低电平,表示按键有效
通过
{while(k2==0);//等待松手if(VefPSW()==1&&modeflag==1&&SaveNumber<10)//与模块握手
{if(enroll()==1)//采集两次,生成1个指纹模板成功
{if(savefingure(SaveNumber+1)==1)//保存也成功
{SaveNumber++;//加一次GotoXY(0,1);//x,yPrint("Finger:
");GotoXY(0,8);//x,ystr[0]=0x30+SaveNumber;Print(str);
delay1ms(200);GotoXY(0,1);//x,yPrint("Finger:
");
GotoXY(0,8);//x,yPrint("");
delay1ms(200);GotoXY(0,1);//x,yPrint("Finger:
");
GotoXY(0,8);//x,ystr[0]=0x30+SaveNumber;
Print(str);
}
}
}
else
{
buzzer=0;for(i=0;i<8;i++)
{delay1ms(100);red=~red;
}
red=0;buzzer=1;
}
}
if(modeflag==0)//为识别模式
{
searchnum=search();
if(searchnum>=1)
{
GotoXY(0,1);//x,y
Print("Finger:
");
GotoXY(0,8);//x,y
str[0]=0x30+searchnum;
Print(str);
//蜂鸣器响一声
buzzer=0;delay1ms(100);
buzzer=1;
}
}
if(clearallflag==1)
{
clearallflag=0;
Clear_All();
red=0;//红色灯亮
green=1;
//蜂鸣器长响一次,表示清除所有指纹结束
modeflag=1;//进入录入指纹模式
GotoXY(0,1);//x,y
Print("Finger:
");
GotoXY(0,8);//x,y
str[0]=0x30;
Print(str);
buzzer=0;
delay1ms(800);
buzzer=1;SaveNumber=0;
}}////////////////////////////while
(1)结束////////////////////////////////
}
voidint0(void)interrupt0//中断0,清除所有指纹
{
if(k3==0)//清除所有指纹
{
delay1ms(10);
if(k3==0)//如果仍为低电平,表示按键有效
{
while(k3==0);//等待松手clearallflag=1;
}
}
}
voidTimer0(void)interrupt1//定时器0中断函数
{
TL0=0x97;
TH0=0xBD;
clk0++;//延时17ms
}
voidint1(void)interrupt2//中断1,模式转换
{
if(k1==0)//模式转换其中用modeflag来标志,默认从第1个指纹开始录入
{
delay1ms(10);
if(k1==0)//如果仍为低电平,表示按键有效
{while(k1==0);//等待松手modeflag=~modeflag;//0表示录入指纹1表示识别指纹if(modeflag==0)
{
green=0;
red=1;
}
else
{
red=0;
green=1;
}
}
}
4测试结果
开发板的供电:
在该次课程设计的过程中,我们用到了FM-180指纹识别模块以及STC89c52单片机开发板。
所设计的整体系统使用的USB串口供电,使用拓展的+5V电源接口。
指纹模块:
我们选取了FM-180指纹识别模块作为此次设计的硬件模块。
当进行指纹录入命令时,指纹识别区域的红灯将会一直处于点亮状态,直至录入结束。
当进行指纹采集的命令时则该区域的红灯将会以1s的间隔进行闪烁,同样至采集结束。
识别时间:
FM-180指纹识别模块进行指纹识别操作时,由于要进行特征提取和指纹对比等步骤,所以其操作时长约为3-5s。
录入的时间:
FM-180指纹识别模块进行指纹录入操作时,其时长约为1.5s。
意外怎么操作:
在整个设计的过程中,我们也遇到了一些意外。
在我们进行系统调试的时候,开发板意外停止工作。
经过复位等操作无果的情况下,我们选择了断电重启,在系统重启后该问题得到了解决。
5心得体会
在了解了基础知识之后,我开始进行上机操作,当然,其中遇到很多的难题,很多东西都是第一次接触,又没有别人在旁边指导操作,完全凭借自己去摸索练习。
其中的困难可想而知。
然而坚持就是胜利,牙一咬眼一闭坚持做下去,而通过本次实验,我感觉收获还是蛮多的。
可能我对于嵌入式的知识学习的还是不太多,但是这之外的东西收获颇丰。
它让我学会了如何通过自己的努力去认知一个新事物,更重要的是端正自己的学习态度,只有真正下功夫去学习,才能有收获,正所谓“一份耕耘,一份收获。
”没有付出,何谈回报呢?
再者,通过本次实验,我也学会了如何去分析问题,如何找出自己设计中的不足,继而去排除解决问题,这就是一个自我学习的过程。
当我们通过实验去学习理论知识时,自己动手得出的结论,不仅能加深我们对嵌入式的理解,更能加深我们对此的记忆。
当然,在这其中,我也发现自己的许多不足之处,由于学期伊始我没有好好学习,才落到如此地步,这也可以说是一个教训吧!
我相信在以后的学习工作中,我一定会端正自己的学习态度,一丝不苟的去对待每一件事。
只有做好足够的准备,才能事半功倍!
在最后要特别感谢本门课程的辅导老师—陶福寿老师,在整个学期的学习过程中,陶老师一次又一次的对我们进行指导,一次又一次的向我们讲解,在整个设计的过程中给了我们很大的帮助,也让我们最终能成功的完成此次设计!