IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> 基于51单片机的4位可更改密码的简易密码锁 -> 正文阅读

[嵌入式]基于51单片机的4位可更改密码的简易密码锁

基于51单片机,利用到的模块有:按键模块,AT24C02存储模块,LCD1602显示模块

一、具体功能如下:

1、矩阵按键输入密码,并显示在屏幕上,按下确认键,密码正确显示OK,错误显示ERR

2、独立按键按下,进入更改密码模式,需输入正确密码后才可以输入新的密码

3、清空输入按键,用于输入错误数字后清除输入

二、原理图:

三、 设计思路:

?五、代码设计思路:

由于用到了许多模块,为了让整体代码看上去简洁明了,我们可以使用模块化代码,即将要用到的模块分别用一个.C文件进行编程,最后主函数只需要调用这些模块,使得设计敲代码的思路更加明了,还有利于后续的调试,调用。

主要的代码如下,用到了模块化编程,整体看上去就比较简洁明了(完整代码和仿真文件放到了文末的链接中)

#include <REGX52.H>
#include "LCD1602.h"
#include "Delayms.h"
#include "MatrixNum.h"
#include "SET_Password.h"	   //更改密码模块
#include "AT24C02.h"		   //24C02存储模块
sbit key=P3^2;		  //外部中断0引脚

void Int0Init(){
	IT0=1;		  //触发方式为下降沿
	EX0=1;		  //外部中断0允许标志

	EA=1;		  //总中断允许标志
}


int main()
{
	Int0Init();
	LCD_Init();
	InitPassword();
	LCD_ShowString(1,1,"Password:");

	while(1)
	{
		KeyNum=MatrixNum();				//获取矩阵键盘键码
		if(KeyNum)
		{
			
			if(KeyNum<=10)						//如果有S1~s10按键按下
				{
					if(num<4)					  //限制输入为4位
					{
						Password*=10;
						Password+=KeyNum%10;
						
					}
					num++;
					LCD_ShowNum(2,1,Password,4);	//LCD显示键码
				}
			if(KeyNum==11)
			{
				if(Password==Init_Password)			  //输入密码正确,显示OK
				{
					LCD_ShowString(2,14,"OK ");
					delayms(200);
					LCD_ShowNum(2,1,0000,4);
					LCD_ShowString(2,14,"   ");
				}
				else								   //输入密码错误,显示ERR
				{
					num=0;
					Password=0;
					LCD_ShowString(2,14,"ERR");
					delayms(200);
					LCD_ShowString(2,14,"   ");
					LCD_ShowNum(2,1,0000,4);
				}
			}										 //清空输入
			if(KeyNum==12)
			{
				num=0;
				Password=0;
				LCD_ShowNum(2,1,0000,4);		
			}
			if(KeyNum==13)							 //用于查看初始密码,后续可以删除
			{
			   unsigned int dd;
			   dd=AT24C02_ReadByte(0);
			   dd|=AT24C02_ReadByte(1)<<8;
			   LCD_ShowNum(2,1,dd,4);
			}
		
		}
	}
}
void Int0() interrupt 0
{
	delayms(10);		 //延时消抖
	if(key==0)			 //按键按下,进入更改密码模块
	{
	 	set_password();
	}
}	

六、还未解决 的问题:

由于我是直接读取AT24C02中的数据作为初始密码,所以一开始是不知道初始密码,所以就不能解锁,更不能更改密码了,在这里我直接加了一个按键,用于读出初始密码,知道初始密码后,再将这部分代码注释掉,让这个按键失灵。我想应该还有更好的办法,大家可以自己尝试。

完整代码链接:链接:https://pan.baidu.com/s/1aCEbUC8nie5NSUUs3MyHNQ 提取码:zb50

(也可以用普中的A2开发板进行下载测试)

Proteus仿真文件链接:链接:https://pan.baidu.com/s/1b0ISkW3vBS5Udb-sJ4D_2Q 提取码:n022

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2021-08-28 09:30:35  更:2021-08-28 09:32:13 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 22:30:27-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码