您好,欢迎来到尚车旅游网。
搜索
您的当前位置:首页四位数字密码锁的设计

四位数字密码锁的设计

来源:尚车旅游网
※※※※※※※※※ ※※

※※

级学生

EDA课程设计

※ ※

※※※※※※※※※

EDA课程设计报告书

课题名称 四位数字密码锁的设计 姓 名 学 号 院 系 专 业 指导教师

年 月 日

设计任务及要求: (1)设计任务: 本课程设计要求设计的数字密码锁密码为4位,由密码锁输入电路、码锁控制电路、密码锁处理电路、显示电路四大部分组成,将各电路组合起来,构成了一个完整的电子密码锁。 (2)设计要求: ①、密码输入:每按一个数字键,就输入一个数值,且将在显示器上的最右上方显示出该数字,并将先前已经输入的数据依序左移一位。 ②、数码清除:按下此键可以清除前面所有的输入值,清除成为“0000”。 ③、密码修改:按下此键时将目前的数字设定成新的密码。 ④、激活电锁:按下此键可将密码锁上锁,红色LED灯将闪烁一次。 ⑤、解除电锁:按下此键会检查输入的密码是否正确,若绿色LED亮则表示密码正确,密码锁将解锁。 指导教师签名: 年 月 日 二、指导教师评语: 指导教师签名: 年 月 日 三、成绩 验收盖章

年 月 日 1

四位数字密码锁的设计

1 设计目的

随着人们生活水平的提高,如何实现家庭防盗这一问题也变的尤其的突出,传统的机械锁由于其构造简单,被撬的事件屡见不鲜,电子锁由于其保密性高,使用灵活性好,安全系数高,受到了广大用户的喜爱,电子密码锁的使用也体现了人们消费水平、保安意识和科技水平的提高,而且避免了携带甚至丢失钥匙的麻烦。

2 设计的主要内容和要求

设计一个简单的数字电子密码锁,密码为 4 位。要求具备如下功能:

(1)如果输入数字键,第一个数字会从数码管的最右端开始显示,此后每按下一个数字键,数码管上的数字必须往左移动一格,以便将新的数字显示出来。

(2)本密码锁为四位密码锁,当输入的数字超过四个时,不会显示第四个以后的数字。

(3)按下密码清零键,清除所有输入的数字,清除成为“0000”,即做归零动作。

(4)按下解锁键,检查输入的密码是否正确,若解锁指示灯(绿色LED灯)闪烁一次,即表示密码正确(开锁)。

(5)按下改密键,将当前输入的数字设置成新密码,且上锁指示灯(红色LED灯)闪烁一次,即密码锁已上锁。

3 整体设计方案

本系统采用模块化的设计,整个系统分为数字按键输入、时钟输入、功能按键输入、数字译码块、功能译码模块、核心处理模块、输出处理模块、显示译码电路八个模块。整体电路如图3.1所示。

2

数字按键输时钟模块 数字译码模块 功能按键输功能译码模块 核心处理模块 输出处理模块 显示译码电路

图3.1 数字密码锁总方框图

4 硬件电路的设计

4位数字密码锁包括五个基本逻辑模块,分别为:数字按键输入模块(numinput)、功能按键输入模块(funcinput)、核心处理模块(core)、输出处理模块(allout)、七段译码器模块(dataout)。

4.1 数字按键输入--numinput

说明:读取数字键0~9。按键为矩阵形式,高电平表示按键未按下,低电平表示按键按下。经数字按键输入模块处理后输出4位二进制代码,“0000”~“1001”分别表示0~9,用“1010”表示其他无效输入。如表4.1所示。

表4.1 数字按键输入模块(numinput)的数据输入输出

按键数字 0 1 2 3 4 按键扫描输出 11011110 01111101 01111110 10110111 10111011 Numinput二进制输出 0000 0001 0010 0011 0100 对应十进制数字 0 1 2 3 4 3

5 6 7 8 9 其他按键 10111101 10111110 11010111 11011011 11011101 其他 0101 0110 0111 1000 1001 1010 5 6 7 8 9 10

(1)numinput--数字按键输入模块程序: library ieee;

use ieee.std_logic_11.all;

entity numinput is

port(numin :IN std_logic_vector(7 downto 0);

numstate,clk :IN std_logic;

numout :OUT std_logic_vector(3 downto 0));

end numinput;

architecture one of numinput is

signal state :std_logic;

signal mem :std_logic_vector(7 downto 0);

begin

process(clk)

begin

if clk'event and clk='1' then if state/=numstate then if mem/=numin then

