1 / 29
文档名称:

电子密码锁设计.doc

格式:doc   大小:792KB   页数:29页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

电子密码锁设计.doc

上传人:陈潇睡不醒 2018/5/5 文件大小:792 KB

下载得到文件列表

电子密码锁设计.doc

文档介绍

文档介绍:主要内容:
设计一个密码锁的控制电路,第一个按钮触动后的5秒内若未将锁打开,则电路自动复位并进入自锁状态,当输入正确代码时,输出***信号以推动执行机构工作。
设计内容、技术条件和要求
1、设计一个密码锁的控制电路,当输入正确代码时,输出***信号以推动执行机构工作,用红灯亮、绿灯熄灭表示关锁,用绿灯亮、红灯熄灭表示***;
2、在锁的控制电路中储存一个可以修改的4位二进制代码,当***按钮开关的输入代码等于储存代码时,***;
从第一个按钮触动后的5秒内若未将锁打开,则电路自动复位并进入自锁状态,使之无法再打开,并由扬声器发出持续20秒的报警信号,并输出一个信号推动LED不断闪烁
主要参考文献
[1] (第二版). 北京:科学出版社,2005.
[2] . 北京:高教出版社,2006.
[3] . 北京:高教出版社,2003.
[4] 谭会生、瞿遂春,《EDA技术综合应用实例与分析》,西安电子科技大学出版社,2004
[5] 高有堂,《EDA技术及应用实践》,清华大学出版社,2006
设计思路
根据设计要求,该电子密码锁主要有设置密码,5秒时间输入密码(即第一个按键按下后的5秒内输入密码),报警(即超出5秒后若未将锁开启则扬声器发出20秒的报警信号,同时一个LED不断闪烁),***时输出声光信号(即扬声器发出5秒的信号,同时对应的指示灯发生变换)的功能。
因此,我的设计思路是输入datain(3 downto 0)为四位密码按键,其对应的二进制序列为密码(当然也可以设置6位或8位,其中实际有效为4位,其余为虚设),enter1为设置密码确认键(上升沿有效),enter2为输入密码确认键(上升沿有效),set为模式选择键(0为设置密码,1为输入密码),系统时钟clk_1k设置为1024Hz;
输出有led_r(红灯)、led_g(绿灯)、led_alert(报警指示灯)、speaker(扬声器)。
首先在set为0的情况下,将4位按键设置成想要的密码(例如1001),然后按一下enter1将密码锁存起来,这时对应的指示灯由红灯灭、绿灯灭变成红灯亮、绿灯灭(表示关锁),接着将set设为1,此时将4位按键设置成输入的密码(初始值都还原为0),按enter2进行确认,第一个按键按下后会产生一个5秒计时信号,若5秒内将锁开启,则对应的指示灯由红灯亮、绿灯灭变成红灯灭、绿灯亮(表示***),同时扬声器发出短暂的提示信号,若5秒后没有将锁开启,则报警,扬声器发出20秒的信号,报警指示灯闪烁20秒。
设计步骤
分频
由于要产生5秒、20秒的计时信号,故对系统时钟clk_1k进行分频来得到1Hz的时钟clk。其模块及部分程序如下:
process(clk_1k)
variable count:std_logic_vector(9 downto 0);
begin
if(clk_1k'event and clk_1k='1') then
count:=count+1;
end if;
clk<=count(9);
end process;
仿真波形如下:
设置密码
本模块主要是将设置的密码锁存到中间变量ram中去,同时控制灯的变化,由于这里的灯并不能作为最终的输出,所以这里先用led_r_temp1、led_r_temp2代替。其模块及部分程序如下:
process(enter1,set)
begin
if(enter1'event and enter1='1') then
if(set='0') then
ram<=datain;
led_r_temp1<='1';led_g_temp1<='0';
else led_r_temp1<='0';led_g_temp1<='0';
end if;
end if;
end process;
仿真波形如下:
输入密码时第一个按键判断信号
本模块主要在密码输入下,当第一个按键按下时产生一个judge信号(高电平有效),其模块及部分程序如下:
process(set,clk_1k,datain)
begin
if(clk_1k'event and clk_1k='1') then
if(set='0') then judge<='0';
elsif(set='1') then
if((datain(0) or datain(1) or datain(2) or datain(3))='0') then
judge<='0';
elsif((datain(0) or datain(1) or datain(2