三位电子密码锁
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
sel<="01";
WHEN 2=>QOUT<=QIN3;
sel<="10";
WHEN OTHERS=>QOUT<="1111";
sel<="11";
END CASE;
END IF;
END PROCESS;
END ARCHITECTURE;
4.4
1)控制模块
2)其程序如下:
--DECODER24A.VHD
EDA课程设计报告
报告名称:电子密码锁
院系:工学院
专业:通信工程
学号:201301030303
姓名:蔡官耀
指导老师:杨永福
一、
电子密码锁在生活中十分常见,在这我将设计一个具有较低成本的电子密码锁,本文讲述了我整个设计过程及收获。讲述了电子密码锁的的工作原理以及各个模块的功能,并讲述了所有部分的设计思路,对各部分电路方案的选择、元器件的筛选、以及对它们的调试、对波形图的分析,到最后的总体图的分析。
sel <="00";
QOUT<="0000";
ELSIF CLK'EVENT AND CLK='1' THEN
IF CNT=2 THEN
CNT:=0;
ELSE
CNT:=CNT+1;
END IF;
CASE CNT IS
WHEN 0=>QOUT<=QIN1;
sel <="00";
WHEN 1=>QOUT<=QIN2;
--IF PUL='1' THEN
CASE PUL1 IS
WHEN "0000"=>Q1<="0000";
WHEN "0001"=>Q1<="0001";
WHEN "0010"=>Q1<="0010";
WHEN "0011"=>Q1<="0011";
WHEN "0100"=>Q1<="0100";
WHEN "0101"=>Q1<="0101";
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY sel IS
PORT(QIN1,QIN2,QIN3:IN STD_LOGIC_VECTOR(3 DOWNTO 0);
CLK,RST:IN STD_LOGIC;
QOUT:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
二、
本设计名称为电子密码锁,用四个模块,分别为输入模块、控制模块、扫描器模块、显示模块,来控制密码的输入、验证与显示。
设计所要实现的功能为:
1 数码输入:手动输入3组四位二进制密码。
2 数码验证:开锁时输入密码后,拨动 RT键使其为高电平,而CHANGE为低电平检测,密码正确时开锁,输出clockopen灯(绿灯)亮,表示开锁成功。
END ENTITY DECODER24A;
ARCHITECTURE ART OF DECODER24A IS
BEGIN
PROCESS(A)IS
BEGIN
CASE A IS
WHEN "00"=>B<="0001";
WHEN "01"=>B<="0010";
WHEN "10"=>B<="0100";
WHEN OTHERS=>B<="1111";
作为电子密码锁的输入电路,可选用的方案有拨码与按键来控制输入和触摸式键盘输入等多种。拨码与按键和触摸式4*4键盘相比简单方便而且成本低,构成的电路简单,本设计中采用拨码与按键来作为该设计的输入设备。
数字电子密码锁的显示信息电路可采用LED数码显示管和液晶屏显示两种。液晶显示具有高速显示、可靠性高、易于扩展和升级的特点,但是普通的液晶存在亮度低、对复杂环境适应能力差的特点,但是在本设计中任然使用LED数码管。
END ENTITY CONTROL;
ARCHITECTURE ART OF CONTROL IS
SIGNAL ENABLE,ENABLE1:STD_LOGIC;
SIGNAL DA,DB,DC:STD_LOGIC_VECTOR(3DOWNTO 0);
BEGIN
ENABLE<=CHANGE AND(NOT RT);
WHEN "0011"=>Q3<="0011";
WHEN "0100"=>Q3<="0100";
WHEN "0101"=>Q3<="0101";
WHEN "0110"=>Q3<="0110";
WHEN "0111"=>Q3<="0111";
WHEN "1000"=>Q3<="1000";
WHEN "1001"=>Q3<="1001";
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY DECODER24A IS
PORT(A:IN STD_LOGIC_VECTOR(1 DOWNTO 0);
B:OUT STD_LOGIC_VECTOR(3 DOWNTO 0));
3 错误显示:当密码输入错误时,clockcolse灯(红灯)亮,表示开锁失败。
4 更改密码:当改变密码时,按下CHANGE键使其为高电平,而RT为低电平时,可改变密码。
5 密码清除:按下RST可清除前面的输入值,清除为“000”。
三、
1)设计方案:
电子密码锁,主要由三部分组成:密码输入电路、密码锁控制电路和密码锁显示电路。
3)其程序如下:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY CONTROL IS
PORT(NB:IN STD_LOGIC_VECTOR(3 DOWNTO 0);
NS:IN STD_LOGIC_VECTOR(3 DOWNTO 0);
NG:IN STD_LOGIC_VECTOR(3 DOWNTO 0);
"0110000"WHEN num ="0001"ELSE
"1101101"WHEN num ="0010"ELSE
"1111001"WHEN num ="0011"ELSE
"0110011"WHEN num ="0100"ELSE
"1011011"WHEN num ="0101"ELSE
CLK:IN STD_LOGIC;
CHANGE,RT: IN STD_LOGIC;
SB:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
SS:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
SG:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
LOCKOPEN,LOCKCLOSE:OUT STD_LOGIC);
Q1,Q2,Q3:OUT STD_LOGIC_VECTOR(3 DOWNTO 0));
END SR;
ARCHITECTURE BEHAVE OF SR IS
SIGNAL TEMP:STD_LOGIC;
BEGIN
PROCESS(PUL1,PUL2,PUL3)
BEGIN
-- IF M'EVENT AND M='1' THEN
WHEN "1000"=>Q2<="1000";
WHEN "1001"=>Q2<="1001";
WHEN OTHERS=>Q2<="0000";
END CASE;
E PUL3 IS
WHEN "0000"=>Q3<="0000";
WHEN "0001"=>Q3<="0001";
WHEN "0010"=>Q3<="0010";
ENABLE1<=RT AND(NOT CHANGE);
PROCESS(CLK,NB,NS,NG) IS
BEGIN
IF CLK'EVENT AND CLK='1' THEN
IF ENABLE='1' THEN
DA<=NB;
DB<=NS;
DC<=NG;
LOCKOPEN<='0';
LOCKCLOSE<='1';
三位密码锁2013010303电子密码锁系统总体框图功能模块41输入模块1功能介绍输入3组四位二进制密码代表3为密码每一组的取值从000010012输入模块与实物图当按下rst键清除密码清除为000此时如图输入密码eda课程设计蔡官耀000rt为高电平change为低电平检测密码密码正确此时锁打开绿灯亮
sel:OUT STD_LOGIC_VECTOR(1 DOWNTO 0));
END sel;
ARCHITECTURE ART OF sel IS
BEGIN
PROCESS(CLK,RST)
VARIABLE CNT:INTEGER RANGE 0 TO 2;
BEGIN
IF (RST='0') THEN
CNT:=0;
elsif ENABLE1='1' THEN
IF ( DA=NB AND DB=NS AND DC=NG)THEN
LOCKOPEN<='1';
LOCKCLOSE<='0';
ELSE
LOCKOPEN<='0';
LOCKCLOSE<='1';
END IF;
END IF;
END IF;
--END IF;
SS<=NS;
END CASE;
END PROCESS;
END ARCHITECTURE ART;
4.5
1)功能介绍
将密码用BCD七段数码管显示
2)显示模块如下图:
3)程序如下:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
根据以上选定的输入设备与与显示器件,并考虑到现实各项密码锁功能的具体要求,与系统的设计要求,系统设计采用自顶向下的设计方案。整个密码锁系统的总体总体框图如下图。
电子密码锁系统总体框图
四、
4.1
1)功能介绍
输入3组四位二进制密码,代表3为密码,每一组的取值从0000到1001
2)输入模块与实物图
当按下rst键清除密码,清除为“000”此时如图输入密码“000”rt为高电平,change为低电平检测密码,密码正确,此时锁打开,绿灯亮。
SG<=NG;
SB<=NB;
END PROCESS;
END ARCHITECTURE ART;
4.3
其功能是从控制部分的3个输出中选择出一组四位二进制送往译码器,同时把扫描信号SEL送往二四译码器
1)控制模块:
2)其程序如下:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_ARITH.ALL;
2)控制模块
当change为高电平且rt为低电平时开始输入密码,改变密码的值,如下图开始密码改为“311”,当rt为高电平,change为低电平时开始检测密码,绿灯亮,表示密码更改成功,新密码为“311”。
而后随意改变密码的输入值如图“000”,拨动rt高电平,change为低电平检测密码,密码不正确,开锁失败,红灯亮。
WHEN "0001"=>Q2<="0001";
WHEN "0010"=>Q2<="0010";
WHEN "0011"=>Q2<="0011";
WHEN "0100"=>Q2<="0100";
WHEN "0101"=>Q2<="0101";
WHEN "0110"=>Q2<="0110";
WHEN "0111"=>Q2<="0111";
而后随意改变密码输入值如“222” rt为高电平,change为低电平检测密码,密码不正确,开锁失败,红灯亮。
3)程序输入
程序如下:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY SR IS
PORT (PUL1,PUL2,PUL3:IN STD_LOGIC_VECTOR(3 DOWNTO 0);
ENTITY SEG7 IS
PORT(num:IN STD_LOGIC_VECTOR(3 DOWNTO 0);
LED:OUT STD_LOGIC_VECTOR(6 DOWNTO 0));
END SEG7;
ARCHITECTURE ACT OF SEG7 IS
BEGIN
LED<="1111110"WHEN num="0000"ELSE
WHEN "0110"=>Q1<="0110";
WHEN "0111"=>Q1<="0111";
WHEN "1000"=>Q1<="1000";
WHEN "1001"=>Q1<="1001";
WHEN OTHERS=>Q1<="0000";
END CASE;
CASE PUL2 IS
WHEN "0000"=>Q2<="0000";
WHEN OTHERS=>Q3<="0000";
END CASE;
-- TEMP<='1';
--ELSE TEMP<='0';
--END IF;
--END IF;
WHEN 2=>QOUT<=QIN3;
sel<="10";
WHEN OTHERS=>QOUT<="1111";
sel<="11";
END CASE;
END IF;
END PROCESS;
END ARCHITECTURE;
4.4
1)控制模块
2)其程序如下:
--DECODER24A.VHD
EDA课程设计报告
报告名称:电子密码锁
院系:工学院
专业:通信工程
学号:201301030303
姓名:蔡官耀
指导老师:杨永福
一、
电子密码锁在生活中十分常见,在这我将设计一个具有较低成本的电子密码锁,本文讲述了我整个设计过程及收获。讲述了电子密码锁的的工作原理以及各个模块的功能,并讲述了所有部分的设计思路,对各部分电路方案的选择、元器件的筛选、以及对它们的调试、对波形图的分析,到最后的总体图的分析。
sel <="00";
QOUT<="0000";
ELSIF CLK'EVENT AND CLK='1' THEN
IF CNT=2 THEN
CNT:=0;
ELSE
CNT:=CNT+1;
END IF;
CASE CNT IS
WHEN 0=>QOUT<=QIN1;
sel <="00";
WHEN 1=>QOUT<=QIN2;
--IF PUL='1' THEN
CASE PUL1 IS
WHEN "0000"=>Q1<="0000";
WHEN "0001"=>Q1<="0001";
WHEN "0010"=>Q1<="0010";
WHEN "0011"=>Q1<="0011";
WHEN "0100"=>Q1<="0100";
WHEN "0101"=>Q1<="0101";
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY sel IS
PORT(QIN1,QIN2,QIN3:IN STD_LOGIC_VECTOR(3 DOWNTO 0);
CLK,RST:IN STD_LOGIC;
QOUT:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
二、
本设计名称为电子密码锁,用四个模块,分别为输入模块、控制模块、扫描器模块、显示模块,来控制密码的输入、验证与显示。
设计所要实现的功能为:
1 数码输入:手动输入3组四位二进制密码。
2 数码验证:开锁时输入密码后,拨动 RT键使其为高电平,而CHANGE为低电平检测,密码正确时开锁,输出clockopen灯(绿灯)亮,表示开锁成功。
END ENTITY DECODER24A;
ARCHITECTURE ART OF DECODER24A IS
BEGIN
PROCESS(A)IS
BEGIN
CASE A IS
WHEN "00"=>B<="0001";
WHEN "01"=>B<="0010";
WHEN "10"=>B<="0100";
WHEN OTHERS=>B<="1111";
作为电子密码锁的输入电路,可选用的方案有拨码与按键来控制输入和触摸式键盘输入等多种。拨码与按键和触摸式4*4键盘相比简单方便而且成本低,构成的电路简单,本设计中采用拨码与按键来作为该设计的输入设备。
数字电子密码锁的显示信息电路可采用LED数码显示管和液晶屏显示两种。液晶显示具有高速显示、可靠性高、易于扩展和升级的特点,但是普通的液晶存在亮度低、对复杂环境适应能力差的特点,但是在本设计中任然使用LED数码管。
END ENTITY CONTROL;
ARCHITECTURE ART OF CONTROL IS
SIGNAL ENABLE,ENABLE1:STD_LOGIC;
SIGNAL DA,DB,DC:STD_LOGIC_VECTOR(3DOWNTO 0);
BEGIN
ENABLE<=CHANGE AND(NOT RT);
WHEN "0011"=>Q3<="0011";
WHEN "0100"=>Q3<="0100";
WHEN "0101"=>Q3<="0101";
WHEN "0110"=>Q3<="0110";
WHEN "0111"=>Q3<="0111";
WHEN "1000"=>Q3<="1000";
WHEN "1001"=>Q3<="1001";
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY DECODER24A IS
PORT(A:IN STD_LOGIC_VECTOR(1 DOWNTO 0);
B:OUT STD_LOGIC_VECTOR(3 DOWNTO 0));
3 错误显示:当密码输入错误时,clockcolse灯(红灯)亮,表示开锁失败。
4 更改密码:当改变密码时,按下CHANGE键使其为高电平,而RT为低电平时,可改变密码。
5 密码清除:按下RST可清除前面的输入值,清除为“000”。
三、
1)设计方案:
电子密码锁,主要由三部分组成:密码输入电路、密码锁控制电路和密码锁显示电路。
3)其程序如下:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY CONTROL IS
PORT(NB:IN STD_LOGIC_VECTOR(3 DOWNTO 0);
NS:IN STD_LOGIC_VECTOR(3 DOWNTO 0);
NG:IN STD_LOGIC_VECTOR(3 DOWNTO 0);
"0110000"WHEN num ="0001"ELSE
"1101101"WHEN num ="0010"ELSE
"1111001"WHEN num ="0011"ELSE
"0110011"WHEN num ="0100"ELSE
"1011011"WHEN num ="0101"ELSE
CLK:IN STD_LOGIC;
CHANGE,RT: IN STD_LOGIC;
SB:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
SS:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
SG:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
LOCKOPEN,LOCKCLOSE:OUT STD_LOGIC);
Q1,Q2,Q3:OUT STD_LOGIC_VECTOR(3 DOWNTO 0));
END SR;
ARCHITECTURE BEHAVE OF SR IS
SIGNAL TEMP:STD_LOGIC;
BEGIN
PROCESS(PUL1,PUL2,PUL3)
BEGIN
-- IF M'EVENT AND M='1' THEN
WHEN "1000"=>Q2<="1000";
WHEN "1001"=>Q2<="1001";
WHEN OTHERS=>Q2<="0000";
END CASE;
E PUL3 IS
WHEN "0000"=>Q3<="0000";
WHEN "0001"=>Q3<="0001";
WHEN "0010"=>Q3<="0010";
ENABLE1<=RT AND(NOT CHANGE);
PROCESS(CLK,NB,NS,NG) IS
BEGIN
IF CLK'EVENT AND CLK='1' THEN
IF ENABLE='1' THEN
DA<=NB;
DB<=NS;
DC<=NG;
LOCKOPEN<='0';
LOCKCLOSE<='1';
三位密码锁2013010303电子密码锁系统总体框图功能模块41输入模块1功能介绍输入3组四位二进制密码代表3为密码每一组的取值从000010012输入模块与实物图当按下rst键清除密码清除为000此时如图输入密码eda课程设计蔡官耀000rt为高电平change为低电平检测密码密码正确此时锁打开绿灯亮
sel:OUT STD_LOGIC_VECTOR(1 DOWNTO 0));
END sel;
ARCHITECTURE ART OF sel IS
BEGIN
PROCESS(CLK,RST)
VARIABLE CNT:INTEGER RANGE 0 TO 2;
BEGIN
IF (RST='0') THEN
CNT:=0;
elsif ENABLE1='1' THEN
IF ( DA=NB AND DB=NS AND DC=NG)THEN
LOCKOPEN<='1';
LOCKCLOSE<='0';
ELSE
LOCKOPEN<='0';
LOCKCLOSE<='1';
END IF;
END IF;
END IF;
--END IF;
SS<=NS;
END CASE;
END PROCESS;
END ARCHITECTURE ART;
4.5
1)功能介绍
将密码用BCD七段数码管显示
2)显示模块如下图:
3)程序如下:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
根据以上选定的输入设备与与显示器件,并考虑到现实各项密码锁功能的具体要求,与系统的设计要求,系统设计采用自顶向下的设计方案。整个密码锁系统的总体总体框图如下图。
电子密码锁系统总体框图
四、
4.1
1)功能介绍
输入3组四位二进制密码,代表3为密码,每一组的取值从0000到1001
2)输入模块与实物图
当按下rst键清除密码,清除为“000”此时如图输入密码“000”rt为高电平,change为低电平检测密码,密码正确,此时锁打开,绿灯亮。
SG<=NG;
SB<=NB;
END PROCESS;
END ARCHITECTURE ART;
4.3
其功能是从控制部分的3个输出中选择出一组四位二进制送往译码器,同时把扫描信号SEL送往二四译码器
1)控制模块:
2)其程序如下:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_ARITH.ALL;
2)控制模块
当change为高电平且rt为低电平时开始输入密码,改变密码的值,如下图开始密码改为“311”,当rt为高电平,change为低电平时开始检测密码,绿灯亮,表示密码更改成功,新密码为“311”。
而后随意改变密码的输入值如图“000”,拨动rt高电平,change为低电平检测密码,密码不正确,开锁失败,红灯亮。
WHEN "0001"=>Q2<="0001";
WHEN "0010"=>Q2<="0010";
WHEN "0011"=>Q2<="0011";
WHEN "0100"=>Q2<="0100";
WHEN "0101"=>Q2<="0101";
WHEN "0110"=>Q2<="0110";
WHEN "0111"=>Q2<="0111";
而后随意改变密码输入值如“222” rt为高电平,change为低电平检测密码,密码不正确,开锁失败,红灯亮。
3)程序输入
程序如下:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY SR IS
PORT (PUL1,PUL2,PUL3:IN STD_LOGIC_VECTOR(3 DOWNTO 0);
ENTITY SEG7 IS
PORT(num:IN STD_LOGIC_VECTOR(3 DOWNTO 0);
LED:OUT STD_LOGIC_VECTOR(6 DOWNTO 0));
END SEG7;
ARCHITECTURE ACT OF SEG7 IS
BEGIN
LED<="1111110"WHEN num="0000"ELSE
WHEN "0110"=>Q1<="0110";
WHEN "0111"=>Q1<="0111";
WHEN "1000"=>Q1<="1000";
WHEN "1001"=>Q1<="1001";
WHEN OTHERS=>Q1<="0000";
END CASE;
CASE PUL2 IS
WHEN "0000"=>Q2<="0000";
WHEN OTHERS=>Q3<="0000";
END CASE;
-- TEMP<='1';
--ELSE TEMP<='0';
--END IF;
--END IF;