欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    基于VHDL语言的电子密码锁的设计最终定稿.doc

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

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

    基于VHDL语言的电子密码锁的设计最终定稿.doc

    - - - word.zl- -基于VHDL语言的电子密码锁设计组长: 柳 8 组员:永兴 1 邝七月 9 庄美琳 3 王常汉 1系统的原理设计1数码输入:每按下一个数字键,就输入一个数值,并在显示器的最右方显示该数,同时将先前输入的数依次左移一位。2数码去除:按下此键会去除前面所有的输入值,成为“0000。(3) 激活电锁:按下此键可将密码锁上锁。(4) 解除电锁:按下此键会检查输入的密码是否正确,密码正确即开锁。作为通用电子密码锁,主要由三个局部组成:数字密码输入电路、密码锁控制电路和密码锁显示电路。作为电子密码锁的输入电路,可供选择的方案有数字机械式键盘和触摸式数字键盘等多种。虽然机械式键盘存在一些诸如机械产生的弹跳消除问题和机械局部的接触等问题,但是和触摸式的4×3键盘相比,机械式键盘具有低本钱、可靠性高、构成电路简单、技术成熟和应用广泛等特点,因此将其应用到通用数字电子密码锁中还是比拟适宜的。本设计中采用一个4×3的通用数字机械键盘作为该设计的输入设备。数字电子密码锁的显示信息电路可采用LED数码管显示和液晶屏幕显示两种。液晶屏幕显示具有高速显示、高可靠性、易于扩展和升级等优点,但是普通液晶显示屏存在亮度低、对复杂环境的适应能力差等缺点,在低亮度的环境下还需要参加其他辅助的照明设备,驱动电路设计相对复杂,因此本设计的显示电路仍使用通用的LED数码管。根据以上选定的输入设备和显示器件,并考虑到实现各项数字密码锁功能的具体要求,密码锁构造框图如图4-1所示。图4-1 密码锁构造框图键盘:            用户对系统输入密码,采用4×3数字机械式键盘实现显示器:          用来显示输入的密码,采用4个LED数码管实现时钟脉冲器:   用来产生方波信号CPLD控制局部:核心局部,实现分频、部逻辑、数字比拟、数据存储、译码等功能整个电子密码锁系统的总体组成框图如图4-2所示。(1) 密码锁输入电路包括时序产生电路、键盘扫描电路、键盘弹跳消除电路、键盘译码电路等几个小的功能电路。(2) 密码锁控制电路包括按键数据的缓冲存储电路,密码的去除、存储、激活电锁电路(存放器去除信号发生电路),密码核对(数值比拟电路),解锁电路(开/关门锁电路)等几个小的功能电路。(3) 七段数码管显示电路主要将待显示数据的BCD码转换成数码器的七段显示驱动编码数据选择电路,BCD对七段显示器译码电路,七段显示器扫描电路。图4-2 电子密码锁系统总体框图密码锁输入电路的设计图4-4是电子密码锁的输入电路框图,由键盘扫描电路、弹跳消除电路、键盘译码电路、按键数据缓存器,加上外接的一个4×3矩阵式键盘组成。 图4-4密码锁的输入电路框图 1矩阵式键盘的工作原理矩阵式键盘是一种常见的输入装置,在日常的生活中,矩阵式键盘在计算机、手机、微波炉等各式电子产品上已经被广泛应用。图4-5是一个4×3矩阵式键盘的面板配置图,其中数字09作为密码数字输入按键,“*作为“上锁功能按键,“#作为“解锁/去除功能按键输入数字小于4位时按下此键表示去除键,输人数字等于4位时表示解锁键。123456789*0#KY3.0KX2.0经上拉电阻接VCC1101111010110111011101110图4-54×3矩阵式键盘的面板配置键盘上的每一个按键其实就是一个开关电路,当某键被按下时,该按键的接点回呈现0的状态,反之,未被按下时呈现逻辑1的状态。扫描信号由KY3KY0进入键盘,变化的顺序依次为11101101101101111110。每一次扫描一排,依次地周而复始,例如现在的扫描信号为1011,代表目前正在扫描7、8、9这一排的按键,如果这排当中没有按键被按下的话,那么由KX2KX0读出的值为111;反之当7这个按键被按下的话,那么由KX2KX0读出的值为011。根据上面所述原理,我们可得到各按键的位置与数码关系如表4-1所示。表4-1 按键位置与数码关系KY3KY0111011101110110111011101101110111011011101110111KX2KX0011101110011101110011101110011101110按键号123456789*0#假设从KX2KX0读出的值皆为1时,代表该列没有按键被按下,那么不进展按键译码的动作,反之,如果有按键被按下时,那么应将KX2KX0读出的值送至译码电路进展编码。2密码锁输入电路各主要功能模块的设计(1) 时序产生电路本时序产生电路中使用了三种不同频率的工作脉冲波形:系统时钟脉冲(它是系统部所有时钟脉冲的源头,且其频率最高)、弹跳消除取样信号、键盘扫描信号。当一个系统中需要使用多种操作频率的脉冲波形时,最方便的方法之一就是利用一个自由计数器来产生各种需要的频率。也就是先建立一个N位计数器,N的大小根据电路的需求决定,N的值越大,电路可以分频的次数就越多,这样就可以获得更大的频率变化,以便提供多种不同频率的时钟信号。假设输入时钟为CLK,N位计数器的输出为QN-1.0,那么Q(0)为CLK的2分频脉冲信号,Q(1)为CLK的4分频脉冲信号,Q(2)为CLK的8分频脉冲信号Q(N-1)为CLK的2N分频脉冲信号;Q(5 DOWNTO 4)取得的是一个脉冲波形序列,其值依次为000110110001周期性变化,其变化频率为CLK的25分频,也就是32分频。我们利用以上规律即可得到各种我们所需要频率的信号或信号序列。(2) 键盘扫描电路扫描电路的作用是用来提供键盘扫描信号(表1中的KY3KY0)的,扫描信号变化的顺序依次为11101101101101111110依序地周而复始。扫描时依次分别扫描四列按键,当扫描信号为1110时扫描KY3这一排按键;当扫描信号为1101时,扫描KY2这一排按键;当扫描信号为1011时扫描KY1这一排按键;当扫描信号为0111时,扫描KY0这一排按键;每扫描一排按键就检查一次是否有键被按下,如果这排没有按键被按下就忽略,反之,如果出现被按下的键那么立刻进展按键编码的动作,且将编码的结果储存于存放器中。(3) 弹跳消除电路由于本设计中采用的矩阵式键盘是机械开关构造,因此在开关切换的瞬间会在接触点出现信号来回弹跳的现象,对于电子密码锁这种灵敏度较高的电路这种弹跳将很可能会造成误动作输入,从而影响到密码锁操作的正确性。本设计中采用延时的软件方法消除抖动,假设采样信号检测到输入由“1”变到“0”或由“0变为“1”,先延时2个周期,仍旧检测到是“0”或“1”,那么说明按键状态确实发生了变化,否那么当作抖动处理,不予理会;这样就消除了抖动。(4) 键盘译码电路上述键盘中的按键可分为数字按键和文字按键,每一个按键可能负责不同的功能,例如去除数码、退位、激活电锁、开锁等,详细功能参见表4-3。数字按键主要是用来输入数字的,但是键盘所产生的输出,也就是扫描回复信号,是无法直接拿来用做密码锁控制电路的输入的;另外,不同的按键数字按键和功能按键具有不同你功能,所以必须有键盘译码电路来规划每个按键的输出形式,以便执行相应的动作。表4-3 键盘参数表扫描位置KY3KY0键盘输出KX2KX0相对应的键盘按键键盘译码电路输出按键功能11100111F=0001数码输入1012F=0010数码输入1103F=0011数码输入11010114F=0100数码输入1015F=0101数码输入1106F=0110数码输入10110117F=0111数码输入1018F=1000数码输入1109F=1001数码输入0111011*F=0100激活电锁1010F=0000数码输入110#F=0001去除/解除电锁注:当没有任何数字按键被按下时,键盘译码输出“1111;当某功能按键尚未定义其功能时,按键译码输出“1000。键盘译码电路主要负责的工作是:首先判断是否有键按下;假设被按下的是数字按键,那么解码成相对应的BCD码,假设被按下的是功能按键,那么解码成四位数的码字,有密码锁控制电路做相应的动作。(5)按键存储电路因为每次扫描会产生新的按键数据,可能会覆盖前面的数据,所以需要一个按键存储电路,将整个键盘扫描完毕后的结果记录下来。按键存储电路可以使用移位存放器构成。本设计将采用串行输入/串行输出Serial In/Serial Out移位存放器硬件作为按键存储电路。所谓的串行输入/串行输出移位存放器,即数据一个接着一个依序进来,输出时采用先进先出的顺序,同样是一个接着一个依序输出。根据以上设计思路,密码锁输入电路的VHDL程序见后的KEYBOARD.VHD程序,其中调用的程序元件DEBOUNCING.VHD为键盘输入去抖电路的VHDL源程序。3.密码锁控制电路的设计1数字按键输入的响应控制(1) 如果按下数字键,第一个数字会从显示器的最右端开场显示,此后每新按一个数字时,显示器上的数字必须左移一格,以便将新的数字显示出来。(2) 假设要更改输入的数字,可以按去除键去除所有输入的数字,再重新输入四位数。(3) 由于这里设计的是一个四位的电子密码锁,所以当输入的数字键超过四个时,电路不予理会,而且不再显示第四个以后的数字。2功能按键输入的响应控制(1) 去除键:去除所有的输入数字,即做归零动作。(2) 激活电锁键:按下此键时可将密码锁的门上锁。(上锁前必须预先设定一个四位的数字密码)(3) 解除电锁键:按下此键会检查输入的密码是否正确,假设密码正确那么开锁。(4)密码核对:在密码更改,开锁之前必须先核对密码。(6) 密码变更:按下此键将目前输入的数字设定为新的密码。4密码锁显示电路的设计该设计的输出电路由显示缓存器、多路选通器、时钟发生器、扫描信号发生器、七段译码器组成,其构造和模块划分如图4-11所示。显示缓存器多路选通器时钟发生器七段译码器扫描信号发生器图4-11 输出局部构造框图其中显示缓存器是1个存储量为16位的存放器,它用于存储LED显示的容。所以4个数码管就需要16位的存储器。多路选通器用于从显示缓存器中选择出某一个LED的容用于显示。扫描信号用于选择片选信号,片选信号依次并循环地选通各个LED管时钟发生器,通过对全局时钟的分频得到扫描模块所需的时钟.七段译码模块把4位BCD码译成便于显示的七段码。该显示电路的工作过程如下:存放器所存储的数据经由数据选择器送到译码电路,将其转换成七段显示器的显示码,转送到七段显示器,数据选择与显示管选择必须同步.由于设计的是4位数的数字密码锁,1位十进制数需要4个二进制位表示,所以存放器必须是16位的。因为是以扫描的方式轮流被点亮的,因此存放器上的数据必须一组一组地分开传送,每次送4个位。由于密码锁显示电路的设计比拟简单,这里直接采用四个4-7译码器来实现。密码锁的整体组装设计将前面各个设计好的功能模块进展整合,可得到一个完整的电子密码锁系统的整体组装设计原理图,如图4-12所示。图4-12密码锁的整体组装设计原理图源代码- - word.zl- -IBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_ARITH.ALL ; USE IEEE.STD_LOGLIC_UNSIGNED.ALL ; LIBRARY altera; USE altera.maxplus2.ALL; -* ENTITY elec_lock IS PORT ( CLK_4M : IN STD_LOGIC ; -system original clock 4MCLK_SCAN : OUT STD_LOGIC_VECTOR (3 downto 0) ; -scan sequence KEY_IN : IN STD_LOGIC_VECTOR (2 downto 0) ; -KEY IN button code FLAG_NUMB : OUT STD_LOGIC ; FLAG_FUNC : OUT STD_LOGIC ; LED_ : OUT STD_LOGIC ; CLEAR : OUT STD_LOGIC ; ENLOCK : OUT STD_LOGIC ; -1:LOCK, 0:UNLOCK NUMB_T : OUT STD_LOGIC_VECTOR (2 DOWNTO 0) ; BCD_CODE : OUT STD_LOGIC_VECTOR (15 DOWNTO 0) ; SELOUT : OUT STD_LOGIC_VECTOR (1 DOWNTO 0) ; SEGOUT : OUT STD_LOGIC_VECTOR(6 DOWNTO 0) - SEG7 Display ); END elec_lock ; -* ARCHITECTURE a OF elec_lock IS ponent debouncing port( d_in : IN STD_LOGIC ; clk : IN STD_LOGIC ; d_out : OUT STD_LOGIC ) ;end ponent ; SIGNAL CLK : STD_LOGIC ; SIGNAL CLK_KEYBOARD : STD_LOGIC_VECTOR(1 downto 0) ; SIGNAL CLK_DEBOUNCE : STD_LOGIC ; SIGNAL CLK_DISPLAY : STD_LOGIC_VECTOR(1 downto 0) ; SIGNAL C : STD_LOGIC_VECTOR(2 downto 0) ; SIGNAL N : STD_LOGIC_VECTOR(3 downto 0) ; SIGNAL F : STD_LOGIC_VECTOR(3 downto 0) ; SIGNAL FN : STD_LOGIC ; SIGNAL FF : STD_LOGIC ; SIGNAL SEL : STD_LOGIC_VECTOR (3 downto 0) ; SIGNAL OUT_NUMB : STD_LOGIC_VECTOR(3 downto 0) ; SIGNAL OUT_FUNC : STD_LOGIC_VECTOR(3 downto 0) ; SIGNAL ACC : STD_LOGIC_VECTOR (15 DOWNTO 0) ; SIGNAL REG : STD_LOGIC_VECTOR (15 DOWNTO 0) ; SIGNAL RR2 : STD_LOGIC ; - * RR2 = Clear SIGNAL QA,QB,BB : STD_LOGIC ; SIGNAL NC : STD_LOGIC_VECTOR (2 DOWNTO 0) ; SIGNAL DB : STD_LOGIC_VECTOR( 3 DOWNTO 0);- Number TO Display SIGNAL SEG: STD_LOGIC_VECTOR( 6 DOWNTO 0);- SEG7 Display SignalBEGIN - CONNECTION OUT_NUMB <= N ; OUT_FUNC <= F ; FLAG_NUMB <= FN ; FLAG_FUNC <= FF ; CLK_DEBOUNCE <= CLK ; NUMB_T<= NC ; SEGOUT(6 DOWNTO 0) <= SEG; - Seven Segment Display SELOUT <= CLK_DISPLAY ; LED_ <= '1' ; - scan signal generator counter : block Signal Q: STD_LOGIC_VECTOR(22 DOWNTO 0); Signal S:STD_LOGIC_VECTOR(1 DOWNTO 0);-keyboard scan about 15Hz * SIGNAL SEL: STD_LOGIC_VECTOR (3 downto 0); BEGIN PROCESS (Clk_4M) Begin IF CLK_4M'Event AND CLK_4M = '1' then Q <= Q+1; END IF; END PROCESS; CLK <= Q(0) ; -CLK = CLK_DEBOUNCE CLK_KEYBOARD <= Q(5 DOWNTO 4) ; - *00-01-10-11 CLK_DISPLAY <= Q(5 DOWNTO 4) ; - To generate keyboard scan sequence 1110->1101->1011->0111 SEL <= "1110" WHEN CLK_KEYBOARD=0 ELSE "1101" WHEN CLK_KEYBOARD=1 ELSE "1011" WHEN CLK_KEYBOARD=2 ELSE "0111" ; CLK_SCAN <= SEL ; end block counter ; -* -debounuing ckt debounuing : block begin U1: debouncing PORT MAP ( d_in => key_in(0) , d_out => C(0),clk => CLK ); U2: debouncing PORT MAP ( d_in => key_in(1), d_out => C(1), clk => CLK ); U3: debouncing PORT MAP ( d_in => key_in(2), d_out => C(2), clk => CLK ); END block debounuing ; -* -key_decoder key_decoder : block signal Z : std_logic_VECTOR(4 downto 0) ; -KEY POSITION SIGNAL R1, R0 : STD_LOGIC ; begin PROCESS(clk) begin Z <= CLK_KEYBOARD & C ; IF CLK'EVENT AND CLK = '1' THEN case 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' THEN case Z is when "11011" => F <= "0100" ;-*_LOCK when "11110" => F <= "0001" ;-#_UNLOCK when 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);PROCESS (CLK) BEGIN IF CLK'EVENT AND CLK = '1' THEN R1 <= R0 ; R0 <= FF ; END IF ; RR2 <= R1 AND NOT R0 ; CLEAR <= RR2 ; END PROCESS ; end block key_decoder ; -* -KEYIN / BACK / ALL CLEAR KEYIN_PROCESS :BLOCK SIGNAL RST,D0,D1: STD_LOGIC ; BEGIN PROCESS(CLK,FN,RST) BEGIN IF RST = '1' THEN ACC <= "00000" ; -CLEAR INPUT NC <= "000" ; ELSE IF FN'EVENT AND FN = '1' THEN IF NC < 4 THEN ACC <= ACC(11 DOWNTO 0) & N ; BB <= '0' ; NC <= NC + 1 ; ELSE BB <= '1' ; END IF ; END IF ; END IF ; END PROCESS ; RST <= RR2 ; END BLOCK KEYIN_PROCESS ;-* LOCK_PROCESS : BLOCKBEGIN PROCESS(CLK,F) BEGIN IF (CLK'EVENT AND CLK = '1') THEN IF NC = 4 THEN IF F(2) = '1' THEN -LOCK REG <= ACC ; QA <= '1' ; QB <= '0' ELSIF F(0) = '1' THEN -UNLOCK IF REG = ACC THEN -CHECK PIN CODE QB <= '1' ; QA<= '0' END IF ; ELSIF ACC = "00000" THEN QB <= '1' ; QA<= '0' END IF ; END IF; END IF ; END PROCESS ; END BLOCK LOCK_PROCESS ; ENLOCK <= QA AND NOT QB ; BCD_CODE <= ACC ; -* MULTIPLEXER : BLOCK BEGIN DB <= ACC(15 DOWNTO 12) WHEN CLK_DISPLAY = 0 ELSE ACC(11 DOWNTO 8) WHEN CLK_DISPLAY = 1 ELSE ACC(7 DOWNTO 4) WHEN CLK_DISPLAY = 2 ELSE ACC(3 DOWNTO 0) WHEN CLK_DISPLAY = 3 ELSE "1111" ; End Block MULTIPLEXER ; -* SEVEN_SEGMENT : Block - Binary Code -> Segment 7 Code Begin -gfedcba SEG <= "0111111" WHEN DB = 0 ELSE "0000110" WHEN DB = 1 ELSE "1011011" WHEN DB = 2 ELSE "1001111" WHEN DB = 3 ELSE "1100110" WHEN DB = 4 ELSE "1101101" WHEN DB = 5 ELSE "1111101" WHEN DB = 6 ELSE "0000111" WHEN DB = 7 ELSE "1111111" WHEN DB = 8 ELSE "1101111" WHEN DB = 9 ELSE "1111111" End Block SEVEN_SEGMENT; END a;波形仿真图- - word.zl- -小结从仿真及实验结果可以看出,本文设计的电子密码锁具有很强的实践性,由于采用VHDL 语言,用一片CPLD实现,克制了基于单片机的密码锁的可靠性较差的缺点,具有体积小、功耗低、使用灵活、性能可靠、平安性强等优点,稍加修改就可以改变密码的位数和输入密码的次数,而升级和维护都很方便,而且容易做成ASIC芯片,将有十分良好的应用前景。可用于工业、商业、家庭等环境下作为数字密码系统的嵌入式芯片 , 具有一定的实际意义。另外,电子密码锁在软、硬件方面加以改动,便可构成智能化的分布式监控网络,实现某一围的集中式监控管理,在金融、保险、军事重地及其他平安防领域具有广泛的应用前景。但由于构造还比拟简单,有待进一步完善。本系统根本到达作为电子数字密码锁的绝大局部功能,但还有许多缺乏或需要完善的地方。比方说采用4×3的通用机械键盘受到键盘数量的限制,在很大的程度上限制了其功能的扩展。还有设计外围电路,假设在系统中参加语音提示模块,在按下按键的同时给出语音提示,开启或是关闭密码锁的同时给出语音提示,将会使该系统显得更加人性化,更加接近成为一个成熟的产品。这次EDA的工程设计,我再次学习和加深了EDA的知识,现在能够较为熟练使用max+plusII,能够利用VHDL语言编写简单实用的小程序。这次EDA重点学习了电子密码锁局部程序的编写、调试、对软件的进一步熟练。更重要的是在即将走上工作岗位之际,我提高了自己的实际动身能力,在为以后工作打下了坚实的根底。同时我也看到了自己在学习中的缺乏,掌握知识还不够扎实,在具体解决某些方面问题的能力还不够强,这些都还提醒我要在以后的工作过程中,不忘学习,增强自己在各方面的能力。- - word.zl- - - word.zl- - - word.zl-

    注意事项

    本文(基于VHDL语言的电子密码锁的设计最终定稿.doc)为本站会员(知****量)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

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




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开