北邮小学期简易密码锁实验报告

合集下载

北邮数字电路综合实验报告

北邮数字电路综合实验报告

数字电路综合实验报告简易智能密码锁一、实验课题及任务要求设计并实现一个数字密码锁,密码锁有四位数字密码和一个确认开锁按键,密码输入正确,密码锁打开,密码输入错误进行警示。

基本要求:1、密码设置:通过键盘进行4 位数字密码设定输入,在数码管上显示所输入数字。

通过密码设置确定键(BTN 键)进行锁定。

2、开锁:在闭锁状态下,可以输入密码开锁,且每输入一位密码,在数码管上显示“-”,提示已输入密码的位数。

输入四位核对密码后,按“开锁”键,若密码正确则系统开锁,若密码错误系统仍然处于闭锁状态,并用蜂鸣器或led 闪烁报警。

3、在开锁状态下,可以通过密码复位键(BTN 键)来清除密码,恢复初始密码“0000”。

闭锁状态下不能清除密码。

4、用点阵显示开锁和闭锁状态。

提高要求:1、输入密码数字由右向左依次显示,即:每输入一数字显示在最右边的数码管上,同时将先前输入的所有数字向左移动一位。

2、密码锁的密码位数(4~6 位)可调。

3、自拟其它功能。

二、系统设计2.1系统总体框图2.2逻辑流程图2.3MDS图2.4分块说明程序主要分为6个模块:键盘模块,数码管模块,点阵模块,报警模块,防抖模块,控制模块。

以下进行详细介绍。

1.键盘模块本模块主要完成是4×4键盘扫描,然后获取其键值,并对其进行编码,从而进行按键的识别,并将相应的按键值进行显示。

键盘扫描的实现过程如下:对于4×4键盘,通常连接为4行、4列,因此要识别按键,只需要知道是哪一行和哪一列即可,为了完成这一识别过程,我们的思想是,首先固定输出高电平,在读入输出的行值时,通常高电平会被低电平拉低,当当前位置为高电平“1”时,没有按键按下,否则,如果读入的4行有一位为低电平,那么对应的该行肯定有一个按键按下,这样便可以获取到按键的行值。

同理,获取列值也是如此,先输出4列为高电平,然后在输出4行为低电平,再读入列值,如果其中有哪一位为低电平,那么肯定对应的那一列有按键按下。

数字密码锁实训报告总结

数字密码锁实训报告总结

一、引言随着科技的不断发展,电子技术已经深入到人们的日常生活中。

电子密码锁作为一种新型的锁具,因其安全性高、操作简便、易于维护等优点,在各个领域得到了广泛应用。

为了提高学生的实践能力,本实训项目以数字密码锁为核心,通过理论学习和实践操作,让学生掌握数字密码锁的设计与实现方法。

二、实训目的1. 了解数字密码锁的基本原理和组成;2. 掌握数字密码锁的设计与实现方法;3. 提高学生的动手能力和创新能力;4. 培养学生的团队协作精神。

三、实训内容1. 数字密码锁的基本原理数字密码锁是一种利用数字电路实现密码输入和开锁功能的锁具。

其基本原理是:将密码输入到锁内,通过比较输入密码与预设密码是否一致,来控制开锁信号的输出。

2. 数字密码锁的组成数字密码锁主要由以下几个部分组成:(1)密码输入模块:负责将用户输入的密码转换为数字信号;(2)密码存储模块:存储预设的密码;(3)密码比较模块:比较输入密码与预设密码是否一致;(4)控制模块:根据密码比较模块的结果,控制开锁信号的输出;(5)输出模块:输出开锁信号,驱动锁具解锁。

3. 数字密码锁的设计与实现本实训项目采用以下方法设计数字密码锁:(1)选用合适的数字电路芯片,如74LS112双JK触发器等;(2)根据数字密码锁的功能需求,设计相应的电路;(3)利用EDA工具进行电路仿真,验证电路功能;(4)编写程序,实现密码输入、存储、比较和控制等功能;(5)将程序烧录到单片机或FPGA等芯片中,实现数字密码锁的功能。

四、实训过程1. 理论学习在学习过程中,我们首先了解了数字密码锁的基本原理和组成,掌握了数字电路的基本知识,如逻辑门、触发器等。

2. 设计与仿真根据实训要求,我们选用74LS112双JK触发器等芯片,设计了一个简单的数字密码锁电路。

利用EDA工具进行电路仿真,验证电路功能。

3. 编程与调试编写程序,实现密码输入、存储、比较和控制等功能。

将程序烧录到单片机或FPGA等芯片中,进行调试,确保数字密码锁的功能正常。

密码锁实验报告doc

密码锁实验报告doc

