基于vhdl的电子密码锁设计与实现正文内容摘要:

' 0'。 LSIF CLRN=' 1' AND PRN=' 0' THEN Q<=' 1'。 ELSIF CLK' EVENT AND CLK=' 1' THEN Q<= D。 END IF。 此段程序作用是判断输入信号是否有效 ,如有效则输出 ,无效清零。 (2)DEBOUNCING 模块 : D- IN:信号输入端口 彭胜 《 基于 VHDL的电子密码锁设计与实现 》 第 14 页 共 32 页 FLAG_ N:数字输出标志 FLAG_ F:功能输出标志 CLK_ CTR:控制电路工作时钟信号 CLK_ DEBOUNCE:去抖电路工作时钟信号 (仿真时用 ) : CLK:电路工作时钟脉冲 C_ KEYBOARD:键扫信号 “00- 01- 10- 11” 寄存器 C_ DEBOUNCE:去抖时钟信号 C:键盘输入去抖后的寄存器 N, F:数字、功能按键译码值的寄存器 FN, FF:数字、功能按键标志值数字、功能按键 SEL:模块内部信号 Z:按键位置信号 对于 K1 和 K0 信号 ,它们分别代表 1 和 0 的按键开关 ,可以直接送入密码锁逻辑控制模块 CEN2TRE。 但由于它们是由按键产生的 ,其产生时刻和持续时间长短是随机的 ,并且存在因开关簧片反弹引起的电平抖动现象。 因此 ,必须在每个开关后面安排一个消抖和同步化电路模块 XIAOPRO ,目的是保证系统能捕捉到输入脉冲 ,同时 ,保证每按一次键只形成一个宽度固定的脉冲 [3 ]。 在 XIAOPRO 模块中 ,因为变量的赋值是直接的 ,立即生效的 ,它在某一时刻仅包含一个值 ,而信号的赋值是有一定附加时延的 ,故当时钟脉冲下降沿到来时 ,变量 tmp2 和 tmp3 在赋值语句执行后立即分别得到新值 : tmp1 的值和 tmp2 的非值 ,而输入信号 a 经过一定时延赋值给信号 tmp1 ,实现了消除抖动并且同步的功能。 用来描述输入消抖同步电路功能的 V HDL 语言程序如下 : L IBRARY IEEE。 USE IEEE. std_logic_1164. ALL。 ENTITY xiaopro IS PORT(a ,clk1 :in std_logic。 b :out std_logic)。 END xiaopro。 彭胜 《 基于 VHDL的电子密码锁设计与实现 》 第 15 页 共 32 页 ARCHITECTURE xiao_arc OF xiaopro IS SIGNAL tmp1 : std_logic。 BEGIN PROCESS(clk1 ,a) VARIABL E tmp3 ,tmp2 : std_logic。 BEGIN IF clk1 ! event AND clk1 = ! 0 ! THEN tmp1 = a。 tmp2 : = tmp1。 tmp3 : = not tmp2。 END IF。 b = tmp1 AND tmp3 AND clk1。 END PROCESS。 END xiao_arc。 密码锁逻辑控制模块 密码锁控制电路组成 : ELSIF DATA_ F( 0) =' 1' THEN --开锁控制信号有效 IF REG= ACC THEN --密码核对 QA<=' 0' QB<=' 1'; END IF; ELSIF ACC=" 1000100010001000" THEN QA<=' 0'; QB<=' 1'; END IF; 这段程序的作用是在按下 *键时将输入的密码 (暂时寄存于 ACC 中)跟已经存储的密码( REG 中的密码信息)进行对比,如果一样,则密码锁开锁。 而在通过密码验证后可以按#键重新设定密码。 在 这里值得注意的是有一个密码“8888”作为万用密码,也就是不论当前密码是什么,只要输入的密码为 “8888”则都可通过密码锁。 模块 CEN TRE 是整个设计的核心 ,它实现密码锁的逻辑功能。 管理员有权彭胜 《 基于 VHDL的电子密码锁设计与实现 》 第 16 页 共 32 页 在任何时候按动密码初始化按键 LC ,此时锁内密码设置为程序初始化密码值 (在本模块程序中此值为 10010101)。 开锁代码为 8 位二进制数 ,当输入代码的位数和位值与锁内给定的密码一致 ,且按规定程序开锁时 ,方可开锁 ,并点亮开锁指示灯 L T。 否则 ,系统进入 “错误 ”状态 ,并发出报警信号。 串行数字 锁的报警方式是点亮指示灯 L F ,并使喇叭鸣叫 ,直到按下复位开关 ,报警才停止。 此时 ,数字锁又自动进入等待下一次开锁的状态。 该 8 位串行电子密码锁设置 8 位二进制密码 ,要求锁内给定的密码是可调的 ,且设置方便 ,保密性好。 其具体操作分为输入密码和修改密码两部分。 (1) 输入密码 密码锁输入电路: 图 33 密码锁输入电路原件例化 ( 1)模块外部信号端口 CLK- 1K:时钟脉冲输入端口 KEY- IN:按键输入端口 CLK_ SCAN:键盘扫描序列 仿真时用 DATA_ N:数字输出端口 DATA_ F:功 能输出端口 FLAG_ N:数字输入标志 FLAG_ F:功能输入标志 彭胜 《 基于 VHDL的电子密码锁设计与实现 》 第 17 页 共 32 页 EMLOCK:密码锁控制信号输出端口 DATA- BCD:按键显示输出端口 ( 2)模块内部信号 ACC:暂存键盘输入信息 REG:密码存储位置 RR2:寄存器清零信号 R1, R0:模块内部信号,二者差分生成清零信号 NC:移位寄存器 QA, QB:上锁、解锁控制信号 密码输入值的比较主要有两部分 ,密码位数和内容 ,任何一个条件不满足 ,都不能打开锁。 若锁内密码为 “10010101” , K1 和 K0 置低电平 ,分别表示输入 “1” 和 “0”。 输入密码前先进行复位操作 ,再按着从密码最低位到最高位的顺序依次正确输入 1 01 0 1 0 0 1。 若采用共阴极 L ED 接法 ,当输入第 0 位 “1” 后 ,八个二极管中相对应的二极管点亮 (此时二极管指示灯 lamp =“10000000” ,输入密码信号 shif t =“10000000” ) ,接着输入第 1 位 “0”(此时 lamp =“11000000” ,shif t =“01000000” ) …… 依照顺序 ,将 8 位二进制密码全部正确输入完毕后 (此时amp =“11111111” ,shif t =“10010101” ) ,经检验 ,输入的密码 shif t 等于锁内预先设置的密码 lock ,密码锁开启信号 L T 置高电平 ,锁开启。 同时 ,密码修改控制信号LA 置高电平。 若在输入密码的过程中 ,8 位二进制密码出现一位或多位输入错误 ,那么锁不能开启 ,同时 Alm置高电平 ,指示灯 L F 亮 ,发出报警信号 ,通知管理员。 直到按下复位开关 ,报警才停止。 此时 ,数字锁又自动进入等待下一次开锁的状态。 密码锁输入电路主要程序 : KEY_ DECODER: BLOCK SIGNALZ: STD_ LOGIC_ VECTOR( 4 DOWNTO 0) --按键位置 BEGIN PROCESS( CLK) BEGIN Z<= C_ KEYBOARD & C; 彭胜 《 基于 VHDL的电子密码锁设计与实现 》 第 18 页 共 32 页 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; 这段程序的作用是通过按键产生的信号进行译码,判断按键是数字还是上锁、解锁控制信号。 (2)修改密码 为防止非管理员任意进行密码修改 ,必须在正确输入密码后 ,才能重新设置密码。 输入正确密码后 ,锁打开 ,同时 ,密码修改控制信号 LA 置高电平 ,就可直接进行修改密码的操作。 修改密码实质就是用输入的新密码去取代原来的旧 密彭胜 《 基于 VHDL的电子密码锁设计与实现 》 第 19 页 共 32 页 码。 存储新密码时 ,输入一位密码 ,密码位数加 1。 若采用共阴极 L ED 接法 ,与输出引脚 lamp 相接的发光二极管由亮变暗。 当输入 8 位密码后 ,8 只发光二极管全变暗。 此时给 CL K 一个低电平 ,新密码产生。 密码锁显示模块 密码锁显示电路: 图 34 密码锁显示电路原件例化 模块外部信号端口 DATA- BCD:密码信号输入端口 BLOCK:密码锁状态信号显示灯 彭胜 《 基于 VHDL的电子密码锁设计与实现 》 第 20 页 共 32 页 4 系统仿真 当各个模块分别编译成功后 ,则创建一个个元件符号。 再用图形编辑器将各元件模块组装起来 ,这就是 本设计中最顶层的图形设计文件。 顶层图形设计文件 lock. gdf 如图 41 所示 ,这个结构框图说明了整个系统的外部输入和输出情况。 为了获得与目标器件对应的、 精确的时序仿真文件 ,在对文件编译前必须选定最后实现本设计项目的目标器件 ,在 Max + plus Ⅱ 环境中我们选 Altera 公司的 FPGA ,然后选择用于编程的目标芯片 :选择菜单 “Assign”→ “Device”, 窗口中的 Device Family 是器件序列栏 , 先 在 此 栏 中 选 择 ACEX1 K。 为。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。