实验十二 数码锁.docx

上传人:b****3 文档编号:6347802 上传时间:2023-05-09 格式:DOCX 页数:14 大小:334.13KB
下载 相关 举报
实验十二 数码锁.docx_第1页
第1页 / 共14页
实验十二 数码锁.docx_第2页
第2页 / 共14页
实验十二 数码锁.docx_第3页
第3页 / 共14页
实验十二 数码锁.docx_第4页
第4页 / 共14页
实验十二 数码锁.docx_第5页
第5页 / 共14页
实验十二 数码锁.docx_第6页
第6页 / 共14页
实验十二 数码锁.docx_第7页
第7页 / 共14页
实验十二 数码锁.docx_第8页
第8页 / 共14页
实验十二 数码锁.docx_第9页
第9页 / 共14页
实验十二 数码锁.docx_第10页
第10页 / 共14页
实验十二 数码锁.docx_第11页
第11页 / 共14页
实验十二 数码锁.docx_第12页
第12页 / 共14页
实验十二 数码锁.docx_第13页
第13页 / 共14页
实验十二 数码锁.docx_第14页
第14页 / 共14页
亲,该文档总共14页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

实验十二 数码锁.docx

《实验十二 数码锁.docx》由会员分享,可在线阅读,更多相关《实验十二 数码锁.docx(14页珍藏版)》请在冰点文库上搜索。

实验十二 数码锁.docx

实验十二数码锁

实验十二数码锁

一实验目的

1.了解数码锁的工作原理。

2.了解数码锁的实现方法。

3.进一步掌握4×4键盘或PS/2键盘接口电路设计方法。

4.掌握状态机设计复杂控制电路的基本方法。

二硬件需求

1.EDA/SOPC实验箱一台。

三实验原理

数码锁又称密码锁,它只需要主人记住自己的开锁密码,开门时只需要将密码输入,就可以开门,所以密码锁的核心问题就是密码的比对问题。

假如密码锁有六位,那么在系统复位后,用户按键6次,输入一个完整的密码串,输入完6次后,系统进行比对,如果发现密码吻合,则开门,否则要求用户继续输入,如果连续3次输入的密码串都是错误的,则系统报警。

实验中还要用到4×4键盘,在《实验三常用模块电路的设计》中已经讲述,可以直接使用已做好的模块。

密码输入也可以使用PS/2接口键盘,这样可以输入更多的字符。

四实验内容

本实验需要完成的任务就是一个密码锁,考虑到系统中有键盘扫描、七段码管显示和报警,系统时钟选择时钟模块的10KHz时钟。

键盘扫描和显示均是用10KHz。

输入密码时,七段码管从右至左显示按键对应的数值,每按键(0~9)一次,显示左移一次,6次密码输入结束后系统开始校验,校验结束后,七段码管全灭。

也就是显示部分维持的时间就是按键6次的时间和校验的时间。

密码输入连续三次错误开始报警,报警声要求为高声2.5KHz,低声1.25KHz交替报警,交替周期为1s(1Hz时钟,需要对系统时钟进行10K分频)。

实验中要求用LED模块的LED1_1指示键盘状态,如果有按键按下,LED1_1亮起,直到松开该按键;用LED2_1指示门的状态,也就是密码校验结果,如果密码校验正确,LED2_1亮起,否则如果密码校验错误LED2_1闪烁4次,然后熄灭,表明密码错误。

系统的复位用主芯片模块的复位键,复位时,七段码管全部熄灭。

五实验步骤

完成数码锁的实验步骤如下:

1.首先打开QuartusII软件,新建一个工程,并新建一个VHDLFile。

2.按照自己的想法,编写VHDL程序。

3.对自己编写的VHDL程序进行编译并仿真。

4.仿真无误后,根据附录一的引脚对照表,对实验中用到时钟、七段码显示、4×4键盘、扬声器、按键以及LED对应的FPGA引脚进行管脚绑定,然后再重新编译一次。

5.用下载电缆通过JTAG接口将对应的sof文件下载到FPGA中。

6.测试数码锁的工作是否满足实验要求。

注意:

此实验需管脚复用

图12.4整个设计的原始VHDL源码:

要求在读懂源码基础上,按图12.1改写各模块:

密码位数0~8位,用开关“#”作为输入密码开始和结束符,如要输入密码“1234567”则输入“#1234567#”,第二个“#”号输入即开始比较密码。

可以定义8个信号save1、save2……save8来存储预置的密码。

用“*”号作为设置密码的开始和结束符,即要设置密码为“1234”则输入“*1234*”,第二个“*”号输入即将密码存入save1~save8中。

为便于表示特殊符号(字母、“-”号、消隐、密码中空余位……),将BCD码扩展一位为5位。

 

实验设计的各模块图:

图12.1数字密码锁模块图

 其中,“Read_Keyboard”,与实验三中的4×4键盘模块一致。

 

