1、可编程逻辑器件原理与应用综合设计格式信息技术学院可编程逻辑器件原理及应用课程综合设计报告书姓 名: 李伟梅 班 级: B1210 学 号: 0915121023 时 间:2014年12月21日 指导教师: 李海成 设计题目电子密码锁设计要求和任务设计要求:数据输入:每按一个数字键,就输入一个数值,并在显示器上的最右方显示出该数值,并将先前已经输入的数据依序左移一个数字位置。数码清除:按下此键可清除前面所有的输入值,清除成为“0000”。密码更改:按下此键时将目前的数字设定成新的密码。激活电锁:按下此键可将密码锁上锁。解除电锁:按下此键会检查输入的密码是否正确,密码正确即开锁。设计任务:设计一密
2、码锁,用VHDL语言描述,用QuartusII工具编译和综合,并仿真,撰写实验报告。电子密码锁内有预置密码,如果输入的十进制数与锁内密码一致,锁被打开;否则,应封闭开锁电路。十进制数采用矩阵键盘输入,并实现左移功能。同时要实现密码更改和数码清除。设计过程(包括:设计方案、原理、 程序与仿真结果、实验结果、收获和体会等)一、设计原理及方案电子密码锁,主要由三部分组成:密码输入电路、密码锁控制电路和密码锁显示电路。 作为电子密码锁的输入电路,可选用的方案有拨码与按键来控制输入和触摸式键盘输入等多种。触摸式4*4键盘相比简单方便而且成本低,构成的电路简单,本设计采用触摸式4*4键盘来作为该设计的输入
3、设备。 数字电子密码锁的显示信息电路可采用LED数码显示管和液晶屏显示两种。液晶显示具有高速显示、可靠性高、易于扩展和升级的特点,但是普通的液晶存在亮度低、对复杂环境适应能力差的特点,但是在本设计中任然使用LED数码管。 根据以上选定的输入设备与显示器件,并考虑到现实各项密码锁功能的体要求,与系统的设计要求,系统设计采用自顶向下的设计方案。整个密码锁系统的总总体框图如图所示。设计过程二、设计程序1、电子密码锁输入模块1.1 矩阵键盘显示1.2密码锁输入程序process(clk) -键盘列扫描 begin if rising_edge(clk) then -if(Kr=1111) then k
4、flag1=0; kcount=kcount+1; - if(kcount=0) then keyc=1110; - elsif(kcount=1) then keyc=1101; - elsif(kcount=2) then keyc=1011; - else keyc=0111; - end if; -else if(Kr=1111) then kflag1=0; else kflag1=1; end if; keyr=Kr; keyc=Kc; -end if; kflag2buff1buff1buff1buff1buff1buff1buff1buff1buff1buff1buff1buf
5、f1buff1flag3buff1flag4flag2buff1=buff1; end case; end if; end if; end if; -if sxhnb=1and flag3=1 -then flag3=0; sxhnb=0; -elsif flag3=1 then sxhnb=1; -end if; if sxhnb=1 then flag3=0; end if; if lwmhnb=1and flag2=1 then flag2=0; lwmhnb=0; elsif flag2=1 then lwmhnb=1; end if; -if wmhnb=1and flag4=1 -
6、then flag4=0; wmhnb=0; -elsif flag4=1 then wmhnb=1; -end if; if wmhnb=1 then flag4=0; end if; if dhnb=1and flag5=1 then flag5=0; dhnb=0; elsif flag5=1 then dhnb=1; end if; end process; process(clk) begin if(kflag1=1 and kflag2=0 ) then if flag5=1 then buff3=0; buff2=0; end if; buff4=buff3; buff3=buf
7、f2; buff2=buff1; end if; end process;2、电子密码锁控制模块library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all; use ieee.std_logic_unsigned.all;entity mimasuo isport(Clk : in std_logic; Kr : in std_logic_vector(3 downto 0); Kc : in std_logic_vector(3 downto 0); a,b,c,d,e,f,g : out std_logic;
8、Sa,sb,sc : buffer std_logic;un : out std_logic );end mimasuo;architecture aa of mimasuo is signal keyr,keyc : std_logic_vector(3 downto 0); signal kcount : std_logic_vector(2 downto 0); signal dcount : std_logic_vector(1 downto 0); signal kflag1,kflag2 : std_logic; signal buff1,buff2,buff3,buff4: in
9、teger range 0 to 15; signal Disp_Temp : integer range 0 to 15; signal Disp_Decode : std_logic_vector(6 downto 0); signal mm1,mm2,mm3,mm4 : integer range 0 to 15; signal flag,flag2,flag3,flag4,flag5 : std_logic; signal sxhnb,lwmhnb,wmhnb,dhnb : std_logic; begin process(clk) -密码初始化及更改 begin if rising_
10、edge(clk) then if flag=0 then mm1=0; mm2=0; mm3=0; mm4=0;flag=1; elsif flag2=1 then mm1=buff4; mm2=buff3; mm3=buff2; mm4=buff1; end if; end if; end process;process(flag3,flag4) -开锁 begin if buff1=mm4 and buff2=mm3 and buff3=mm2 and buff4=mm1 and flag3=1 then un=1; sxhnb=1;wmhnb=0;-0 end if; if flag4
11、=1 then un=0; sxhnb=0;wmhnbDisp_TempDisp_TempDisp_TempDisp_TempDisp_Temp=Disp_Temp; end case; end process;process(Clk) begin if rising_edge(clk) then -扫描累加 dcount=dcount+1; a=Disp_Decode(0); b=Disp_Decode(1); c=Disp_Decode(2); d=Disp_Decode(3); e=Disp_Decode(4); f=Disp_Decode(5); g=Disp_Decode(6); s
12、a=0; sb=dcount(0); scDisp_DecodeDisp_DecodeDisp_DecodeDisp_DecodeDisp_DecodeDisp_DecodeDisp_DecodeDisp_DecodeDisp_DecodeDisp_DecodeDisp_Decode=0000000;-全灭 end case; end process;三、实验结果四、程序仿真设计过程五、收获和体会通过这次EDA课程设计,让我对VHDL语言和QUARTUS有了更深一步的了解,我学习了VHDL的自顶而下的设计思想和软件更灵活的使用。让我明白了学以致用的重要性。在设计过程中也有碰到了许多困难,在刚开
13、始设计矩阵键盘的时候有casewhen语句时,没有设计others的情况,导致运行结果有问题。后来,当摁下开锁键的时候,没有任何变化。分析发现是由于运行周期过短,还没来得及开锁就锁上了。于是,在进程后面加了一个计数器,解决了问题。还有其他小问题,例如:少括号,少逗号等,但都迎刃而解了。事实证明做任何事情都要有仔细、认真的态度。总之,通过这次课程设计,我终于觉得平时所学的知识有了实用的价值,达到了理论与实际相结合的目的,不仅学到了不少知识,而且锻炼了自己的能力,使自己对以后的路有了更加清楚的认识,同时,对未来有了更多的信心。最后,对给过我帮助的所有同学和主任表示忠心的感谢!成绩评定(包括:指导教师评语和课程设计等级)
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1