密码锁实验报告篇一:电子密码锁实验报告密码锁实验报告一,实验目的1. 学习8051定时器时间计时处理、跑马灯、按键扫描及LED数码管显示的设计方法。

2. 设计任务及要求利用实验平台上8个LED数码管,按键,跑马灯实现设置密码,密码锁的功能二,实验要求基本要求:1:用4×4矩阵键盘组成0-9数字键及确认键和删除键。

2:可以自行设定或删除8位密码。

3:用5位数码管组成显示电路提示信息,当输入密码时,只显示“8.”,当密码位数输入完毕按下确认键时,对输入的密码与设定的密码进行比较,若密码正确,则门开,此处用绿色led发光二极管亮一秒钟做为提示,若密码不正确,禁止按键输入3秒,同时用红色led发光二极管亮三秒钟做为提示;若在3秒之内仍有按键按下,则禁止按键输入3秒被重新禁止。

三,实验基本原理利用单片机定时器完成计时功能,定时器0计时中断程序每隔0.05s中断一次并当作一个计数,设定定时1秒的中断计数初值为20。

为了将时间在LED数码管上显示,可采用静态显示法和动态显示法,由于静态显示法需要译码器,数据锁存器等较多硬件,可采用动态显示法实现LED显示,通过对每位数码管的依次扫描,使对应数码管亮,同时向该数码管送对应的字码,使其显示数字。

由于数码管扫描周期很短,由于人眼的视觉暂留效应,使数码管看起来总是亮的,从而实现了各种显示。

四,实验设计分析针对要实现的功能,采用AT89S51单片机进行设计,AT89S51 单片机是一款低功耗,高性能CMOS8位单片机,片内含4KB在线可编程(ISP)的可反复擦写1000次的Flash 只读程序存储器,器件采用高密度、非易失性存储技术制造,兼容标准MCS- 51指令系统及80C51引脚结构。

这样,既能做到经济合理又能实现预期的功能。

1在程序方面,采用分块设计的方法,这样既减小了编程难度、使程序易于理解,又能便于添加各项功能。

程序可分为闹钟的声音程序、时间显示程序、日期显示程序,秒表显示程序,时间调整程序、闹钟调整程序、定时调整程序,延时程序等。

简易14位数字密码锁控制电路设计实验报告

简易14位数字密码锁控制电路设计实验报告

简易14位数字密码锁控制电路设计实验报告实验目的:本实验旨在掌握基本的数字锁控制电路设计方法,通过具体实验操作,使学生对数字锁的原理、控制电路以及数字电路的设计方法等有更加深入的了解和认识。

实验器材:1.数字集成电路:CD4017B、CD4069UB、CD4073B、SN74LS08N;2.10K电位器、电容、电阻器、LED灯等。

实验原理:密码锁控制电路是由数字集成电路CD4017B、CD4069UB、CD4073B及SN74LS08N组成的。

其中CD4017B为计数器,CD4069UB、CD4073B和SN74LS08N为逻辑门电路,用于实现密码锁控制功能。

CD4017B为数字集成电路,它是一个10位二进制计数器,可以用于电子时钟、计时器、频率分频器等电路中。

它具有高速、低功耗、可升级性等优点,被广泛地应用于数字电路中。

CD4069UB、CD4073B和SN74LS08N均为逻辑门电路,主要用来实现与门、或门、非门等逻辑运算。

在本实验中,CD4017B接在控制端,用于实现计数和循环控制功能;CD4069UB、CD4073B和SN74LS08N三个逻辑门电路用于实现锁定、解锁功能。

实验步骤:1. 选择合适的元器件,按照电路图连接电路。

将电路连接好后,注意检查电路连接是否正确、元器件是否插紧等。

2. 按照实验要求进行编程。

将编程程序设置为14位数字密码,具体程序如下:3. 按照要求测试实验电路。

输入正确的密码,即可实现锁定或解锁功能。

实验结果:通过实验操作,我们成功地设计出一款14位数字密码锁控制电路,其操作流程为输入密码-验证密码-锁定或解锁。

通过实验可以看出,密码锁控制电路设计简单,操作方便,具有广泛的应用前景。

实验分析:数字密码锁是一种常见的电子密码产品,可以用于保护个人财产、资料等,在家庭、宾馆等场所得到了广泛的应用。

基于数字集成电路和逻辑门电路设计数字密码锁控制电路,具有操作简单、易于维护和升级等优点,被广泛地应用于数字电路中。

简易位数字密码锁控制电路设计实验报告

简易位数字密码锁控制电路设计实验报告

