基于VHDL电子密码锁设计.doc

  1. 1、本文档共29页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
基于VHDL电子密码锁设计

摘要 FPGA/VHDL是近几年集成电路中发展最快的产品。由于FPGA性能的高速发展以及设计人员自身能力的提高,可编程逻辑器件供应商将进一步扩大可编程芯片的领地,将复杂的专用芯片挤向高端和超复杂应用。据IC Insights的数据显示,FPGA市场从1999年的29亿美元增长到去年的56亿美元,几乎翻了一番。Matas预计这种高速增长局面以后很难出现,但可编程逻辑器件依然是集成电路中最具活力和前途的产业。 本文介绍的VHDL密码锁应具有如下功能:密码预先存入寄存器中,开锁时,输入密码存入另一寄存器中,当按下“确定”键时,启动比较器,比较两个寄存器中的内容,当结果相同时开锁;当结果不同时不开锁。用户需要修改密码时,先开锁,再按“设定密码”,清除预先存入的密码,通过键盘输入新的2位十进制码,按“确定”完成。 关键词:VHDL,密码锁,矩阵 目录 摘要 1 目录 2 一、 设计要求 3 二 电路组成 3 三 功能电路的设计 4 1、总体设计框图 4 2、键盘接口电路 4 3.时序产生电路 6 4.键盘扫描电路 7 5.键盘消抖电路 8 6.键盘译码电路 10 7.按键存储电路 13 (1)SISO—串行输入/串行输出 14 (2)SIPO--串行输入/并行输出 15 (3)PISO--并行输入/串行输出 16 (4)PIPO--并行输入/并行输出 17 8.密码设置和比较模块 18 9.电锁控制电路设计 19 (1)数字按键输入部分 19 (2)功能键输入部分 19 (3)三种工作模式 19 附件1:程序清单 20 一、 设计要求 设计一个简单的数字电子密码锁,密码为6位。 功能 1、 密码输入:每按下一个键,要求在数码管上显示,并依次左移; 2、密码清除:清除密码输入,并将输入置为”000000”; 3、密码修改:将当前输入设为新的密码; 4、上锁和开锁。 二 电路组成 为达到以上功能,可将电子密码锁分为以下几个模块: 1、键盘接口电路 键盘矩阵、键盘扫描、键盘消抖、键盘译码及按键存储。 2、电锁控制电路: 数字按键输入、存储及清除。 功能按键的设计。 密码清除、修改与存储。 电锁的激活与解除。 3、输出显示电路 BCD 译码、动态扫描电路。 三 功能电路的设计 1、总体设计框图 2、键盘接口电路 矩阵式键盘工作原理: 矩阵式键盘是一种常见的输入装置,在计算机、电话、手机、微波炉等各工电子产品中被广泛应用。如图所示为一3×4 矩阵式键盘。矩阵式键盘以行、列形式排列,图中为4 行3 列,键盘上的每一个按键盘其实是一个开关电路,当某键被按下时,该按键所对应的位置就呈现逻辑0 的状态,键盘的扫描可以以行扫或列扫方式进行,图中为行扫方式,KEYR3—KEYR0 为扫描信号,其中的某一位为0 即扫描其中的一行,具体见表1-1. 键盘扫描信号KEYR3 与第一行相连,KEYR2 与第二行相连,依此类推。很显然,扫描信号的变化顺序为:0111、1011、1101、1110,周而复始。在扫描的过程中,当有键按下时,对应的键位就为逻辑0状态,从而从KEYC2..0 读出的键值相应列为0.具体情况如表1-2 所示: 若从KEYC2..0 读出的值全为1 时,表示没有键被按下,则不进行按键的处理。如果的键被按下,则将KEYC2..0 读出的送至键盘译码电路进行译码。 表1-2 键盘扫描与其对应的键值的关系时序产生电路: 时序电路的产生: 在一个系统的设计中,往往需要多种时钟信号,最为方便的方法是利用一个自由计数器来产生各种需要的频率。本电路需要:系统主时钟、消抖取样时钟和动态扫描时钟。 3.时序产生电路 有如下VHDL 程序,请分析其输出结果: LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_ARITH.ALL ; USE IEEE.STD_LOGIC_UNSIGNED.ALL ; ENTITY free_counter IS PORT ( CLK : IN STD_LOGIC ; CLK_A : OUT STD_LOGIC ; CLK_B : OUT STD_LOGIC_VECTOR(1 DOWNTO 0) ) ; END free_counter ; ARCHITECTURE a OF free_counter IS SIGNAL Q : STD_LOGIC_VECTOR(6 DOWNTO 0); BEGIN PROCESS (CLK) BEGIN IF CLKEVENT AND CLK = 1 THEN Q = Q + 1; END IF; END PROCESS; CLK_A = Q(1) ; CLK_B = Q(4 DOWNTO 3) ; END a ; 分

文档评论(0)

3471161553 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档