深圳市航顺芯片技术研发有限公司
直播中

刘丰标

7年用户 1010经验值
私信 关注
[问答]

如何去实现一种基于AT89C52芯片的指纹锁设计呢

如何去实现一种基于AT89C52芯片的指纹锁设计呢?
如何对基于AT89C52芯片的指纹锁进行仿真

回帖(1)

王育来

2021-10-22 15:19:39
  突然在网盘资料里找到了大学毕业设计的资料,非常青涩,但是至少可以用,写出来就当给自己留个纪念。
  一、题目选择
  仔细想想,大学上的也不咋地,在校期间也没干啥有意义的事。不过大学四年都一直在做关于单片机的东西,参加了一下学校的机器人队,所以最后就做了一个基于单片机的项目,至于为啥做指纹锁,单纯是因为好奇这个东西。
  二、系统设计
  说起系统设计,最开始研究的时候是打算用STM32来写的,最后由于用的proteus软件版本比较低,里面没有stm32的芯片,但是学校还要求必须要有仿真,所以被逼无奈最后用了AT89C52芯片,后期又因为仿真的代码已经敲了好多,所以就彻底决定使用AT89C52芯片。
  硬件需求:
  芯片选择AT89C52,指纹模块:AS608,人机交互界面:LCD1602A,键盘:4*4矩阵键盘,数据存储芯片:AT24C02。还有一些杂七杂八的东西,芯片底座,IC座,杜邦线,按键,指示灯,蜂鸣器,洞洞板,USB转TTL……
  1、系统流程图设计
  
  三、系统仿真
  采用Proteus软件,使用按键来模仿指纹是否验证成功。
  
  四、程序设计
  程序主要分为几个模块,按键模块——用来选择功能、密码输入,信息存储模块——24C02芯片,指纹模块——用于指纹录入、识别,人机交互界面——方便用户进行操作。
  1、按键部分
  按键模块主要有两种,一种是有上拉电阻的,还有一种是没有上拉电阻的,这两种在使用上的主要区别就是能否使用线反转法来判断按下的是哪个按键,由于购买的键盘没有上拉电阻,所以我采用了扫描法。
  
  具体代码在此不做叙述,文末有下载链接。
  2、24C02
  为了使得项目更加切合实际,特意给该项目增加了AT24C02芯片,这是一种EEPROM芯片,这种芯片可以掉电保存数据,使得数据不会丢失。在这里大致介绍一下芯片引脚。
  第一个是SCL行时钟信号引脚,这个引脚在检测到上升沿信号的时候,会将接收到的数据保存到自身对应的地址当中,在检测到下降沿信号的时候,会将对应地址当中的数据取出。第二个引脚是SDA串行数据输入/输出引脚,这个引脚的主要任务是实现数据的传输,该引脚在使用时是双向传输的,也就是说可以传入,也可以取出。剩下的引脚是地址脚A0、A1、A2,这三个引脚是地址输入引脚,在使用的时候通常与GND串联使用。在具体使用中,用户首先需要向芯片发送一个起始命令,这个命令需要将SCL端口设置为高,SDA端口由高到低变化,这个状态会被视为芯片的起始命令,在使用时,无论是读操作还是写操作,必须以起始命令开始。相对应的,芯片还有一个停止命令,用户需要将时钟信号引脚使能,SDA输入上升沿信号,芯片获取完一个数据后,停止命令会是芯片进入保持状态。在使用时,还有一个应答状态,这是因为数据在传输的时候,设备需要知道数据是从什么时候开始传输的,又是在什么时候结束的,在传输完一组8位的数据之后,芯片会返回一个数据,或者说是状态,当单片机在检测到这个状态的时候,单片机会判定该数据传输完成,从而可以执行下一个指令。
  
  2、IIC通讯协议
  I2C(Inter-integrated Circuit)总线常用于不同设备之间的短距离通信,在大多数的情况下,主要用于核心与外部设备之间的数据交换。I2C协议把传输的消息分为两种类型的帧:一个地址帧——用于MASTER指明消息发往哪个SLACVE;一个或多个数据帧——由MASTER发往SLACVE的数据(或由SLACVE发往MASTER),每一帧是8-bit的数据。注:协议要求每次放到SDA上的字节长度必须为8位,并且每个字节后须跟一个ACK位。数据在SCL处于低电平时放到SDA上,并在SCL变为高电平后进行采样。读写数据和SCL上升沿之间的时间间隔是由总线上的设备自己定义的,不同芯片可能有差异。在这里我们选用IIC协议对24C02芯片进行数据的读写。
  权限管理
  作为一个锁设备,权限管理是必须的。设计管理员模式进行指纹设置,密码设置是非常合理的。我采用了单独的密码作为管理员密码,与开锁密码进行分离。
  可能遇到的问题
  大家购买指纹模块的时候,店家会给指纹模块的代码,有部分人会遇到使用TTL与指纹模块直连的时候使用是正常的,但是使用店家给的代码会出错,我检查后发现是由于店家波特率部分的代码有问题,与指纹模块所需的波特率不匹配,需要自己更改使用。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分