简易位数字密码锁控制电路设计实验报告Coca-cola standardization office【ZZ5AB-ZZSYT-ZZ2C-ZZ682T-目录一、前言 (2)二、课设任务 (2)三、方案设计、原理分析 (2)四、译码电路设计 (8)五、报警信号产生器 (10)六、调试及结果..........................................(12)七、体会 (13)一、前言本次课程设计的基本任务是着重提高学生在EDA知识学习与应用方面的实践技能。

学生通过电路设计安装、调试、整理资料等环节,初步掌握工程设计方法和组织实践的基本技能,逐步熟悉开展科学实践的程序和方法。

EDA技术是电子信息类专业的一门新兴学科,是现代电子产品设计的核心,其任务是掌握在系统可编程逻辑器件及其应用设计技术,为电子产品开发研制打下坚实基础。

本课程设计对学生有如下要求:根据设计任务和指标,初步电路;通过调查研究,设计计算,确定电路方案;选择元器件,在计算机上连好线路,独立进行试验,并通过调试、仿真、改进方案;分析实验结果,写出设计总结报告:学会自己分析,找出解决问题方法;对设计中遇到的问题,能独立思考、查阅资料,寻找答案。

二、课设任务1、14位数字密码分成高7位(DH6…DH0)和低7位(DL6…DL0),用数字逻辑开关预置,输出信号out为1表示开锁,否则关闭。

2、14位数字密码分时操作,先预置高7位,然后再置入低7位。

3、要求电路工作可靠,保密性强,开锁出错立即报警。

4、利用MAX plus2 软件进行设计、编译,并在FPGA芯片上实现。

5、简易14位数字密码锁模块的框图如下:三、方案设计、原理分析首先我是一班的三号,所以我的密码时0100010 0000011。

我所做的设计是先把高七位输入锁存,然后在输入低七位,最后判断密码是否正确,密码正确就开锁,密码错误就报警。

数字密码锁控制电路的组成部分:YMQ 模块,1、IC9A的设计设计要求14位数字密码分时操作,先预置高七位0100010,而后置低七位0000011,首先可以使用寄存器将高七位存起来,而后与低七位一起进行译码,如果密码正确,输出OUT2为1,否则为0.2、数字密码锁控制电路原理图:输入密码正确时波形图输入错误密码时波形图数字密码锁控制电路的VHDL语言编程原理分析:当CLR为0时,寄存器与D触发器被清零,此时在A……G输入高七位密码0100010,用CLK给一个脉冲,由于此时输出端Q为0,经过一个非门为1,与CLK一起经过一个与门,送入寄存器CLK 端,产生上升沿;而经过非门的CLR为1,送入寄存器中,将高七位通过寄存器送入译码器的高七位中。

北邮密码锁小学期报告

北邮密码锁小学期报告

北京邮电大学电路综合实验报告实验题目:学生姓名:班级:小班学号:同组姓名:E-MAIL:目录一.设计目的、用途、功能二.硬件设计三、软件设计四、实验器材五、实验过程六、分工情况七、实验总结和心得体会八、参考文献九、代码摘要:本项目是做一个基于ATMega 16单片机的电子密码锁,通过4×4键盘和LCD液晶显示,实现了密码锁的密码验证、重新设置、输入错误后报警直到复位后启动倒计时功能,在倒计时内键盘自动锁死,倒计时结束后恢复所有功能等一些基本功能,通过LCD的巧妙使用实现友好的人机界面功能,更具人性化,除此之外还创新性的实现了LCD的开锁功能和键盘的重新定义。

通过LCD的开锁功能和对键盘的重新定义以及倒计时功能可以有效地防止密码被盗,同时也降低了成本,便于携带安装。

关键字:ATMega16 单片机、密码锁、键盘、 LCD 、开锁、倒计时一.设计目的、用途、功能1.设计目的随着科技的发展,安全问题越来越受到人们重视,不仅居家安全受到重视,出门在外行李物品的安全问题也受到了很多关注,在此基础上各种安全产品相继问世,如指纹防盗,红外防盗等,虽然这类产品的安全性较高,但其成本也同样较高,并且携带安装不方便,这种种缺点限制了其发展。

本设计的目的就是为了在保证高安全性的前提下,实现降低成本,方便携带安装的功能,真正服务于人民。

当然对于密码锁,我们接触最多的就是取款机了,我们设计的这个密码锁,与众不同的地方就是我们可以让我们的液晶显示屏无限循环的显示操作指南,只有当你按下键盘上的任意一个键的时候才可以终止这种循环。

还有一点,就是我们的密码锁加了倒计时这个功能,当输入错误次数超过三次的时候,就不能再输入了,更加安全。

2. 设计用途由于本设计成本较低且安全性能稳定,可适用于家庭防盗、行李箱、车载行李箱等一些安全性能要求不高且需要便携的产品上,其安全性能远远优于同等成本的安全性。

其中输入密码错误无限报警和自动锁死的功能能提高用户的警觉性,降低失窃率。

