(精编)数电课程设计电子密码锁
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
(精编)数电课程设计电子密码
锁
数字逻辑设计
课程设计报告书
题目名称:电子密码锁
学院:光电信息学院
小组成员:钟永捷2011059080024
侯晨涛2011059170003
徐昊2011059060029
指导教师:李力
日期:2013年6月28日
一、小组成员分工情况
侯晨涛:所有编程工作、资料查找工作量:60%
钟永捷:辅助编程、图表制作、资料查找工作量:20%
徐昊:论文写作、图表制作、资料查找工作量:20%
二、题目分析
1.输入信号
通过扫描键盘的行与检测键盘的列得到输入信号。
2.输出信号
通过译码器得到的显示器显示信息,开关锁动作。
三、设计总框图
四、各模块说明
(一)键盘扫描模块
1.原理
通过时序信号产生脉冲,不间断地向矩阵键盘的行输入1110-1101-1011-0111的循环序列。同时将各列的电平置高,检测矩阵键盘各列的电平变化。若在一定时间内,扫描到第列电平为零时恰好第行的输入电平也为零,则判断键盘上位置上键被按下。
2.模块框图
3.状态表
此模块只需要通过编码器实现即可,假定前四位表示各行扫描结果,后三位表示各列扫描的结果。
4.
仿真结果
Key_in 代表按键按下与否情况,Key_mem 将其记录并输出,scan 为行扫描信号,Key_out 为按键输出值。如上仿真结果所示,当scan 为1110时,扫描第一行。按下第一个键,即Key_in 为110,此时Key_out 为0001,即输出值为1。其它状态依此类推。 (二) 输入模块 1.
原理
设置两个寄存器,一个作为用户所想设置密码的密码寄存器。另一个寄存器则是将键盘Input 的键值存储起来。最后通过一个比较器将两个寄存器的值进行比较。若相同则输出“open ”,反之,输出“error ”。比较器内部通过多位异或门实现。 2.
模块框图
3. 状态图
4. 仿真结果
1)
删除字符
第一次输入值为0101,Number_sig 第0到3位将其保存。第二次输入值为0011,Number_sig 第4到7位将其保存。第三次输入值为0001,Number_sig 第8到11
位将其保存。第四次输入值为1010,即删除键。第五次输入值为0111,Number_sig 第8到11位的值由0001变为0111,即实现了删除功
能。
2)密码输入正确
Correct=1说明密码输入正确,Number_sig的值为000011001101111000000000,Number_sig的值通过七段显示译码器之后将使数码管显示OPEn00。
3)密码输入错误
Correct=1说明密码输入正确,Number_sig的值为110111111111000011110000,Number_sig的值通过七段显示译码器之后将使数码管显示ERROR0。
(三)密码判断及更改
1.原理
密码判断模块:通过比较器将输入寄存器与存储寄存器中的数据进行比较,如果数据相同,则判断密码正确。如果数据不同,则返回输入等待状态,并对输入寄存器中的数据清零。
密码更改模块:将第一次与第二次输入寄存器中的数据输入比较器比较,如果数据相同则将该数据输入进密码存储寄存器中。如果数据不同,则返回数据输入前的数据等待状态。
2.模块框图
3.仿真结果
main_state为10000即update状态,按键六次输入值为0110,0110,0110,0110,0110,0010,第二次输入相同。即将密码由666666改为266666。第二次输入完成same为1,说明两次输入相同。按“#”键确认后。当状态变为01000时,即in_put输入密码Inputpd为001001100110011001100110即266666,correct为1说明密码修改成功并开锁。
(四)主状态机
1.原理
状态分五个状态:Waits,Input,Pass,Update,Forbid。
在Waits状态下,摁下“#”进入密码“Input”状态,在“Input”状态下摁“*”可删除当前Input 的字符。若密码输入正确则进去“Pass”状态,否则进入“Forbid”状态,这时若摁下“#”键,则重新返回“Waits”状态。摁下“*”键进入“Update”状态,输入两次密码然后摁“#”键进行确定,若两次密码不相同则Update失败,重新返回到“Pass”状态。若两次密码相同,则返回到“Waits”状态。
2.模块框图
3.状态表
4.仿真结果
1)密码输入错误
按下“#”键,进行密码输入(main_state由00001变为01000),此时error为1说明密码输入错误。main_state变为forbid状态(由01000变为00100)。再按下“#”键,重新返回waits状态(由00100变为00001)。
2)密码输入正确,且修改密码成功
按下“#”键,进行密码输入(main_state由00001变为01000),此时correct为1说明密码输入正确。由in_put变为pass(由01000变为00010)。按下“*”进行密码修改,由00010变为10000修改正确,主状态重新返为wait。
3)密码输入正确,但密码修改失败
按下“#”键,进行密码输入(main_state由00001变为01000),此时correct为1说明密码输入正确。由in_put变为pass(由01000变为00010)。按下“*”进行密码修改,由00010变为00010主状态由修改错误重新返为pass。
(五)显示
1.原理
这里的选择24位数码管控制模块,将24位拆分为六组四位编码输入七段译码器。将译码输出与扫描模块产生的扫描时序共同作用于六位数码管。得到所需显示结果。
2.模块框图
3.仿真结果
输入信号Number_sig的值为000100100011010001010110即123456,Scan_sig的值为011111时,即第一个数码管亮时Duan_date的值为0110000即数码管显示数字为1。综合以上,此时第一个数码管显示为1,之后第二个数码管显示为2,第三个数码管显示为3……
五、验证方案
采取自上而下的设计方案,首先将题目要求拆分成各大模块,然后通过编写Verilog语言的程序实现各模块的功能。在中仿真出时序逻辑图,并验证程序的正确性。
图1.设计总框图的实现
六、课程设计心得体会
通过这次数字密码锁的课程设计,我们掌握了如何通过数字逻辑知识来设计一个可应用于生产生活中的拥有实际应用功能的数字逻辑器件。首先我们要了解其具体功能要求,然后采用自上而下的设计方法,建立整体逻辑框图并将其划分为各个具体功能模块。之后,我们通过编写Verilog程序实现每一模块的功能。在编译无错误后,通过quartus2软件自带的波形仿真功能检测模块功能是否实现。当波形达到要求,