【Proteus仿真】【51单片机】电子密码锁设计

这篇具有很好参考价值的文章主要介绍了【Proteus仿真】【51单片机】电子密码锁设计。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


一、功能简介

本项目使用Proteus8仿真51单片机控制器,使用LCD1602液晶、矩阵按键、蜂鸣器、EEPROM模块、继电器模块等。

系统运行后,LCD1602显示密码输入提示界面,系统存储在EEPROM的初始密码为123456,
用户可通过矩阵按键S1-S10输入数值0-9,当在密码输入过程中有误,可按S11键回删并重新输入。当密码输入完成后,可按S12键确认,校验密码是否正确,如密码输入正确,电磁阀工作开门,对应D3指示灯点亮;如密码输入错误,LCD显示错误信息,可重新输入密码,最多可输入3次,如还输入错误,系统锁死,需等待10S钟解锁系统方可再次输入。当管理员需要更换密码时,可按下S13键,LCD显示更换密码界面,此时可通过S1-S10输入修改密码,修改过程中如需更改可按S11键回删并重新输入。修改密码完成后可按下S12键保存新密码至EEPROM中,更新的密码可断电不丢失。


二、软件设计

/*
作者:嗨小易(QQ:3443792007)
*/




//定时器0中断函数
void time0() interrupt 1
{
	static u32 i=0;
	
	TH0=0XDC;	//给定时器赋初值,定时10ms
	TL0=0X00;

	i++;
	if(i==(100*AFRESH_TIME))//时间到
	{
		i=0;
		time0_stop();//关闭定时器
		lock_sys_control.time_flag=1;		
	}
}

//主界面,输入密码提示
void main_display(void)
{
	memset(lock_sys_control.password,0,6);//密码数据清零
	lock_sys_control.time_flag=0;
	lock_sys_control.resive_flag=0;
	delay_ms(500);
	lcd1602_clear();
	lcd1602_show_string(0,0,"Password Input:");			
}

//密码输入错误次数超过规定值,等待指定时间后可重新输入
void password_error_wait_afreah_input(void)
{
	time0_start();//开启定时器
	lcd1602_clear();
	lcd1602_show_string(0,0,"Error Too much!");
	lcd1602_show_string(0,1,"Please Wait...");
	while(1)
	{
		if(lock_sys_control.time_flag)//时间到
		{
			RELAY=1;
			lock_sys_control.error_cnt=0;
			break;	
		}			
	}		
}

//密码输入、修改
void password_input(void)
{
	u8 key=0;
	u8 cnt=0;

	while(1)
	{
		key=key_matrix_flip_scan();

		//密码输入
		if(key>0&&key<=10)//输入有效数字0-9,排除无效键输入
		{
			beep_alarm(100,10);//提示音
			if(cnt<6)//有效密码位数,确保6位有效
			{
				if(lock_sys_control.resive_flag==0)
				{
					lock_sys_control.password[cnt]=key-1;//记录用户输入密码
					if(PASSWORD_SHOW_HIDE==0)
						lcd1602_show_num(cnt,1,'*',0);
					else
						lcd1602_show_num(cnt,1,lock_sys_control.password[cnt],1);
				}	
				else//修改密码状态
				{
					lock_sys_control.save_password[cnt]=key-1;//记录验证密码
					lcd1602_show_num(cnt,1,lock_sys_control.save_password[cnt],1);	
				}	
				cnt++;	
			}								
		}
		
		//输入撤回
		if(cnt>0)//有输入密码,撤回才有效
		{
			if(key==11)//撤回键
			{
				beep_alarm(100,10);
				cnt--;
				if(lock_sys_control.resive_flag==0)
				{
					lock_sys_control.password[cnt]=' ';
					lcd1602_show_num(cnt,1,lock_sys_control.password[cnt],0);	
				}
				else//修改密码状态
				{
					lock_sys_control.save_password[cnt]=' ';
					lcd1602_show_num(cnt,1,lock_sys_control.save_password[cnt],0);	
				}		
			}		
		}
		
		//密码确认
		if(key==12)//密码确认键
		{
			beep_alarm(100,10);
			if(lock_sys_control.resive_flag==0)
			{
				if(lock_sys_control.error_cnt<ERROR_PASSWORD_CNT)//密码输错,还可继续重新输入
				{
					if(memcmp(lock_sys_control.password,lock_sys_control.save_password,6))//密码错误
					{
						lock_sys_control.error_cnt++;
						lcd1602_show_string(0,1,"Password Error!");
						//密码错误,不可继续输入,需等待10S重新输入
						if(lock_sys_control.error_cnt==ERROR_PASSWORD_CNT)
							password_error_wait_afreah_input();	
						break;				
					}
					else//密码正确,开锁
					{
						RELAY=0;
						lock_sys_control.error_cnt=0;
						lcd1602_show_string(0,1,"Password OK!");
						delay_ms(2000);
						RELAY=1;
						break;		
					}		
				}	
			}
			else//修改密码状态
			{
				lock_sys_control.resive_flag=0;//修改完成
				lcd1602_show_string(0,1,"Password Set OK!");
				at24cxx_write_str(lock_sys_control.save_password,0,6);//存储新密码
				break;			
			}		
		}
		
		//密码修改
		if(key==13)//密码修改键
		{
			beep_alarm(100,10);
			lock_sys_control.resive_flag=1;
			cnt=0;
			lcd1602_clear();
			lcd1602_show_string(2,0,"Password Set:");	
		}		
	}	
}