北邮密码锁小学期报告

北京邮电大学电路综合实验报告实验题目:学生姓名:班级:小班学号:同组姓名:E-MAIL:目录一.设计目的、用途、功能二.硬件设计三、软件设计四、实验器材五、实验过程六、分工情况七、实验总结和心得体会八、参考文献九、代码摘要:本项目是做一个基于ATMega 16单片机的电子密码锁,通过4×4键盘和LCD液晶显示,实现了密码锁的密码验证、重新设置、输入错误后报警直到复位后启动倒计时功能,在倒计时内键盘自动锁死,倒计时结束后恢复所有功能等一些基本功能,通过LCD的巧妙使用实现友好的人机界面功能,更具人性化,除此之外还创新性的实现了LCD的开锁功能和键盘的重新定义。

通过LCD的开锁功能和对键盘的重新定义以及倒计时功能可以有效地防止密码被盗,同时也降低了成本,便于携带安装。

关键字:ATMega16 单片机、密码锁、键盘、 LCD 、开锁、倒计时一.设计目的、用途、功能1.设计目的随着科技的发展,安全问题越来越受到人们重视,不仅居家安全受到重视,出门在外行李物品的安全问题也受到了很多关注,在此基础上各种安全产品相继问世,如指纹防盗,红外防盗等,虽然这类产品的安全性较高,但其成本也同样较高,并且携带安装不方便,这种种缺点限制了其发展。

本设计的目的就是为了在保证高安全性的前提下,实现降低成本,方便携带安装的功能,真正服务于人民。

当然对于密码锁,我们接触最多的就是取款机了,我们设计的这个密码锁,与众不同的地方就是我们可以让我们的液晶显示屏无限循环的显示操作指南,只有当你按下键盘上的任意一个键的时候才可以终止这种循环。

还有一点,就是我们的密码锁加了倒计时这个功能,当输入错误次数超过三次的时候,就不能再输入了,更加安全。

2. 设计用途由于本设计成本较低且安全性能稳定,可适用于家庭防盗、行李箱、车载行李箱等一些安全性能要求不高且需要便携的产品上,其安全性能远远优于同等成本的安全性。

其中输入密码错误无限报警和自动锁死的功能能提高用户的警觉性,降低失窃率。

电子密码锁实训报告心得

一、前言随着科技的发展,人们对安全的重视程度日益提高,电子密码锁作为一种高科技产品,广泛应用于家庭、企业、银行等领域。

为了提高自己的实践能力,我参加了电子密码锁实训课程,通过本次实训,我对电子密码锁的设计与实现有了更深入的了解,以下是我对本次实训的心得体会。

二、实训内容与过程1. 实训内容本次实训主要包括以下几个方面:(1)电子密码锁原理及设计方法;(2)电子密码锁硬件电路设计;(3)电子密码锁软件编程;(4)电子密码锁仿真与调试。

2. 实训过程(1)理论学习:通过查阅相关资料,了解电子密码锁的基本原理、设计方法以及常见硬件电路。

(2)硬件电路设计:根据实训要求,设计电子密码锁的硬件电路,包括键盘输入、密码存储、显示、报警等模块。

(3)软件编程:根据硬件电路设计,编写电子密码锁的软件程序,实现密码输入、密码存储、密码比较、报警等功能。

(4)仿真与调试:利用Proteus软件对电子密码锁进行仿真,观察电路运行状态,根据仿真结果调整电路参数,直至满足设计要求。

三、实训心得体会1. 基本原理与设计方法通过本次实训,我对电子密码锁的基本原理有了更深入的了解。

电子密码锁主要由以下几个部分组成:(1)密码输入模块:用于输入密码,一般采用键盘输入方式;(2)密码存储模块:用于存储密码,一般采用EEPROM或Flash存储器;(3)密码比较模块:用于比较输入密码与存储密码是否一致;(4)显示模块:用于显示密码输入情况、锁状态等信息;(5)报警模块:用于在密码输入错误时发出报警信号。

在设计电子密码锁时,需要考虑以下几个因素:(1)安全性:密码存储方式要保密,防止他人非法获取;(2)可靠性:电路设计要稳定,防止因电路故障导致密码丢失或误操作;(3)易用性:操作简单,便于用户使用;(4)成本:尽量降低成本,提高产品竞争力。

2. 硬件电路设计在硬件电路设计过程中,我学习了如何选择合适的元器件,如何设计电路板,以及如何布线。

简易密码锁设计实验报告(一)

简易密码锁设计实验报告(一)简易密码锁设计实验报告研究背景在当前的社会中,密码锁已经广泛应用于各种领域,如个人家庭、办公场所、银行等。

密码锁在保障安全的同时,也带来了便捷。

