51单片机的电子密码锁的设计与仿真
51单片机的电子密码锁的设计与仿真
看看效果图
- 简介
(1)CPU使用51单片机。
(2)用4x4矩阵键盘作为操作信息输入。
(3)用LCM1602液晶显示模块作为信息显示。
(4)用蜂鸣器及发光二极管作为错误报警及状态显示。
- 功能
(1)输入密码功能。
输入密码时,用“★”号或“-”代替真实的密码以防密码泄露。在
输入密码时,具有清除前一位/或多位的密码功能(用清除键)。
密码输入完毕,按(确认/开锁键)确认并生效。
(2)上锁功能。
在锁开状态下,通过上锁键上锁。
(3)在锁合的状态下,通过输入密码开锁功能。
开锁时,先按确认/开锁键后,再在键盘上输入六位密码,然后按
确认/开锁键,如果密码正确,进入锁开状态。
(4)在锁开状态下,设置新密码功能。
按设置新密码键,在键盘上输入六位新的密码,按(确认/开锁)
键确认,代替旧密码。
(5)在开锁时,如果输入密码三次错误,产生声、光报警功能。
每错误一次,告警一次, 若连续三次错误,则系统屏蔽输入功能,
直到系统复位后重新开始。
程序设计
定义LCD管脚以及led灯以及蜂鸣器管脚
定义LCD显示的字符串以及初始化变量
矩阵键盘扫描
/** @description : 矩阵键盘扫描* @param :无* @return : 无*/
void KeyDown(void)
{GPIO_KEY=0x0f;if(GPIO_KEY!=0x0f)//读取按键是否按下{ delay(3);//延时10ms进行消抖if(GPIO_KEY!=0x0f)//再次检测键盘是否按下{ //TR1=0;//测试列//LED=~LED;GPIO_KEY=0X0F;switch(GPIO_KEY){case(0X07): KeyValue=0;break;case(0X0b): KeyValue=1;break;case(0X0d): KeyValue=2;break;case(0X0e): KeyValue=3;break;}//测试行GPIO_KEY=0XF0;switch(GPIO_KEY){case(0X70): KeyValue=KeyValue;break;case(0Xb0): KeyValue=KeyValue+4;break;case(0Xd0): KeyValue=KeyValue+8;break;case(0Xe0): KeyValue=KeyValue+12;break;}while(GPIO_KEY!=0xf0); //检测按键松手检测return ;}}KeyValue = 0xff;
}
```扫描按键
```c
/** @description : 按键扫描 并且执行相应的操作* @param :无* @return : 无*/
void Input_Key()
{//刷新按键的值若没有按键按下则返回0xffKeyDown();if(KeyValue == 0xff||pw_errnum>=3)return;//检测是否有按键按下,或者是否有//当1-9按下时if(KeyValue>=0&&KeyValue<=9){ if((flag == 0 || flag ==2)&&pw_count<6){pw_count++;//密码下标temp_pw[pw_count] = KeyValue;//保存按键值show_pw(pw_count); //屏幕显示*}}else if(KeyValue == 12)//上锁键{if(flag == 1) //如果设备在开锁时按下{flag = 0;show_Status(&input_pw);//显示请输入密码}}else if(KeyValue == 13)//按下了清除键{if(pw_count>0)pw_count--;//下标左移show_pw(pw_count); //刷新屏幕密码}else if(KeyValue == 14)//按下了确定键{if(pw_count == 6) //判断数量是否有6位{if(flag == 0) //锁关闭状态{if(temp_pw[0] == pw[0]&&temp_pw[1] == pw[1]&&temp_pw[2] == pw[2]&&temp_pw[3] == pw[3]&&temp_pw[4] == pw[4]&&temp_pw[5] == pw[5])//校验密码{show_Status(&welcome);//显示欢迎您flag = 1; //切换状态pw_count = 0; //密码清0pw_errnum = 0; //错误密码次数清0show_pw(pw_count); //刷新屏幕密码open(); //执行开门时的回调函数}else{pw_errnum++; //错误次数+1pw_count = 0; //密码清0show_pw(pw_count); //刷新屏幕密码show_Status(&pw_error); //显示密码错误alarm(); //发出警告if(pw_errnum>=3) //当密码错误达到3次时{show_Status(&Lock); //显示设备锁了Lock_Device(); //报警 轰炸模式}}}else if(flag == 1)//锁打开状态,按下确定键无反应{}else if(flag == 2)//设置密码状态 保存新密码{//保存密码pw[0] = temp_pw[0];pw[1] = temp_pw[1];pw[2] = temp_pw[2];pw[3] = temp_pw[3];pw[4] = temp_pw[4];pw[5] = temp_pw[5];show_Status(&welcome); //显示欢迎你flag = 1; //标志位置位pw_count = 0; //密码清0show_pw(pw_count); //刷新屏幕密码}}else{//密码未到6位不能操作
// LED = 0;}}else if(KeyValue == 15)//按下了设置密码键{if(flag == 1) //判断锁是否已经打开,打开才能设置密码{show_Status(set_pw);//显示新的标题flag = 2; //标志位改成设置密码}}
}
需要的可以自己去下载哦!
需要该源码的可以关注公众号:智慧小巷
回复:电子密码锁
即可!
51单片机的电子密码锁的设计与仿真相关推荐
- 基于51单片机智能电子密码锁的设计
该题目是作者课程设计时所写题目,隔了段时间了,之前一直放到自己的网站上的,现在网站资源过期了,就放到这里保存了. 题目要求如下: 内容及要求 以MCS-51单片机为核心,设计一个通过面板键盘输入密码的 ...
- 51单片机红外电子密码锁【红外对管矩阵键盘数码管LCD1602显示模块】
系统功能 51单片机红外电子密码锁系统主要由红外线编码电路.红外线解码开锁电路.掉电保护电路.声光提示报警电路.键盘及显示电路等组成,编写相应的程序代码并进行结果测试和仿真演示. 利用红外遥控技术和单 ...
- 【制作】基于金沙滩51单片机的电子密码锁程序
基于金沙滩51单片机的电子密码锁程序 很久之前做的一个课设,在B站发了效果视频,发现忘记分享代码了,现在整理分享一下. 零.设计报告 1.设计要求 这部分是讲的整个系统实现了什么功能. 1.1.密码的 ...
- 基于51单片机的电子万年历的设计-源代码
电子万年历的设计目录 电子万年历的设计 电子万年历的系统整体设计框图 所需要的元件 DS18B20模块 DS18B20的特点 DS18B20内部结构 DS18B20管脚排列 DS1302模块 SPI时 ...
- 万年历设计单片机c语言,基于51单片机的电子万年历的设计
基于51单片机的电子万年历的设计(论文9400字) 功能要求 1. 万年历能用数码管显示阳历年.月.日.星期.[小]时.分.秒并设置指定时间的闹铃. 2. 数字式温度计要求测温范围-50~100°C, ...
- 【036】基于51单片机的电子时钟与秒表Proteus仿真设计
一.压缩包资料内容 (1).基于51单片机的电子时钟与秒表proteus仿真设计一份: (2).基于51单片机的电子时钟与秒表proteus仿真设计keli源代码一份: (3).基于51单片机的电子时 ...
- 基于51单片机的电子万年历的设计
(24条消息) 基于51单片机的电子万年历的设计说明书(完整word版本说明书+原理图+代码)资源-CSDN文库 摘 要 电子万年历是单片机系统的一个应用,由硬件和软件相配合使用.硬件由主控器.时钟电 ...
- 基于51单片机甲醛浓度检测系统仿真设计(仿真+程序+原理图+报告+讲解)
文章目录 资料下载(可点击) 功能说明 仿真图 复位电路 晶振电路 程序 原理图: 设计报告: 器件清单: 基于51单片机甲醛浓度检测系统仿真设计(仿真+程序+原理图+报告+讲解) 原理图:Altiu ...
- 电子密码锁课设单片机c语言,基于51单片机的电子密码锁综合课程设计
5.大容量片内EEPROM,擦写次数10万次以上 EEPROM,擦写次数10万次以上,擦写次数10万次以上 6.ISP/IAP,在系统可编程/在应用可编程,无需编程器/仿真器 7.共8通道10位高速A ...
最新文章
- readline 库简写版本,测试可用
- 电脑登陆不了网页的服务器地址,电脑能登qq不能打开网页的解决方法
- 《设计师要懂心理学》-第四章-人如何思考
- 用于图片切割,图片压缩,缩略图的生成(转到一个好东西)
- 自学python到什么程度就可以工作-自学Python爬虫学到什么程度?就可以去找工作了?...
- rabbitmq接收不到消息_SpringBoot2.x系列教程63--SpringBoot整合消息队列之RabbitMQ详解
- rails 表单嵌套
- 利用GDAL进行工具开源化改造
- 【三维路径规划】基于matlab蚁群算法无人机三维路径规划【含Matlab源码 1278期】
- 如何编写python代码
- 《STK二次开发 C++版》S1:STK介绍
- linux 内核 触摸屏,向内核里面添加触摸屏驱动(方法适合其他设备)
- 视频格式转换器如何将腾讯QLV格式转换成MP4视频文件
- 自动发片q机器人_寻片机器人(微信群自动回复工具)V2.6.853 正式版
- APISpace IP归属地API
- 三极管的工作原理(详细、通俗易懂、图文并茂)
- 支付宝及时到账支付成功返回信息
- 如何制定客户留存策略_14个成功的客户留存策略举例
- 斐波那契螺旋线系列一:斐波那契数列介绍
- labview:一个采集数据的小程序
热门文章
- 基于STM32F103芯片实现LED灯闪烁
- python多个if怎么优化_利用策略模式优化过多 if else 代码
- 计算机win7等级考试试题,计算机等级考试一级win7操作题.docx
- android Compose Modifier介绍
- rust vapo_考研英语翻译技巧
- LAMP服务器环境搭建及工程部署
- HM编码器代码阅读(15)——帧间预测之AMVP模式(三)xGetBlkBits函数
- Python Web学习笔记,电影网站
- linux 使用dmidecode查看设备序列号
- 测量标准误(Standard Error of Measurement;SEm)