大一期间学51单片机时做的小作品,功能如下:
1、密码解锁,输入正确的密码会提示'OPEN',当输入密码错误次数超过三次则会提示'已锁定';
2、指纹解锁,若该指纹存在指纹库中则会提示'OPEN';
3、修改密码,需先输入当前密码;
4、修改指纹,有添加指纹、搜索指纹、清空指纹库,三个功能。
功能展示视频链接:
https://www.bilibili.com/video/BV11y4y187jU/
原理图的AD工程、源代码的keil工程:
链接:https://pan.baidu.com/s/1c5jMNadqDgQBc1UeQcf5yg
提取码:xt85
(一)材料
最小系统:
STC89C52芯片
11.0592MHz的2脚无源脚晶振
30pf直插瓷片电容
4.7k直插色环电阻
10uf直插电解电容
3x6轻触开关
电源系统:
USB母座
电源适配器5V2A
双公USB数据线
模块:
LED灯
5V有源蜂鸣器
4*4薄膜开关
降压模块(5V降压至3.3V,供指纹模块)
LCD12864液晶屏
AS608光学指纹识别模块
AT24C02(掉电保存密码)
(二)原理图
注意:图中LCD的BLA背光正应该连接5V(中间最好带一个限流电阻),BLK背光负连接GND。
(三)程序
分为控制功能的程序、LCD12864驱动程序(为了节约IO口用的串行模式)、AS608光学指纹识别模块驱动程序、AT24C02驱动程序(掉电保存修改后的密码)、’4*4按键检测程序、UART程序。
(四)注意事项
在网上看了很多ATK-AS608相关的程序,大部分几乎都是一样的,可是我的模块总是无法初始化。
用串口查看,单片机发送的指令没错,指纹模块返回的应答也没问题;
找了很久发现问题出现在接收缓冲函数中:
发送完指令后,跳到 FPM10A_Receive_Data( ) 函数中循环接收模块的数据,这会出现一个问题:
函数还没进入循环,模块就已经回应数据了,这就导致数据的丢失,初始化失败。
修改:添加 Receive_Data 接收数据标志位,修改接收缓冲函数,用串口中断接收数据
串口中断接收数据,在 FPM10A_Receive_Data( ) 中等待数据接收完毕,这样一来就不怕数据的丢失了。
博客里还有<基于51单片的电风扇系统><基于51单片机的蓝牙台灯>,感兴趣的可以去看看。
个人公众号:拾一札记