因此,设计一款简易密码锁具有重要意义。

实验目的本次实验旨在设计一款简易密码锁,能够通过输入正确的密码从而打开锁,同时能够保护用户的安全。

实验步骤1.确定锁的锁舌位置和大小,确定锁的存储方式。

2.选择合适的电子元件,如单片机、键盘、LED灯等。

3.设计程序流程,完成程序并进行调试。

4.进行实验,并测试相关数据。

5.对实验结果进行分析,总结实验过程中的问题并提出改进方案。

实验结果及分析经过一段时间的实验,我们设计出了一款简易密码锁。

该密码锁通过输入正确的密码可以打开锁,密码为“123456”。

在打开锁的过程中,如果输入错误的密码,则锁将不会打开,并提示密码错误。

同时,该密码锁还具有防止暴力破解的功能,在输入密码错误达到一定次数时,将自动锁死。

在实验过程中,我们发现了一些问题,如电路连线不够稳定、程序层次不够清晰等。

针对这些问题,我们进行了相应的改进,在稳定电路连线的同时,也简化了程序层次,提高了密码锁的使用体验。

结论通过本次实验,我们成功地设计出了一款简易密码锁,并成功地实现了输入正确密码可以打开锁的功能。

在实验过程中,我们遇到了一些问题,但经过不断地实验和调整,最终得到了一个较为完善的版本。

参考文献无。

实验心得通过本次实验,我进一步了解了密码锁的设计和工作原理。

在实验过程中,我采用科学严谨的方法去解决问题,例如测试数据、重新设计程序以及频繁的测试与优化。

这个过程让我深深地体会到了科学实验具有的重要性,只有不断地实验、总结、优化,才能得到一个经得起实验检验的好结果。

同时,在实验过程中我还学会了合理地进行电路的布线以及如何选取合适的元件,这些都是我在日后实际工作中所必备的技能。

在实验过程中,我还发现设计中的细节问题常常决定一个产品的品质,在以后的工作中,我会更加注重产品的细节设计。

密码锁实习报告

密码锁实习报告在_____公司的密码锁实习经历,让我对密码锁这一领域有了更深入的了解和认识。

在这段时间里,我参与了密码锁的研发、生产和测试等多个环节,不仅学到了专业知识和技能,还积累了宝贵的实践经验。

一、实习单位及岗位介绍我实习的_____公司是一家专注于密码锁研发、生产和销售的企业。

公司拥有先进的生产设备和技术,产品涵盖了家用密码锁、商用密码锁和智能密码锁等多个系列。

我所在的岗位是密码锁研发助理,主要负责协助研发工程师进行密码锁的设计和开发工作。

具体包括收集市场需求和用户反馈、参与方案讨论和制定、进行零部件选型和测试,以及协助编写技术文档等。

二、实习内容及成果1、密码锁市场调研在实习初期,我参与了密码锁市场调研工作。

通过查阅相关资料、走访市场和与用户交流,了解了当前密码锁市场的需求和趋势。

发现用户对于密码锁的安全性、便捷性和智能化程度有着越来越高的要求。

同时,也了解到不同用户群体对于密码锁的功能和价格有着不同的需求和偏好。

2、密码锁设计与开发在市场调研的基础上,我协助研发工程师进行了密码锁的设计和开发工作。

参与了方案的讨论和制定,提出了一些自己的想法和建议。

在零部件选型方面,我通过对比不同厂家的产品性能和价格,为项目选择了合适的零部件。

同时,我还参与了密码锁的电路设计和程序编写工作,通过不断地调试和优化,提高了密码锁的稳定性和可靠性。

在密码锁的外观设计方面,我们充分考虑了用户的审美需求和使用习惯,采用了简洁大方的设计风格,并注重了细节的处理。

经过多次修改和完善,最终确定了密码锁的外观设计方案。

3、密码锁测试与优化在密码锁开发完成后,我参与了密码锁的测试和优化工作。

通过对密码锁进行功能测试、性能测试和安全性测试,发现了一些存在的问题和不足之处。

针对这些问题,我与研发工程师一起进行了分析和研究,提出了相应的解决方案,并对密码锁进行了优化和改进。

经过多次测试和优化,密码锁的各项性能指标均达到了设计要求,并且在稳定性和安全性方面有了很大的提高。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

简易智能密码锁实验报告一、实验要求:设计并实现一个数字密码锁,密码锁有四位数字密码和一个确认开锁按键,密码输入正确,密码锁打开,密码输入错误进行警示。

基本要求:1、密码设置:通过键盘进行4 位数字密码设定输入,在数码管上显示所输入数字。

通过密码设置确定键(BTN 键)进行锁定。

