欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > DOC文档下载  

    EDA课程设计电子密码锁要点.doc

    • 资源ID:4741066       资源大小:2.50MB        全文页数:20页
    • 资源格式: DOC        下载积分:20金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要20金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    EDA课程设计电子密码锁要点.doc

    1 概述和设计要求1.1概述随着科技的发展,电子产品的应用越来越广泛,电子电路的设计也越来越重要。随着人们生活水平的提高,如何实现家庭防盗这一问题也变得尤其的突出,传统的机械锁由于结构简单,被撬的事件屡见不鲜,电子锁由于其保密性高,使用灵活性好,安全系数高,受到广大用户的亲昵。同时随着电子产品向智能化和微型化的不断发展,数字逻辑电路电子芯片已成为电子产品研制和开发首选的控制器。用电子逻辑电路设计的密码锁经实际操作表明,该密码锁具有安全、实用、成本低等优点,符合一般用锁的需要,具有一定的现实意义。在本次课程设计中,我的的题目是电子密码锁,由输入密码、设定密码、寄存电路、比较电路、显示电路、修改密码组成。主要工作部分是将输入密码与正确密码进行比较,密码正确时红色发光二极管亮,表示开锁成功,密码错误则蜂鸣器响三秒,表示开锁失败。同时经过显示译码器作用到数码显示器显示密码。随着电子产品向智能化和微型化的不断发展,数字逻辑电路电子芯片已成为电子产品研制和开发首选的控制器。1.2设计要求利用基于所学EDA以及QuartusII7.2软件相关知识设计一个具有较高安全性和较低成本的通用电子密码锁,其具体功能要求如下: (1) 数码输入:每按下一个数字键,就输入一个数值,并在显示器上的最右方显示出该数值,同时将先前输入的数据依序左移一个数字位置。(2) 数码清除:按下此键可清除前面所有的输入值,清除成为“0000”。(3) 密码更改:按下此键时会将目前的数字设定成新的密码。(4) 激活电锁:按下此键可将密码锁上锁。(5) 解除电锁:按下此键会检查输入的密码是否正确,密码正确即开锁。 2功能模块整体结构设计作为通用电子密码锁,主要由三个部分组成:数字密码输入电路、密码锁控制电路和密码锁显示电路。根据以上选定的输入设备和显示器件,并考虑到实现各项数字密码锁功能的具体要求,整个电子密码锁系统的总体组成框图如图2.1所示。(1) 密码锁输入电路包括时序产生电路、键盘扫描电路、键盘弹跳消除电路、键盘译码电路等几个小的功能电路。(2) 密码锁控制电路包括按键数据的缓冲存储电路,密码的清除、变更、存储、激活电锁电路(寄存器清除信号发生电路),密码核对(数值比较电路),解锁电路(开/关门锁电路)等几个小的功能电路。(3) 七段数码管显示电路主要将待显示数据的BCD码转换成数码器的七段显示驱动编码。 图2.1 数字电子密码锁系统总体框图图2.2是电子密码锁的输入电路框图,由键盘扫描电路、弹跳消除电路、键盘译码电路、按键数据缓存器,加上外接的一个3×4矩阵式键盘组成。 图2.2电子密码锁的输入电路框图3 各模块详细设计3.1输入电路(1)时序产生电路本时序产生电路中使用了三种不同频率的工作脉冲波形:系统时钟脉冲(它是系统内部所有时钟脉冲的源头,且其频率最高)、弹跳消除取样信号、键盘扫描信号。(2) 键盘扫描电路 扫描电路的作用是用来提供键盘扫描信号(表4.1中的KY3KY0)的,扫描信号变化的顺序依次为11101101101101111110.依序地周而复始。 (3) 键盘译码电路上述键盘中的按键可分为数字按键和文字按键,每一个按键可能负责不同的功能,例如清除数码、退位、激活电锁、开锁等,详细功能参见表2.3。表2.3 键盘参数表扫描位置KY3KY0键盘输出KX2KX0对应键盘按键键盘译码输出实现按键功能11100111F=0001数码输入1012F=0010数码输入1103F=0011数码输入11010114F=0100数码输入1015F=0101数码输入1106F=0110数码输入10110117F=0111数码输入1018F=1000数码输入(4) 弹跳消除电路弹跳消除电路的实现原理如图1.6所示,先将键盘的输入信号D_IN做为电路的输入信号,CLK是电路的时钟脉冲信号,也就是取样信号,D_IN经过两级D触发器延时后再使用RS触发器处理。图2.6 弹跳消除电路的内部实现原理图 此处RS触发器的前端连接和非门的处理原则是:      (1) 因为一般人的按键速度至多是10次/秒,亦即一次按键时间是100 ms,所以按下的时间可估算为50 ms。以取样信号CLK的周期为8 ms计,则可以取样到6次。       (2) 对于不稳定的噪声,在4 ms以下则至多抽样一次。      (3) 在触发器之前,接上AND-NOT之后,SR的组态如表1.2所示。 表2.2 RS触发器真值表SRD-OUT00不变101010(5) 按键存储电路        因为每次扫描会产生新的按键数据,可能会覆盖前面的数据,所以需要一个按键存储电路,将整个键盘扫描完毕后的结果记录下来。按键存储电路可以使用移位寄存器构成。(6) 密码锁输入电路模块框图 输入电路引脚图如下图所示,图中CLK_1K为系统原始时钟脉冲(1 kHz)KEY_IN为键盘按键输入,CLK_SCAN为键盘扫描序列输出,DATA_N:数字输出功能,DATA_F:功能输出,FLAG_N为数字输出标志,FLAG_F为功能输出(上锁及开锁)标志,CLK_CTR是控制电路工作时钟信号,CLK_DEBOUNCE是去抖电路工作时钟信号,大约125 Hz 。 图2.7. 密码输入模块框图3.2控制模块  密码锁的控制电路是整个电路的控制中心,主要完成对数字按键输入和功能按键输入的响应控制。(1) 数字按键输入的响应控制        1) 如果按下数字键,第一个数字会从显示器的最右端开始显示,此后每新按一个数字时,显示器上的数字必须左移一格,以便将新的数字显示出来。   2) 假如要更改输入的数字,可以按倒退按键来清除前一个输入的数字,或者按清除键清除所有输入的数字,再重新输入四位数。   3) 由于这里设计的是一个四位的电子密码锁,所以当输入的数字键超过四个时,电路不予理会,而且不再显示第四个以后的数字。 (2) 功能按键输入的响应控制控制功能如下:1) 清除键:清除所有的输入数字,即做归零动作。   2) 激活电锁键:按下此键时可将密码锁的门上锁。(上锁前必须预先设定一个四位的数字密码。   3) 解除电锁键:按下此键会检查输入的密码是否正确,若密码正确无误则开门。 上锁工作模式:(输入密码),密码核对,改变密码,存储密码以及激活密码锁。开锁工作模式:(输入密码),密码核对、开锁。输入模式输入4位数字退格及清除 图2.8电子密码锁的三种模式及关系 (3) 密码控制模块图模块引脚如下图所示:图中DATA_N3.0:4位行输入.DATA_N3.0:为4位列扫描输出,FLAG_N和FLAG_F则对应ENLOCK实现清除/上锁功能,CLK为全局时钟信号,DATA_BCD15.0为输出16位BCD码,经译码器后转换为4位密码输出。 图2.9.密码控制模块图3.3显示模块密码锁显示电路的设计比较简单,这里直接采用四个4-7译码器来实现。BCD-七段显示译码器(74LS48) 1)输入:8421BCD码,用A3 A2 A1 A0表示(4位)。 2)输出:七段显示,用Ya Yg 表示(7位) 图中A3.0为按键输入在经过去抖电路后的的BCD码的高4位输入数值,经过4-7译码器译码后输出09之间的数值,因为输入为16位的BCD码,而每一个译码器仅4位输入,故一共需要4个译码器来实现密码锁显示电路的设计。译码器引脚如下图所示: 图2.10. 七段译码器输入输出引脚图4 逻辑仿真与时序仿真的实现1)将各个模块连接在一起实现。将前面各个设计好的功能模块进行整合,可得到一个完整的电子密码锁系统的整体组装设计原理图,如图1.8所示 图3.1密码锁的整体组装设计原理2)各个模块VHDL源程序及其仿真波形图(1) 键盘输入去抖电路的VHDL源程序(附仿真图)-DEBOUNCING.VHDLIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; LIBRARY ALTERA; USE ALTERA.MAXPLUS2.ALL;ENTITY DEBOUNCING ISPORT(D_IN, CLK: IN STD_LOGIC; DD1, DD0, QQ1, QQ0 : OUT STD_LOGIC; D_OUT, D_OUT1: OUT STD_LOGIC ); END ENTITY DEBOUNCING ; ARCHITECTURE ART OF DEBOUNCING ISCOMPONENT DCFQ ISPORT(CLK, CLRN, PRN, D: IN STD_LOGIC; Q: OUT STD_LOGIC); END COMPONENT DCFQ; SIGNAL VCC, INV_D : STD_LOGIC ; SIGNAL Q0, Q1 : STD_LOGIC ; SIGNAL D1, D0 : STD_LOGIC ; BEGINVCC <= '1' ; INV_D <= NOT D_IN ;U1: DCFQ PORT MAP (CLK => CLK, CLRN => INV_D, PRN => VCC, D =>VCC , Q => Q0); U2: DCFQ PORT MAP (CLK => CLK, CLRN => Q0, PRN => VCC, D =>VCC , Q => Q1); PROCESS (CLK)BEGINIF CLK'EVENT AND CLK='1' THEND0 <= NOT Q1; D1 <= D0; END IF ;END PROCESS ; DD0 <= D0; DD1 <= D1; QQ1 <= Q1; QQ0 <= Q0; D_OUT <= NOT (D1 AND NOT D0); D_OUT1 <= NOT Q1 ; END ARCHITECTURE ART; -DCFQ.VHDLIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY DCFQ ISPORT(CLK, CLRN, PRN, D: IN STD_LOGIC; Q: OUT STD_LOGIC);END ENTITY DCFQ ; ARCHITECTURE ART OF DCFQ ISBEGINPROCESS (CLK, CLRN, PRN)BEGINIF CLRN='0' AND PRN='1' THENQ<='0' ELSIF CLRN='1' AND PRN='0' THENQ<='1' ELSIF CLK'EVENT AND CLK='1' THENQ <=D; END IF ; END PROCESS ; END ARCHITECTURE ART; 对上述去抖电路源程序用quartus7.2进行时序仿真,得到仿真图如下:图中输出信号QQ0,QQ1,D_OUT1,DD0,DD1是为便于仿真时观察中间结果而增加的观测点的输出,可以在程序中去掉,CLK为时钟脉冲信号,当检测到有键按下时,即D_IN为高电平时接触点出现信号来回弹跳的现象。 图4.1 键盘输入去抖电路DEBOUNCING.VHD的仿真结果图 (2)密码锁输入电路的VHDL源程序(附仿真图)-KEYBOARD.VHDLIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_ARITH.ALL ; USE IEEE.STD_LOGIC_UNSIGNED.ALL ; ENTITY KEYBOARD ISPORT (CLK_1K: IN STD_LOGIC ; -系统原始时钟脉冲(1 kHz)KEY_IN: IN STD_LOGIC_VECTOR (2 DOWNTO 0); -按键输入CLK_SCAN: OUT STD_LOGIC_VECTOR (3 DOWNTO 0) ; -( 仿真时用)键盘扫描序列DATA_N: OUT STD_LOGIC_VECTOR(3 DOWNTO 0) ; -数字输出DATA_F: OUT STD_LOGIC_VECTOR(3 DOWNTO 0) ; -功能输出FLAG_N: OUT STD_LOGIC ; -数字输出标志FLAG_F: OUT STD_LOGIC ; -功能输出标志CLK_CTR: OUT STD_LOGIC; -控制电路工作时钟信号CLK_DEBOUNCE: OUT STD_LOGIC; -(仿真时用)去抖电路工作时钟信号); END ENTITY KEYBOARD ; ARCHITECTURE ART OF KEYBOARD ISCOMPONENT DEBOUNCING ISPORT(D_IN: IN STD_LOGIC ; CLK: IN STD_LOGIC ; D_OUT: OUT STD_LOGIC ) ; END COMPONENT DEBOUNCING; SIGNAL CLK: STD_LOGIC ; -电路工作时钟脉冲SIGNAL C_KEYBOARD: STD_LOGIC_VECTOR(1 DOWNTO 0); -键扫信号“00-01-10-11”寄存器SIGNAL C_DEBOUNCE: STD_LOGIC ; -去抖时钟信号SIGNAL C: STD_LOGIC_VECTOR(2 DOWNTO 0) ; -键盘输入去抖后的寄存器SIGNAL N , F: STD_LOGIC_VECTOR(3 DOWNTO 0) ; -数字、功能按键译码值的寄存器SIGNAL FN , FF: STD_LOGIC ; -数字、功能按键标志值数字、功能按键SIGNAL SEL: STD_LOGIC_VECTOR (3 DOWNTO 0) ; BEGIN-内部连接DATA_N <= N ; DATA_F <= F ; FLAG_N <= FN ; FLAG_F <= FF ; CLK_CTR <= CLK ; -扫描信号发生器 COUNTER : BLOCK ISSIGNAL Q: STD_LOGIC_VECTOR(5 DOWNTO 0); SIGNAL SEL: STD_LOGIC_VECTOR (3 DOWNTO 0); -1110-1101-1011-0111 BEGINPROCESS (CLK_1K) IS BEGINIF CLK_1K'EVENT AND CLK_1K ='1' THENQ <= Q+1; END IF; C_DEBOUNCE <= Q(2) ; -去抖时钟信号, 大约125 Hz C_KEYBOARD <= Q(2 DOWNTO 1) ; - 产生键扫信号*“00-01-10-11”, 大约16 Hz-C_DEBOUNCE <= Q(1) ; -仿真时用 -C_KEYBOARD <= Q(5 DOWNTO 4) ; -仿真时用CLK <= Q(0) ; END PROCESS; CLK_DEBOUNCE<=C_DEBOUNCE; SEL <= "1110" WHEN C_KEYBOARD=0 ELSE"1101" WHEN C_KEYBOARD=1 ELSE"1011" WHEN C_KEYBOARD=2 ELSE"0111" WHEN C_KEYBOARD=3 ELSE"1111" CLK_SCAN <= SEL ; END BLOCK COUNTER ; -键盘去抖DEBOUNUING : BLOCK ISBEGINU1: DEBOUNCING PORT MAP (D_IN => KEY_IN(0) , D_OUT => C(0), CLK => C_DEBOUNCE); U2: DEBOUNCING PORT MAP (D_IN => KEY_IN(1) , D_OUT => C(1), CLK => C_DEBOUNCE); U3: DEBOUNCING PORT MAP (D_IN => KEY_IN(2) , D_OUT => C(2), CLK => C_DEBOUNCE ); END BLOCK DEBOUNUING ; -键盘译码KEY_DECODER : BLOCK SIGNAL Z : STD_LOGIC_VECTOR(4 DOWNTO 0) ; -按键位置BEGINPROCESS(CLK)BEGINZ <= C_KEYBOARD & C ; IF CLK'EVENT AND CLK = '1' THENCASE Z IS WHEN "11101" => N <= "0000" ; -0 WHEN "00011" => N <= "0001" ; -1 WHEN "00101" => N <= "0010" ; -2 WHEN "00110" => N <= "0011" ; -3 WHEN "01011" => N <= "0100" ; -4 WHEN "01101" => N <= "0101" ; -5 WHEN "01110" => N <= "0110" ; -6 WHEN "10011" => N <= "0111" ; -7 WHEN "10101" => N <= "1000" ; -8 WHEN "10110" => N <= "1001" ; -9 WHEN OTHERS => N <= "1111" ; END CASE ; END IF ; IF CLK'EVENT AND CLK = '1' THENCASE Z ISWHEN "11011" => F <= "0100" ; -*_LOCKWHEN "11110" => F <= "0001" ; -#_UNLOCKWHEN OTHERS => F <= "1000" ; END CASE ; END IF ; END PROCESS ; FN <= NOT ( N(3) AND N(2) AND N(1) AND N(0) ) ; FF <= F(2) OR F(0) ; END BLOCK KEY_DECODER ; END ARCHITECTURE ART;说明 1、键盘译码电路除了负责将键盘送出的数据进行译码外,另外就是在译码的同时,必须判别所按下的是数字键还是功能键。2、若为数字键,则flag_numb=1,且out_num 输出BCD 码显示电路。3、若为功能键,则flag_func=1,且out_func 输出4 位码,并送往电锁控制电路。4、对密码锁输入模块仿真如下图:图中的输出信号CLK_SCAN,C_DEBOUNCE是为便于仿真时观察中间结果而增加的观测点的输出,FLAG_N为数字输出标志,当输入为数字时为高电平,DATA_F为功能输出(4位),FLAG_F为功能输出标志当按键输入为退格键或确认键时为高电平输出,DATA_N为数字输出,即在数字输出标志为高电平时确认输出数值。 图4.2输入电路仿真结果图 (3)密码锁控制电路的VHDL源程序(附仿真图)-CTRL.VHDLIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_ARITH.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY CTRL ISPORT (DATA_N: IN STD_LOGIC_VECTOR(3 DOWNTO 0); DATA_F: IN STD_LOGIC_VECTOR(3 DOWNTO 0); FLAG_N: IN STD_LOGIC; FLAG_F: IN STD_LOGIC; CLK: IN STD_LOGIC;  ENLOCK: OUT STD_LOGIC;  -1: LOCK, 0: UNLOCKDATA_BCD: OUT STD_LOGIC_VECTOR (15 DOWNTO 0); END ENTITY CTRL  ARCHITECTURE ART OF CTRL ISSIGNAL ACC, REG: STD_LOGIC_VECTOR (15 DOWNTO 0); -ACC用于暂存键盘输入的信息,REG用于存储输入的密码SIGNAL NC: STD_LOGIC_VECTOR (2 DOWNTO 0); SIGNAL RR2, CLR, BB, QA, QB: STD_LOGIC; SIGNAL R1, R0: STD_LOGIC; BEGIN-寄存器清零信号的产生进程PROCESS(CLK)BEGINIF CLK'EVENT AND CLK='1' THENR1<=R0; R0<=FLAG_F; END IF; RR2<=R1 AND NOT R0; CLR<=RR2; END PROCESS; -按键输入数据的存储、清零进程KEYIN_PROCESS : BLOCK ISSIGNAL RST, D0, D1: STD_LOGIC   BEGIN RST  <= RR2; PROCESS(FLAG_N, RST) ISBEGINIF RST = '1' THEN ACC <= "0000000000000000"    -CLEAR INPUTNC <= "000"  ELSEIF  FLAG_N'EVENT AND FLAG_N = '1'  THEN IF NC < 4 THENACC <= ACC(11 DOWNTO 0) & DATA_N  NC <= NC + 1  END IF; END IF  END IF  END PROCESS  END BLOCK KEYIN_PROCESS  -上锁/开锁控制进程LOCK_PROCESS : BLOCK ISBEGINPROCESS(CLK, DATA_F) ISBEGINIF (CLK'EVENT AND CLK = '1') THENIF NC = 4  THENIF DATA_F(2) = '1' THEN   -上锁控制信号有效 REG <= ACC    -密码存储QA <= '1'   QB <= '0' ELSIF DATA_F(0) = '1' THEN -开锁控制信号有效IF  REG = ACC THEN   -密码核对QA<= '0'  QB <= '1'   END IF  ELSIF  ACC = "1000100010001000" THEN   -设置“8888”为万用密码QA <= '0'   QB<= '1' END IF  END IF; END IF  END PROCESS  END BLOCK LOCK_PROCESS  -输出上锁/开锁控制信号ENLOCK <= QA AND NOT QB  -输出显示信息DATA_BCD<= ACC  END ARCHITECTURE ART; 对密码控制电路模块进行时序仿真如下图: FLAG_N为数字输出标志,高电平时确认输出数字,FLAG_F为功能输出标志,密码控制模块根据4位按键输入在判断其为功能输入还是数字输入后输出16位BCD码。 图4.3密码锁控制电路仿真结果图 (4)密码锁显示电路七段译码器设计源程序(仿真图)LIBRARY IEEE ;USE IEEE.STD_LOGIC_1164.ALL ;ENTITY DECL7S ISPORT ( A : IN STD_LOGIC_VECTOR(3 DOWNTO 0);LED7S : OUT STD_LOGIC_VECTOR(6 DOWNTO 0) ) ;END ;ARCHITECTURE one OF DECL7S IS BEGINPROCESS( A )BEGINCASE A ISWHEN "0000" => LED7S <="0111111" ;WHEN "0001" => LED7S <="0000110" ;WHEN "0010" => LED7S <="1011011" ;WHEN "0011" => LED7S <="1001111" ;WHEN "0100" => LED7S <="1100110" ;WHEN "0101" => LED7S <="1101101" ;WHEN "0110" => LED7S <="1111101" ;WHEN "0111" => LED7S <="0000111" ;WHEN "1000" => LED7S <="1111111" ; WHEN "1001" => LED7S <="1101111" ;WHEN "1010" => LED7S <="1110111" ;WHEN "1011" => LED7S <="1111100" ;WHEN "1100" => LED7S <="0111001" ;WHEN "1101" => LED7S <="1011110" ;WHEN "1110" => LED7S <="1111001" ;WHEN "1111" => LED7S <="1110001" ;WHEN OTHERS => NULL ;END CASE ;END PROCESS ;END ; 对七段数码显示译码器源程序仿真如下图,执行功能如下:将输入的BCD码的高4位进行转换,如图中输入为1011时,输出7C;输入为1000时,输出为7F。 图4.4 七段数码显示译码器仿真波形5 设计结论根据系统设计原理图,图中CLK为输入信号系统原始时钟脉冲(1 kHz),KEY_IN2.0为按键输入信号,即当有键按下时时钟脉冲信号检测到有信号输入,KEYBOARD模块对输入信号进行键盘扫描处理,判断按下的是数字键还是功能键,每次的输入数值都会通过七段译码器显示结果,最后在核定密码真确后则开锁。6参考文献1 宋武烈,等.EDA技术实用教程. 湖北科学技术出版社 ,20062 阎石主编.数字电子技术基础(第五版).高等教等育出版社.,20073谭会生,等 . EDA技术综合应用实例与分析.西安电子科技出版社 ,20034 李国丽 朱维勇 何剑春.EDA与数字系统设计(第2版).机械工业出版社.,2002

    注意事项

    本文(EDA课程设计电子密码锁要点.doc)为本站会员(小飞机)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开