单片机课程设计--电子密码锁(源代码+proteus仿真)

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

目录

器件选择

电路图 

代码 

1、LCD显示功能

1)LCD端口

2)字模的定义

3)提示符的显示

4)输入密码/重置密码时密码行的显示

2、总控制

1)主函数

2)key函数---判断用户想要进行的操作

3)display函数功能---接收用户输入数据并调用相应函数进行操作

4)判断密码正误

5)重置密码

6)in_code函数---将后一个数组内容复制到前一个数组中

程序运行效果

1、启动

2、输入密码时的显示

3、重置密码时的显示

4、其他提示符的显示

1)密码输入正确提示符

 2)密码输入错误提示符

 3)密码错误三次时的提示符


本设计是基于AT89C51单片机的电子密码锁设计,实现电子密码锁的基本功能。

器件选择

序号

器件编号

Proteus器件名称

器件性质

参数及说明

1

U1

AT89C51

单片机

12MHz

2

D1-D2

LED

发光二极管

red,green

3

R1-R2

RES

电阻

470欧

4

LCD1

LMO16L

液晶显示屏

/

5

K0-K9,KA,KB

BUTTON

按钮开关

置数

电路图 

单片机课程设计--电子密码锁(源代码+proteus仿真)

代码 

1、LCD显示功能

1)LCD端口

/*LCD端口定义*/
sbit RS=P2^0;
sbit RW=P2^1;
sbit  E=P2^2;

2)字模的定义


/*字模的定义*/ 

uchar  code string1[]={"input code"};//输入密码字符显示	

uchar  code string2[]={"INCORRET"};//提示密码错误
uchar  code string3[]={"TRY AGAIN"};//输入密码字符显示

uchar  code string4[]={"CORRET"};//密码正确提示
uchar  code string5[]={"UNLOCK"};

uchar  code string6[]={"ERROR THREE TIMES"};//密码错误三次提示
uchar  code string7[]={"LOCK ---"};//密码正确提示

uchar  code string8[]={"input new code"};//提示输入新密码
uchar  code string9[]={"SUCCESS!"};//提示输入新密码
  
/*坐标*/
uchar data table[]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39};

3)提示符的显示

/*输出提示字符*/

/*input code*/
void ic(uchar m)
{
	for(m=0;m<sizeof(string1);m++)
    	lcd_write(m+3,0,string1[m]);	
}

/*密码正确提示*/
void correct(uchar m)
{ 
	for(m=0;m<sizeof(string4);m++)
    {	lcd_write(m+5,0,string4[m]);
	}
	for(m=0;m<sizeof(string5);m++)
    {	lcd_write(0,m+5,string5[m]);
	}
	delay(1000);
	initialize();
	lcd_wcom(0x01);  //清显示,光标复位到地址00H位置 
						
}

/*密码错误提示*/
void incorrect(uchar m)
{
	for(m=0;m<sizeof(string2);m++)
    {	lcd_write(m+4,0,string2[m]);
	}
	for(m=0;m<sizeof(string3);m++)
    {	lcd_write(0,m+3,string3[m]);
	}	
	delay(500);
	lcd_init();  //清显示,光标复位到地址00H位置
	initialize();         			
}

/*密码错误三次提醒*/
void three(uchar m)
{	
	uint i;	
	for(i=0;i<6;i++)
	{
	for(m=0;m<sizeof(string6);m++)
    {	lcd_write(m,0,string6[m]);
	}
	for(m=0;m<sizeof(string7);m++)
    {	lcd_write(0,m+1,string7[m]);
	}		
	
		delay(500);
		lcd_write(0,10,table[5-i]);
		lcd_write(0,11,'s');
	}
	lcd_init();  //清显示,光标复位到地址00H位置
	initialize();	
	

} 	
/*输入新密码提示*/
void new_code(uchar m)
{
	for(m=0;m<sizeof(string8);m++)
    	lcd_write(m+1,0,string8[m]);		
}

/*成功提示*/
void new_su(uchar m)
{
	for(m=0;m<sizeof(string9);m++)
    	lcd_write(m+5,0,string9[m]);
		
	delay(1000);
	lcd_init();  //清显示,光标复位到地址00H位置
	initialize();			
}
/*输出input code*/
void string_show(uchar choice)
{
	uchar m;
	lcd_init();
	switch(choice)
	{
		case 1:ic(m);break;//输入提示
		case 2:correct(m);break;//正确提示
		case 3:incorrect(m);break;//错误提示
		case 4:three(m);break;//错误三次提示
		case 5:new_code(m);break;//输入新密码提示
		case 6:new_su(m);break;//重置密码成功
		default:break;
	}

}

