毕业设计开题报告
电子密码锁的设计与实现
姓 名
院(系)
专业年级
学 号
指导教师
职 称
起止时间
第二篇:电子密码锁设计
电子密码锁设计
1 设计任务及要求
初始条件:计算机、Max+plusⅡ、EDA实验箱。
主要任务与要求:设计一个电子密码锁,在锁开的状态下输入密码,设置的密码共4位,用数据开关K1~K10分别代表数字1,2,?,9,0,输入的密码用数码管显示,最后输入的密码显示在最右边的数码管上,即每输入一位数,密码在数码管上的显示左移一位。可删除输入的数字,删除的是最后输入的数字,每删除一位,密码在数码管的显示右移一位,并在左边空出的位上补充“0”。用一位输出电平的状态代表锁的开闭状态。
提高部分:为保证密码锁主人能打开密码锁,设置一个万能密码,在主人忘记密码时使用。
2 EDA简介
EDA技术是在电子CAD技术基础上发展起来的通用软件系统,是指以计算机为工作平台,融合了应用电子技术、计算机技术、信息处理及智能化技术的最新成果,进行电子产品的自动设计。
EDA 设计可分为系统级、电路级和物理实现级。物理级设计主要指IC版图设计,一般由半导体厂家完成;系统级设计主要面对大型复杂的电子产品;而一般民用及教学所涉及基本是电路级设计。我们常用的EDA软件多属于电路级设计。
电路初级设计工作,是在电子工程师接受系统设计任务后,首先确定设计方案,并选择合适的元器件,然后根据具体的元器件设计电路原理图,接着进行第一次仿真。其中包括数字电路的逻辑模拟、故障分析、模拟电路的交直流分析、瞬态分析等。这一次仿真主要是检验设计方案在功能方面的正确性。
仿真通过后,根据原理图产生的电气连接网络表进行PCB板的自动布局布线,有条件的还可以进行PCB后分析。其中包括热分析、噪声及窜扰分析、电磁兼容分析、可靠性分析等,并可将分析后的结果参数反馈回电路图,进行第二次仿真,也称作后仿真。后仿真主要是检验PCB板在实际工作环境中的可行性。
EDA工具层出不穷,目前进入我国并具有广泛影响的EDA软件有:multiSIM7(原EWB的最新版本)、PSPICE、OrCAD、PCAD、Protel、Viewlogic、Mentor、Graphics、Synopsys、LSIIogic、Cadence、MicroSim等等。这些工具都有较强的功能,一般可用于几个方面,例如很多软件都可以进行电路设计与仿真,同进还可以进行PCB自动布局布线,可输出多种网表文件与第三方软件接口。
3实验原理及电路图
在本实验中采用的是VHDL编程,通过文本编辑方式建立模块,通过原理图方式将生成的图形符号连接,然后再下载,进行硬件的仿真。密码锁要达到的功能为:
1、密码输入:每按下一个键,要求在数码管上显示,并依次左移;
2、密码删除:每删除一位,数码管上的显示右移一位,在左边空出的位补充零;
3、密码设置:当四位密码输入完毕,按下设置功能键进行设置;
4、密码检验:输入密码,按下检验键。
为达到密码锁的以上功能,可将电子密码锁分为以下几个模块:密码锁输入电路、密码锁控制电路、LED输出显示电路。总原理图如下
图1 密码锁设计总原理图
4 各模块电路设计及功能实现
4.1 密码锁输入模块
密码锁输入模块由时序产生电路、键盘扫描电路、键盘译码电路和按键存储电路组成。
1.时序产生电路
产生电路中使用的三种不同频率的工作脉冲波形,即系统时钟脉冲、弹跳消除取样信号和键盘扫描信号。
2.键盘扫描电路
扫描电路的作用是提供键盘扫描信号,扫描信号变化的顺序依次为1110-1101-1011-0111-1110??依序地周而复始。
3.键盘译码电路
上述键盘中的按键分为数字按键和文字按键,每一个按键可能负责不同的功能,例如清除键、上锁键和解锁键等。数字按键主要是用来输入数字的,但是键盘所产生的输出是无法直接拿来用作密码锁控制电路的输入的;另外,不同的按键具有不同的功能,所以必须由键盘译码电路来规划每个按键的输出形式,以便执行相应的动作。
4.按键存储电路
因为每次扫描会产生新的按键数据,可能会覆盖前面的数据,所以需要一个按键存储电路,将整个扫描完毕后的结果记录下来。
图2 按键位置与数码关系
4.2 密码锁控制电路
密码锁的控制电路是整个电路的控制中心,包括密码删除、修改与检验,其控制作用主要体现在以下方面:
1.数字按键输入的响应控制
a.如果按下数字键,第一个数字会从显示器的最右端开始显示,此后每新按下一个数字时,
显示器上的数字必须左移一位,以便将新的数字显示出来。
b.假如要更改输入的数字,可以按倒退按键来清除前一个输入的数字,或者按清除键清除所有输入的数字,再重新输入四位数。
c.由于这里设计的是一个四位的电子密码锁,所以当输入的数字键超过四个时,电路不予理会,而且不再显示第四个以后的数字。
2.功能按键输入的响应控制
a.清除键:清除所有的输入数字,即作归零动作。
b.上锁键:按下此键时可将密码锁的门上锁(上锁前必须预先设定一个四位的数字密码)。 c.解除键:按下此键会检查输入的密码是否正确,若密码正确无误则解锁。
本设计的密码锁控制电路如下图所示:
图3 密码锁控制电路
其中set为密码设置端口, check为密码检验端口, close为关锁端口, back为删除密码端口, clk时钟输入端口, bcd[3..0]为数字输入端口,bcd16[15..0]为16位输出端口,lock密码锁状态显示端口。
在此电路中每输一位数,密码在数码管上左移一位。设置删除密码back,每按下一次back,删除最后输入的数字,左边空处补0。
设置密码确认信号set,当四位密码输入完毕,按下set,设置的密码被存储。
设置密码锁状态信号lock, lock=0表示锁未开,lock=1表示锁开,同时设置关锁信号close,按下close,则锁关闭。
设置密码检验信号check,在lock=0下从数据开关书去四位开锁数字,按下check,若数据等于设置的密码或万能密码,则lock=1。
4.3 输出显示电路
BCD 译码、动态扫描电路如图4所示。
图4 输入显示电路
输出显示电路通过一个二进制计数器对数码管进行片选,片选为0,输入的第0~3位在第一个数码关上显示;片选为1输入的第4~7位在第二个数码关上显示,片选为2输入的第8~11位在第三个数码关上显示,片选为3输入的第12~15位在第四个数码关上显示,进而实现数码管的动态显示。
通过开关编码电路将开关电平转换成数据1,2?9,0, 将转换成的数输入到密码锁控制电路,之后输出到数码管动态显示电路。
5 系统仿真
5.1波形仿真图形
在进行编程的过程中,对每一模块都要进行波形仿真。键盘模块、控制模块、动态显示模块的波形仿真图分别如图5、图6、图7所示。
图5 编码器仿真波形
图6 控制电路仿真波形
图7 动态现实仿真波形
5.2 结果分析
在图5中可知,输入“001”、“002”、“004”、“008”、“010”、“020”、“040”、“080”、“080”、“100”、“200”分别表示选择开关k1、k2、..k9、k10,输出数据1,2,3?9,0,从波形中我们可以看出这是符合。图6所示,输入密码“6520”后按Close,Lock=“1”表示关锁,再次输入“6520”按Check,密码锁打开Lock=“0”。图7中,C-display计数到“0”、“1”、“2”、“3”时,SELOUT分别为“1110”、“1101”、“1011”、“0111”,表示片选第0、1、2、3个数码显示管,符合设计要求。
6实验程序及流程图
根据设计原理分析,本设计为三个模块:开关编码模块、控制模块、动态显示模块。设计的总结构图为图8所示。
图8设计结构图
6.1 输入开关编码程序
library ieee; ---定义实体 use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity tra is
port( n:in std_logic_vector(9 downto 0); ---定义按键输入端口 sout:out std_logic_vector(3 downto 0)); ----定义编码输入端口 end tra;
architecture at of tra is -----定义结构体 signal temp:std_logic_vector(3 downto 0);
begin
process(n)
begin
case n is ----输入键编码 when "0000000001"=>temp<="0001";
when "0000000010"=>temp<="0010";
when "0000000100"=>temp<="0011";
when "0000001000"=>temp<="0100";
when "0000010000"=>temp<="0101";
when "0000100000"=>temp<="0110";
when "0001000000"=>temp<="0111";
when "0010000000"=>temp<="1000";
when "0100000000"=>temp<="1001";
when "1000000000"=>temp<="0000";
when others=>temp<="1111";
end case;
end process;
sout<=temp;
end at;
6.2 密码锁控制模块流程图及程序
图9控制模块流程图
程序代码为:
library ieee; ----定义实体 use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity art is
port( set,check,close,back,clk:in std_logic; --- set密码设置信号, check 密码检验信号, ---close 关锁信号back密码删除信号, clk时钟信号 dn:in std_logic_vector(3 downto 0);
sout:out std_logic_vector(15 downto 0); ---16位输入信号 lock:out std_logic); ---设置密码锁状态信号 end art;
architecture at of art is -----定义结构体 signal ch:std_logic;
begin
process(clk,dn) --定义进程变量 variable lock_1:std_logic;
variable acc:std_logic_vector(15 downto 0);
variable temp1,temp2,temp3,temp4:std_logic_vector(3 downto 0);
begin
ch<=not(dn(0) and dn(1) and dn(2) and dn(3)); ---设置按键输入上升沿 lock_1:='0';
if clk'event and clk='1' then
if ch='1' then -----密码左移显示 temp4:=temp3;
temp3:=temp2;
temp2:=temp1;
temp1:=dn;
end if;
end if;
if back='1' then ----密码删除右移显示 temp1:=temp2;
temp2:=temp3;
temp3:=temp4; temp4:="0000";
lock_1:='0';
end if;
end if;
if set='1' then -----密码设置 acc:=temp4&temp3&temp2&temp1;
lock_1:='0';
end if;
if check='1' then ----密码校验 if acc=temp4&temp3&temp2&temp1 then lock_1:='1';
elsif temp4="1000" and temp3="1000" and temp2="1000" and temp1="1000" then
lock_1:='1';
end if;
end if;
if close ='1' then
lock_1:='0'; ----密码锁的关闭 temp1:="0000"; temp2:="0000"; temp3:="0000"; temp4:="0000";
end if;
end if;
sout<=temp4&temp3&temp2&temp1;
lock<=lock_1;
end process;
end at;
6.3 数码管的动态显示流程图及程序
图10 数码管动态显示流程图
程序代码为: library ieee;
use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all;
entity leds is -----定义实体 port(din:in std_logic_vector(15 downto 0); ----16输入信号 clk:in std_logic; ---时钟信号 con: buffer std_logic_vector(1 downto 0);
led7:out std_logic_vector(6 downto 0); ---七段数码管输入信号 sn:out std_logic_vector(2 downto 0)); ----数码管七段译码信号 end leds;
architecture he of leds is -----定义结构体 signal db:std_logic_vector(3 downto 0); begin process(clk,din)
begin
if clk'event and clk='1' then
con<=con+1; ----数码管的片选计数 end if;
if(con="00") then ---片选为0,0~3位显示 db<=din(3 downto 0);
sn<="000";
elsif(con="01") then ----片选为1,4~7位显示 db<=din(7 downto 4);
sn<="001";
elsif(con="10") then ---片选为2,8~11位显示 db<=din(11 downto 8);
sn<="010";
elsif(con="11") then ----片选为3,12~15位显示 db<=din(15 downto 12);
sn<="011";
end if;
case db is ----数码管的译码 when "0000"=>led7<="0111111";
when "0001"=>led7<="0000110";
when "0010"=>led7<="1011011";
when "0011"=>led7<="1001111";
when "0100"=>led7<="1100110";
when "0101"=>led7<="1101101";
when "0110"=>led7<="1111101";
when "0111"=>led7<="0000111";
when "1000"=>led7<="1111111";
when "1001"=>led7<="1101111"; when others=>led7<="0000000";
end case;
end process;
end he;
7心得体会
通过本次课程设计的学习,我深深的体会到设计课的重要性和目的性所在。本次设计课不仅仅培养了我们实际操作能力,也培养了我们灵活运用课本知识,理论联系实际,独立自主的进行设计的能力。
作为学习自动化专业的学生,应该熟练掌握各种电路编辑软件,作为专业必需的技能,即将踏入社会的时候,更加要求我们有这方面的基础。随着电子技术的飞速发展,各种新型电子器件和集成电路应用越来越广泛,电子系统的功能越来越强大,电路图也越来越复杂,印刷电路板的走线越来越复杂和精密。计算机的应用使得我们对各种复杂的电路设计工作变得简单一些,使得更好更复杂的电路得以实现。电子设计自动化(Electronics Design Automates,即EDA)工具的集成设计环境,电子设计软件Max + PLUS II 软件等的运用使得设计电路更加方便。
通过这次课程设计,我感觉到不会的知识还有很多,还有很多软件、硬件知识需要去学习,在今后的学习生活中,一定充分利用时间,不断充实自己。
8 参考文献
[1]高有堂 《EDA技术及应用实践》 清华大学出版社。2006
[2]林敏,方颖立 《VHDL数字系统设计与高层次综合》 电子工业出版社。2002
[3]王锁平 《电子设计自动化(EDA)教程》 电子科技大学出版社。 2000
[4]潘送等编著 《EAD技术使用教程》 科学出版社。2002
[5]谭会生,瞿遂春 《EAD技术综合应用实例与分析》 西安电子科技大学出版社。2004