数字逻辑设计课程设计报告书题目名称:电子密码锁学院:光电信息学院小组成员:钟永捷2011059080024侯晨涛2011059170003徐昊2011059060029指导教师:李力日期:2013年6月28日一、小组成员分工情况侯晨涛:所有编程工作、资料查找工作量:60%钟永捷:辅助编程、图表制作、资料查找工作量:20%徐昊:论文写作、图表制作、资料查找工作量:20%二、题目分析1.输入信号通过扫描键盘的行与检测键盘的列得到输入信号。2.输出信号通过译码器得到的显示器显示信息,开关锁动作。三、设计总框图四、各模块说明(一)键盘扫描模块1.原理通过时序信号产生脉冲,不间断地向矩阵键盘的行输入1110-1101-1011-0111的循环序列。同时将各列的电平置高,检测矩阵键盘各列的电平变化。若在一定时间内,扫描到第n列电平为零时恰好第m行的输入电平也为零,则判断键盘上[m,n]位置上键被按下。时序信号4*3键盘寄存器比较行列行2.模块框图3.状态表此模块只需要通过编码器实现即可,假定前四位表示各行扫描结果,后三位表示各列扫描的结果。动作行输入列输入状态命名编码输出按下“0”键0111101S00000按下“1”键1110110S10001按下“2”键1110101S20010按下“3”键1110011S30011按下“4”键1101110S40100按下“5”键1101101S50101按下“6”键1101011S60110按下“7”键1011110S70111按下“8”键1011101S81000按下“9”键1011011S91001按下“#”键0111011S101010按下“*”键0111110S1110114.仿真结果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.仿真结果#ForbidPass两次输入不同+#键*UpdateWaitsInput#RightWrong两次输入相同+#键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”...