49、基于51单片机的密码锁(全套资料)

编号:49

基于51单片机的密码锁

功能描述:

由51单片机最小系统+ 4*4矩阵键盘+LCD1602液晶显示+蜂鸣器+继电器模块
1、采用51单片机为主控芯片
2、通过4*4矩阵键盘实现密码输入、功能键等排列如下
1     2    3     删除
4     5    6     修改密码
7     8    9     重新输入
返回  0   确认   紧急开锁键
3、每按下一次按键蜂鸣器会有‘滴’提示音
4、按任意数字键键,进入密码输入界面 输入正确密码开锁,继电器打开,再次关锁可通过关锁键关锁;输入密码错误三次,系统锁死一分钟后才可再次尝试;
5、按“修改密码”键,进入密码修改界面,首先输入原始密码才可进行修改,输错三次同样锁死一分钟后才可再次修改密码。
6、按“删除”键可删除退格。
7、按“重新输入”键可重新输入。
8、按“紧急开锁”键可直接一键开锁。
Proteus7.8以上版本均可使用

视频演示链接:

49、基于51单片机的密码锁

仿真图:

PCB图:

实物图:

程序源码:

#include "reg52.h"
#include "intrins.h"
#include "lcd1602.h"
#include "key.h"
#include "Password.h"
#include "delay.h"

sbit BEEP = P2^0;					//蜂鸣器控制脚定义
sbit JD = P2^1;						//继电器控制脚定义

bit Lock_Flag = 1;					//键盘可用标志位  1:可用 0:不可用
unsigned char Sec = 60;				//60秒 倒计时

void Timer0Init(void)	//50毫秒@11.0592MHz
{
	TMOD &= 0xF0;		//设置定时器模式
	TMOD |= 0x01;		//设置定时器模式
	TL0 = 0x00;			//设置定时初值
	TH0 = 0x4C;			//设置定时初值
	TF0 = 0;			//清除TF0标志
	TR0 = 1;			//定时器0开始计时
	ET0 = 0;			//失能T0中断
	EA = 1;				//开总中断
}


void main(void)
{	
	unsigned char cnt=0;
	Lcd1602_Init();			  				//LCD1602液晶初始化
	Timer0Init();							//50毫秒@11.0592MHz
	while(1)
	{
		Lcd1602_String(0,0," Password Lock !");
		if(Lock_Flag==1)						//键盘可用
		{
			cnt=KeyScan();						//扫描按键键值 值赋给cnt
			if(cnt!=0xff)  						//如果有按键按下
			{
				if(cnt>='0'&&cnt<='9')		  	//如果按下了0-9之间的数字键 则直接输入密码开锁
				{
				 	Password_Insert();			//输入密码
				}
				else if(cnt=='B')				//如果按下了'B'键	修改密码
				{
					Beep_Alram(40);
					Password_Changed();			//密码修改函数
				}
				else if(cnt=='D')				//如果按下了'D'键	紧急开锁并重置密码
				{
					Beep_Alram(40);
					Password_Open();
					Password_Right = 1;
				}
				else if(cnt=='*')				//如果按下了'*'键	关锁键
				{
					if(JD==0)
					{
						Beep_Alram(40);
						JD = 1;				   	//关继电器
					}
				}
			}
			if(Password_Right==1)				//输入密码正确?
			{	
				JD = 0;				   			//开继电器
				Password_Right = 0;	  			//清除标志
				Lcd1602_String(0,0,"  Openning...   ");
				delay_ms(1000);					//延时一会儿
			}
			if(Password_Error3 == 1)			//密码输错误3次标志位
			{
				Password_Error3 = 0;			//清除标志
				Lock_Flag = 0;					//锁死键盘不可用
				ET0 = 1;						//使能中断
			}
		}
		else
		{
			Lcd1602_Write_Com(0xc0+1);		 //第二行0xc0开头
			Lcd1602_Write_Data(0+0x30);
			Lcd1602_Write_Data(0+0x30);
			Lcd1602_Write_Data(':');
			Lcd1602_Write_Data(Sec/10+0x30);
			Lcd1602_Write_Data(Sec%10+0x30);
			if(Sec<=0)		//达到1分钟 后 键盘恢复
			{
				Sec = 60;
				Lcd1602_String(0,1,"                ");			
				Lock_Flag = 1;	//键盘恢复可用

			}		
		}
	  	
	 }

}
/* Timer0 interrupt routine */
void tm0_isr() interrupt 1 using 1 			//50ms中断
{
	static unsigned char Cnt = 0;
   	TL0 = 0x00;			//设置定时初值
	TH0 = 0x4C;			//设置定时初值
    TF0 = 0;
	Cnt++;
	if(Cnt>=20)			//达到1秒
	{
		Cnt = 0;		//清0
		Sec--;			//秒--
		if(Sec<=0)		//达到1分钟 后 键盘恢复
		{
			ET0 = 0;	    //关中断
		}	
	}
	
}



软件免费下载地址:

1、Proteus仿真软件
文件内容:Proteus7.8安装包、Proteus8.6安装包、Proteus.8.10安装包、Proteus Professional 8.11 SP0安装包

链接:https://pan.baidu.com/s/11LNUZ9BJXWvXf1C4dPc3_w 
提取码:2756 

2、KEIL4 C51软件安装包

链接:https://pan.baidu.com/s/1CTZBqDsPsyIbjCIjI_birA 
提取码:sy2a 

文件下载:

链接:https://pan.baidu.com/s/1foSHF3RUldPtP8X0UmD03Q?pwd=6s9b 
提取码:6s9b

  • 16
    点赞
  • 153
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 10
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

单片机技能设计

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值