基于单片机的指纹打卡系统
目录
一、主要功能
二、硬件资源
三、程序编程
四、实现现象
一、主要功能
基于STC89C52RC,采用两个按键替代指纹,一个按键按下,LCD12864显示比对成功,则
采用ULN2003驱动步进电机转动,表示开门,另一个按键按下,则LCD12864显示比对失败,
此时启动蜂鸣器报警。
还有两个按键,一个按下后切换到第一个页面:请按指纹
第二个按键按下后,显示请再次按下指纹
二、硬件资源
基于KEIL5编写C++代码,PROTEUS8.15进行仿真,全部资源在页尾,提供安装包。
三、程序编程
#include < reg52.h >
#include < character.h >
#include < lcd.h >\
#include<string.h>
#include<stdio.h>
#include<intrins.h>
#include<stdlib.h>
#define INT8U unsigned char
#define INT16U unsigned int
sbit key1 = P0^0;
sbit key2 = P0^1;
sbit key3 = P0^2;
sbit key4 = P0^3;
sbit beep = P0^4;
INT8U code FFW_ARR[]={0x01,0x03,0x02,0x06,0x04,0x0C,0x08,0x09};
INT8U n = 1;
/*函数定义*/
void ajpd(); //按键判断函数
void jiemian1(void) //界面1 请按指纹
{
Lcd_Character_16X16( 1, 0, 0 , function_logo[5]); //
Lcd_Character_16X16( 1, 0, 16 , function_logo[6]); //
Lcd_Character_16X16( 1, 0, 32 , function_logo[7]); //
Lcd_Character_16X16( 1, 0, 48 , function_logo[8]); //
}
void jiemian2(void) //界面2
{
Lcd_Character_16X16( 1, 0, 0 , function_logo[0]); // 比
Lcd_Character_16X16( 1, 0, 16 , function_logo[1]); // 对
Lcd_Character_16X16( 1, 0, 32 , function_logo[2]); // 成
Lcd_Character_16X16( 1, 0, 48 , function_logo[3]); // 功
}
void jiemian3(void) //界面3 请再次按下指纹
{
Lcd_Character_16X16( 1, 0, 0 , function_logo[9]); //
Lcd_Character_16X16( 1, 0, 16 , function_logo[10]); //
Lcd_Character_16X16( 1, 0, 32 , function_logo[11]); //
Lcd_Character_16X16( 1, 0, 48 , function_logo[12]); //
Lcd_Character_16X16( 1, 0, 64 , function_logo[13]); //
Lcd_Character_16X16( 1, 0, 80 , function_logo[14]); //
Lcd_Character_16X16( 1, 0, 96 , function_logo[15]); //
}
void jiemian4(void) //界面4 比对失败
{
Lcd_Character_16X16( 1, 0, 0 , function_logo[0]); //
Lcd_Character_16X16( 1, 0, 16 , function_logo[1]); //
Lcd_Character_16X16( 1, 0, 32 , function_logo[4]); //
Lcd_Character_16X16( 1, 0, 48 , function_logo[16]); //
}
void jiemian5(void) //界面4 开机中
{
Lcd_Character_16X16( 1, 0, 32 , function_logo[17]); //
Lcd_Character_16X16( 1, 0, 48 , function_logo[18]); //
Lcd_Character_16X16( 1, 0, 64 , function_logo[19]); //
}
void delay_ms(INT16U x)
{
INT8U t=120;
while(x--)
while(t--);
}
void STEP_FFW(INT8U n)
{
INT8U i,j;
for(i=0; i<5*n; i++)
{
for(j=0; j<8; j++)
{
P1=FFW_ARR[j];
delay_ms(60);
}
}
}
void main(void)
{
Lcd_Initial(); //LCD初始化
Lcd_Display_On(); //启动屏幕
jiemian5();
Delay(1000);
Lcd_Clear();
beep = 0;
while(1)
{
ajpd();//按键判断
}
}
void ajpd()
{
if(key1 == 0) //指纹开
{
Lcd_Clear();
beep = 0;
jiemian2();
STEP_FFW(n);
while(!key1);
}
if(key2 == 0) //指纹关
{
Lcd_Clear();
jiemian4();
beep = 1;
while(!key2);
}
if(key3 == 0)
{
Lcd_Clear();
beep = 0;
jiemian1();
while(!key3);
}
if(key4 == 0)
{
Lcd_Clear();
beep = 0;
jiemian3();
while(!key4);
}
}
四、实现现象
具体动态效果看B站演示视频:
基于单片机的指纹打卡系统
全部资料(源程序、仿真文件、安装包、演示视频):
百度网盘下载资料https://pan.baidu.com/s/1kcXU1y_TuQWUwiNsIrfo-w?pwd=9nne