完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
至简案例系列:密码锁 作者:造就狂野青春 本文为明德扬原创及录用文章,转载请注明出处! 一、总体设计 1.概述 本文基于明德扬至简设计法和明德扬设计规范,设计了一个基于FPGA的数字密码锁,实现了在拨码开关条件下,按键设置密码、按键输入解锁密码,密码正确时正确指示灯亮、密码错误时或者默认状态错误指示灯亮,密码正确时一位数码管显示1,其他情况显示0。本案例的扩展和应用在现实生活中具有重大意义。在本案例的设计过程中,应用了至简设计法、计数器模板应用等,在经过逐步改进、调试等一系列工作之后,最终达到了设计目标。 2. 设计目标 1) 实现8位数字密码锁功能 2) 按键1、2设置密码,按键1有效时设置一位密码0,按键2有效时设置一位密码1,按下8次后密码设置完成 3) 按键3、4输入密码,按键3有效时输入一位密码0,按键2有效时输入一位密码1,按下8次后密码输入完成 4) 比较设置的密码和输入的密码是否相同,正确时正确指示灯亮,数码管显示1,否则错误指示灯亮,数码管显示0; 3. 模块功能 1) 密码模块实现功能: SW1有效时按键1、2设置密码,按键1有效时设置一位密码0,按键2有效时设置一位密码1,按下8次后密码设置完成 SW2有效时按键3、4输入密码,按键3有效时输入一位密码0,按键2有效时输入一位密码1,按下8次后密码输入完成 2) 数码管显示模块实现功能 密码正确时数码管显示1,否则显示0; 3) led模块实现功能: 密码正确时led_y指示灯亮,否则led_n指示灯亮; 4) 按键模块实现功能 将外来异步信号打两拍处理,将异步信号同步化; 实现20ms按键消抖功能,并输出有效按键信号; 4. 信号定义 1)顶层模块Lock_Top.v
2)密码模块password.v
3)数码管显示模块sel_disp.v
4)led模块led_flag.v
5)按键模块key_module.v
5.密码模块核心代码 SW1有效时按键1、2设置密码,按键1有效时设置一位密码0,按键2有效时设置一位密码1,按下8次后密码设置完成 SW2有效时按键3、4输入密码,按键3有效时输入一位密码0,按键2有效时输入一位密码1,按下8次后密码输入完成 6.数码管显示 参数化设置显示0~F对应的8位数 对比设置的密码和输入的密码是否一致,密码正确时数码管显示1,否则显示0; 7.led指示灯模块 密码正确时led_y指示灯亮,否则led_n指示灯亮; 8.按键消抖代码 利用明德扬的按键消抖模块,每20ms扫描一次按键输入key_in,可以达到消抖的目的,再用寄存器缓存一下,按键为低电平有效,所以检测当检测到按键有下降沿变化时,代表该按键被按下,按键有效,输出1; 9、Modelsim仿真验证 编写测试文件,添加激励,这里避免长时间仿真,需将消抖时间缩小 按键2按下时设置了一位密码1,再按键时设置了两位密码1; 按键4按下时输入了一位密码1,再按键时输入了两位密码1; 设置的密码和输入的密码是否相同,正确时正确指示灯亮,数码管显示1,否则错误指示灯亮,数码管显示0;从仿真图可以看出符合功能要求。 在这个设计案例中,至简设计法和明德扬至简法发挥了至关重要的作用,使我能够快速准确完成设计。本设计可以加以拓展: 1) 可以结合开发板外设和实际情况,改变设置和输入密码的方式、位数,以及密码正确与否的反应,如蜂鸣器报警等等。 最后附上源代码,感兴趣的朋友可以下载。
|
|
1533 浏览 1 评论
1313 浏览 0 评论
矩阵4x4个按键,如何把识别结果按编号01-16(十进制)显示在两个七段数码管上?
1523 浏览 0 评论
925 浏览 0 评论
2317 浏览 0 评论
1458 浏览 35 评论
5671 浏览 113 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-25 12:21 , Processed in 0.763134 second(s), Total 64, Slave 46 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号