EDA数字密码锁的设计
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第四章整体组装
4.1密码锁整体原理图
VHDL源程序:
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
use ieee.std_logic_unsigned.all;
entity exp19 is
port( Clk : in std_logic;--时钟信号
when "0010"=>q<="1011011";q1<="0010";
when "0011"=>q<="1001111";q1<="0011";
when others=>NULL;
end case;
end if;
end process;
end rt1;
3.3.2密码锁控制模块仿真图:
3.4密码显示电路的设计
process(Clk2Hz)
begin
if(Clk2Hz'event and Clk2Hz='1')
then
Clk1Hz<=not Clk1Hz;
if(Clk'event and Clk='1')
then
if(Clk_Count1<10)
then
Clk_Count1<=Clk_Count1+1;
else
Clk_Count1<="0001";
end if;
end if;
end process;
Clk1KHz<=Clk_Count1(2);
process(Clk1KHz)
3.4.1密码锁显示电路设计简介
七段数码管是电子开发过程中常用的输出显示设备。在本设计中使用的是8个四位一体、共阴极型七段数码管。由于七段数码管公共端连接到GND(共阴极型)当数码管的中的一个段被输入高电平,则相应的这一段被点亮。反之则不亮。共阳极性的数码管与之相反。四位一体的七段数码管在单个静态数码管的基础上加入了用于选择哪一位数码管的位选信号端口。八个数码管的a、b、c、d、e、f、g、h、dp都连在了一起,8个数码管分别由各自的位选信号来控制,被选通的数码管显示数据,其余关闭。在键盘获取到行值和列值以后,组合成一个8位的数据,根据实现不同的编码在对每个按键进行匹配,找到键值后由7段码管显示即可。
Rst : in std_logic;--复位信号
Kr : in std_logic_vector(3 downto 0);--键盘行
Kc : buffer std_logic_vector(3 downto 0);--键盘列
SPK : out std_logic;--扬声器输出
KEY_State : out std_logic;--按键指示
3.4.2显示电路的VHDL程序如下:
library ieee;
use ieee.std_logic_1164.all;
entity led_disp is
port(
datain:in std_logic_vector(3 downto 0);
dataout:out std_logic_vector(7 downto 0)
第一章概要
1.1背景简介
1.2设计要求:
第二章设计思路
2.1端口定义
2.2总体结构
2.3设计方案
第三章单元电路设计
3.1简述
3.2密码锁输入电路的设计
3.3密码控制电路的设计
3.3.1VHDL源程序
3.3.2仿真波形
3.4密码显示电路的设计
3.4.1密码锁显示电路设计简介
3.4.2VHDL程序
第四章整体组装
);
end led_disp;
architecture rtl of led_disp is
begin
process(datain)
begin
case datain is
when "1010"=>dataout<="11000000";--0
when "0001"=>dataout<="11111001";--1
(1)密码输入:每按下一个键,要求在数码管上显示,并依次左移。
(2)密码校验:如果有按键按下,LED1亮起,直到松开该按键;用LED2指示门的状态,也就是密码校验结果,如果密码校验正确,LED2亮起,否则如果密码校验错误LED2闪烁4次,然后熄灭,表明密码错误。
(3)错误报警:密码输入连续三次错误开始报警。
第二章设计思路
2.1端口定义:
输入:采样时钟clk;译码输入data[3..0];
输出:七段数码管驱动q[6..0];数值译码q1[3..0].按键指示key.
2.2总体结构:
(1)显示器
(2) VHDL程序输入
(3) FPGA芯片扬声器
2.3设计方案
密码锁控制器是硬件测试密码锁控制器是硬件与软件的结合。根据设计要求,决定以FPGA芯片和VHDL语言设计此电子密码锁。用一片FPGA芯片实现,从而大大简化了系统结构,降低了成本,提高了系统的保密性和可靠性。这种设计不仅简化了系统结构,降低了成本,更提高了系统的可靠性和保密性。另外,采用可编程逻辑器件开发的数字系统,方便地升级和改进。
signal Disp_Temp : integer range 0 to 15;
signal Disp_Decode : std_logic_vector(7 downto 0);
signal SEC1,SEC10 : integer range 0 to 9;
signal Clk_Count1 : std_logic_vector(3 downto 0);--1KHz时钟分频计数器
(4)密码修改:输入密码正确后5秒内按*号键输入要设置和更改的密码,按#号键确认密码设置与更改,连续输入两次,则密码设置成功。
3.2 密码锁输入电路的设计
密码锁输入模块由时序产生电路、键盘扫描电路、键盘译码电路和按键存储电路组成。通过这几个部分的组成可以将键盘输入的信号有时序的扫描存储而后传入控制模块来控制密码锁的动作。因此,定义键盘按键的位置和数码的关系如下表所示:
when "0111"=>dataout<="11111000";--7
when "1000"=>dataout<="10000000";--8
when "1001"=>dataout<="10010000";--9
when others=>null;
end case;
end process;
end rtl;
when "0010"=>dataout<="10100100";--2
when "0011"=>dataout<="10110000";--3
when "0100"=>dataout<="10011001";--4
when "0101"=>dataout<="10010010";--5
when "0110"=>dataout<="10000010";--6
1.2设计要求
(1).具有密码输入功能;
(2).设计一个密码锁的控制电路,当输入正确代码时,输出开锁信号以推动执行机构工作,用红灯亮、绿灯熄灭表示关锁,用绿灯亮、红灯熄灭表示开锁;
(3).从第一个按钮触动后的5秒内若未将锁打开,则电路自动复位并进入自锁状态,使之无法再打开,并由扬声器发出持续20秒的报警信号。
signal Clk_Count2 : std_logic_vector(9 downto 0);--2Hz时钟分频计数器
signal Clk1KHz : std_logic;
signal Clk2Hz : std_logic;
signal Clk1Hz : std_logic;
signal Error_Num : integer range 0 to 3;
扫描
00
00
00
01
01wk.baidu.com
01
10
10
10
11
11
11
输出信号
0011
0101
0110
0011
0101
0110
0011
0101
0110
0011
0101
0110
按键号
1
2
3
4
5
6
7
8
9
*
0
#
备注:扫描位置是CSR[1.0],键盘输出信号SEL[3.2.1.0],按键号即为键盘的位置
密码锁输入电路仿真图如下:
begin
if(Clk1KHz'event and Clk1KHz='1')
then
if(Clk_Count2<1000)
then
Clk_Count2<=Clk_Count2+1;
else
Clk_Count2<="0000000001";
end if;
end if;
end process;
Clk2Hz<=Clk_Count2(9);
signal Error_Flag : std_logic;
signal Error_Count : std_logic_vector(2 downto 0);
signal Music_Count : std_logic_vector(2 downto 0);
begin
process(Clk)
begin
3.3密码锁控制器设计
密码锁控制电路软键盘的实现,通常在一个键盘中使用了一个瞬时接触开关,微处理器可以容易地检测到闭合。当开关打开时,通过处理器的I/O口的一个上拉电阻提供逻辑1;当开关闭合时,处理器的I/O口的输入将被拉低得到逻辑0。
3.3.1VHDL源程序
library ieee;
use ieee.std_logic_1164.all;
Display : out std_logic_vector(7 downto 0);--七段码管显示
SEG_SEL : buffer std_logic_vector(2 downto 0));--七段码管片选
end exp19;
architecturebehave of exp19 is
signal keyr,keyc : std_logic_vector(3 downto 0);
4.1VHDL源程序或原理图
4.2整体仿真波形
第五章设计体会
第一章概要
1.1背景简介:
数字密码锁随着电子工业的发展,数字电子技术已经深入到了人们生活的各个层面,而且各种各样的电子产品也正在日新月异地向着高精尖技术发展。由于电子产品的功能不断增加,使用也越来越方便,有些产品已经成为了人们日常生活中不可缺少的必备物品。发展历史悠久的机械式门锁,因其功能单一,安全性能较差等缺点,必将被新一代的电子门锁所代替。新颖的多功能电子门锁,集电子门锁、防盗报警器,门铃等功能于一身,而且还具有定时器呼唤,断电自动报知,显示屋内有无人和自动留言等诸多附加功能。在未来的生活中,数字密码锁必将在学领域再创新的成绩,将给我们的生活带来更大的便利,前景不可估量。
根据系统的设计要求,系统设计采用自顶向下的设计方法。顶层设计采用原理图的设计方式和系统的整体组装,分别由密码锁输入模块、密码锁控制模块和密码锁显示译码模块等部分组成。即按照这三个组成模块定义相应的芯片引脚和输入输出的参数。
第三章单元电路设计
3.1简述:密码锁的内部结构及主要功能
密码锁的内部结构即密码锁控制器由密码锁主体部分和外部指示电路组成。其中密码锁主要作用是接收输入的密码并进行密码的验证操作;外部指示电路的主要作用是用LED数码管显示输入的密码以及根据密码验证的结果给出不同的LED指示灯和数码管显示;当连续输入三次次错误密码时,启动报警装置,报警装置则采用扬声器。密码锁控制器的主要功能有:
entity decoder is
port(clk: in std_logic; --译码器元件声明
data: in std_logic_vector(3 downto 0);
q: out std_logic_vector(6 downto 0);
q1: out std_logic_vector(3 downto 0) );
end decoder;
architecture rt1 of decoder is
begin
process(clk,data)
begin
if rising_edge(clk)
then
case data is
when "0000"=>q<="0111111";q1<="0000";
when "0001"=>q<="0000110";q1<="0001";
signal kcount : std_logic_vector(2 downto 0);
signal kflag1,kflag2 : std_logic;
signal buff1,buff2,buff3,buff4,buff5,buff6 : integer range 0 to 15;
signal push_num : integer range 0 to 15; --按键次数
4.1密码锁整体原理图
VHDL源程序:
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
use ieee.std_logic_unsigned.all;
entity exp19 is
port( Clk : in std_logic;--时钟信号
when "0010"=>q<="1011011";q1<="0010";
when "0011"=>q<="1001111";q1<="0011";
when others=>NULL;
end case;
end if;
end process;
end rt1;
3.3.2密码锁控制模块仿真图:
3.4密码显示电路的设计
process(Clk2Hz)
begin
if(Clk2Hz'event and Clk2Hz='1')
then
Clk1Hz<=not Clk1Hz;
if(Clk'event and Clk='1')
then
if(Clk_Count1<10)
then
Clk_Count1<=Clk_Count1+1;
else
Clk_Count1<="0001";
end if;
end if;
end process;
Clk1KHz<=Clk_Count1(2);
process(Clk1KHz)
3.4.1密码锁显示电路设计简介
七段数码管是电子开发过程中常用的输出显示设备。在本设计中使用的是8个四位一体、共阴极型七段数码管。由于七段数码管公共端连接到GND(共阴极型)当数码管的中的一个段被输入高电平,则相应的这一段被点亮。反之则不亮。共阳极性的数码管与之相反。四位一体的七段数码管在单个静态数码管的基础上加入了用于选择哪一位数码管的位选信号端口。八个数码管的a、b、c、d、e、f、g、h、dp都连在了一起,8个数码管分别由各自的位选信号来控制,被选通的数码管显示数据,其余关闭。在键盘获取到行值和列值以后,组合成一个8位的数据,根据实现不同的编码在对每个按键进行匹配,找到键值后由7段码管显示即可。
Rst : in std_logic;--复位信号
Kr : in std_logic_vector(3 downto 0);--键盘行
Kc : buffer std_logic_vector(3 downto 0);--键盘列
SPK : out std_logic;--扬声器输出
KEY_State : out std_logic;--按键指示
3.4.2显示电路的VHDL程序如下:
library ieee;
use ieee.std_logic_1164.all;
entity led_disp is
port(
datain:in std_logic_vector(3 downto 0);
dataout:out std_logic_vector(7 downto 0)
第一章概要
1.1背景简介
1.2设计要求:
第二章设计思路
2.1端口定义
2.2总体结构
2.3设计方案
第三章单元电路设计
3.1简述
3.2密码锁输入电路的设计
3.3密码控制电路的设计
3.3.1VHDL源程序
3.3.2仿真波形
3.4密码显示电路的设计
3.4.1密码锁显示电路设计简介
3.4.2VHDL程序
第四章整体组装
);
end led_disp;
architecture rtl of led_disp is
begin
process(datain)
begin
case datain is
when "1010"=>dataout<="11000000";--0
when "0001"=>dataout<="11111001";--1
(1)密码输入:每按下一个键,要求在数码管上显示,并依次左移。
(2)密码校验:如果有按键按下,LED1亮起,直到松开该按键;用LED2指示门的状态,也就是密码校验结果,如果密码校验正确,LED2亮起,否则如果密码校验错误LED2闪烁4次,然后熄灭,表明密码错误。
(3)错误报警:密码输入连续三次错误开始报警。
第二章设计思路
2.1端口定义:
输入:采样时钟clk;译码输入data[3..0];
输出:七段数码管驱动q[6..0];数值译码q1[3..0].按键指示key.
2.2总体结构:
(1)显示器
(2) VHDL程序输入
(3) FPGA芯片扬声器
2.3设计方案
密码锁控制器是硬件测试密码锁控制器是硬件与软件的结合。根据设计要求,决定以FPGA芯片和VHDL语言设计此电子密码锁。用一片FPGA芯片实现,从而大大简化了系统结构,降低了成本,提高了系统的保密性和可靠性。这种设计不仅简化了系统结构,降低了成本,更提高了系统的可靠性和保密性。另外,采用可编程逻辑器件开发的数字系统,方便地升级和改进。
signal Disp_Temp : integer range 0 to 15;
signal Disp_Decode : std_logic_vector(7 downto 0);
signal SEC1,SEC10 : integer range 0 to 9;
signal Clk_Count1 : std_logic_vector(3 downto 0);--1KHz时钟分频计数器
(4)密码修改:输入密码正确后5秒内按*号键输入要设置和更改的密码,按#号键确认密码设置与更改,连续输入两次,则密码设置成功。
3.2 密码锁输入电路的设计
密码锁输入模块由时序产生电路、键盘扫描电路、键盘译码电路和按键存储电路组成。通过这几个部分的组成可以将键盘输入的信号有时序的扫描存储而后传入控制模块来控制密码锁的动作。因此,定义键盘按键的位置和数码的关系如下表所示:
when "0111"=>dataout<="11111000";--7
when "1000"=>dataout<="10000000";--8
when "1001"=>dataout<="10010000";--9
when others=>null;
end case;
end process;
end rtl;
when "0010"=>dataout<="10100100";--2
when "0011"=>dataout<="10110000";--3
when "0100"=>dataout<="10011001";--4
when "0101"=>dataout<="10010010";--5
when "0110"=>dataout<="10000010";--6
1.2设计要求
(1).具有密码输入功能;
(2).设计一个密码锁的控制电路,当输入正确代码时,输出开锁信号以推动执行机构工作,用红灯亮、绿灯熄灭表示关锁,用绿灯亮、红灯熄灭表示开锁;
(3).从第一个按钮触动后的5秒内若未将锁打开,则电路自动复位并进入自锁状态,使之无法再打开,并由扬声器发出持续20秒的报警信号。
signal Clk_Count2 : std_logic_vector(9 downto 0);--2Hz时钟分频计数器
signal Clk1KHz : std_logic;
signal Clk2Hz : std_logic;
signal Clk1Hz : std_logic;
signal Error_Num : integer range 0 to 3;
扫描
00
00
00
01
01wk.baidu.com
01
10
10
10
11
11
11
输出信号
0011
0101
0110
0011
0101
0110
0011
0101
0110
0011
0101
0110
按键号
1
2
3
4
5
6
7
8
9
*
0
#
备注:扫描位置是CSR[1.0],键盘输出信号SEL[3.2.1.0],按键号即为键盘的位置
密码锁输入电路仿真图如下:
begin
if(Clk1KHz'event and Clk1KHz='1')
then
if(Clk_Count2<1000)
then
Clk_Count2<=Clk_Count2+1;
else
Clk_Count2<="0000000001";
end if;
end if;
end process;
Clk2Hz<=Clk_Count2(9);
signal Error_Flag : std_logic;
signal Error_Count : std_logic_vector(2 downto 0);
signal Music_Count : std_logic_vector(2 downto 0);
begin
process(Clk)
begin
3.3密码锁控制器设计
密码锁控制电路软键盘的实现,通常在一个键盘中使用了一个瞬时接触开关,微处理器可以容易地检测到闭合。当开关打开时,通过处理器的I/O口的一个上拉电阻提供逻辑1;当开关闭合时,处理器的I/O口的输入将被拉低得到逻辑0。
3.3.1VHDL源程序
library ieee;
use ieee.std_logic_1164.all;
Display : out std_logic_vector(7 downto 0);--七段码管显示
SEG_SEL : buffer std_logic_vector(2 downto 0));--七段码管片选
end exp19;
architecturebehave of exp19 is
signal keyr,keyc : std_logic_vector(3 downto 0);
4.1VHDL源程序或原理图
4.2整体仿真波形
第五章设计体会
第一章概要
1.1背景简介:
数字密码锁随着电子工业的发展,数字电子技术已经深入到了人们生活的各个层面,而且各种各样的电子产品也正在日新月异地向着高精尖技术发展。由于电子产品的功能不断增加,使用也越来越方便,有些产品已经成为了人们日常生活中不可缺少的必备物品。发展历史悠久的机械式门锁,因其功能单一,安全性能较差等缺点,必将被新一代的电子门锁所代替。新颖的多功能电子门锁,集电子门锁、防盗报警器,门铃等功能于一身,而且还具有定时器呼唤,断电自动报知,显示屋内有无人和自动留言等诸多附加功能。在未来的生活中,数字密码锁必将在学领域再创新的成绩,将给我们的生活带来更大的便利,前景不可估量。
根据系统的设计要求,系统设计采用自顶向下的设计方法。顶层设计采用原理图的设计方式和系统的整体组装,分别由密码锁输入模块、密码锁控制模块和密码锁显示译码模块等部分组成。即按照这三个组成模块定义相应的芯片引脚和输入输出的参数。
第三章单元电路设计
3.1简述:密码锁的内部结构及主要功能
密码锁的内部结构即密码锁控制器由密码锁主体部分和外部指示电路组成。其中密码锁主要作用是接收输入的密码并进行密码的验证操作;外部指示电路的主要作用是用LED数码管显示输入的密码以及根据密码验证的结果给出不同的LED指示灯和数码管显示;当连续输入三次次错误密码时,启动报警装置,报警装置则采用扬声器。密码锁控制器的主要功能有:
entity decoder is
port(clk: in std_logic; --译码器元件声明
data: in std_logic_vector(3 downto 0);
q: out std_logic_vector(6 downto 0);
q1: out std_logic_vector(3 downto 0) );
end decoder;
architecture rt1 of decoder is
begin
process(clk,data)
begin
if rising_edge(clk)
then
case data is
when "0000"=>q<="0111111";q1<="0000";
when "0001"=>q<="0000110";q1<="0001";
signal kcount : std_logic_vector(2 downto 0);
signal kflag1,kflag2 : std_logic;
signal buff1,buff2,buff3,buff4,buff5,buff6 : integer range 0 to 15;
signal push_num : integer range 0 to 15; --按键次数