51单片机课程设计 || 基于AS608模块的指纹锁

知乎:Fragtex
CSDN: 川明_Fragtex


代码

代码速览:

image.png

源码

【闲鱼】https://m.tb.cn/h.U1SDh0Z?tk=npyX2Dqp114 CZ0001 「我在闲鱼发布了【单片机指纹锁代码!!注释详尽!!耦合性低!!模块化封装!!完】」

产品描述

本门禁拥有两个检验模块,指纹识别模式密码输入模式
在使用指纹或者密码打开门禁后可以更改密码或者增删指纹,键入密码一共有三次机会,使用完以后会进入锁定状态并且蜂鸣器报警。

![](https://img-blog.csdnimg.cn/img_convert/fcbcb44c8116b6daaae68599be57157c.png
在这里插入图片描述

硬件原理图

image.png
需要将舵机和指纹模块的的VCC、GND和单片机链接,然后将舵机的PWM线(我这个舵机的是橙色线)连到P10,然后将指纹模块的TX和RX与单片机的RX和TX相连。接线图如下564DD3277CF08B823816B118869679CD.jpg2CB1618035A84898ABE000E9DBACC544.jpg


软件逻辑图

指纹解锁逻辑

指纹逻辑.png

AS608的使用

此处将所有的可能会用到的代码指令封装成了数组,便于下面指纹功能调用的时候调用串口Uart发送指令。
image.png

image.png
我们将所有的功能通过层层封装,最后只保留了几个接口

  • 添加指纹
  • 搜索指纹
  • 删除指纹库
  • 模式初始化

最后封装出来的头文件如下图所示,在主函数中只要包含这个头就可以直接使用该库了(当然需要你讲串口正确链接)
image.png

AS608的串口通信

该模块主要是为了为单片机与指纹模块通信服务的,主要封装了三个功能:

  • 串口初始化
  • 串口发送一个Byte
  • 串口接受一个Byte

image.png

此处有坑我们踩到了:就是串口通信在使用之前要用初始化函数配置好定时器,不然单片机会一直连不上指纹 模块。

SG90舵机的使用

SG90外部流出了三个引脚分别是GND、VCC、PWM,我们需要在单片机中模拟符合SG90标准的脉冲信号,改变脉冲信号的占空比来实现,此处详见代码

#include <REGX52.H>
#include "Delay.h"

static int k=0;
sbit signal=P1^0;						//SG90PMW的引脚接线的时候要注意接到这个口

//旋转度数的宏定义,更改旋转角度
#define spin0 1
#define spin45 2
#define spin90 3
#define spin135 4
#define spin180 5
unsigned int spin;

void timer_init()				//0.5ms定时器初始化
{
	TMOD=0x01;						//定时器0工作模式16位计数器
	ET0=1;								//允许定时器0中断
	TR0=1;								//开启定时器0中断
	EA=1;									//开启总中断
	TH0=0xFE;
	TL0=0x33;							//0.5ms定时对应到Unlock里面那个Delay(500)
	
}

void timer_close()
{
	ET0=0;								//不允许定时器0中断
	TR0=0;								//关闭定时器0中断
	EA=0;									//关闭总中断
}

void Timer0() interrupt 1
{
	TR0=0;								//关闭计数
	k=k+1;
	TH0=0xFE;
	TL0=0x33;							//重置使得下次定时器只计时0.5ms
	if(k<=spin)
	{
		signal=1;
	}
	else
	{
		signal=0;
		if(k==40)
		{
			k=0;
		}
	}
	TR0=1;								//开启计数
	
}
void delayms(int ms)
{
	int i,j;
	for(j=ms;j>0;j--)
		for(i=110;i>0;i--);
}
void Unlock()
{
		P1=0x00;
		timer_init();				//0.5ms定时器初始化
		spin=spin180;
		delayms(500);
		timer_close();			//关闭其中断
}
void Lock()
{
	P1=0x00;
	timer_init();					//0.5ms定时器初始化
	spin=spin0;
	delayms(500);
	P1=0x00;
	timer_close();				//关闭其中断

}


在这个代码中,我们将SG90的PWM引脚插在单片机的P1-0位置

其他

其他模块使用了江科大自化协老师封装的非常好用的模块如LCD1602,Delay,MatrixKey
大家如果想要了解的话可以转至B站深入学习,在此非常感谢他们的精品课程
点击查看【bilibili】


功能流图


成品展示:

详情可以看我们在B站发的视频:
点击查看【bilibili】


PPT下载链接

PPT下载链接如果想要下载可以联系qq2189665826,有偿下载答辩PPT模板,希望大家能够支持一下。如果购买了我愿意提供力所能及的代码讲解服务。

  • 7
    点赞
  • 78
    收藏
    觉得还不错? 一键收藏
  • 9
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值