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

基于单片机的电子密码锁设计

1.设计任务

利用AT89C51单片机为核心控制元件,设计一个简易的电子密码锁,可设置四位密码,输入错误三次,报警灯亮起(红灯亮起),输入正确,绿灯闪烁三次。可通过LCD显示屏查看密码,并可通过特殊键位清除密码。

本系统由AT89C51单片机系统(主要是AT89C51单片机最小系统)、4X4矩阵键盘、LCD1602显示和报警系统等组成。

  1. 利用AT89C51单片机设计四位电子密码锁。
  2. 通过LCD显示查看已输入的密码。
  3. 可通过特殊按键清除密码。
  4. 密码输入正确后绿灯闪烁三次。
  5. 密码输错三次会有报警提示(报警红灯亮起)。

2. 设计要求

2.1系统方案论证

根据设计任务,分析设计系统的组成,给出实现设计任务的几种方案,分析比较几种设计方案的优略,本着尽量以软件代替硬件,同时力求电路简单,工作可靠的原则,确定总体设计方案。

2.2系统硬件电路设计

根据系统设计方案进行软、硬件的分配,软、硬件设计分别进行。硬件设计包括单片机最小系统和扩展接口及配置,硬件结构在设计时要选择合适的元器件,硬件电路要简洁、工作可靠,需用Proteus绘制整个系统的电路仿真原理图。

2.3软件设计

根据该系统要求的功能进行软件设计,简述软件的功能,并根据每个模块的功能绘制软件流程图,根据流程图编写程序并汇编调试通过;列出软件清单,软件清单要求加以注释。

#include <REGX52.H>
#include "Delay.h"
#include "LCD1602.h"
#include "MatrixKey.h"

unsigned char N=0;
unsigned char KeyNum;
unsigned int Password,Count,Num_Val;

sbit Led_G = P2^0;
sbit Led_R = P2^1;


void main()
{
	Led_G = 1;
	Led_R = 1;
	LCD_Init();
	LCD_ShowString(1,1,"Password:");
	while(1)
	{
		KeyNum=MatrixKey();
		if(KeyNum)
		{
			if(KeyNum!=4&&KeyNum!=8&&KeyNum!=12&&KeyNum!=13&&KeyNum!=15&&KeyNum!=16)	//如果S1~S10按键按下,输入密码
			{
				switch(KeyNum)
				{
					case 1: Num_Val=1;break;
					case 2: Num_Val=2;break;
					case 3: Num_Val=3;break;
					case 5: Num_Val=4;break;
					case 6: Num_Val=5;break;
					case 7: Num_Val=6;break;
					case 9: Num_Val=7;break;
					case 10:Num_Val=8;break;
					case 11:Num_Val=9;break;
					case 14:Num_Val=0;break;
				}
				if(Count<4)	//如果输入次数小于4
				{
					Password=Password*10;				//密码左移一位
					Password=Password+Num_Val%10;		//获取一位密码
					Count++;	//计次加一
				}
				LCD_ShowNum(2,1,Password,4);	//更新显示
			}
			if(KeyNum==15)	//如果S11按键按下,确认
			{
				if(Password==2345)	//如果密码等于正确密码
				{
					LCD_ShowString(1,14,"OK ");	//显示OK
					Led_G = 0;
					Delay(300);
					Led_G = 1;
					Delay(300);
					Led_G = 0;
					Delay(300);
					Led_G = 1;
					Delay(300);
					Led_G = 0;
					Delay(300);
					Led_G = 1;
					Delay(300);
					Password=0;		//密码清零
					Count=0;		//计次清零
					LCD_ShowNum(2,1,Password,4);	//更新显示
					LCD_ShowString(1,14,"   ");
				}
				else				//否则
				{
					N++;
					if(N == 3)
					{
						Led_R=0;
						Delay(2000);
						Led_R=1;
						N=0;
					}
					LCD_ShowString(1,14,"ERR");	//显示ERR
					Password=0;		//密码清零
					Count=0;		//计次清零
					LCD_ShowNum(2,1,Password,4);	//更新显示
					Delay(1000);
					LCD_ShowString(1,14,"   ");
				}
			}
			if(KeyNum==13)	//如果S12按键按下,取消
			{
				Password=0;		//密码清零
				Count=0;		//计次清零
				LCD_ShowNum(2,1,Password,4);	//更新显示
			}
		}
	}
}

完整代码点开链接私信获取。

【iBot机器人工作室的个人空间-哔哩哔哩】 https://b23.tv/ryUWVKa


http://www.kler.cn/a/161422.html

相关文章:

  • flutter 发版的时候设置版本号
  • 【设计模式】行为型模式(二):策略模式、命令模式
  • MySQL系列之如何在Linux只安装客户端
  • quartz
  • OpenGL ES 共享上下文实现多线程渲染
  • Linux 函数在多个地方被同时调用时,函数中的变量如何管理,确保互不影响
  • 代码随想录算法训练营第四十二天| 416 分割等和子集
  • 如何使用HadSky搭配内网穿透工具搭建个人论坛并发布至公网随时随地可访问
  • Windows + docker + python + vscode : 使用容器docker搭建python开发环境,无需本地安装python开发组件
  • 『亚马逊云科技产品测评』活动征文|AWS云服务器EC2实例实现ByConity快速部署
  • openGL 三:矩阵和向量
  • 创建第一个 Flink 项目
  • Python 作业答疑_6.15~6.18
  • Livox_ros_driver2 消息 (msg) 类型对 SLAM 应用程序的适配
  • json转yolo格式
  • 大屏可视化基础学习-通用可套用模板【大屏可视化项目案例-15】
  • 每日一题:LeetCode-11.盛水最多的容器
  • Android11适配已安装应用列表
  • ZKP Understanding Nova (2) Relaxed R1CS
  • ESP32-Web-Server编程- 在 Web 上开发动态纪念册
  • 二叉树的层平均值[中等]
  • Python作业答疑_6.22~6.25
  • C语言基础概念考查备忘 - 标识符、关键字、预定义标识符、语法检查、语义检查 ... 左值、右值、对象、副作用、未定义行为、sizeof是什么等等
  • 26.Oracle11g的数据装载
  • Zabbix 6.0部署+自定义监控项+自动发现与自动注册+部署zabbix代理服务器
  • 【跨境营商】创新科技助力数码转型 增强大湾区企业核心竞争力