2个回答
展开全部
一、系统功能概述
数字密码锁实现:1、了不需要带钥匙,只要记住开锁密码即可开锁的功能。2、在输入密码正确后,还可以修改密码。3、在输入密码的过程中,不显示密码,只显示无规律的提示某位密码是否输入完毕,防止了密码的泄漏,大大加强了密码锁的保密性。
本演示系统实现了:1、输入密码正确后,正确小灯(led)亮,错误小灯(led1)不亮;2、正确修改密码后,正确小灯(led)不亮,错误小灯(led1)不亮;3、输入错误密码,正确小灯(led)不亮,错误小灯(led1)亮,并有1KHz闹铃声产生;4、按下reset后,密码归为初始密码。
开锁代码为8位二进制数,当输入代码的位数和位值与锁内给定的密码一致,且按规定程序开锁时,方可开锁,并点亮开锁指示灯D3。否则系统进入“错误”状态,并发出报警信号。
开锁程序由设计者确定,并锁内给定的密码是可调的,且预置方便,保密性好。
串行数字锁的报警方式是点亮指示灯D6,并使喇叭鸣叫来报警,报警动作直到按下复位开关,报警才停止。此时,数字锁自动进入等待下一次开锁的状态。
源代码
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity code is
port( clk: in std_logic;--电路工作时的时钟信号
clk1: in std_logic;--闹铃产生需要的时钟信号
k: in std_logic;--高电平表示输入1
led: out std_logic;--输入正确时亮
led1: out std_logic;--输入错误时亮
reset: in std_logic;-- 按下时复位
want: in std_logic;--是否修改密码
alarm: out std_logic;--输出闹铃声
show: out std_logic_vector(3 downto 0));--提示作用
end;
architecture a of code is
signal temp: std_logic_vector(3 downto 0);--输入一位加1
signal code: std_logic_vector(7 downto 0);--储存密码
signal getcode: std_logic_vector(7 downto 0);--储存修改后的密码
signal counter: std_logic_vector(3 downto 0);--计数
signal allow: std_logic;--是否允许修改密码
signal ring:std_logic;--是否接通闹铃
begin
process(clk)
begin
if ring='1' then
alarm<=clk1;--闹铃接通
else
alarm<='0';--闹铃截至
end if;
if reset='1' then--按下reset后,密码归为初始密码
getcode<="00000000";--初始密码
counter<="0000";--内部计数
code<="11001000";--密码
led<='0';
led1<='0';
allow<='0';
elsif clk'event and clk='1' then--输入clk脉冲,则接收1位密码
getcode<=getcode(6 downto 0)&k;--将这1位密码并入getcode中的最后一位
if counter="1000" then--输入为8位数码时比较
if code=getcode then
led<='1';--正确灯亮
led1<='0';
ring<='0';
allow<='1';--允许修改密码
elsif allow='1' and want='1' then--如果允许输入且想输入
code<=getcode;--输入新密码
led<='0';
led1<='0';
else
allow<='0';
led<='0';
led1<='1';--错误灯亮
ring<='1';--闹铃响
end if;
counter<="0000";--重新计数
else
counter<=counter+1; --累加
temp<=temp+1;--为防止泄露密码,特别设置
end if;
end if;
show <= temp;
end process;
end;
数字密码锁实现:1、了不需要带钥匙,只要记住开锁密码即可开锁的功能。2、在输入密码正确后,还可以修改密码。3、在输入密码的过程中,不显示密码,只显示无规律的提示某位密码是否输入完毕,防止了密码的泄漏,大大加强了密码锁的保密性。
本演示系统实现了:1、输入密码正确后,正确小灯(led)亮,错误小灯(led1)不亮;2、正确修改密码后,正确小灯(led)不亮,错误小灯(led1)不亮;3、输入错误密码,正确小灯(led)不亮,错误小灯(led1)亮,并有1KHz闹铃声产生;4、按下reset后,密码归为初始密码。
开锁代码为8位二进制数,当输入代码的位数和位值与锁内给定的密码一致,且按规定程序开锁时,方可开锁,并点亮开锁指示灯D3。否则系统进入“错误”状态,并发出报警信号。
开锁程序由设计者确定,并锁内给定的密码是可调的,且预置方便,保密性好。
串行数字锁的报警方式是点亮指示灯D6,并使喇叭鸣叫来报警,报警动作直到按下复位开关,报警才停止。此时,数字锁自动进入等待下一次开锁的状态。
源代码
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity code is
port( clk: in std_logic;--电路工作时的时钟信号
clk1: in std_logic;--闹铃产生需要的时钟信号
k: in std_logic;--高电平表示输入1
led: out std_logic;--输入正确时亮
led1: out std_logic;--输入错误时亮
reset: in std_logic;-- 按下时复位
want: in std_logic;--是否修改密码
alarm: out std_logic;--输出闹铃声
show: out std_logic_vector(3 downto 0));--提示作用
end;
architecture a of code is
signal temp: std_logic_vector(3 downto 0);--输入一位加1
signal code: std_logic_vector(7 downto 0);--储存密码
signal getcode: std_logic_vector(7 downto 0);--储存修改后的密码
signal counter: std_logic_vector(3 downto 0);--计数
signal allow: std_logic;--是否允许修改密码
signal ring:std_logic;--是否接通闹铃
begin
process(clk)
begin
if ring='1' then
alarm<=clk1;--闹铃接通
else
alarm<='0';--闹铃截至
end if;
if reset='1' then--按下reset后,密码归为初始密码
getcode<="00000000";--初始密码
counter<="0000";--内部计数
code<="11001000";--密码
led<='0';
led1<='0';
allow<='0';
elsif clk'event and clk='1' then--输入clk脉冲,则接收1位密码
getcode<=getcode(6 downto 0)&k;--将这1位密码并入getcode中的最后一位
if counter="1000" then--输入为8位数码时比较
if code=getcode then
led<='1';--正确灯亮
led1<='0';
ring<='0';
allow<='1';--允许修改密码
elsif allow='1' and want='1' then--如果允许输入且想输入
code<=getcode;--输入新密码
led<='0';
led1<='0';
else
allow<='0';
led<='0';
led1<='1';--错误灯亮
ring<='1';--闹铃响
end if;
counter<="0000";--重新计数
else
counter<=counter+1; --累加
temp<=temp+1;--为防止泄露密码,特别设置
end if;
end if;
show <= temp;
end process;
end;
上海矽旭微电子
2024-04-10 广告
2024-04-10 广告
IC后端设计培训是提升设计师技能的关键环节。我们提供全面的培训课程,涵盖布局、布线、封装测试等方面,帮助设计师掌握先进的设计工具和流程。通过实际案例分析,加强理论与实践的结合,让设计师能够快速应对复杂的设计挑战。此外,我们还注重团队合作与沟...
点击进入详情页
本回答由上海矽旭微电子提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询