//数字密码锁控制系统
void password_lock_control_sys(void)
{
	u8 init_flag=0;
	u8 i=0;
	
	lcd1602_init();//LCD1602初始化
	time0_init();//初始化定时器0

	init_flag=At24c02Read(250);
	if(init_flag!=0xAA)//初始化一次,防止重复初始化密码
	{
		At24c02Write(250,0xAA);
		for(i=1;i<7;i++)lock_sys_control.save_password[i-1]=i;
		delay_ms(10);
		at24cxx_write_str(lock_sys_control.save_password,0,6);//写入初始密码123456	
	}
	at24cxx_read_str(lock_sys_control.save_password,0,6);//读取密码

	while(1)
	{
		main_display();//主界面显示
		password_input();//密码输入、修改					
	}	
}



三、实验现象

演示视频:https://space.bilibili.com/444388619

电子密码锁设计,【Proteus仿真】【51单片机】趣味项目设计,proteus,51单片机,单片机

电子密码锁设计,【Proteus仿真】【51单片机】趣味项目设计,proteus,51单片机,单片机
电子密码锁设计,【Proteus仿真】【51单片机】趣味项目设计,proteus,51单片机,单片机
电子密码锁设计,【Proteus仿真】【51单片机】趣味项目设计,proteus,51单片机,单片机


联系作者

专注于51单片机、STM32、国产32、DSP、Proteus、ardunio、ESP32、物联网软件开发,PCB设计,视频分享,技术交流。文章来源地址https://www.toymoban.com/news/detail-538586.html

到了这里,关于【Proteus仿真】【51单片机】电子密码锁设计的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 51单片机简易电子密码锁

    由于作业需求,在昨天天晚上写了一个通过lcd1602,i2c,eeprom,按键,实现的可以设置密码的简易电子锁,    首先点击k15(回车键)进入  进入后可以点击0-9按键输入6位密码,错误则显示error,5s后重新显示密码输入页面,密码正确则进入。    进入后可以点击Esc键设置密码,进入设

    2024年02月02日
    浏览(47)
  • 基于51单片机的电子密码锁

    主要功能: 1、6位密码开锁 可以修改用户密码和管理员密码 断电记忆 3次错误报警锁住键盘

    2024年02月11日
    浏览(48)
  • 基于STM32单片机的密码锁(Proteus仿真、程序)

    由STM32F103单片机最小系统+ 4*4矩阵键盘+LCD1602液晶显示+蜂鸣器+继电器模块 1、采用STM32F103为主控芯片 2、通过4*4矩阵键盘实现密码输入、功能键等排列如下 1     2    3     删除 4     5    6     修改密码 7     8    9     重新输入 返回  0   确认   紧急开锁键 3、每按下一次

    2024年02月07日
    浏览(63)
  • 51单片机学习--矩阵键盘、电子密码锁

    矩阵键盘的模块原理图: 功能:按下矩阵按键,在LCD上显示对应的数值。 采用模块化编程,在此只给出MatrixKey.c 和 main.c 两部分代码 这里要注意必须先判断KeyNum是否为0,否则while不断循环会不断显示0,导致看不到按下按钮显示的数字 要利用写好的矩阵键盘来制作一个密码锁

    2024年02月16日
    浏览(56)
  • 基于51单片机的电子密码锁设计

    一.硬件方案         本系统由STC89C52单片机、4*4矩阵键盘,蜂鸣器,复位电路和晶振电路、继电器等组成,4*4键盘主要用于密码的输入和修改,蜂鸣器报警,复位电路和晶振电路与STC89C52单片机组成单片机最小系统。它具有设置、修改6位用户密码、输错报警、密码错误报

    2024年02月16日
    浏览(48)
  • 基于STM32单片机的密码锁(Proteus仿真+程序+报告)

    3-基于STM32单片机的密码锁 功能描述如下:          由STM32F103单片机最小系统+ 4*4矩阵键盘+LCD1602液晶显示+蜂鸣器+继电器模块; 1、采用STM32F103为主控芯片。 2、通过4*4矩阵键盘实现密码输入、功能键等排列如下 1     2    3     删除 4     5    6     修改密码 7   

    2024年02月08日
    浏览(59)
  • (含代码)基于51单片机电子密码锁设计

    一.硬件说明 采用STC89C51作为主控芯片,结合矩阵按键输入模块、数码管显示模块、LCD1602液晶显示、LED、蜂鸣器报警器等电路模块实现开锁、上锁、报警、密码更改等功能,设计一款可修改密码且具有报警功能的液晶显示电子密码锁。 主要由STM32单片机+最小系统+LCD1602液晶显

    2024年01月16日
    浏览(51)
  • 基于51单片机密码锁(修改密码,串口上锁解锁,仿真)

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 目录 一、仿真图 二、步骤 1.矩阵按键 2.串口配置 3.串口接收数据判断 4.修改密码+密码输入 总结 前言 LCD1602+矩阵按键+串口上锁解锁+修改密码   提供参考 代码如下: 代码如下(示例): 这里把判断拿

    2024年02月15日
    浏览(45)
  • c51单片机16个按键密码锁源代码(富proteus电路图)

     注意了:这个代码你是没法直接运行的,但是如果你看得懂,随便改一改不超过1分钟就可以用

    2024年02月13日
    浏览(42)
  • 基于AT89C51单片机的8位密码锁仿真与实物制作

    点击链接获取Keil源码与Project Backups仿真图: https://download.csdn.net/download/qq_64505944/88657969?spm=1001.2014.3001.5503 源码获取 C 源码+仿真图+毕业设计+实物制作步骤+01 摘要 在日常的生活和工作中, 住宅与部门的安全防范、单位的文件档案、财务报表以及一些个人资料的保存多以加锁的

    2024年01月23日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包