当前位置: 首页 > article >正文

基于单片机的指纹打卡系统

目录

一、主要功能

二、硬件资源

三、程序编程

四、实现现象


一、主要功能

基于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站演示视频:

基于单片机的指纹打卡系统

全部资料(源程序、仿真文件、安装包、演示视频):

百度网盘下载资料icon-default.png?t=O83Ahttps://pan.baidu.com/s/1kcXU1y_TuQWUwiNsIrfo-w?pwd=9nne


http://www.kler.cn/news/323868.html

相关文章:

  • 视频分割怎么弄?国内外Top 7视频剪辑软件大盘点,新媒体必看!
  • 一键自动化配置OpenHarmony编译环境
  • 花都狮岭寄宿自闭症学校:开启孩子的生命之门
  • 给Ubuntu虚拟机设置静态IP地址(固定IP)
  • 基于ASRPRO的语音应答
  • 基于php的在线租房管理系统
  • 如何使用Apache Kafka处理实时数据
  • 探究Spring的单例设计模式--单例Bean
  • 主从蓝牙配对_笔记(HC-05)
  • 阿里云图形化管理工具(oss-browser、oss浏览器、AcceassKeyId、AccessKeySecret)
  • Android 点击其他组件让输入框失去焦点
  • 基于php摄影门户网站
  • 手游和应用出海资讯:三七新游首月收入突破700万元;领英尝试推出游戏功能以增加用户使用时长
  • leetcode:LCR 169. 招式拆解 II(python3解法)
  • 智能Ai语音机器人的应用价值有哪些?
  • 【逐行注释】扩展卡尔曼滤波EKF和粒子滤波PF的效果对比,MATLAB源代码(无需下载,可直接复制)
  • window下 php 安装 lua扩展
  • Docker容器的使用
  • 银河麒麟v10 x86制作openssh 9.9p1 rpm二进制包(内含ssh-copy-id、显示openssl版本) —— 筑梦之路
  • 初始爬虫9
  • SSE协议
  • 如何使用ssm实现校园体育赛事管理系统的设计与实现+vue
  • SpringBoot使用hutool操作FTP
  • 不将“旧”,换新家电的门槛又被TCL拉低了
  • 探索未来IT技术的浩瀚星河:一场跨越时代的数字盛宴
  • docker笔记_数据卷、挂载
  • 【STM32】RTT-Studio中HAL库开发教程七:IIC通信--EEPROM存储器FM24C04
  • Labview helper
  • 用最容易理解的方法,实现LRU、LFU算法
  • 代码随想录训练营第45天|编辑距离