文档详情

第8章应用举例(备用)

re****.1
实名认证
店铺
DOC
236.01KB
约12页
文档ID:421315251
第8章应用举例(备用)_第1页
1/12

第八章:数字系统设计实例8.1数字密码锁电路的设计8.1.1系统设计要求 (1)密码输入:每按下一个“数字键”,就输入一个数值,并在显示器上显示出该数值,同时将先前输入的数据依次左移一个数字位置 (2)密码清除:按下“清除”键可清除前面的所有的输入值,清除成为“0000” (3)密码更改:按下“更改”键可将目前的数码设定成新的密码 (4)密码上锁:按下“上锁”键可将密码锁定5)密码解除:按下“解除”键首先检查输入的密码是否正确,密码正确即开锁8.1.2系统设计根据系统设计要求,系统设计采用自顶向下的设计方法顶层设计采用原理图设计方式,系统的整体组装设计原理图如图8-1所示,它由密码输入模块(SR)、密码锁控制模块(CTRL)和密码锁显示译码模块(YM)三部分组成图8-1 系统的整体组装设计原理图8.1.3模块设计与实现系统模块由输入模块、控制模块和译码模块三个模块组成,下面我们介绍各子模块的设计及实现过程1、密码锁输入模块密码锁输入模块由时序产生电路、键盘扫描电路、键盘译码电路及按键存储电路组成1)时序产生电路产生电路中使用三种不同频率的工作脉冲波形,即系统时钟脉冲、弹跳消除取样信号和键盘扫描信号。

2)键盘扫描电路 KEY2 KEY1 KEY0 ↓ ↓ ↓SEL321 ------------- 1110SEL546 ------------- 1101SEL987------------- 1011SEL#0*-------------0111扫描电路作用是提供键盘扫描信号,扫描信号变化的顺序依次为1110- 1101 -1011- 0111-1110……依序地周而复始当键盘扫描信号为1110时,按键位置分别为011(“1”键按下)、101(“2”键按下)、110(“3”键按下);当键盘扫描信号为1101时,按键位置分别为011(“4”键按下)、101(“5”键按下)、110(“6”键按下);当键盘扫描信号为1011时,按键位置分别为011(“7”键按下)、101(“8”键按下)、110(“9”键按下);当键盘扫描信号为0111时,按键位置分别为011(“*”键按下)、101(“0”键按下)、110(“#”键按下)3)键盘译码电路上述键盘中的按键分为数字按键和功能按键,每个功能按键可能负责不同的功能,例如“清除”键、“上锁”键和“解锁”键等。

数字按键主要是用来输入数字的但是键盘所产生的输出是无法直接拿来用作密码锁控制电路的输入的;另外,不同的按键具有不同的功能,所以必须有键盘译码电路来规划每个按键的输出形式,以便执行相应的动作① 按键存储电路因为每次扫描会产生新的按键数据,可能会覆盖前面的数据,所以需要一个按键存储电路,将整个键盘扫描完毕的结果记录下来本设计采用串入串出移位寄存器实现② 各按键位置与数码关系如表8-1所示其中“*”为“上锁”, “#”为“清除/解锁”若按下的是数字键,则译成相对应的BCD码,若按下的是功能键,则译成四位数的码字,并由密码锁控制电路做相应的动作表8-1 按键位置与数码关系键扫信号SEL[3..0]111011101110110111011101101110111011011101110111按键位置KEY[2..0]011101110011101110011101110011101110按键号123456789*0#键盘译码输出N=0001N=0010N=0011N=0100N=0101N=0110N=0111N=1000N=1001F=0100N=0000F=0001按键功能数码输入上锁数码输入清除解锁根据上述分析,密码输入电路的VHDL源程序如下:【例8-1】密码输入电路的VHDL程序(SR.VHD)。

LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;ENTITY SR ISPORT( CLK_IN : IN STD_LOGIC; --时钟信号 KEY_IN : IN STD_LOGIC_VECTOR(2 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; --“功能键”数据标志 CQD: OUT STD_LOGIC; --键盘输入采样时钟 KSEL: OUT STD_LOGIC_VECTOR(3 DOWNTO 0); --键盘扫描信号 CSR: OUT STD_LOGIC_VECTOR(1 DOWNTO 0));--按键行号00,01,10,11END ENTITY SR;ARCHITECTURE ART OF SR IS SIGNAL C_QD: STD_LOGIC; SIGNAL C_SR: STD_LOGIC_VECTOR(1 DOWNTO 0); SIGNAL N,F: STD_LOGIC_VECTOR(3 DOWNTO 0); SIGNAL FN,FF: STD_LOGIC; SIGNAL SEL: STD_LOGIC_VECTOR(3 DOWNTO 0); SIGNAL Q: STD_LOGIC_VECTOR(5 DOWNTO 0); SIGNAL C: STD_LOGIC_VECTOR(2 DOWNTO 0); BEGIN----内部连接 DATA_N <= N; “数字”按键译码値寄存器DATA_F <=F; FLAG_N <= FN; “数字”按键标志值数据 FLAG_F <= FF; CQD <= C_QD; 键盘输入采样时钟 CSR <=C_SR; 按键位置 KSEL<=SEL; 键盘扫描信号 C(0) <= KEY_IN(0); -------按键输入寄存器(键盘矩阵的输出) C(1) <= KEY_IN(1);C(2) <= KEY_IN(2); COUNTER: BLOCK IS;键盘扫描模块(计数器) BEGIN PROCESS(CLK_IN) IS BEGIN IF(CLK_IN'EVENT AND CLK_IN='1') THEN Q<=Q+1; END IF; C_QD<=Q(3);-------- 键盘输入采样时钟 C_SR <= Q(5 DOWNTO 4);------- 确定键盘扫描行号 END PROCESS; SEL <= "1110" WHEN C_SR=00 ELSE;---扫描“0”行 "1101" WHEN C_SR=01 ELSE "1011" WHEN C_SR=10 ELSE "0111" WHEN C_SR=11 ELSE "1111"; END BLOCK COUNTER; KEY_DECODER: BLOCK;-----键盘译码模块 SIGNAL Z: STD_LOGIC_VECTOR(4 DOWNTO 0);-----按键位置 BEGIN PROCESS(C_QD);------键盘采样钟触发 BEGIN Z<=C_SR & C; -------按键位置(2位)&按键输入(3位) IF(C_QD'EVENT AND C_QD='1') THEN CASE Z IS WHEN "11101" => N<="0000";------数字键“0” WHEN "00011" => N<="0001";------数字键“1” WHEN "00101" => N<="0010"; WHEN "00110" => N<="0011"; WHEN "01011" => N<="0100"; WHEN "01101" => N<="0101"; WHEN "01110" => N<="0110"; WHEN "10011" => N<="0111"; WHEN "10101" => N<="1000"; WHEN "10110" => N<="1001";------数字键“9” WHEN OTHERS => N<="1111"; END CASE; END IF; IF(C_QD'EVENT AND C_QD='1') THEN CASE Z IS WHEN "11011" => F<="0100";------功能键“*” WHEN "11110" => F<="0001";------功能键“#” 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); --- 功能键标志 END BLOCK KEY_DECODER;END ARCHITECTURE ART;2、密码锁控制模块密码。

下载提示
相似文档
正为您匹配相似的精品文档