基于AT89C51单片机的电子密码锁设计与仿真

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

点击链接获取Keil源码与Project Backups仿真图:
https://download.csdn.net/download/qq_64505944/87760996?spm=1001.2014.3001.5503
基于AT89C51单片机的电子密码锁设计与仿真

源码获取
主要内容:
(1)本设计为了防止密码被窃取要求在输入密码时在LCD屏幕上显示*号。
(2)设计开锁密码位六位密码的电子密码锁。
(3)能够LCD显示在密码正确时显示PASSWORD OK,密码错误时显示PASSWORD ERROR,输入密码时显示INPUT PASSWORD。
(4)实现输入密码错误超过限定的三次电子密码锁定。
(5)4×4的矩阵键盘其中包括0-9的数字键和A-F的功能键
(6)本产品具备报警功能,当输入密码错误时蜂鸣器响并且LED灯亮。
(7)密码可以由用户自己修改设定(只支持6位密码),修改密码之前必须再次输入密码,在输入新密码时候需要二次确认,以防止误操作 。
基本要求:
1.通过课程设计,提高程序开发功能,能运用合理的控制流程编写清晰高效的程序。
2.通过课程设计,训练C程序调试能力,能将一个中小型各级组织系统联调通过。
3.通话课程设计,培养分析问题、解决实际问题的能力。

1.设计要求;

用电子器件设计制作一个密码锁,使之在输入正确的密码时开锁;
在锁的控制电路中设-一个可以修改的4位代码,当输入的代码和控制电路的代码一致时打开;
用红灯亮、绿灯灭表示关锁,绿灯亮、红灯灭表示开锁。
如5s内未能将锁打开,则电路自动复位进入自锁状态,并发报警信号。

2.硬件设计:
基于AT89C51单片机的电子密码锁设计与仿真

电子密码锁的结构框图如图1-1所示,选用单片机STC89C52作为电子密码锁的核心控制器件,在单片机的外围电路接矩阵键盘,用于输入密码并实现一些控制功能,外接LCD1602显示模块显示开锁信息,外接继电器,用继电器常开触点闭合模拟开锁动作,外接指示灯与蜂鸣器作为密码锁开锁成功或不成功的声光提示。

图中包括单片机最简单应用系统、 4╳3矩阵键盘、LCD1602显示电路、继电器电路和声光指示电路。
矩阵键盘的4根行线接在P2.0P2.3上,3根列线接在P2.4P2.6上。行线作为输出端,列线作为输入端,由于P2口内部有上拉电阻,无键按下时,列线输入均为高电平。

电子密码锁电路原理图如图1- 1所示
矩阵键盘、LCD1602显示电路、继电器电路和声光指示电路。矩阵键盘的4根行线接在P2.0P2.3上,3根列线接在P2.4P2.6上。行线作为输出端,列线作为输人端,由于P2口内部有上拉电阻,无键按下时,列线输人均为高电平。确定矩阵式键盘中的哪个键被按下,采用逐行扫描查询法,依次将行线置为低电平,再逐行检测各列线的电平状态,若某列为低电平,则该列线与置为低电平的行线交叉处的按键为闭合键。若所有的列线均为高电平,则无按键按下。LCD1602字符型液晶显示器的数据端口接单片机的 P 口,由单片机的P1.0~P1.2控制 LCD 的 RS 、 RW 和 E 控制端口。
基于AT89C51单片机的电子密码锁设计与仿真

开锁成功的仿真结果
3.程序设计

程序包括主程序、键盘扫描子程序、液晶显示器程序等。主程序进行变量及端口初始化定义,调用键盘扫描子程序,将按下的键值显示在液晶屏上,并很快替换为“*”,等六位密码全部输完后,进行密码匹配,如果密码正确,则液晶显示“ open”,同时开锁成功指示灯亮,否则液晶显示;“ error”,同时开锁失败指示灯亮。

端口初始化定义,调用键盘扫描子程序,将按下的键值显示在液晶屏上,并很快替换为“*”,等六位密码全部输完后,进行密码匹配,如果密码正确,则液晶显示“open",同时开锁成功指示灯亮,否则液晶显示“ error”,同时开锁失败指示灯亮。
设计的程序如下:

#include <reg51.h>
#include<intrins.h>
#define uchar unsigned char
sbit RS=P1^0;
sbit RW=P1^1;
sbit EN=P1^2;
sbit ledg=P1^3;
sbit ledr=P1^7;
sbit relay=P1^4;
sbit buzz=P1^6;
char table0[]="error";
char table1[]="open";
char table2[]="password:";
int temp,ch,m0,m1,p,n0,n1,n2,n3,n4,n5;
void   delay(int z)
{ int x,c;
  for(x=z;x>0;x--)
  for(c=100;c>0;c--);
}
keyscan()
{ temp=P2&0xf0;
	P2=0xfe;
  delay(1);
	temp=P2&0xf0;
	while(temp!=0xf0)
	{ switch(temp)
		{
		case 0xe0:ch='7';break;
		case 0xd0:ch='8';break;
		case 0xb0:ch='9';break;
		default:ch=p;break;
		}
		while (temp!=0xf0)
		{ temp=P2;
			temp=temp&0xf0;
		}
	}
P2=0xfd;
delay(1);
temp=P2&0xf0;
while(temp!=0xf0)
{    switch(temp)
	{    case 0xe0:ch='4';break;
	     case 0xd0:ch='5';break;
	     case 0xb0:ch='6';break;
	     default:ch=p;break;
	}
	while(temp!=0xf0)
	{    temp=P2;
		   temp=temp&0xf0;
	
}
void open()
{
	char m2;
	wcom(0xc6);
	for(m2=0;m2<4;m2++)
	{
	wdat(table1[m2]);
	}
}
void error()
{ char m2;
	wcom(0xc6);
	for(m2=0;m2<5;m2++)
	{ wdat(table0[m2]);
	}
}
void pass()
{
	char m2;
	wcom(0x80);
	for(m2=0;m2<9;m2++)
	{
		wdat(table2[m2]);
	}
}
void change(int m)
{
	delay(500);
	wcom(m);
	wdat('*');
}
void main()
{
	RW=0;
	ledg=0;
	ledr=0;
	relay=1;
	buzz=1;
	init();
	delay(5);
	pass();
	wcom(0x89);
	while(keyscan()==p)
	{
		delay(3);
		keyscan();
	}
	wdat(keyscan());
  n0=keyscan();
  change(0x89);
  delay(10);
  ch=p;
  while(keyscan()==p)
	{
    delay(3);
		keyscan();
	}
	wdat(keyscan());
	n1=keyscan();
	change(0x8a);
	ch=p;
	while(keyscan()==p)
	{
		delay(3);
		keyscan();
	}
	wdat(keyscan());
	n2=keyscan();
	change(0x8b);
	ch=p;
	while(keyscan()==p)
	{
		delay(3);
		keyscan();
}
wdat(keyscan());
n3=keyscan();
change(0x8c);
ch=p;
while(keyscan()==p)
{
	delay(3);
	keyscan();
}
wdat(keyscan());
n4=keyscan();
change(0x8d);
ch=p;
while(keyscan()==p)
{
	delay(3);
	keyscan();
}
wdat(keyscan());
n5=keyscan();
change(0x8e);
if(n0=='1'&&n1=='8'&&n2=='0'&&n3=='1'&&n4=='2'&&n5=='2')
{
	int m3=1;
	open();
	relay=0;
	delay(3000);
	relay=1;
	while(m3)
	{
		int m4,m5;
		ledg=0;
		for(m4=200;m4>0;m4--)
		{
			keyscan();
			if(keyscan()=='A')
			{
				m4=0;
				m3=0;
			}
		}
		ledg=1;
		if(m3!=0)
		{
			for(m5=200;m5>0;m5--)
			{
				keyscan();
				if(keyscan()=='A')
				{
					m3=0;
				}
			}
		}
	}
}
else
{
	ledr=1;
	error();
	buzz=0;
	delay(5000);
}
}

4.仿真与实验结果

电子密码锁仿真电路及结果如图2示,按下预设的6位密码18012”液晶显示器第1行显示:“password: *****“, 第2行在中间位置显示“open”,继电器后面所接的指示灯PI.3口所接的开锁成功指示灯亮灭闪烁,如果输入的密码不是预设的密码,则液晶第2行在中间位置显示“error”,表示开锁失败,相应的指示灯也点亮。
仿真结果图如下所示:

基于AT89C51单片机的电子密码锁设计与仿真

5.异常现象分析与解决方法

1.由于代码过多,在编程中容易出错,所以在编程过程中要认真仔细。
2.密码锁无法输入密码,我积极向老师同学求助,最后在他们的帮助下,完成课程设计
3.按键不灵敏。
初步想法是:程序里包含了太多的延时。解决方法:减少延时时间尽量不用,将延时函数延时时间减短,将标志数增加。
输入数字时显示数字,并不显示‘',存在一定的密码泄露风险。
解决方法:查阅资料,知道‘
’在1602里是0x2a,这样就可以在显示的时候输入数据位“0x2a”
6.心得体会

通过电子密码锁的课程设计有了很大的收获。首先,通过学习使自己对课本上的知识可以应用于实际,使理论与实际结合,加深自己对课本知识的理解。不足道的地方就是因为时间关系,没有能够将实物做出来验证自己的设计。但是在设计过程中用到了Multisim仿真验证,对Multisim达到学以致用的目的。以前只是泛泛的了解过Multisim 软件功能,在电路的设计过程中通过大量的运用,使自己在软件仿真方面有了很大的提高,有了受益匪浅的感觉。

在做电子密码锁的课程设计中,我感受到了老师对学生的悔人不卷的精神,老师细心的指导,使我少走了弯路,学到了很多电子应用技术的知识,顺利完成了课程设计,在这里对指导老师.表示衷心的感谢!

主要参考资料:
[1]王海军.一种单片机和云平台的电子密码锁设计[J].电子世界,2020(24):146-147.
[2]郭阳光.基于单片机的指纹识别电子密码锁设计[J].电子测试,2020(23):29-30+53.
[3]韩燕楚,余宏.基于51单片机的电子密码锁设计与应用研究[J].漯河职业技术学院学报,2020,19(06):21-23.
[4]韩旭,吴华,杨岱霖,邓昕.基于STC89C52的电子密码锁设计[J].电子技术,2020,49(10):10-11.
[5]黄田,杨婷婷,姜少维,李佳康,董莉霞.基于单片机的电子密码锁设计[J].软件,2020,41(10):102-104.
[6]孙凯悦.基于单片机的按键电子密码锁设计[J].科技经济导刊,2020,28(26):55-56.
[7]陈后全.基于51单片机设计的密码锁[J].电子制作,2020(10):37-38.文章来源地址https://www.toymoban.com/news/detail-435887.html

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

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

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

相关文章

  • 基于AT89C51单片机的电子密码锁设计与仿真

    基于AT89C51单片机的电子密码锁设计与仿真

    点击链接获取Keil源码与Project Backups仿真图: https://download.csdn.net/download/qq_64505944/87760996?spm=1001.2014.3001.5503 源码获取 主要内容: (1)本设计为了防止密码被窃取要求在输入密码时在LCD屏幕上显示*号。 (2)设计开锁密码位六位密码的电子密码锁。 (3)能够LCD显示在密码正确

    2024年02月03日
    浏览(11)
  • 基于AT89C51单片机的电子计数器设计与仿真

    基于AT89C51单片机的电子计数器设计与仿真

    点击链接获取Keil源码与Project Backups仿真图: https://download.csdn.net/download/qq_64505944/87770826 源码获取 主要内容: 设计一个电子计时器,数码管初始显示值为“00”,每隔1s电子秒表加1;秒计数到60时清0,并从00重新开始。 基本要求: 1、电子定时器电路设计图; 2、电子定时器设

    2024年02月15日
    浏览(13)
  • 基于 AT89C51 单片机的数字时钟设计

    基于 AT89C51 单片机的数字时钟设计

    目录 1.设计目的、作用 2.设计要求 3.设计的具体实现 3.1 设计原理 3.2 硬件系统设计         3.2.1 AT89C51 单片机原理 3.2.2 晶振电路设计 3.2.3 复位电路设计 3.2.4 LED 数码管显示 3.3 系统实现 3.3.1 系统仿真与调试 3.3.2 演示结果 4.总结 附录 附录 1 附录 2 (1 )掌握 51 系列单片机的

    2024年02月01日
    浏览(10)
  • 基于AT89C51单片机的交通灯设计

    基于AT89C51单片机的交通灯设计

    点击链接获取Keil源码与Project Backups仿真图: https://download.csdn.net/download/qq_64505944/87779238?spm=1001.2014.3001.5503 源码获取 主要内容: 在日常生活中,交通灯是一项必不可少的公共设施,可 以维护道路的畅通和交通的秩序。如若交通灯发生故障,那 么后果可想而知。因此,交通灯

    2024年02月08日
    浏览(10)
  • 基于AT89C51单片机的温度检测报警设计

    基于AT89C51单片机的温度检测报警设计

    点击链接获取Keil源码与Project Backups仿真图: https://download.csdn.net/download/qq_64505944/87777752?spm=1001.2014.3001.5503 源码获取 主要内容: 基于51单片机设计一个温度检测报警器,至少具有以下功能:温度的检测和超过设定值时的报警功能 基本要求: 1、功能齐全,要配有功能说明;

    2024年02月03日
    浏览(9)
  • 基于AT89C51单片机的温度计设计

    基于AT89C51单片机的温度计设计

    点击链接获取Keil源码与Project Backups仿真图: https://download.csdn.net/download/qq_64505944/87773445 源码获取 主要内容: 设计一个简易温度计;要求电路实现如下功能: 设计通过单片机和数码管、led灯等组成,可以显示温度,并且可以显示大于零度的温度和小于零度的温度,还可以超出

    2024年02月05日
    浏览(10)
  • 基于AT89C51单片机的简易计算机设计

    基于AT89C51单片机的简易计算机设计

    点击链接获取Keil源码与Project Backups仿真图: https://download.csdn.net/download/qq_64505944/87715642?spm=1001.2014.3001.5503 源码获取 主要内容: 本设计是以单片机AT89C51为核心的简易计算器设计,要通过芯片AT89C51实现计算器程序运行来完成加、减、乘和除的简单计算功能。 基本要求: 1、采

    2024年02月08日
    浏览(10)
  • 基于AT89C51单片机的倒数计时器设计

    基于AT89C51单片机的倒数计时器设计

    1.设计任务 利用AT89C51单片机为核心控制元件,设计一个简易的数字电压表,设计的系统实用性强、操作简单,实现了智能化、数字化。 本设计采用单片机为主控芯片,结合 周边 电路组成 LED 彩灯的 闪烁 控制系统器,用来控制 红色 的LED 闪烁 发光,实现 LED灯在倒计时结束后

    2024年02月03日
    浏览(14)
  • 基于AT89C51单片机的智能浇花系统设计

    基于AT89C51单片机的智能浇花系统设计

    目 录 摘 要 I ABSTRACT I 1 绪论 1 1.1 课题背景和意义 1 1.1.1选题背景 1 1.1.2研究意义 1 1.2 国内外发展现状及趋势 2 1.3研究主要内容 3 2 总体设计方案 5 2.1 浇灌系统设计的需求 5 2.2 总体设计方案选定 5 3 系统硬件设计 6 3.1 LCD1602显示接口线路 6 3.2 ADC0832简介 6 3.3 湿度传感器介绍 7

    2024年02月05日
    浏览(12)
  • 基于AT89C51单片机的计算器设计与仿真

    基于AT89C51单片机的计算器设计与仿真

    点击链接获取Keil源码与Project Backups仿真图: https://download.csdn.net/download/qq_64505944/87759134?spm=1001.2014.3001.5503 源码获取 主要内容: 本次设计所提出的一种基于单片机技术的简易计算器的方案,能更好的解决计算机计算的问题,随着数字生活的到来,单片机在生活中越来越重要,它

    2024年02月03日
    浏览(9)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包