基于单片机的电子密码锁及程序
简易电子密码锁(基于51单片机)报告
简易电子密码锁设计&我的设计思想联想到日前在安全技术防范领域,具有防盗报警功能的电子密码控制系统逐渐代替传统的机械式密码控制系统,并结合近期的学习过程和一些参考书籍,完成了简易的电子密码锁设计学习。
电子密码控制是一种通过密码输入来控制电路或是芯片工作,从而控制机械开关的闭合,完成开锁、闭锁任务的电子产品。
电子密码控制不论性能还是安全性都已大大超过了机械类结,具有良好的应用前景。
一、设计目的与内容设计了一个简易电子密码锁,可按要求从矩阵键盘输入6位数密码如“080874”,输入过程中有按键音提示。
当密码输入正确并按下确认键(“OK”键)后,发光二极管被点亮。
二、工作原理与基本操作过程介绍采用80C51为核心的单片机控制。
利用单片机灵活的编程设计和丰富的IO端口,及其控制的准确性,进行电子密码锁的设计。
(1)键盘的人工编码给每个按键指定一个按键值,报告设定按键S1~S9对应的按键值分别为“1~9”,S10为数字“0”,S11为“OK”,S12~S16对应的按键值分别为12~16。
(2)根据按键值,指定每个按键对应的输入数字和信息。
如下表为每个按键代表的数字和输入信息。
当键盘扫描程序扫描到S10键被按下时,将其代表的按键值“0”通知CPU,CPU根据事先的规定,就会知道输入的数字是“0”。
矩阵键盘中每个按键所代表的数字和输入信息(3)输入数字和密码对比。
先将设定的密码用一个数组保存,报告中用的密码“080874”和“OK”确认信息可以用如下数组保存:Unsigned char D[ ]={0,8,0,8,7,4,11};在主程序接收到数字和信息后,通过逐位对比的方法进行判断。
输入的数字经对比正确时,程序才会继续顺序执行,否则,程序拒绝继续执行。
(4)执行预期功能。
如果输入密码正确,执行预期功能,报告设计为点亮P3.0口引脚LED。
三、电路图设计(Proteus绘制)四、程序设计(C语言)矩阵式键盘实现的电子密码锁程序#include<reg51.h> //包含51单片机寄存器定义的头文件sbit P14=P1^4; //将P14位定义为P1.4引脚sbit P15=P1^5; //将P15位定义为P1.5引脚sbit P16=P1^6; //将P16位定义为P1.6引脚sbit P17=P1^7; //将P17位定义为P1.7引脚sbit sound=P3^7; //将sound位定义为P3.7unsigned char keyval; //储存按键值/************************************************************** 函数功能:延时输出音频**************************************************************/ void delay(void){unsigned char i;for(i=0;i<200;i++);}/************************************************************** 函数功能:软件延时子程序**************************************************************/ void delay20ms(void){unsigned char i,j;for(i=0;i<100;i++)for(j=0;j<60;j++);}/************************************************************** 函数功能:主函数**************************************************************/ void main(void){unsigned char D[ ]={0,8,0,8,7,4,11}; //设定密码EA=1; //开总中断ET0=1; //定时器T0中断允许TMOD=0x01; //使用定时器T0的模式1TH0=(65536-500)/256; //定时器T0的高8位赋初值TL0=(65536-500)%256; //定时器T0的高8位赋初值TR0=1; //启动定时器T0keyval=0xff; //按键值初始化while(keyval!=D[0]) //第一位密码输入不正确,等待;while(keyval!=D[1]) //第二位密码输入不正确,等待;while(keyval!=D[2]) //第三位密码输入不正确,等待;while(keyval!=D[3]) //第四位密码输入不正确,等待;while(keyval!=D[4]) //第五位密码输入不正确,等待;while(keyval!=D[5]) //第六位密码输入不正确,等待;while(keyval!=D[6]) //没有输入“OK”,等待;P3=0xfe; //P3.0引脚输出低电平,点亮LED}/**************************************************************函数功能:定时器0的中断服务子程序,进行键盘扫描,判断键位**************************************************************/void time0_interserve(void) interrupt 1 using 1 //定时器T0的中断编号为1,使用第一组寄存器{unsigned char i;TR0=0; //关闭定时器T0P1=0xf0; //所有行线置为低电平“0”,所有列线置为高电平“1”if((P1&0xf0)!=0xf0) //列线中有一位为低电平“0”,说明有键按下delay20ms(); //延时一段时间、软件消抖if((P1&0xf0)!=0xf0) //确实有键按下{P1=0xfe; //第一行置为低电平“0”(P1.0输出低电平“0”)if(P14==0) //如果检测到接P1.4引脚的列线为低电平“0”keyval=1; //可判断是S1键被按下if(P15==0) //如果检测到接P1.5引脚的列线为低电平“0”keyval=2; //可判断是S2键被按下if(P16==0) //如果检测到接P1.6引脚的列线为低电平“0”keyval=3; //可判断是S3键被按下if(P17==0) //如果检测到接P1.7引脚的列线为低电平“0”keyval=4; //可判断是S4键被按下P1=0xfd; //第二行置为低电平“0”(P1.1输出低电平“0”)if(P14==0) //如果检测到接P1.4引脚的列线为低电平“0”keyval=5; //可判断是S5键被按下if(P15==0) //如果检测到接P1.5引脚的列线为低电平“0”keyval=6; //可判断是S6键被按下if(P16==0) //如果检测到接P1.6引脚的列线为低电平“0”keyval=7; //可判断是S7键被按下if(P17==0) //如果检测到接P1.7引脚的列线为低电平“0”keyval=8; //可判断是S8键被按下P1=0xfb; //第三行置为低电平“0”(P1.2输出低电平“0”)if(P14==0) //如果检测到接P1.4引脚的列线为低电平“0”keyval=9; //可判断是S9键被按下if(P15==0) //如果检测到接P1.5引脚的列线为低电平“0”keyval=0; //可判断是S10键被按下if(P16==0) //如果检测到接P1.6引脚的列线为低电平“0”keyval=11; //可判断是S11键被按下if(P17==0) //如果检测到接P1.7引脚的列线为低电平“0”keyval=12; //可判断是S12键被按下P1=0xf7; //第四行置为低电平“0”(P1.3输出低电平“0”)if(P14==0) //如果检测到接P1.4引脚的列线为低电平“0”keyval=13; //可判断是S13键被按下if(P15==0) //如果检测到接P1.5引脚的列线为低电平“0”keyval=14; //可判断是S14键被按下if(P16==0) //如果检测到接P1.6引脚的列线为低电平“0”keyval=15; //可判断是S15键被按下if(P17==0) //如果检测到接P1.7引脚的列线为低电平“0”keyval=16; //可判断是S16键被按下for(i=0;i<200;i++) //让P3.7引脚电平不断取反输出音频{sound=0;delay();sound=1;delay();}}TR0=1; //开启定时器T0TH0=(65536-500)/256; //定时器T0的高8位赋初值TL0=(65536-500)%256; //定时器T0的高8位赋初值}五、用Proteus软件进行仿真利用Keil软件进行编译通过后,生成hex文件。
基于单片机的电子密码锁
基于单片机的电子密码锁第一章:引言电子密码锁是随着科技的不断进步,应用于各个领域的一种新型门禁系统。
相较于传统的机械锁具,电子密码锁具有更高的安全性与便捷性。
而基于单片机的电子密码锁,则是通过单片机作为核心控制器,通过输入正确的密码才能进行开锁操作。
本文旨在介绍基于单片机的电子密码锁的原理、设计和实现过程。
第二章:电子密码锁的工作原理2.1 单片机简介单片机是一种集成了微处理器、存储器和各种输入输出接口于一体的微型计算机系统。
它具有体积小、功耗低、性能稳定等特点,适用于各种电子设备的控制系统。
2.2 电子密码锁的组成部分基于单片机的电子密码锁由输入模块、控制模块、显示模块和输出模块组成。
输入模块用于输入密码,控制模块用于验证密码的正确性和执行开锁指令,显示模块用于显示相关信息,输出模块用于控制锁的状态。
2.3 电子密码锁的工作原理当用户输入密码时,控制模块将用户输入的密码与预设密码进行比较。
如果输入的密码正确,则控制模块发送开锁指令,输出模块解除锁的限制,用户可以开启门。
否则,控制模块继续等待用户输入密码。
第三章:电子密码锁的设计步骤3.1 系统需求分析根据实际应用需求,确定电子密码锁系统的功能、性能和外观设计等方面的要求。
3.2 硬件设计根据系统需求,设计硬件电路,包括输入模块、控制模块、显示模块和输出模块等。
3.3 软件设计基于单片机的电子密码锁需要编写适用的软件程序。
根据密码验证算法,编写程序实现密码的比较和开锁指令的发送。
3.4 电子密码锁的制作流程根据硬件设计和软件设计的结果,进行电子密码锁的组装和制作。
3.5 电子密码锁的测试与调试对制作完成的电子密码锁进行测试,包括考虑用户输入的密码是否正确、开锁是否正常、显示是否准确等方面的问题。
第四章:电子密码锁的功能与特点4.1 密码设置与管理用户可以根据需要设置密码,并进行密码的管理,包括密码的增、删、改等功能。
4.2 多种开锁方式电子密码锁可以支持多种开锁方式,例如密码开锁、指纹识别、刷卡开锁等。
基于51单片机的电子密码锁—1
基于51单⽚机的电⼦密码锁—1这个程序是为了实现基于51单⽚机的电⼦密码锁,⽬前,程序解决了最重要之⼀的输⼊的密码和保存的正确密码相⽐较的问题。
通过定义了两个数组:uchar table2[6]; //临时密码保存uchar password[6]="123456"; //进门密码将输⼊的密码写⼊到table2[]中有⼀点需要特别注意:因为我写到table2[]数组内的是ASCII值的0-9,⽽ASCII值的0-9对应的符号却是NUT,SOH... (省略)所以在刚开始调试时,LCD1602屏幕输出的总是奇怪的字符,⽽不是我想要的0-9,通过查询ASCLL码表可以知道字符(0-9)对应的数值是48-57,所以我通过定义了⼀个新的数组,uchar smgduan[10]={48,49,50,51,52,53,54,55,56,57};以及lcd_write_data(smgduan[table2[i]]);的⽅式,实现了在LCD上输出字符0-9的功能。
在最后做两个数组⽐较时,开始同样出现了这个情况,因为数字1和字符1对应的ASCII值不同,所以password[i]不等于table2[i],需要进⾏转换,我的⽅式的是password[i]==smgduan[table2[i]];罗⾥吧嗦这个多,主要还是给未来的⾃⼰看看,当初犯得错误多么低级。
---------------------------------------------------分割线-----------------------------------------------------------------------------------下⼀版改进考虑把重复按键选择数字改成矩阵按键,加进些其他的功能。
---------------------------------------------------分割线-----------------------------------------------------------------------------------程序部分:/*这个⽅案是我写基于51单⽚机的电⼦密码锁过程中,未完成全部功能的程序。
基于单片机的电子密码锁
基于单片机的电子密码锁第一章:引言随着科技的不断进步,电子设备在我们的日常生活中变得越来越普及。
其中之一就是电子密码锁。
传统的机械密码锁存在操作复杂、容易被暴力破解等问题,而基于单片机的电子密码锁则能够提供更安全、更便捷的解决方案。
本文将探讨基于单片机的电子密码锁的原理、实现过程以及应用场景。
第二章:基于单片机电子密码锁的原理2.1 单片机基础知识电子密码锁的核心是单片机,因此在理解电子密码锁的原理之前,我们需要先了解一些单片机的基础知识。
单片机是一种集成了处理器、内存和存储器等功能的微型计算机。
它通过读取输入和控制输出来实现各种任务。
在电子密码锁中,单片机通过读取输入的按键信号,处理之后控制电子锁的开关状态。
2.2 电子密码锁的基本原理基于单片机的电子密码锁的基本原理如下:(1)输入密码:用户通过按下键盘输入密码。
密码可以是数字、字母或者符号的组合。
(2)密码验证:单片机接收到输入的密码后,会将其与预设的正确密码进行比对。
如果输入的密码与预设的密码匹配,则会执行开锁操作。
(3)开锁操作:当密码验证通过后,单片机会控制电子锁的开关状态,从而实现开锁。
2.3 单片机的嵌入式程序设计在实现基于单片机的电子密码锁时,需要进行嵌入式程序的设计与编写。
嵌入式程序是指针对特定硬件平台和应用需求而编写的程序。
在电子密码锁中,嵌入式程序需要实现密码输入与验证的功能,并控制电子锁的开关状态。
第三章:基于单片机电子密码锁的实现过程3.1 硬件设计硬件设计是基于单片机电子密码锁的基础。
硬件设计包括选择合适的单片机、键盘、电子锁等组成要素,并进行连接与布局。
3.2 软件设计软件设计是实现基于单片机电子密码锁的核心。
软件设计主要包括嵌入式程序的编写、逻辑流程的设计以及密码验证算法的实现。
3.3 电子密码锁的制作与调试制作与调试是将硬件设计与软件设计结合起来,完成基于单片机电子密码锁的整体制作与调试工作。
在制作过程中,需要进行电路板的焊接、连接与固定等工作。
单片机电子密码锁的操作流程
单片机电子密码锁的操作流程下载温馨提示:该文档是我店铺精心编制而成,希望大家下载以后,能够帮助大家解决实际的问题。
文档下载后可定制随意修改,请根据实际需要进行相应的调整和使用,谢谢!并且,本店铺为大家提供各种各样类型的实用资料,如教育随笔、日记赏析、句子摘抄、古诗大全、经典美文、话题作文、工作总结、词语解析、文案摘录、其他资料等等,如想了解不同资料格式和写法,敬请关注!Download tips: This document is carefully compiled by theeditor. I hope that after you download them,they can help yousolve practical problems. The document can be customized andmodified after downloading,please adjust and use it according toactual needs, thank you!In addition, our shop provides you with various types ofpractical materials,such as educational essays, diaryappreciation,sentence excerpts,ancient poems,classic articles,topic composition,work summary,word parsing,copy excerpts,other materials and so on,want to know different data formats andwriting methods,please pay attention!1. 系统初始化:单片机上电后,进行系统初始化,包括设置输入输出端口、初始化密码存储区、初始化显示模块等。
基于单片机的电子密码锁及程序
毕业论文基于单片机的电子密码锁设计基于单片机的电子密码锁设计摘要随着科技和人们的生活水平的提高,如何实现家庭防盗这一问题也变的尤为突出,传统的机械锁由于构造简单,被撬事件屡见不鲜。
电子密码锁保密性好,使用灵活性高,收到广大用户的青睐。
本设计是以单片机AT89C52作为密码锁的主控芯片与数据存储单元,结合外围的矩阵键盘输入、LCD显示、开锁、报警等,用C语言编写程序,并用Keil uVision4软件进行编译设计了一款可以更改密码,具有报警功能的电子密码控制系统。
本设计采用矩阵键盘对密码进行输入,具有较高的优势,减少了I/O口的占用数目。
密码的显示采用LCD显示屏实现,为确保安全性统一使用“*”显示密码,当重新设置密码时按下“修改”键,LCD显示屏显示数字。
采用蜂鸣器模拟报警系统,增加了密码锁的安全能力。
软件使用C语言编程,运用自上而下的模块化设计思想,使系统朝着分布式、小型化方向发展,增强系统的可扩展性和运行的稳定性。
测试结果表明,设计达到电子密码锁的功能。
关键字:密码锁、AT89C52、矩阵键盘、报警一、设计背景随着社会科技的进步,锁已经发展到了密码锁、磁性锁、电子锁、激光锁、声控锁等等。
在传统钥匙的基础上,加了一组或多组密码,不同声音,不同磁场,不同声波,不同光束光波,不同图像来控制锁的开启,从而大大提高了锁的安全性。
当今安全信息系统应用越来越广泛,特别在机密保护、维护隐私和财产保护方面起到重大作用,而基于电子密码锁的安全系统是其中的一部分,运用非常广泛,研究它具有重大的现实意义。
电子密码锁可以在日常生活和现代办公中,住宅与办公室的安全防范、单位的文件档案、财务报表以及一些个人资料的保存等多种场合使用。
大大提高了主人物资的安全性。
目前使用的密码锁种类繁多,各具特色。
本文从经济实用的角度出发,采用AT89C52单机,研制了一款具有防盗自动报警功能的电子密码锁。
该密码锁设计方法合理,简单易行,成本低,符合住宅、办公室用锁要求,具有一定的推广价值。
基于单片机的电子密码锁
基于单片机的电子密码锁第一章序言电子密码锁作为一种现代化的安全防护设备,被广泛应用于家庭、商业和公共场所。
它与传统机械锁相比具有更高的安全性、更方便的使用方式以及更多的功能。
而基于单片机的电子密码锁则利用现代电子技术,结合单片机的强大功能,实现了更高级别的安全保护和智能化操作。
本文将深入探讨基于单片机的电子密码锁的原理、设计和应用。
第二章基本原理基于单片机的电子密码锁的基本原理是利用数字密码的输入和比对来控制锁的开关。
系统通过单片机将输入的密码与预设密码进行比对,如果输入正确,则单片机控制锁的电机将锁打开。
同时,还可以通过单片机对其他功能的控制,例如报警装置、指纹识别、密钥卡等。
基本原理可以总结为三个步骤:密码输入、比对判断和锁的控制。
第三章设计方案基于单片机的电子密码锁的设计方案包括硬件设计和软件设计两个方面。
硬件设计的主要组成部分有密码输入模块、单片机模块、电机控制模块和电源模块。
密码输入模块一般使用键盘或者触摸屏来实现密码的输入,单片机模块负责接收输入的密码,并与预设密码进行比对,电机控制模块用于控制锁的开启和关闭,电源模块提供系统的电能。
软件设计则是基于单片机的程序设计,包括密码输入、比对判断和控制电机的相关代码。
第四章功能拓展基于单片机的电子密码锁除了基本的密码输入和开锁功能外,还可以拓展其他功能。
例如,可以增加报警功能,当密码输入错误次数达到一定次数时,系统将触发报警器或者发送警报信息;还可以新增指纹识别功能,通过将指纹信息存储在单片机中,实现指纹的输入和认证,提高门锁的安全性;另外,还可以添加密钥卡功能,通过感应技术读取密钥卡上的信息,实现无需输入密码的开锁方式,提升用户体验。
第五章应用前景基于单片机的电子密码锁在家庭、商业和公共场所都有广泛的应用前景。
在家庭使用方面,电子密码锁可以取代传统的机械锁,提供更高的安全性,可以对家庭成员的出入进行控制;在商业使用方面,电子密码锁可以应用于办公室、酒店、银行、医院等场所,实现门禁和权限控制,保护重要信息的安全;在公共场所使用方面,电子密码锁可以应用于公共厕所、储物柜、车库等场所,提供更方便快捷的开锁方式。
基于单片机的电子密码锁
基于单片机的电子密码锁第一章:引言随着科技的不断进步,电子密码锁作为一种现代化的安全设备,越来越得到人们的关注和应用。
传统的机械锁存在一些弊端,例如易被撬开、锁码易被窃取等问题。
而电子密码锁则通过集成电路和密码输入系统,提供了更高的安全性和便利性。
本文将详细介绍基于单片机的电子密码锁的原理和设计,包括电路设计、程序代码编写、功能调试等方面。
通过这些内容,读者将对电子密码锁的工作原理和制作过程有更深入的了解。
第二章:原理介绍2.1 单片机选型在设计电子密码锁时,选择合适的单片机至关重要。
本文选择XX单片机作为控制器,原因主要在于其低功耗、高性能和丰富的外设接口等特点。
2.2 电路设计电子密码锁的电路设计包括密码输入系统、电源管理和电机驱动等部分。
密码输入系统主要由按键矩阵和LCD显示器组成,用于用户输入密码和显示相关信息。
电源管理模块负责供电和电池电量检测。
电机驱动模块则用于控制锁体的开关。
第三章:程序编写3.1 系统初始化在单片机启动时,需要对系统进行初始化配置。
包括外设接口的设置、时钟的配置和IO口的初始化等。
这些步骤为后续的程序运行提供了必要的准备工作。
3.2 密码验证当用户输入密码后,系统需要对密码进行验证。
在编写程序时,需要结合密码输入系统和密码存储器,根据用户输入的密码和存储的密码进行比对。
如果密码匹配成功,则进入下一阶段,否则给出错误提示。
3.3 功能实现除了密码验证外,电子密码锁还可以实现其他功能。
例如,设置密码、修改密码、开关驱动电机等。
在程序编写时,需要对这些功能进行详细设计,并考虑到各种异常情况的处理。
第四章:系统调试为了保证电子密码锁的功能可靠,需要进行系统调试。
调试过程主要包括测试电路的正常工作状态、验证密码验证功能的准确性和检查电机驱动模块的可靠性等。
第五章:应用与展望电子密码锁具有广泛的应用前景。
不仅可以用于家庭安全防护,还可以应用于商业场所、酒店、学校等多个领域。
未来,电子密码锁还可以与其他智能设备进行联动,实现更多便利和安全功能。
基于单片机的电子密码锁
基于单片机的电子密码锁第一章: 引言电子密码锁是一种通过密码输入来解锁的安全设备。
与传统的机械锁相比,它具有更高的安全性和灵活性。
本文将介绍基于单片机的电子密码锁,包括其原理、设计和应用。
第二章: 工作原理2.1 电子密码锁的基本组成部分电子密码锁的基本组成部分包括单片机、密码输入模块、驱动电路和电子开关。
单片机是电子密码锁的核心控制器,负责接收输入密码并进行比对,控制电子开关的开关状态。
密码输入模块通常采用键盘或数字按钮,用来输入密码。
驱动电路则用于控制电子开关的通断。
2.2 工作原理电子密码锁的工作原理很简单。
当用户输入密码时,密码输入模块将密码信号传递给单片机。
单片机接收到密码信号后,将其与事先设定的密码进行比对。
如果输入的密码与设定的密码一致,单片机将控制驱动电路打开电子开关,实现解锁操作。
如果密码不一致,单片机将不会打开电子开关。
第三章: 设计方案3.1 硬件设计在硬件设计方面,我们选择采用51单片机作为核心控制器,因其简单易用且功能强大。
密码输入模块选用4x4矩阵键盘,提供了数字、字母和功能键的输入方式。
驱动电路使用继电器控制电子开关的通断,同时还需要提供合适的电源供电。
为了增加安全性,我们还可以加入声音和光线传感器,当有人非法操作时,锁可以自动进行报警。
3.2 软件设计在软件设计方面,我们需要编写适当的程序来实现密码锁的功能。
首先,需要编写密码输入和比对的程序,确保输入密码的准确性。
其次,还需要编写控制电子开关的程序,实现解锁和上锁操作。
最后,可以增加一些附加功能,如自动锁定、密码更改等,提升用户体验。
第四章: 实验结果与讨论我们在实验室里搭建了一个基于单片机的电子密码锁原型。
经过实验测试,密码锁的解锁和上锁功能都正常工作。
使用者可以通过密码输入模块输入正确的密码进行解锁,也可以通过修改程序中的设置来更改密码。
在测试中,我们还加入了声音和光线传感器,并通过报警装置验证了其正常工作。
基于单片机的电子密码锁
基于单片机的电子密码锁
电子密码锁是一种广泛应用于门锁、保险柜等领域的智能锁具,通过输入正确的密码来开锁。
本文基于单片机设计了一种可靠的电子密码锁,实现了密码输入、验证和控制门锁开关的功能。
首先,设计硬件电路。
该电路由键盘、LCD 显示屏、单片机、电机和一些元器件组成。
键盘用于输入密码,显示屏用于提示操作,单片机负责控制整个系统的运行、密码验证和门锁开关的控制,电机则用于控制门锁的开关。
除此之外,还需要电源电路、保险电路等元器件来保证电路的稳定工作。
其次,设计软件程序。
该程序由密码输入模块、密码验证模块、门锁控制模块组成。
密码输入模块负责获取用户输入的密码,密码验证模块通过比对用户输入的密码和预设的密码进行验证,验证通过则启动门锁控制模块控制门锁的开关。
最后,进行测试与实验。
将电路搭建好后,进行充分测试与实验。
在测试时,应该考虑电路的稳定性、可靠性、安全性等方面。
并且,应该对操作流程、密码输入、密码验证、门锁控制等各方面进行充分测试。
综合来看,基于单片机的电子密码锁可以实现较高的安全性和可靠性,广泛应用于门锁、保险柜等领域。
然而,也应该注意电路的稳定性、兼容性等问题,并且适当的管理与维护才能保证其长期稳定运行。
基于单片机的电子智能密码锁
基于单片机的电子智能密码锁电子智能密码锁是一种集密码输入、识别、控制和驱动电机等功能于一体的安全装置。
本文将介绍基于单片机技术的电子智能密码锁的原理和设计。
一、引言随着科技的不断发展,传统钥匙锁已经逐渐被电子智能密码锁取代。
电子智能密码锁结合了密码学、电子技术和计算机技术,提供了更高的安全性和便捷性。
本文将介绍基于单片机的电子智能密码锁的设计与实现。
二、原理介绍基于单片机的电子智能密码锁主要由以下几个部分组成:键盘输入模块、显示模块、控制模块和电机驱动模块。
其中,键盘输入模块负责接收用户输入的密码,显示模块用于显示密码输入和开锁状态,控制模块通过对输入密码的处理来判断是否开锁,电机驱动模块则用于控制门锁的开关。
三、设计步骤1. 系统初始化在电子智能密码锁启动时,进行系统的初始化工作,包括对系统各个模块的初始化和参数的设置。
2. 用户输入密码用户通过键盘输入模块输入密码,密码可以采用数字、字母或其他特定字符,密码长度根据设计要求设置。
3. 密码处理与验证控制模块接收到密码后,对密码进行处理和验证。
处理可以包括对密码进行加密后再进行比对,以增加安全性。
4. 开锁控制如果密码验证通过,控制模块将发送开锁信号给电机驱动模块,电机驱动模块控制门锁的开关动作。
5. 显示与提示显示模块负责显示密码输入和开锁状态,以及提示用户的操作结果,例如密码错误的提示。
6. 安全性考虑为了增强电子智能密码锁的安全性,可以考虑添加如下功能:密码错误多次后自动报警、针对暴力破解的保护机制等。
四、应用场景基于单片机的电子智能密码锁广泛应用于家庭、办公室、酒店等地方的门锁系统中。
它不仅提供了开锁便捷和安全性,还可以方便地进行密码的修改和管理。
五、总结基于单片机的电子智能密码锁通过集成密码输入、识别、控制和驱动电机等功能,成为了传统钥匙锁的理想替代品。
通过合理的设计和实现,电子智能密码锁可以提供更高的安全性和便捷性,更好地满足人们对门锁系统的需求。
基于单片机的电子密码锁设计程序及电路图
基于单片机电子密码锁设计程序#include <AT89X51.h>#define uchar unsigned charuchar starbuf[10];uchar wordbuf[8];uchar pw[8]={1,2,3,4,5,6,7,8};uchar pwbuf[8];uchar count=0;// 初始没有输入密码,计数器设为0uchar inputflag=0;// 先处于密码输入状态,非密码修改状态bit enterflag=0; // 没有按下确认键bit pwflag=0;// 密码标志先置为0sbit warn=P3^6;#define lcd_data P0sbit rs=P2^7;sbit rw=P2^6;sbit e=P2^5;///////////////////////LCD1602驱动程序///////////////////////void delay_1602(unsigned int i) {while(i--);}void enrw(){rs=0;rw=0;e=0;delay_1602(250);e=1;}write_data(uchar c){lcd_data=c;rs=1;rw=0;e=0;delay_1602(250);e=1;}init_lcd(void)//初始化{lcd_data=0x01;//清屏幕enrw();lcd_data=0x38;//数据长度为8位,双行显示,5*7字符。
enrw();lcd_data=0x0c;//打开显示开关enrw();lcd_data=0x06;//地址计数递增,显示屏不移动enrw();}write_cmd(uchar m)//写命令,注意与写数据的区别{lcd_data=m;enrw();}display(uchar row,uchar colum,uchar *s)//行列字符写字符串,简单的指针应用{uchar p;if(row==1)p=0x82+colum-1;elsep=0xC0+colum-1;write_cmd(p);for(;*s!='\0';s++)write_data(*s);}void lcd_display( unsigned char a, unsigned char b,unsigned char i)//行列数{switch (i){case 0:display( a,b, "0") ;break;/* 0 */case 1:display( a,b, "1") ;break;/* 1 */case 2:display( a,b, "2") ;break;/* 2 */case 3:display( a,b, "3") ;break;/* 3 */case 4:display( a,b, "4") ;break;/* 4 */case 5:display( a,b, "5") ;break;/* 5 */case 6:display( a,b, "6") ;break;/* 6 */case 7:display( a,b, "7") ;break;/* 7 */case 8:display( a,b, "8") ;break;/* 8 */case 9:display( a,b, "9") ;break;/* 9 */default: break;}}/* 键消抖延时函数*/void delay(unsigned int i){int j;for(;i>0;i--)for(j=0;j<100;j++);}/* 键扫描函数*/uchar keyscan(void){uchar scancode,tmpcode;P1 = 0xf0;// 发全0行扫描码if ((P1&0xf0)!=0xf0)// 若有键按下{delay(2);// 延时去抖动if ((P1&0xf0)!=0xf0)// 延时后再判断一次,去除抖动影响{scancode = 0xfe;//第一行变低while((scancode&0x10)!=0)// 逐行扫描{P1 = scancode;// 输出行扫描码if ((P1&0xf0)!=0xf0)// 本行有键按下{tmpcode = (P1&0xf0)|0x0f;/* 返回特征字节码,为1的位即对应于行和列*/return((~scancode)+(~tmpcode));}else scancode = (scancode<<1)|0x01;// 行扫描码左移一位}}}return(0);// 无键按下,返回值为0}/* 密码比较函数*/bit pwcmp(void){bit flag;uchar i;for (i=0;i<8;i++){if (pw[i]==pwbuf[i])flag = 1;else{flag = 0;i=8;}}return(flag);}/* 密码清除函数*/void pwclk(unsigned char k){unsigned char i;for (i=0;i<8;i++){wordbuf[i] = 0;// 数码管显示00000000starbuf[i] = 0;if(k==0)pwbuf[i] = 0;// 用FFFFFF清除已经输入的密码elsepw[i] = 0;// 用FFFFFF清除已经输入的密码}}/* 按键声响函数*/void alarm(){unsigned char i;for(i=0;i<200;i++){warn=!warn;delay(1);}}/* 密码报警函数*/ void alarm1(){unsigned int i;for(i=0;i<2000;i++){warn=!warn;delay(1);}}/* 呼叫报警函数*/ void alarm2(){unsigned char i=12; unsigned char a,b; while(i>0){for(a=0;a<150;a++){warn=!warn;delay(1);}for(b=0;b<150;b++){warn=!warn;delay(2);}i--;}}/* 按键处理函数*/void key_conduct(unsigned char a,unsigned char b){switch(a){case 0x11:// 1行1列,数字0if (count<8){if(b==0){starbuf[count] = '*';// 对应密码位上显示'*'pwbuf[count] = 0;}else{pw[count] = 0;wordbuf[count] = 0;lcd_display(2,count+1,wordbuf[count]);}count++;}alarm();break;case 0x21:// 1行2列,数字1 if (count<8){if(b==0){starbuf[count] = '*';// 对应密码位上显示'*'pwbuf[count] = 1;}else{pw[count] = 1;wordbuf[count] = 1;lcd_display(2,count+1,wordbuf[count]);}count++;}alarm();break;case 0x41:// 1行3列,数字2 if (count<8){if(b==0){starbuf[count] = '*';// 对应密码位上显示'*'pwbuf[count] = 2;}else{pw[count] = 2;wordbuf[count] = 2;lcd_display(2,count+1,wordbuf[count]);}count++;}alarm();break;case 0x81:// 1行4列,数字3 if (count<8){if(b==0){starbuf[count] = '*';// 对应密码位上显示'*'pwbuf[count] = 3;}else{pw[count] = 3;wordbuf[count] = 3;lcd_display(2,count+1,wordbuf[count]);}count++;}alarm();break;case 0x12:// 2行1列,数字4 if (count<8){if(b==0){starbuf[count] = '*';// 对应密码位上显示'*'pwbuf[count] = 4;}else{pw[count] = 4;wordbuf[count] = 4;lcd_display(2,count+1,wordbuf[count]);}count++;}alarm();break;case 0x22:// 2行2列,数字5 if (count<8){if(b==0){starbuf[count] = '*';// 对应密码位上显示'*'pwbuf[count] = 5;}else{pw[count] = 5;wordbuf[count] = 5;lcd_display(2,count+1,wordbuf[count]);}count++;}alarm();break;case 0x42:// 2行3列,数字6 if (count<8){if(b==0){starbuf[count] = '*';// 对应密码位上显示'*'pwbuf[count] = 6;}else{pw[count] = 6;wordbuf[count] = 6;lcd_display(2,count+1,wordbuf[count]);}count++;}alarm();break;case 0x82:// 2行4列,数字7 if (count<8){if(b==0){starbuf[count] = '*';// 对应密码位上显示'*'pwbuf[count] = 7;}else{pw[count] = 7;wordbuf[count] = 7;lcd_display(2,count+1,wordbuf[count]);}count++;}alarm();break;case 0x14:// 3行1列,数字8 if (count<8){if(b==0){starbuf[count] = '*';// 对应密码位上显示'*'pwbuf[count] = 8;}else{pw[count] = 8;wordbuf[count] = 8;lcd_display(2,count+1,wordbuf[count]);}count++;}alarm();break;case 0x24:// 3行2列,数字9 if (count<8){if(b==0){starbuf[count] = '*';// 对应密码位上显示'*'pwbuf[count] = 9;}else{pw[count] = 9;wordbuf[count] = 9;lcd_display(2,count+1,wordbuf[count]);}count++;}alarm();break;case 0x44:// 3行3列,确认键enterflag = 1;// 确认键按下if(b==0){if (count==8) // 只有输入8个密码后按确认键才作密码比较pwflag = pwcmp();elsepwflag = 0;// 否则直接pmflag赋0 pwclk(b);//输入密码并判断之后清除}else{if (count==8) // 只有输入8个密码后按确认键才作密码比较pwflag = 1;else{pwflag = 0;pwclk(b);}}break;case 0x84:// 3行4列,取消键count = 0;// 密码计数清零pwclk(b);init_lcd();break;case 0x18:// 4行1列,密码修改键inputflag=1;// 进入密码修改模式count = 0;init_lcd();break;case 0x28:// 4行2列,密码修改键inputflag=0;// 退出密码修改模式count = 0;init_lcd();break;case 0x48:init_lcd();// 关于作品display(1,0,"Author: 083521047HCY");display(2,2,"QQ:393388456 ");delay(3000);init_lcd();break;case 0x88:init_lcd();// 清屏break;default: break;}}/* 主程序*/void main(){uchar key,error=0;init_lcd();while(1){while(inputflag==0)// 输入密码模式{display(1,0,"Input password:");display(2,0,starbuf);key = keyscan();// 调用键盘扫描函数key_conduct(key,inputflag);if(enterflag==1)// 如果按下确认键{enterflag = 0; // 标志位置回0count = 0;// 密码位计数器清零pwclk(inputflag);if(pwflag==1)// 如果密码输入正确{init_lcd();display(1,0,"Correct!");pwclk(0);delay(2000);error=0;}else{init_lcd();init_lcd();init_lcd();display(1,0,"Password wrong!");alarm1();error++;}while(error>=3)// 如果密码输入错误三次{init_lcd();init_lcd();display(1,0,"No access!");alarm2();while(1);}}}while(inputflag==1)// 更改密码模式{display(1,0,"New password:");key = keyscan();// 调用键盘扫描函数key_conduct(key,inputflag);if(enterflag==1)// 如果按下确认键{enterflag = 0; // 标志位置回0count = 0;// 密码位计数器清零if(pwflag==1)// 如果密码修改正确{inputflag=0;init_lcd();display(1,0,"Change finish!");delay(2000);}else{init_lcd();display(1,0,"Change fail!");pwclk(1);alarm1();}}}}}电路图。
基于单片机的电子密码锁程序
四个部分很简单的写法适合大部分人群!!!欢迎下载!//****************************无存储功能电子密码锁******************************************//****************************头文件****************************************** #include"reg52.h"#include"speak.h"#include"lcd_1602.h"#include"keysca.h"//******************************变量定义*************************************************unsigned int shurumima[6];//****************************主函数****************************************** void main(){init_1602(); //初始化while(1){duoyu_1602();keyscan();}}、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、#include"reg52.h"#include"lcd_1602.h"//***************************************************************************** *sbit rw=P0^2;sbit rs=P0^3;sbit en=P0^1;unsigned char code yejing[]={'z','h','o','u','a','i','u','*'};unsigned int mima_init[];extern unsigned int shurumima[6];//********************************写命令、数据*********************************************void write(unsigned char date,unsigned char k){rs=k;P2=date;delay1ms(5);en=1;delay1ms(5);en=0;}//******************************液晶初始化************************************************void init_1602(){en=0;rw=0;write(0x38,0);write(0x0c,0);write(0x06,0);write(0x01,0);}//******************************1ms延时函数***********************************************void delay1ms(unsigned int z) //1ms延时{unsigned int x,y;for(x=z;x>0;x--)for(y=120;y>0;y--);}//******************************液晶多余部分显示***********************************************void duoyu_1602(){unsigned char i;write(0x80+0x40,0);write(yejing[7],1);write(0x80+0x41,0);for(i=0;i<4;i++) write(yejing[i],1);write(0x80+0x45,0);write(yejing[1],1);write(0x80+0x46,0);write(yejing[4],1);write(0x80+0x47,0);write(yejing[2],1);write(0x80+0x48,0);write(yejing[0],1);write(0x80+0x49,0);write(yejing[1],1);write(0x80+0x4a,0);write(yejing[5],1);write(0x80+0x4b,0);write(yejing[0],1);write(0x80+0x4c,0);write(yejing[6],1);write(0x80+0x4d,0);write(yejing[2],1);write(0x80+0x4e,0);write(yejing[7],1);write(0x80+0x4f,0);write(yejing[7],1);write(0x80,0);for(i=0;i<5;i++) write(yejing[7],1);write(0x80+0x0b,0);write(yejing[7],1);write(0x80+0x0c,0);write(yejing[7],1);write(0x80+0x08,0);for(i=1;i<4;i++) write(shurumima[i]+0x30,1);write(0x80+0x0d,0);for(i=1;i<4;i++) write(mima_init[i]+0x30,1);}、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、#include"reg52.h"#include"lcd_1602.h"#include"keysca.h"#include"speak.h"//******************************************************************unsigned int low,high,number,qout,j;unsigned char ok,shuru,gaimi,gaimi_count,shuru_count,ok_count,succeed_flag,m,n;extern unsigned int shurumima[6];unsigned int mima_init[]={0,1,2,3};unsigned int code please[]={'p','l','e','a','s','e'};//pleaseunsigned int code sr[]={'s','r'};//shuruunsigned int code gm[]={'g','m'};//gaimiunsigned int code ookk[]={'o','k'};//ok//******************************************************************void keyscan(){P1=0X0F;low=P1&0x0f;if(low!=0x0f){delay1ms(10);low=P1&0x0f;}P1=0XF0;high=P1&0xf0;if(high!=0xf0){delay1ms(10);high=P1&0xf0;number=low+high;switch(number){case(0x77): qout=0;write(0x80+0x07,0);write('0',1);break;case(0x7b): qout=1;write(0x80+0x07,0);write('1',1);break;case(0x7d): qout=2;write(0x80+0x07,0);write('2',1);break;case(0x7e): qout=3;write(0x80+0x07,0);write('3',1);break;case(0xb7): qout=4;write(0x80+0x07,0);write('4',1);break;case(0xbb): qout=5;write(0x80+0x07,0);write('5',1);break;case(0xbd): qout=6;write(0x80+0x07,0);write('6',1);break;case(0xbe): qout=7;write(0x80+0x07,0);write('7',1);break;case(0xd7): qout=8;write(0x80+0x07,0);write('8',1);break;case(0xdb): qout=9;write(0x80+0x07,0);write('9',1);break;case(0xdd): ;break;case(0xde): ;break;case(0xe7): shuru=1;write(0x80+0x05,0);for(j=0;j<2;j++) write(sr[j],1);break;case(0xeb): gaimi=1;write(0x80+0x05,0);for(j=0;j<2;j++) write(gm[j],1);break;case(0xed): ;break;case(0xee): ok=1;write(0x80+0x05,0);for(j=0;j<2;j++) write(ookk[j],1);break;}if(gaimi==1&&shuru==1) //改密码{mima_init[gaimi_count]=qout;gaimi_count++;}if(shuru==1&&gaimi==0) //输入密码{shurumima[shuru_count]=qout;shuru_count++;}if(ok==1){if(shuru==1&&gaimi==0) //输入密码确认{for(ok_count=1;ok_count<4;ok_count++){if(shurumima[ok_count]!=mima_init[ok_count]){succeed_flag=2;break;}}if(succeed_flag!=2) succeed_flag=1;ok=0;shuru=0;shuru_count=0;}if(gaimi==1&&shuru==1) //修改密码确认{gaimi_count=0;gaimi=0;ok=0;}}while(P1!=0XF0);}if(succeed_flag==1){succeed();m++;if(m==10) {succeed_flag=0;m=0;}}else if(succeed_flag==2){speak_led();n++;if(n==10) {succeed_flag=0;n=0;}}}。
基于单片机的电子密码锁设计
基于单片机的电子密码锁设计基于单片机的电子密码锁设计在日常生活中,密码锁是一种常见的安全设备,被广泛应用于家庭、办公室等场所。
随着科技的发展,传统的机械密码锁已经不能完全满足人们对安全性和便捷性的需求。
为了提高密码锁的安全性和实用性,许多基于单片机的电子密码锁被设计出来。
本文将介绍一种基于单片机的电子密码锁设计,并详细说明其工作原理和实现过程。
1. 设计思路基于单片机的电子密码锁的设计目标是提高安全性和便捷性。
传统的机械密码锁容易被暴力破解,而且如果密码被泄露,需要更换整个锁体。
因此,采用电子密码锁可以提供更高的安全性和方便的密码管理功能。
2. 系统组成基于单片机的电子密码锁主要由以下几个部分组成:(1)输入模块:用于输入密码的设备,可以是键盘、触摸屏等。
(2)单片机控制模块:使用单片机作为核心控制器,接收输入密码并进行验证。
(3)驱动模块:通过驱动模块对电子锁进行控制开关。
(4)显示模块:以LED或LCD等形式显示相关信息。
(5)电源模块:为电子密码锁系统提供电能供应。
3. 工作原理基于单片机的电子密码锁的工作原理如下:(1)初始状态下,用户可以通过输入密码进行解锁或锁定。
输入模块接收用户输入的密码。
(2)输入模块将密码发送给单片机控制模块。
(3)单片机控制模块使用事先设定的密码进行比对。
如果密码匹配,单片机控制模块将发出控制信号给驱动模块。
(4)驱动模块接收到控制信号后,将根据信号的指示打开或关闭电子锁。
(5)同时,单片机控制模块会发出指令给显示模块,将结果显示给用户。
4. 实现过程基于单片机的电子密码锁的实现过程如下:(1)选择合适的单片机,如AT89C51。
(2)设计电路板,将输入模块、单片机控制模块、驱动模块、显示模块和电源模块连接在一起。
(3)编写单片机的控制程序,实现密码验证和控制信号的生成。
(4)制作密码锁外壳,将电子密码锁系统组装在一起。
(5)测试电子密码锁的各个功能是否正常。
电子行业单片机电子密码锁
电子行业单片机电子密码锁1. 简介电子密码锁是一种基于单片机技术的电子设备,用于控制门锁的开启和关闭。
相比传统机械密码锁,它更方便灵活,并且具备更高的安全性。
本文将介绍电子行业单片机电子密码锁的设计原理和实现步骤。
2. 设计原理电子行业单片机电子密码锁的设计基于以下原理:•单片机控制:通过单片机来控制电子密码锁的开关。
•键盘输入:用户通过键盘输入密码。
•存储密码:将用户输入的密码存储在内存中,以便验证。
•比对密码:每次用户输入密码后,将其与存储密码进行比对,判断密码是否正确。
•控制锁的开关:如果密码正确,则控制锁的开关,实现开锁或锁定。
3. 实现步骤以下是电子行业单片机电子密码锁的实现步骤:3.1 设置初始密码在使用电子密码锁之前,需要设置初始密码。
用户可以通过按键输入一个初始密码,在单片机的内存中进行存储。
3.2 输入密码用户通过键盘输入密码,将其保存在单片机的内存中。
3.3 比对密码每次用户输入密码后,程序将其与存储的密码进行比对。
如果输入的密码与存储的密码一致,则密码正确。
3.4 控制开锁或锁定如果输入的密码与存储的密码一致,程序将控制锁的开关,实现开锁或锁定操作。
4. 使用场景电子密码锁适用于多种场景,包括但不限于:•家庭安全:门锁是家庭安全的重要组成部分,电子密码锁提供了更高的安全性和便捷性。
•商业场所:商店、仓库等需要保护某些区域不受未经授权的访问的场所。
•办公室:加强对办公室机密信息或贵重物品的保护。
5. 优势和局限性电子密码锁相比传统机械密码锁具备以下优势:•安全性更高:采用数字密码,并且在密码比对过程中可以进行复杂的算法操作,提高密码的安全性。
•便捷性更好:无需携带钥匙,只需记住密码就可以轻松开锁。
•可编程性更强:通过单片机的编程,可以实现更多功能,例如密码重置、临时密码等。
然而,电子密码锁也存在一些局限性:•电力依赖:电子密码锁需要电力供应,如果停电,可能无法正常使用。
•密码泄露风险:由于密码是数字形式,一旦密码被泄露,可能导致安全问题。
基于单片机电子密码锁的课程设计
基于单片机电子密码锁的课程设计本文将介绍基于单片机电子密码锁的课程设计,包括设计目的、设计理念、硬件设计、软件实现和实验结果。
通过这篇文档,读者可以了解到使用单片机进行电子密码锁设计的方法和步骤,并了解到电子密码锁在现代生活中的应用。
一、设计目的本次课程设计的主要目的是为了加深学生对单片机的理解和应用,同时锻炼学生的设计能力和实践能力。
通过电子密码锁的设计,可以培养学生的系统思维和解决问题的能力,同时也可以让学生了解到电子密码锁在现代生活中的应用。
二、设计理念电子密码锁是一种智能化的安全设备,其设计理念是通过输入密码来进行开锁,实现门禁控制和安全防护的功能。
本次课程设计的设计理念是通过单片机控制电子密码锁的开关,实现对门禁的控制和管理。
同时,本次设计还考虑到了密码的安全性和可靠性,确保用户信息的安全和可靠性。
三、硬件设计1、硬件模块本次课程设计的硬件模块主要包括单片机模块、显示屏模块、键盘模块、电子锁模块和电源模块。
2、模块连接单片机模块、显示屏模块、键盘模块、电子锁模块和电源模块之间通过连线进行连接。
其中,单片机模块和显示屏模块之间通过串口进行通讯,单片机模块和键盘模块之间通过IO 口进行通讯,单片机模块和电子锁模块之间通过IO口进行通讯,电源模块则为整个系统提供电源供应。
四、软件实现1、程序流程本次课程设计的程序流程主要包括初始化、密码输入、密码验证、开锁和关闭等步骤。
其中,初始化主要是对各个模块进行初始化和设置,包括显示屏、键盘、电子锁等模块的初始化和设置;密码输入是通过键盘输入密码,将密码存储在单片机中;密码验证是对密码进行比对,如果密码正确,则开锁,否则显示密码错误的提示信息;开锁则是对电子锁进行控制,将开关状态进行切换;关闭则是对电子锁进行控制,将开关状态进行切换。
2、代码实现本次课程设计的代码实现主要采用C语言进行编写,并通过Keil C IDE进行编辑和调试。
具体代码可以参照下面的代码:int main(void){ //初始化模块Init_LCD(); Init_Keypad(); Init_Lock(); while (1) { //获取用户输入的密码Get_Password(); //判断密码是否正确if(Check_Password()) { //解锁Unlock_Lock();//显示解锁成功信息Display_LCD("UnlockSuccessed"); } else { //显示解锁失败信息Display_LCD("Unlock Failed"); } }}五、实验结果通过本次课程设计,设计并制作出了一款基于单片机电子密码锁。
基于单片机控制的电子密码锁的设计
基于单片机控制的电子密码锁的设计电子密码锁是一种基于数字密码输入的安全锁,通过电子芯片实现密码验证和电路控制,可以实现高强度的防盗保护。
本文将介绍一种基于单片机控制的电子密码锁的设计,包括硬件设计和程序控制。
一、硬件设计电子密码锁的硬件设计主要包括以下几个部分:1. 控制模块:采用单片机作为控制模块,可以选择常用的STC89C52、AT89S52等芯片,具体选择可以根据自己的需求和喜好进行。
控制模块需要有丰富的I/O接口、计时计数等功能,以满足密码锁的各种要求。
2. 驱动电路:用于控制锁体的开关,可以采用继电器、MOS场效应管等元件实现。
驱动电路需要根据实际使用需求进行合理的选型和电路设计。
3. 显示器件:用于显示密码输入的状态,可以选择LED数码管、液晶显示器等元件。
显示器件需要与单片机进行适当的接口连接,以便单片机能够动态更新显示内容。
4. 电源供应:为密码锁提供可靠的电源供应,可以选择直流稳压电源、蓄电池等方式进行。
电源供应需要有稳定的电压和额定电流,以保证电子密码锁的正常工作。
二、程序控制电子密码锁的程序控制是实现密码验证和开锁操作的关键。
下面以STC89C52单片机为例,介绍电子密码锁的程序设计。
1. 程序框架程序主要分为以下几部分:(1) 系统初始化:包括单片机的端口初始化、中断向量表初始化、数码管显示初始化等。
(2) 密码输入:根据键盘输入的数字进行密码验证,密码正确则跳转到开锁操作;密码错误则显示错误信息。
(3) 开锁操作:控制锁体打开或锁定,通常采用继电器等元件驱动锁体,同时显示开锁成功的信息。
(4) 系统复位:在使用完成后进行复位,清除密码和错误计数等信息。
2. 程序实现程序实现的关键在于密码验证和状态显示。
密码验证通常采用了计数、中断等机制实现。
对于状态显示,不同的数码管或LCD显示器具有不同的控制方式,需根据具体的芯片进行编程。
3. 代码示例// 密码验证void CheckPassword(unsigned char input){if (input==password[0] && count==0) // 第一位正确{count=1;}else if (input==password[1] && count==1) // 第二位正确{count=2;}else if (input==password[2] && count==2) // 第三位正确{count=3;Unlock(); // 跳转到开锁操作}else // 输入错误{ErrorCode();delay(500);ClearPassword();}}// 显示错误代码void ErrorCode(void){LED=0xff; // 全部LED灯亮起delay(500);LED=0x00; // 全部LED灯熄灭}// 清除密码void ClearPassword(void){count=0;}三、总结通过上述实例,我们可以看出基于单片机控制的电子密码锁设计比较简单,易于实现。
基于单片机的电子密码锁设计
基于单片机的电子密码锁设计一、电子密码锁的工作原理电子密码锁主要由输入模块、控制模块、存储模块和执行模块组成。
用户通过输入模块(如键盘)输入密码,控制模块(单片机)对输入的密码进行处理和判断,并与存储模块中预先设定的密码进行比对。
如果输入密码正确,控制模块将向执行模块发送开锁指令,实现开锁;如果输入密码错误,则执行相应的错误处理操作,如报警、锁定等。
二、硬件设计(一)单片机的选择在本设计中,选用了_____型号的单片机。
该单片机具有性能稳定、功耗低、接口丰富等优点,能够满足电子密码锁的控制需求。
(二)输入模块输入模块采用了矩阵键盘,通过行列扫描的方式获取用户输入的密码。
矩阵键盘具有按键数量多、占用端口少的特点,能够有效节省单片机的资源。
(三)存储模块为了存储预设的密码,选用了_____型号的EEPROM芯片。
EEPROM具有掉电不丢失数据的特性,能够保证密码的安全性和可靠性。
(四)显示模块为了给用户提供反馈信息,使用了_____型号的液晶显示屏。
可以显示开锁状态、输入错误提示等信息。
(五)执行模块执行模块包括电磁锁和报警装置。
当输入密码正确时,单片机控制电磁锁打开;当输入密码错误次数超过设定值时,启动报警装置。
三、软件设计(一)主程序流程系统上电后,首先进行初始化操作,包括单片机端口初始化、EEPROM读取预设密码等。
然后进入密码输入等待状态,当检测到有按键输入时,进行密码处理和判断,并根据判断结果执行相应的操作。
(二)密码输入处理在密码输入过程中,对输入的按键进行去抖处理,防止误判。
同时,对输入的密码进行加密处理,提高密码的安全性。
(三)密码比对将输入的密码与存储在EEPROM中的预设密码进行比对。
比对过程中,采用逐位比较的方式,确保密码的准确性。
(四)错误处理当输入密码错误时,记录错误次数。
如果错误次数超过设定值,则启动报警装置,并锁定键盘一段时间,防止暴力破解。
四、系统调试与测试(一)硬件调试首先检查电路连接是否正确,有无短路、断路等情况。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一、设计背景
随着社会科技的进步,锁已经发展到了密码锁、磁性锁、电子锁、激光锁、声控锁等等。在传统钥匙的基础上,加了一组或多组密码,不同声音,不同磁场,不同声波,不同光束光波,不同图像来控制锁的开启,从而大大提高了锁的安全性。当今安全信息系统应用越来越广泛,特别在机密保护、维护隐私与财产保护方面起到重大作用,而基于电子密码锁的安全系统就是其中的一部分,运用非常广泛,研究它具有重大的现实意义。
在这种行列式矩阵键盘编码的单片机系统中,键盘处理程序首先执行等待按键并确认有无按键按下的程序段,还要对按键进行消抖处理。
当确认有按键按下后,就要识别就是哪一个按键被按下。本次设计使用的就是线反转法。给行线置为0x0f,给列线置为0xf0,再将行列进行逻辑或结果为0xff,当有按键下时相应的按键位行列均为0,行列逻辑或不为0xff,由此可利用行列逻辑或后的值就是否为0xff来判断就是否有按键按下。再根据扫描结果判断按下键的位置。给相应的按键赋值即可实现数字键与功能键。对功能键进行相应的软件编程即可实现按键功能。
如图一所示,矩阵键盘的每一条水平(行线)与垂直线(列线)的交叉处不相通,而就是通过一个按键来连通,利用这种行列式矩阵结构只需要N条行线与M条列线即可组成有 个按键的键盘。
图一 矩阵键盘
本次设计需要0~9十个数字按键、一个新建键、一个确认键、一个修改键、一个进入键与一个取消键共15个按键,所以选用4X4的矩阵按键。
5、
本系统软件设计由主程序、初始化程序、键盘扫描程序、密码输入程序、功能键定义程序、重置密码程序、LCD显示程序、中断延时程序、报警程序、延时程序组成。
如图六所示为主程序流程图,开始接上电源,程序进行初始化设置,然后在键盘上输入密码,此系统进行键盘扫描,判断密码就是否正确,密码正确开锁,密码不正确统计错误密码次数加1。在开锁情况下进行修改密码,点击确认密码修改成功,否则结束返回。若密码修改成功则再执行之前的操作。
N
Y N N Y Y Y N
图六 主程序流程图
六、系统调试
本次调试采用的就是protues与keil软件进行仿真。首先运用keil软件编写电子密码锁的源程序,本设计主要运用C语言编写。源程序编写后运行生成目标文件供protues仿真调试。
5.LED数码管显示密码,为确保安全性所有密码均用“*”表示。
4、
1.矩阵键盘
密码的输入用矩阵键盘实现,包括数字键与功能键。
具体功能设计如表一:
表一 键盘具体功能设计表
按键
键名
功能
0~9
数字键
输入密码
新建
新建键
设定新密码
确认
确认键
比较密码
修改
修改键
显示密码
进入
进入键
允许输入密码
取消
取消键
取消输入密码
本设计采用矩阵键盘对密码进行输入,具有较高的优势,减少了I/O口的占用数目。密码的显示采用LCD显示屏实现,为确保安全性统一使用“*”显示密码,当重新设置密码时按下“修改”键,LCD显示屏显示数字。采用蜂鸣器模拟报警系统,增加了密码锁的安全能力。软件使用C语言编程,运用自上而下的模块化设计思想,使系统朝着分布式、小型化方向发展,增强系统的可扩展性与运行的稳定性。测试结果表明,设计达到电子密码锁的功能。
使用矩阵键盘能减少键盘与单片机接口所占用的I/O线数目,当按键较多的时候通常采用这种方法。
2.开锁电路
在本次设计中用发光二极管代替电磁锁,二极管D1亮表示锁开,二极管灭表示没有开锁。如图二所示,当输入密码与内置密码相配合时将P2、1置0,二极管亮,否则二极管不亮。
图二发光二级管电路
3.报警电路
报警电路由单片机与蜂鸣器组成,如图三所示,当P2、0为低电平时蜂鸣器发出声音报警。每次输入的密码与正确密码进行比较,如果相同,锁开灯亮。如果输入错误则用一个变量来记录输入错误的次数,当输入密码错误达到三次时,蜂鸣器工作发出报警声音,本次设计使用的就是声音持续3秒蜂鸣器报警,即可听到“嘟——”3秒的响声。
基于单片机的电子密码锁设计
摘要
随着科技与人们的生活水平的提高,如何实现家庭防盗这一问题也变的尤为突出,传统的机械锁由于构造简单,被撬事件屡见不鲜。电子密码锁保密性好,使用灵活性高,收到广大用户的青睐。
本设计就是以单片机AT89C52作为密码锁的主控芯片与数据存储单元,结合外围的矩阵键盘输入、LCD显示、开锁、报警等,用C语言编写程序,并用Keil uVision4软件进行编译设计了一款可以更改密码,具有报警功能的电子密码控制系统。
2、
1.了解单片机开发系统的组成及结构;
2.掌握I/O口的操作方法;
3.能够熟练使用protues与keil软件进行连线与编程,并熟练掌握仿真方法;
4.掌握LCD显示屏的显示原理;
5.掌握C语言编程方法;
6.培养查找错误与改正错误的能力。
3、
本设计采用单片机为主控芯片,结合外围电路组成电子密码控制系统。设计主要功能有:
1.设置6位密码,密码通过键盘输入,若密码正确,则锁打开,LCD显示“Password Right Lock Opened!”。原始密码在首次开锁时为“000000”。
2.重新设置密码时,LCD显示“******”,按下“修改”键显示数值。
3.密码只能输入6位数字,无法输入多余数字。
4.具有自动报警功能:当密码输入错误三次,报警,蜂鸣器响3秒。
图三报警电路
4.LCD显示电路
密码显示电路由单片机、排阻与LCD显示屏组成。显示电路如图四所示。为保证密码的保密性,本设计采用“*”显示所有输入密码,如图四所示。当重设密码时,按下“修改”键显示数字,如图五所示。本设计只允许输入数字密码6次,超过6次以后的数字无法输入。
图四LCD显示电路
图五重设密码LCD显示数字
电子密码锁可以在日常生活与现代办公中,住宅与办公室的安全防范、单位的文件档案、财务报表以及一些个人资料的保存等多种场合使用。大大提高了主人物资的安全性。目前使用的密码锁种类繁多,各具特色。本文从经济实用的角度出发,采用AT89C52单机,研制了一款具有防盗自动报警功能的电子密码锁。该密码锁设计方法合理,简单易行,成本低,符合住宅、办公室用锁要求,具有一定的推广价值。