2、开锁:在闭锁状态下,可以输入密码开锁,且每输入一位密码,在数码管上显示“-”,提示已输入密码的位数。

输入四位核对密码后,按“开锁”键,若密码正确则系统开锁,若密码错误系统仍然处于闭锁状态,并用蜂鸣器或led 闪烁报警。

3、在开锁状态下,可以通过密码复位键(BTN 键)来清除密码,恢复初始密码“0000”。

闭锁状态下不能清除密码。

4、用点阵显示开锁和闭锁状态。

提高要求:1、输入密码数字由右向左依次显示,即:每输入一数字显示在最右边的数码管上,同时将先前输入的所有数字向左移动一位。

2、密码锁的密码位数(4~6 位)可调。

二、系统设计:1、设计思路:在数字电路设计中,自顶向下设计方法的主要思想是对数字系统进行划分,将复杂的设计原理简化为相对简单的模块设计,不同的模块用来完成数字系统中某一部分的具体功能。

总体思路:2、总体框图:三、仿真波形及波形分析1、键盘输入模块图3-1 键盘输入仿真在上图中,clkjp时钟控制jpcat,jpcat控制kbout从0111到1110变换,然后手动控制kbin来模拟键盘的案件,从jpout就能看到的键入的数字。

2、防抖图3-2 防抖仿真上图中可以看见,btn1只在上升沿才有用,而clear会持续到一个周期的最后才会完毕。

3、状态转移图3-3 状态转移模块仿真如上图所示,开始,按下set=1,set1=1,setmode=1,进入设置密码状态。

然后,jpout连续输入2和6,改了密码,然后btn2=1代表按下了确定键,lockmode变成1,setmode变成0,状态从设定状态变成锁定状态。

再之后,ipout输入2和6,再次btn2=1(按下确定键),lockmode 变成0,状态从锁定状态变成开锁状态。

整个就实现了一个循环。