4)输入密码/重置密码时密码行的显示

/*显示密码初始位及用户进行输入时的状态*/
uchar data nnumin[]={"- - - -"};
uchar code nnum[]={"- - - -"};
uchar code numshow[]={"* * * *"};

/*初始化初始状态显示数组*/
void initialize()
{
	uint i;
	for(i=0;i<sizeof(nnum);i++)
	{	nnumin[i]=nnum[i];
	}
}

/*用户输入密码时的显示*/
void input(uchar num) 
{   
   	uchar n,i;
	for(n=0;n<8;n++)
	{
		if(sizeof(num)!=0)
		{
			if(num!=0)
			{			
				for(i=0;i<num;i++)
				{
					nnumin[2*i]=numshow[2*i];
				}
			}
			else initialize();//输入密码时按下A/B按钮,则重新开始
		}
		lcd_write(0,n+5,nnumin[n]);		
	} 
}

/*用户重置密码时显示*/
void reset_code(uint c,uchar *num)
{
	uchar n,i;
	for(n=0;n<8;n++)
	{
		if(c!=0)
		{
			for(i=0;i<sizeof(num)+1;i++)
			{
				if(num[i]!='-')
				nnumin[2*i]=table[num[i]]; 
					
			}	
		}
		lcd_write(0,n+5,nnumin[n]);
		
	}
}

2、总控制

负责完成实现电子密码锁的重置密码,判断密码正误等功能。

1)主函数

void main()
{ 	
    lcd_init();  //初始化lcd
	lcd_wcom(0x40); //设定CGRAM地址 
	
	LEDR=1;
	LEDG=1;
	while(1)
	{		
		key();//判断用户想要进行的操作(开锁or重置密码)
		if(keyin==1)
		{	
			display();									
		}	
	}
}

2)key函数---判断用户想要进行的操作

bit keyin=0;//输入状态
bit keyre=0;//判断是否为重置密码状态

/*判断按键的内容*/
void key()
{
	num=KeyPro();
	if(num=='A')
	{
		keyin=~keyin;
		LEDR=0;
	}
	if(num=='B') 
	{
		keyre=~keyre;
		//重置密码之前需先解锁
		display();
		reset();
	} 
}

3)display函数功能---接收用户输入数据并调用相应函数进行操作

密码行初始状态为“----”,输入的密码位会显示为“*”,用户完全输入4位密码后会判断密码正误并根据具体情况输出相应提示符,同时亮相应颜色LED灯。

若用户在输入密码中途触发按钮“A”或“B”则之前输入的密码会清空,密码行状态重置为“----”。

uchar data scode[]={0,0,0,0};//设置的密码,初始为0000
uchar data ncode[]={0,0,0,0};//设置的密码,初始为0000
uchar data ncode2[]={9,9,9,9};//储存用户输入的内容

bit keyin=0;//输入状态
bit keyre=0;//判断是否为重置密码状态

uint inc=1;//判断是否出现连续三次的错误

/*输入密码,若判断为正确则解锁,
为错误则跳转界面重新输入*/
void  display()
{
	uint count=1;
	string_show(1);
	input(0);
	while(count<5)//输入四位密码后验证并跳转
	{	num=KeyPro();
		if(num!=0xff)
		{
			if(num>=0&&num<=9)
			{
				ncode2[count-1]=num;	
				input(count);	
				count++;
			}
			else//若在输入途中点击按钮A或B,则清零重新输入
			{
				memset(ncode2,'-',sizeof(ncode2));//ncode2重置
				count=1;
				input(0);
			    
			}
						
		}
			
   }
   //判断后输出提示
   if(confirm())
   {	LEDG=0;
   		string_show(2); 
		if(keyre!=1) 	keyin=0;//LCD停止显示			
		inc=1;
		//红灯亮,绿灯灭
		LEDG=1;
		LEDR=0;
   }
   else 
   {	LEDR=0;
   		if(inc<3)
		{
   			string_show(3);
   			
			inc++; 
		}
		else
		{	//错误三次后设置密码失效,锁定5秒
			in_code(scode,ncode);//将密码初始化为最初状态
			string_show(4);
			inc=1;			
		}
		count=1;	
   }
} 

4)判断密码正误

uchar data ncode[]={0,0,0,0};//设置的密码,初始为0000
uchar data ncode2[]={9,9,9,9};//储存用户输入的内容

bit check;//判断输入密码是否正确