“CHECK”模块功能是读取输入的键值并依次送入buff1~buff8,以提供显示(从左到右顺序),并存储密码值(“*”号作为开始和结束符)或与save1~save8存储的密码相比较(“#”号作为开始和结束符),校验密码的情况通过open_Door、Error_Flag和Error_3输出,以提供彩灯和喇叭控制:

Key:

键盘输入,输入控制符(*、#等)或数字。

open_Door:

开门信号,密码校验通过时为“1”(持续5秒)

Error_Flag:

出错标志,密码校验错误时为“1”(持续4秒)

Error_3:

三次出错标志,三次密码校验错误时一直为“1”,“Reset”为低才能使其恢复为“0”

buff1~buff8:

8位密码输入,未输入的位用大于“10000”的特殊符号表示。

“manage”模块功能是根据开门或错误标志控制彩灯和喇叭。

 SPK:

扬声器输出,当三次错误后,按1Hz频率交替用高声2.5KHz,低声1.25KHz报警。

 Lamp[3..0]:

彩灯输出,出错时一个灯按1Hz频率闪烁3秒,3次错误时4个灯按1Hz频率持续闪烁,开门时4个灯长亮(持续5秒)。

 “sel_time”模块功能是数码管动态扫描,并从选择对应的buff位按顺序输出到译码器译码显示。

 “deled”模块功能是BCD译码输出。

“CHECK”模块设计方法:

要求用状态机改写。

状态机可以清晰的描述控制过程,如图12.2所示。

 

图12.2密码设置及检查“CHECK”模块状态转换图

 用下面所示代码读取按键值,可以保证每按一次键,读取的键值(用current_key保存)持续一个时钟周期,而其他时间current_key=“11111”(表示没有按键按下)。

用“current_key”代替状态图中的“key”避免重复读入键值。

各个状态要检查的输入、转换条件、输出值分析如下:

S0:

初始态,复位(Reset=0)或其它未知状态均转入本状态。

输入:

检查键盘输入。

状态转换:

当键盘输入“#”号,转到S1(校验密码);当键盘输入“*”号,转到S6(修改密码)。

输出:

buff(n)=“11111”(消隐)。

其它:

状态转入S1、S6时,应将buff1~buff8置为“10001”(输入提示符“-”)。

S1:

输入密码。

输入:

检查键盘输入。

状态转换:

当键盘输入“#”号,转到S2(输入完成,校验密码);当键盘输入“D”号,转到S0(取消输入)。

输出:

如果键盘输入“0~9”的数字,则buff(n-1)=buff(n)(左移一位),buff8<=key;当输入了8个数字后,只接收“#”号和“D”键。

其它:

不用记录输入个数,只需要判断buff1是不是“10001”(输入提示符“-”)即可确定是否输入了8个数字。

S2:

校验密码。

输入:

无。

状态转换:

buff(n)=save(n)(密码正确)转入S3;密码不正确:

①Error_Num>2时转入S5②Error_Num<=2时转入S4。

输出:

Count=0(延时计数清零)。

其它:

当密码正确时应将Error_Num(错误次数)清零;密码错误时应将Error_Num+1。

S3:

开门状态。

输入:

Count。

状态转换:

Count>=49999时转入S0(开门状态持续5秒)。

输出:

open_Door=1;Count=Count+1;buff1~buff8显示“OPEndOOR”(选做,在译码器中应添加相应编码用于显示对应字母)。

其它:

S4:

密码错误。

输入:

Count。

状态转换:

Count>=29999时转入S0(错误状态持续3秒)。

输出:

Error_Flag=1;Count=Count+1;buff1~buff8显示“RRROR--’错误次数’”(选做,在译码器中应添加相应编码用于显示对应字母)。

其它:

S5:

密码错误超过3次。

输入:

状态转换:

死循环,无法转入其它状态(只有通过复位(Reset=0)才能转入S0)。

输出:

Error3=1;buff1~buff8显示“-LOCKED-”(选做,在译码器中应添加相应编码用于显示对应字母)。

其它:

S6:

修改密码。

输入:

检查键盘输入。

状态转换:

当键盘输入“*”号,则保存密码然后转到S0;当键盘输入“D”号,转到S0(取消输入)。

输出:

如果键盘输入“0~9”的数字,则buff(n-1)=buff(n)(左移一位),buff8<=key;当输入了8个数字后,只接收“*”号和“D”键。

其它:

图12.3为“CHECK”模块的VHDL代码(去掉了部分实现代码——“……”部分),请按照前面的设计思路补充完整。

图12.3“CHECK”模块的部分VHDL代码

图12.4整个设计的原始VHDL代码

六、实验报告要求

1.详细论述源码中实现各功能的设计方法。

2.总结用状态机设计控制电路的要点。

3.6×6键盘有几种按键状态(不包括组合键),应该定义多少编码来表示?

如果包含所有组合键,则用于表示按键状态的编码至少应定义为几位?

4.如果用“#”键作为功能键(类似PC键盘上的[Ctrl]键),如何输入“#+C”(类似于“Ctrl+C”)这种组合功能键?

(只说思路,不用给出具体实现)

5.实验的心得体会。

 

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 工程科技 > 能源化工

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2