四、源程序library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity mms isport (clk : in std_logic;set:in std_logic;btn1,btn2,btnloc:in std_logic;smgzf: out std_logic_vector(6 downto 0);smgcatout:out std_logic_vector(5 downto 0);kbin: in std_logic_vector(3 downto 0);kbout: buffer std_logic_vector(3 downto 0);dzrow,dzcolr,dzcolg: out std_logic_vector(7 downto 0); fmq: out std_logic);end mms;architecture behave of mms issignal clkjp: std_logic;signal clksmg: std_logic;signal clkdz: std_logic;signal clkfd: std_logic;signal clkfm: std_logic;signal jpcat: integer range 0 to 3;signal smgcat:integer range 0 to 5;signal dzcat:integer range 0 to 7;signal tmp1: integer range 0 to 99999;--jpsignal tmp2: integer range 0 to 999;--dzsignal tmp3: integer range 0 to 999;--smgsignal tmp4: integer range 0 to 2499999;--fdsignal tmp5: integer range 0 to 20;--alarm timesignal tmpdo: integer range 0 to 97655;--alarm timesignal jpout:integer range 0 to 10;signal alarm:std_logic;signal m1y,m2y,m3y,m4y:std_logic_vector(6 downto 0);signal m1,m2,m3,m4,mm1,mm2,mm3,mm4: integer range 0 to 9; signal wei:integer range 0 to 3;signal kwei:integer range 0 to 4;signal setmode:std_logic;signal set1:std_logic;signal lockmode:std_logic;signal clear: std_logic;signal sure: std_logic;signal lock: std_logic;signal noise:std_logic;signal beep:std_logic;beginfangdou:process(clk)beginif(clk'event and clk='1')thenif (tmp4=2499999) thentmp4<=0;clkfd<=not clkfd;elsetmp4<=tmp4+1;end if;end if;end process;shezhi:process(set,sure)beginif(clkfd'event and clkfd='1')thenif(set='1')then --set进入改密码状态 set1<='1';end if;if(sure='1')thenset1<='0';end if;end if;end process;qingling:process(btn1)beginif(clkfd'event and clkfd='1')thenif(btn1='1')then --clear为清零键 clear<='1';else clear<='0';end if;end if;end process;queding:process(btn2)beginif(clkfd'event and clkfd='1')thenif(btn2='1')thensure<='1'; --sure为btn5(确定键) else sure<='0';end if;end if;end process;suoding:process(btnloc)beginif(clkfd'event and clkfd='1')thenif(btnloc='1')then --lock为锁定键lock<='1';else lock<='0';end if;end if;end process;suoyou:process(jpout)beginif(clkfd'event and clkfd='1')thenalarm<='0';if(lockmode='1')then --在锁定状态wei<=0;if(jpout/=10)then --按了键if(kwei=3)then mm4<=jpout;kwei<=kwei+1;elsif(kwei=2)then mm3<=jpout;kwei<=kwei+1;elsif(kwei=1)then mm2<=jpout;kwei<=kwei+1;elsif(kwei=0)then mm1<=jpout;kwei<=kwei+1;end if;end if;if(sure='1')then --进入判断密码的状态if((mm1=m1)and(mm2=m2)and(mm3=m3)and(mm4=m4)and(kwei=4))then lockmode<='0';alarm<='0';else kwei<=0;alarm<='1';end if;end if;else --在开锁状态kwei<=0;if((lock='1'))then --进入锁定状态lockmode<='1';setmode<='0';alarm<='0';elseif(set1='1')then setmode<='1'; --进入改密码状态else setmode<='0';end if;end if;if(clear='1') then --密码直接清零然后锁定m1<=0;m2<=0;m3<=0;m4<=0;mm1<=0;mm2<=0;mm3<=0;mm4<=0;wei<=0;kwei<=0;alarm<='0';setmode<='0';lockmode<='1';elsif(setmode='1')thenif(jpout/=10)then --如有输入if(wei=0)then m1<=jpout;wei<=wei+1;mm1<=jpout;elsif(wei=1)then m2<=jpout;wei<=wei+1;mm2<=jpout;elsif(wei=2)then m3<=jpout;wei<=wei+1;mm3<=jpout;elsif(wei=3)then m4<=jpout;wei<=0;mm4<=jpout;end if;end if;if(sure='1')then lockmode<='1';setmode<='0';alarm<='0'; --如果按了清零 end if;end if;end if;end if;end process;jianpan1:process(clk)beginif(clk'event and clk='1')thenif (tmp1=99999) thentmp1<=0;clkjp<=not clkjp;elsetmp1<=tmp1+1;end if;end if;end process;jianpan2:process(clkjp)beginif(clkjp'event and clkjp='1')thenif (jpcat=3)thenjpcat<=0;elsejpcat<=jpcat+1;end if;end if;end process;jianpan3:process(jpcat)begincase jpcat iswhen 0=>kbout<="0111";when 1=>kbout<="1011";when 2=>kbout<="1101";when 3=>kbout<="1110";end case;end process;jianpan4:process(jpcat)beginif((kbout="0111")and(kbin="0111"))then jpout<=0;elsif((kbout="0111")and(kbin="1011"))then jpout<=4; elsif((kbout="0111")and(kbin="1101"))then jpout<=8; elsif((kbout="1011")and(kbin="0111"))then jpout<=1; elsif((kbout="1011")and(kbin="1011"))then jpout<=5; elsif((kbout="1011")and(kbin="1101"))then jpout<=9; elsif((kbout="1101")and(kbin="0111"))then jpout<=2; elsif((kbout="1101")and(kbin="1011"))then jpout<=6; elsif((kbout="1110")and(kbin="0111"))then jpout<=3; elsif((kbout="1110")and(kbin="1011"))then jpout<=7; else jpout<=10;end if;end process;mimafuzhi1:process(m1)begincase m1 iswhen 0=>m1y<="1111110";when 1=>m1y<="0110000";when 2=>m1y<="1101101";when 3=>m1y<="1111001";when 4=>m1y<="0110011";when 5=>m1y<="1011011";when 6=>m1y<="1011111";when 7=>m1y<="1110000";when 8=>m1y<="1111111";when 9=>m1y<="1111011";end case;end process;mimafuzhi2:process(m2)begincase m2 iswhen 0=>m2y<="1111110";when 1=>m2y<="0110000";when 2=>m2y<="1101101";when 3=>m2y<="1111001";when 4=>m2y<="0110011";when 5=>m2y<="1011011";when 6=>m2y<="1011111";when 7=>m2y<="1110000";when 8=>m2y<="1111111";when 9=>m2y<="1111011";end case;end process;mimafuzhi3:process(m3)begincase m3 iswhen 0=>m3y<="1111110";when 1=>m3y<="0110000";when 2=>m3y<="1101101";when 3=>m3y<="1111001";when 4=>m3y<="0110011";when 5=>m3y<="1011011";when 6=>m3y<="1011111";when 7=>m3y<="1110000";when 8=>m3y<="1111111";when 9=>m3y<="1111011";end case;end process;mimafuzhi4:process(m4)begincase m4 iswhen 0=>m4y<="1111110";when 1=>m4y<="0110000";when 2=>m4y<="1101101";when 3=>m4y<="1111001";when 4=>m4y<="0110011";when 5=>m4y<="1011011";when 6=>m4y<="1011111";when 7=>m4y<="1110000";when 8=>m4y<="1111111";when 9=>m4y<="1111011";end case;end process;shumaguan1:process(clk) --分出数码管的频率 beginif(clk'event and clk='1')thenif (tmp3=999) thentmp3<=0;clksmg<=not clksmg;elsetmp3<=tmp3+1;end if;end if;end process;shumaguan2:process(clksmg) --数码管按位扫描beginif(clksmg'event and clksmg='1')thenif (smgcat=5)thensmgcat<=0;elsesmgcat<=smgcat+1;end if;end if;end process;shumaguan3:process(setmode,lockmode,smgcat) --数码管按位扫描出的数字 beginif(setmode='1')thencase smgcat iswhen 0=>smgcatout<="110111";smgzf<=m1y;when 1=>smgcatout<="111011";smgzf<=m2y;when 2=>smgcatout<="111101";smgzf<=m3y;when 3=>smgcatout<="111110";smgzf<=m4y;when 4=>smgcatout<="111111";when 5=>smgcatout<="111111";end case;elsif(lockmode='0')thencase smgcat iswhen 0=>smgcatout<="110111";smgzf<=m1y;when 1=>smgcatout<="111011";smgzf<=m2y;when 2=>smgcatout<="111101";smgzf<=m3y;when 3=>smgcatout<="111110";smgzf<=m4y;when 4=>smgcatout<="111111";when 5=>smgcatout<="111111";end case;elsesmgzf<="0000001";if (kwei=1)then smgcatout<="111110";elsif (kwei=2)then smgcatout<="111100";elsif (kwei=3)then smgcatout<="111000";elsif (kwei=4)then smgcatout<="110000";else smgcatout<="111111";end if;end if;end process;dianzhen1:process(clk)beginif(clk'event and clk='1')thenif (tmp2=999) thentmp2<=0;clkdz<=not clkdz;elsetmp2<=tmp2+1;end if;end if;end process;dianzhen2:process(clkdz)beginif(clkdz'event and clkdz='1')thenif (dzcat=7)thendzcat<=0;elsedzcat<=dzcat+1;end if;end if;end process;dianzhen3:process(lockmode,clkdz)beginif(lockmode='0')thencase dzcat is--√when 0=>dzrow<="01111111";dzcolr<="00000000";dzcolg<="11111111"; when 1=>dzrow<="10111111";dzcolr<="00000000";dzcolg<="11111111"; when 2=>dzrow<="11011111";dzcolr<="00000000";dzcolg<="01100110"; when 3=>dzrow<="11101111";dzcolr<="00000000";dzcolg<="11111111"; when 4=>dzrow<="11110111";dzcolr<="00000000";dzcolg<="11111111"; when 5=>dzrow<="11111011";dzcolr<="00000000";dzcolg<="01100110"; when 6=>dzrow<="11111101";dzcolr<="00000000";dzcolg<="01100110"; when 7=>dzrow<="11111110";dzcolr<="00000000";dzcolg<="11000110"; end case;elsecase dzcat is--Xwhen 0=>dzrow<="01111111";dzcolr<="10111111";dzcolg<="00000000"; when 1=>dzrow<="10111111";dzcolr<="00001001";dzcolg<="00000000"; when 2=>dzrow<="11011111";dzcolr<="10111101";dzcolg<="00000000"; when 3=>dzrow<="11101111";dzcolr<="10001001";dzcolg<="00000000"; when 4=>dzrow<="11110111";dzcolr<="10101001";dzcolg<="00000000"; when 5=>dzrow<="11111011";dzcolr<="10001001";dzcolg<="00000000"; when 6=>dzrow<="11111101";dzcolr<="10011011";dzcolg<="00000000"; when 7=>dzrow<="11111110";dzcolr<="10001001";dzcolg<="00000000"; end case;end if;end process;fmq1:process(alarm)beginif(alarm='1')thenif(clkfd'event and clkfd='1')thenif(tmp5=2)thentmp5<=0;noise<='0';else tmp5<=tmp5+1;noise<='1';end if;end if;else noise<='0';end if;end process;fmq2:process(clk)beginif(clk'event and clk='1')thenif (tmpdo=97655) thentmpdo<=0;clkfm<=not clkfm;elsetmpdo<=tmpdo+1;end if;end if;end process;fmq3:process(noise)beginif(noise='1')thenif(clkfm'event and clkfm='1')thenbeep<=not beep;end if;else beep<='0';end if;end process;fmq4:process(beep)beginfmq<=beep;end process;end behave;五、功能说明及资源利用1、功能说明本人设计的这个简易密码锁有五个基本状态,启动程序时在开锁状态,按下btn7进入修改密码的状态,修改密码之后按下btn5进入闭锁状态,再之后直接输入验证密码,按下btn5确定后,进入验证密码的状态,如果不正确,蜂鸣器响并进入闭锁状态,若正确就回到开锁状态,这样形成一个循环。

相关文档
最新文档