case numin is

when \"11011110\" => numout<=\"0000\";---\"0\" when \"01111101\" => numout<=\"0001\";---\"1\" when \"01111110\" => numout<=\"0010\";---\"2\" when \"10110111\" => numout<=\"0011\";---\"3\"

4

when \"10111011\" => numout<=\"0100\";---\"4\" when \"10111101\" => numout<=\"0101\";---\"5\" when \"10111110\" => numout<=\"0110\";---\"6\" when \"11010111\" => numout<=\"0111\";---\"7\" when \"11011011\" => numout<=\"1000\";---\"8\" when \"11011101\" => numout<=\"1001\";---\"9\" when others => numout<=\"1010\";

end case;

state<=numstate; else numout<=\"1010\";

end if;

mem<=numin; end if;

end if;

end process; end one;

(2)数字按键输入模块仿真图:

图4.1 数字按键输入模块仿真图

由图可知,当数字按键输入模块的输入依次为\"11011110\"、\"01111101\"、\"01111110\"、\"10110111\"、\"10111011\"、\"10111101\"、\"10111110\"、\"11010111\"、\"11011011\"、\"11011101\"时,numout输出依次输出“0000”“0001”、“0010”、“0011”、、

5

“0100”、“0101”、“0110”、“0111”、“1000”、“1001”;当为其他按键输入时,numout输出均为“1010”。

(3)数字按键输入--numinput符号文件:

图4.2 数字按键输入--numinput符号文件

4.2 功能按键输入模块 -- funcinput

读取矩阵按键区控制功能按键 -— 清除键、改密键、上锁键、解锁键。高电平表示按键未按下,低电平表示按键按下。按照“清除,改密,上锁,解锁”顺序读取按键时,只能输出一位控制信号。输出的信号为3位二进制代码,“001”~“100”,依次表示“清除按键、改密按键、上锁,解锁”,用“000”表示输入不为功能按键信号。

表4.2 控制功能按键输入模块(funcinput)的输出输入数据 功能按键 清除键 改密键 上锁键 解锁键 其他按键

功能按键扫描输出 Funcinput二进制输出 对应十进制数字 001 010 011 100 000 1 2 3 4 0 11100111 11101101 11101110 11101011 其他 (1)Funcinput--功能按键输入模块程序: library ieee;

use ieee.std_logic_11.all;

6

entity funcinput is

port( funcin: constate,clk:

IN std_logic_vector(7 downto 0); IN std_logic;

conout:OUT std_logic_vector(2 downto 0)); end funcinput;

architecture one of funcinput is

signal state: signal mem:

begin process(clk) begin

if clk'event and clk='1' then

if constate/=state then state<=constate; if mem/=funcin then

with funcin select

conout<=\"001\" when \"11100111\" , --清除键

\"010\" when \"11101101\改密键 \"011\" when \"11101110\上锁键 \"100\" when \"11101011\" , --解锁键 \"000\" when others;

mem<=funcin; else conout<=\"000\"; end if; end if; end if; end process; end one;

(2)功能按键输入模块仿真图:

std_logic;

std_logic_vector(7 downto 0);

7

图4.3 功能按键输入模块仿真图

由图可知:当功能按键输入模块的输入依次为“11100111”、“ 11101101”、“ 11101110”、“ 11101011”时,conout输出依次为“001”、“010”、“011”、“100”, 当为其他按键输入时,conout输出均为“000”。 (3)功能按键输入模块--funcinput符号文件:

图4.4 功能按键输入模块 --funcinput符号文件

4.3 核心处理模块--core

核心处理模块将根据输入(数字按键输入以及功能按键输入)来改变存储器状态、数码管显示以及LED灯显示(红灯亮为上锁,绿灯亮为解锁)。

(1)Core--核心处理程序: library ieee;

use ieee.std_logic_11.all; entity core is

port( numin: conin: clk:

in std_logic_vector(3 downto 0); in std_logic_vector(2 downto 0); in std_logic;

out std_logic_vector(3 downto 0);

8

dataa,datab,datac,datad:

ledr,ledg,numout,conout:

end entity;

architecture one of core is

out std_logic);

type lockstate is (unlock,locked);

signal numa,numb,numc,numd,codea,codeb,codec,coded:std_logic_vector(3 downto 0);

signal numstate,constate: signal locksta:

begin

process(clk,numin,conin) begin

if clk'event and clk='1' then--上升沿

if numin/=\"1010\" then

numd<=numc; numc<=numb; numb<=numa; numa<=numin; end if;

if conin/=\"000\" then