/*验证密码,按钮A功能*/
uchar confirm(void)
{
	uint i,j;

	LEDR=1;
	LEDG=1;
	for(i=0;i<4;i++)
	{
		j=i;
		if(ncode[i]==ncode2[j])
		{
			check=1;
		}
		else
		{	
			check=0;
			break;							    
		}
	}
	memset(ncode2,'-',sizeof(ncode2));
	return check;		
}

5)重置密码

uchar data ncode2[]={9,9,9,9};//储存用户输入的内容

bit keyre=0;//判断是否为重置密码状态

/*重置密码*/
void  reset()
{
	uint count=1,cc;			
	string_show(5);
	reset_code(0,ncode2);	
	while(count<6)
	{	num=KeyPro();
		if(num!=0xff)
		{	
			if(num>=0&&num<=9)
			{
				ncode2[count-1]=num;	
				reset_code(1,ncode2);	
				count++;
				cc=1;
			}
			else//若在输入途中点击按钮A或B,则停止
			{	
				cc=0;
				count=6;  
				break;
			}					
		}
	}
	//若成功输入四位密码,则成功修改密码
	if(cc==1)
	{
		in_code(ncode,ncode2);
	}
	string_show(6);	
	keyre=0;		
}

6)in_code函数---将后一个数组内容复制到前一个数组中

void in_code(uchar *cc,uchar *cc1)
{
	uint i,j;
	for(i=0;i<4;i++)
	{
	 	j=i;
		cc[i]=cc1[i];
	}
}

程序运行效果

1、启动

单片机课程设计--电子密码锁(源代码+proteus仿真)

 2、输入密码时的显示

单片机课程设计--电子密码锁(源代码+proteus仿真)

3、重置密码时的显示

单片机课程设计--电子密码锁(源代码+proteus仿真)

 

4、其他提示符的显示

1)密码输入正确提示符

单片机课程设计--电子密码锁(源代码+proteus仿真)

 2)密码输入错误提示符

单片机课程设计--电子密码锁(源代码+proteus仿真)

 3)密码错误三次时的提示符

单片机课程设计--电子密码锁(源代码+proteus仿真)文章来源地址https://www.toymoban.com/news/detail-494166.html

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

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

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

相关文章

  • (含代码)基于51单片机电子密码锁设计

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

    2024年01月16日
    浏览(47)
  • 【Proteus仿真】【51单片机】电子密码锁设计

    本项目使用Proteus8仿真51单片机控制器,使用LCD1602液晶、矩阵按键、蜂鸣器、EEPROM模块、继电器模块等。 系统运行后,LCD1602显示密码输入提示界面,系统存储在EEPROM的初始密码为123456, 用户可通过矩阵按键S1-S10输入数值0-9,当在密码输入过程中有误,可按S11键回删并重新输

    2024年02月13日
    浏览(37)
  • 基于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日
    浏览(49)
  • 【毕业设计】11-基于单片机的电子密码锁设计(原理图+仿真工程+答辩论文+答辩PPT)

    资料链接 包含此题目毕业设计全套资料: 原理图工程文件 原理图截图 仿真工程文件 源代码工程文件 答辩论文(低重复率),18046字 主要研究内容: 基于51单片机作为主控,矩阵键盘、液晶显示器和密码存储等为外围电

    2024年02月13日
    浏览(40)
  • 51单片机-电子密码锁

    实物演示效果: https://www.bilibili.com/video/BV1xh4y1K7uV/?vd_source=6ff7cd03af95cd504b60511ef9373a1d 电子密码锁的主要功能 1.按键设置6位密码,输入密码若密码正确,则锁打开。显示open! 2.密码可以自己修改(6位密码),必须是锁打开时才能改密。为防止误操作,修改密码得输入两次。

    2024年01月17日
    浏览(44)
  • 51单片机简易电子密码锁

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

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

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

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

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

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

    电子密码锁设计,以AT89C51为主控,晶振电路和复位电路共同组成最小系统,使得单片机可以正常运行。矩阵按键作为输入模块,输入密码,LCD1602作为显示设备,显示输入的密码和提示语句,AT24C02作为EEPROM存储器,使用LED模拟“锁”,表示锁的开启和关闭状态。系统掉电后,

    2024年02月11日
    浏览(57)
  • 基于51单片机的红外密码锁设计[proteus仿真]

    密码锁检测系统这个题目算是课程设计和毕业设计中常见的题目了,本期是一个基于51单片机的红外密码锁设计 需要的源文件和程序的小伙伴可以关注公众号【阿目分享嵌入式】,赞赏任意文章 2¥,私信阿目【112基于51单片机的红外密码锁设计】即可获取(看到消息会第一时

    2024年02月21日
    浏览(53)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包