基于51单片机的指纹密码锁

基于51单⽚机的指纹密码锁
1.系统功能概述
本次分享的是⼀款基于51单⽚机的指纹识别电⼦密码锁系统,该系统以STC89C52单⽚机作为模块核⼼,通过串⼝通信控制指纹模块AS608实现录取指纹并存储指纹数据,并通过LCD12864液晶显⽰屏⽐对流程及效果,辅以直流继电器以发光⼆极管模拟开锁动作。
(1)整体硬件框图
硬件电路主要包括51单⽚机最⼩系统、指纹模块AS608电路、4*4矩阵键盘电路、LCD12864显⽰屏电路及系统电源。
股骨头仪(2)AS608指纹模块电路
AS608指纹模块采⽤串⼝或者USB进⾏数据通讯。本例程采⽤串⼝通讯的⽅式实现对指纹模块的控制。单⽚机可通过⼚家提供的控制指令集对指纹模块做相应的操作,详细可以参考AS608指纹模块⽤户⼿册。
(3)其他电路
由于其他硬件电路都是⽐较常⽤,就不⼀⼀介绍了。
软件流程:⾸先对各个模块进⾏初始化,检测有⽆按键按下,如果按下,则判断是哪⼀个按键,并作出判断,并调⽤相应的按键处理函数。主程序主要由液晶显⽰、串⼝通讯程序和按键程序组成。
(1)主函数
void main()
{
//PSB=0;
UART_Init();    //串⼝初始化
x24c02_init();    //24C02初始化
LcmInit();        //LCD12864初始化
LcmClearTXT();    //LCD12864清屏
while(1)
{
fan();
delay(100);
(2)指纹模块处理程序(部分代码)
点火模块因为源码⽐较⼤,我就不想全都贴出来了,如果需要详细了解源码可下载源码查看(下载链接在⽂章最后)
#define buffer1ID  0x01
#define buffer2ID  0x02
#define queren  0x88  //确认
#define tuichu  0x85  //退出
#define shanchu 0x82  //删除
#define User 1    //⽤户
void fan();    //主界⾯刷指纹管理员函数
sbit B0=B^0;
sbit B7=B^7;
sbit k2=P3^7;    //指纹模块
sbit jidianqi=P3^6;  //继电器
extern unsigned char times[];
uchar  Member=0,sec;
uchar  code buffer[User][6]=
{
{"000000"}
};
uchar dz[4];
uchar time[4];
uchar mima[6];
uchar mimag[6];
uchar mimaID[6]={1,2,3,4,5,6};
uchar Address1=20,tempx=20;
uchar Address2=20;
uchar data K;
uchar data Key;
uint PageID;
uchar data querenma=11;
uchar sum[2];
uchar sum[2];
int summaf,summas;
uchar  xdata UserPassword[7]={0};//密码
uchar  xdata DSY_BUFFER[16] ={0};//缓存
void Red_Init(void);
//检测脉冲宽度
unsigned char check(void);
unsigned char redchange(unsigned char rednum);
void delayms(unsigned int z)
{
unsigned int x,y;
for(x=z;x>0;x--)
硫芥子气
for(y=110;y>0;y--);
}
/******************************************************************** * 名称 : Chack(uchar User_Number)
* 功能 : 单⼀⽤户密码检测
* 输⼊ : User_Number
* 输出 : 密码正确与错误,错误返回0,正确返回1
********************************************************************/ uchar Chack(uchar User_Number)
{
uchar flag, i,temp[6],Address;
Address=User_Number*10;
for(i=0;i<6;i++)
{
temp[i]=x24c02_read(Address);
delayms(10);
Address++;
}
for(i=0;i<6;i++)
{
if(temp[i]==UserPassword[i])
flag=1;
else
flag=0;
}
return flag;
}
/******************************************************************** * 名称 : PassWord_Chack()
* 功能 : 所有⽤户密码检测
* 输⼊ : ⽆
* 输出 : 密码正确与错误,错误返回0,正确返回1
********************************************************************/ uchar PassWord_Chack()
{
uchar i=0;
while(i<User)
{
if(Chack(i)==2)
{
Member=i+2;
return 1;
}
i++;
}
}
return 0;
}
void delay(uint tt)
{  uchar i;
横幅制作
while(tt--)
{
for(i=0;i<125;i++);
}
}
/********************************************************************
* 名称 : UART_Init()
* 功能 : 单⽚机串⼝初始化
* 单⽚机:晶振11.0592MHz 波特率为9600bps
* 指纹模块:波特率为9600bps,
********************************************************************/
void UART_Init()
{
云资源共享
SCON= 0x50;              //串⼝⽅式1 //REN=1; 允许接收
PCON=0x01;                //SMOD=0
TMOD= 0x01;              //定时器1定时⽅式2
TH1= 0xFD;                //11.0592MHz  模块默认波特率为9600bps
TL1= 0xFD;
TR0= 1;                  //启动定时器
EA=1;
}
unsigned char Keycan(void) //按键扫描程序 P1.0--P1.3为⾏线 P1.4--P1.7为列线{
unsigned char rcode, ccode;
P1 = 0xF0;      // 发全0⾏扫描码,列线输⼊
if((P1&0xF0) != 0xF0) // 若有键按下
{
delay(1);// 延时去抖动
if((P1&0xF0) != 0xF0)
{
rcode = 0xef;        // 逐⾏扫描初值
while((rcode&0x10) != 0)
{
P1 = rcode;        // 输出⾏扫描码
if((P1&0xF0) != 0xF0) // 本⾏有键按下
{
ccode = (P1&0xF0)|0x0F;
//do{;}
while((P1&0xF0) != 0xF0); //等待键释放
return ((~rcode) + (~ccode)); // 返回键编码
}
else
rcode = (rcode<<1)|0x01; // ⾏扫描码左移⼀位
}
}
}
return 0; // ⽆键按下,返回值为0
}
void KeyDeal(unsigned char Key)
{  //unsigned char n;
if(Key!=0)
{
switch(Key)
{
case 0x12: K=1; break;
手写触摸屏
case 0x22: K=2; break;
case 0x42: K=3; break;
case 0x82: break;

本文发布于:2024-09-23 01:32:29,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/3/235073.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:指纹   模块   按键   电路   系统   源码   扫描   程序
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议