if conin=\"001\" then--清除键按下

numa<=\"0000\";--全部清零 numb<=\"0000\"; numc<=\"0000\"; numd<=\"0000\";

elsif conin=\"010\" then --改密键按下

if locksta/=locked then--锁并不是上锁状态

codea<=numa; codeb<=numb; codec<=numc; coded<=numd;

9

std_logic; lockstate;

end if;

elsif conin=\"011\" then --上锁键按下

if locksta/=locked then

numa<=\"0000\"; numb<=\"0000\"; numc<=\"0000\"; numd<=\"0000\";

locksta<=locked; --锁定密码锁 end if;

elsif conin=\"100\" then --解锁键按下

if locksta=locked then

if numa=codea and numb=codeb then --输入正确密码

if numc=codec and numd=coded then

locksta<=unlock; --锁开 end if; end if; end if; end if; end if;

if locksta=locked then --若锁锁定

ledr<='1'; --led等高电平,红灯闪烁 ledg<='0'; else

ledr<='0'; ledg<='1'; end if;

dataa<=numa; datab<=numb; datac<=numc; datad<=numd;

10

if numstate='1' then numstate<='0';

else numstate<='1'; end if;

if constate='1' then constate<='0';

else constate<='1'; end if;

numout<=numstate; conout<=constate; end if;

end process; end one;

(2)核心处理模块仿真图:

当数字按键输入为有效输入(即输入的按键为数字按键0~9时),此时虽输入9位数字,但只有前四位有效,所以密码应为“1234”。 若conin输入为“011”(即按下上锁键),此时可以看到ledr为高电平,所以此时红灯闪烁一次,表示密码锁已上锁。仿真波形图如下:

图4.5 核心处理模块仿真图(一)

11

图4.6 核心处理模块仿真图(二)

由图可知:若conin输入为“100”时(解锁时),当再次输入密码“1234”,并此时ledg输出为低电平(绿灯亮)。Dataa输出密码“1234”,则表示此时密码锁已解锁。

(3)核心处理模块--core符号文件:

图4.7 处理核心模块--core符号文件

4.4 输出处理模块—allout

对处理核心模块—core输出的数据进行刷新,使数码管及时显示刷新的数字。 (1)Allout--输出处理程序: library ieee;

use ieee.std_logic_11.all; entity allout is

port( dataa,datab,datac,datad:

clk:

in std_logic_vector(3 downto 0); in std_logic;

out std_logic_vector(3 downto 0);

12

dataout:

outsel:

end allout;

architecture one of allout is

signal timer:

begin process(clk) begin

out std_logic_vector(1 downto 0));

std_logic_vector(1 downto 0);

if clk'event and clk='1' then--上升沿

if timer=\"00\" then

dataout<=dataa; outsel<=\"00\"; timer<=\"01\";

elsif timer=\"01\" then

dataout<=datab; outsel<=\"01\"; timer<=\"10\";

elsif timer=\"10\" then

dataout<=datac; outsel<=\"10\"; timer<=\"11\";

else

ataout<=datad; outsel<=\"11\"; timer<=\"00\";

end if; end if;

end process; end one;

(2)输出处理模块仿真图:

13

图4.8 输出处理模块仿真图

当输出密码为“0123”时,经过输出处理模块的处理后,能刷新输出密码“0123”对应的二进制“0000”、“0001”、“0010”、“0011”,当密码改为“5678”时,该模块也能对应刷新出新密码对应二进制“0101”、“0110”、“0111”、“1000”。

(3)输出处理模块—allout符号文件:

图4.9输出处理模块—allout符号文件

4.5 七段译码器模块—dataout

把4位2进制数翻译成数码管代码,使输入的密码或修改的密码能及时显示在数码管上。

(1)Dataout--七段译码器模块程序: library ieee;

use ieee.std_logic_11.all; entity dataout is

port( datain:IN std_logic_vector(3 downto 0); dataout:OUT std_logic_vector(6 downto 0));

14

end dataout;

architecture one of dataout is begin process(datain) begin case datain is

when \"0000\" => dataout<=\"1111110\"; --数码管显示0 when \"0001\" => dataout<=\"0110000\"; --数码管显示1 when \"0010\" => dataout<=\"1101101\"; --数码管显示2 when \"0011\" => dataout<=\"1111001\"; --数码管显示3 when \"0100\" => dataout<=\"0110011\"; --数码管显示4 when \"0101\" => dataout<=\"1011011\"; --数码管显示5 when \"0110\" => dataout<=\"1011111\"; --数码管显示6 when \"0111\" => dataout<=\"1110000\"; --数码管显示7 when \"1000\" => dataout<=\"1111111\"; --数码管显示8 when \"1001\" => dataout<=\"1111011\"; --数码管显示9 when others => dataout<=\"0000000\"; --不显示 end case; end process; end one;

(2)Dataout--七段译码器模块仿真图:

图4.10 七段译码器模块仿真图

由图可知:当七段译码器的输入信号(datain)为“0000”、“0001”、“0010”、

15

“0011”、“0100”、“0101”、“0110”、“0111”、“1000”、“1001”,输出信号(dataout)依次为:“1111110”、“ 0110000”、“ 1101101”、“ 1111001”、“ 0110011”、“ 1011011”、“ 1011111”、“ 1110000”、 “1111111”、“ 1111011”,当conin输入信号为其他时,译码输出为“0000000”。

表4.3 七段译码器的输入及译码对照表

二进制译码输入 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 其他输入 二进制译码输出 1111110 0110000 1101101 1111001 0110011 1011011 1011111 1110000 1111111 1111011 0000000 数码管显示数字 0 1 2 3 4 5 6 7 8 9 无显示

(3)输出处理模块—allout符号文件:

图4.11 输出处理模块—allout符号文件

16

5 软件设计

四位密码锁的电路设计原理图如下:

图5.1 四位密码锁的电路设计原理图 6 系统仿真

该四位数字密码锁的设计是一个实时的系统,对于每一个按键的操作都是在时钟的上升沿完成的,是一个动态的逻辑关系;而系统输出为数码管显示的实时输出,不便于分析该系统电路的功能,且系统电路中存在自动刷新的功能模块,因而电路仿真时不能较好地观察输出结果,为了解决这一问题,故修改电路的原理图如下:

17

图6.1 便于观察输出结果的原理图

图6.2 系统仿真图(一)

由图可知,当功能按键的输入(funcin)为“11100111”(即按下功能按键“清除键”)时,系统输出(dataa,datab,datac,datad)均为“0000”,表示密码锁的密码已清除,数码管显示输出为“1111110”,即此时4个数码管均显示数字“0”。

18

图6.3 系统仿真图(二)

由图可知,功能按键的输入(funcin)先为“11100111”(即按下功能按键“清除键”),后为“11101110”(即按下功能按键“改密键”)后,系统输出(dataa,datab,datac,datad)为“0001”、“0010”、“0011”、“0100”,表示密码已修改为“1234”,且先ledg输出为低电平,表示为在开锁状态下修改密码,后ledr输出为高电平,表示密码已接受,数字密码锁已上锁。

7 设计总结

通过两星期的紧张工作,最后完成了我的设计任务——基于VHDL语言的四位密码锁设计。通过本次课程设计的学习,我深深的体会到EDA设计课的重要性和目的性所在。本次设计课不仅仅培养了我们实际操作能力,也培养了我们灵活运用课本知识,理论联系实际,自主的进行设计的能力。它不仅仅是一个学习新知识新方法的好机会,同时也是对我所学知识的一次综合的检验和复习,使我明白了自己的缺陷所在,从而查漏补缺。

课程设计要求我要有耐心和毅力,还要细心,稍有不慎,一个小小的错误就会导致结果的不正确,而对错误的检查要求我要有足够的耐心,通过这次设计和设计中遇到的问题,也积累了一定的经验,对以后从事集成电路设计工作会有一定的帮助。在应用VHDL的过程中让我真正领会到了其并行运行与其他软件(C语言)顺序执行的差别及其在电路设计上的优越性。用VHDL硬件描述语言的形式来进行数字系统的设计方便灵活,利用EDA软件进行编译优化仿真极大地减少了电路设计时间和可能发生的错误,降低了开发成本,这种设计方法必将在未来的数字系统设计中发挥越来越重要的作用。

19

在此次课程设计中,非常感谢指导老师对我的指导及各位的同学给我的帮助,在这里请接受我诚挚的谢意! 参考文献

[1]黄仁欣.EDA技术实用教程[M].北京:清华大学出版社,2006 [2]张庆双主编.实用电子电路200例[M].北京:机械工业出版社, 2005 [3]江国强.EDA技术与应用(第三版)[M].北京:电子工业出版社,2004 [4]邹彦、庄严等编.EDA技术与数字系统设计[M].北京:电子工业出版社,2008

[5]华中科技大学电子技术课程组编.康华光主编.电子技术基础 [M].第五版.北京:高等教育出版社,2006

20

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- sceh.cn 版权所有 湘ICP备2023017654号-4

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务