基于VHDL的电子密码锁
更新时间:2023-09-11 00:29:01 阅读量: 教育文库 文档下载
程硕
《基于VHDL的电子密码锁设计》
1 / 14
华南师范大学 课程设计实验报告
课程名称: 课程设计题目: 姓 名: 学院: 专 业: 年 级: 学 号:
可编程数字系统设计
电子密码锁
程硕
物理与电信工程学院
理综一班 2011 20112600104
程硕 《基于VHDL的电子密码锁设计》
2 / 14
一、设计原理
用VHDL设计电子密码锁方案:作为通用电子密码锁,主要由 3 个部分组成:数字密码按键输入电路、密码锁控制电路和密码锁显示电路,作为电子密码锁的输入电路。可供选择的方案有数字机械式键盘和触摸式数字键盘等多种。 (1)密码锁输入电路包括时序产生电路、键盘检测电路、键盘消抖电路等几个小的功能电路。
(2)密码锁控制电路包括按键数据存储电路,恢复出厂密码、两次正确输入后可修改密码、密码核对,多次错误报警,清屏等几个小的功能电路。
(3)八段数码管显示电路主要将待显示数据的BCD码转换成数码器的八段显示驱动编码。
二、系统分析
本次课程设计成功地设计了一个简单的数字电子密码锁,密码为 4 位。将电子密码锁分为以下几个模块:按键消抖模块、密码锁逻辑控制模块和密码锁显示模块,实现了以下功能:
(1)密码输入:KEY1按下一次,数码管上显示数字加一,相应位置输入密码加一 (2)位置选择:KEY2按下一次,数码管选择位左移一位
(3)密码确认:KEY3按下一次,比较外部输入密码与原密码,正确LED长亮,错
误LED变暗,同时显示密码置0;
(4)密码修改:正确输入两次密码后,按下KEY4一次,将当前输入设为新的密码; (5)清屏:KEY5按下一次,外部输入置0;
(6)恢复出厂设置:连续按下KEY5三次后恢复出厂密码“1234”;
程硕 《基于VHDL的电子密码锁设计》
3 / 14
三、程序设计
1
由于程序稍显庞大,故采取分层次设计的方法,顶层采用画图法设计,底层采用VHDL语言进行设计。顶层电路图如图1所示
图1
Xiao_dou模块为按键消抖模块,main为密码锁控制模块,yima为数码管显示译码模块。Set_shuma端口为数码管段选端口,用于选择数码管。Led端口为led灯端口,key1,key2,key3,key4,key5为五个按键接口,show_shuma端口为数码管位选选择端口。
2 底层设计
a) 由于按键为机械按键,故按下一次会产生多次脉冲,当产生第一次下降沿的时候延
时一段时间后,再继续检测是否有下降沿产生。主体程序如下:
b) 数码管译码显示进程:将0至9的4位矢量型数字转化为相应8位数码管显示数字
程硕 《基于VHDL的电子密码锁设计》
4 / 14
c) 电子密码锁控制电路:
i. 数码管位置选择进程:当数码管位置选择时钟到来时,数码管显示位左移一位,
利用人眼的视觉余辉效果,产生4位数码管同时点亮的效果。
ii.
数码管位置选择时钟信号发生进程:将系统时钟分频,产生500HZ占空比为1:1的方波,用于控制数码管位置选择。
iii.
整型密码转化为矢量型密码,位选选择进程:利用CASE语句将不同位置的密码值显示在相应的数码管上。
iv.
外部输入密码变更进程:当KEY1按下时外部输入密码加1,并在数码管上显
程硕 《基于VHDL的电子密码锁设计》
5 / 14
示出来,数字从1至9循环;后半部分为当清屏信号到来时,外部输入密码置0。
v.
按键位置选择进程:KEY2按下时数码管位置选择端左移一位,后半部分为当清屏信号到来时,位置置0。
vi.
密码设置,重置进程:当密码连续正确两次后,按下KEY4键,将现在显示的密码置为新密码。后半部分为恢复出厂设置密码。
vii.
清屏,恢复出厂设置进程:当KEY5按下时产生清屏信号,当KEY5连续按下三
程硕 《基于VHDL的电子密码锁设计》
6 / 14
次后产生恢复出厂设置信号。后半部分为清屏与恢复出厂设置信号的清除程序,用于清除产生的清屏与恢复出厂设置信号。
viii.
密码比较进程:比较当前输入密码与内部密码的值,如相同则LED长亮,如不同则LED暗,如连续3次输入错误密码则LED闪烁报警。
ix.
LED闪烁脉冲发生进程:用于产生LED闪烁所需方波脉冲
程硕 《基于VHDL的电子密码锁设计》
7 / 14
四、仿真/实验结果
1. 密码正确:
2. 密码错误:
3. 清屏:
五、结论或分析
各项实验结果均成功,能够很好的实现,密码比较,设置密码,清屏,恢复出厂设置等各项功能。
六、使用说明
1. 2. 3. 4. 5.
S5:KEY1按下后外部输入密码加1;
S4:KEY2按下后输入选择位置左移一位; S3:KEY3按下后比较输入密码与内部密码;
S4:KEY4连续输入两次正确密码后按下,将当前显示密码设为新密码; S5:KEY5按下一次清屏,连续按下三次后恢复出厂设置。
程硕 《基于VHDL的电子密码锁设计》
8 / 14
七、源程序
1. 控制电路源程序 library ieee;
use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; use ieee.std_logic_arith.all; entity main is
port(key1,key2,key3,key4,key5 :in std_logic; clk :in std_logic; num_shuma :out std_logic_vector(3 downto 0); set_shuma : out std_logic_vector(3 downto 0); led :out std_logic:='0'; sel :out std_logic); end entity main;
architecture lock of main is
signal temp_1,temp_led, temp_shuma,reset_all,reset_mima
,temp_reset,key1_clear,key2_clear,key3_clear,key4_clear: std_logic; signal bit_one_in :integer range 0 to 9:=1; --inside of number signal bit_two_in :integer range 0 to 9:=2; signal bit_three_in :integer range 0 to 9:=3; signal bit_four_in :integer range 0 to 9:=4;
signal show_shuma_location:std_logic_vector(1 downto 0); --location of shuma
signal bit_one_out,bit_two_out,bit_three_out,bit_four_out :integer range 0 to 9; --outside of number
signal location :std_logic_vector(1 downto 0); --inside location of number signal number_led :integer range 0 to 5000000; signal number_shuma :integer range 0 to 50000; signal number_error :integer range 0 to 3; signal twice :integer range 0 to 2; signal clear_num:integer range 0 to 3; begin
show_location_set:process(temp_shuma) --the location of shuma_guan begin
if(temp_shuma'event and temp_shuma='1')then show_shuma_location<=show_shuma_location+1; end if;
end process;
show_shuma:process(clk) --the number of shuma_guan begin
程硕 《基于VHDL的电子密码锁设计》
9 / 14
case show_shuma_location is when \ num_shuma<=conv_std_logic_vector(bit_one_out,4); set_shuma<=\ when \ num_shuma<=conv_std_logic_vector(bit_two_out,4); set_shuma<=\ when \ num_shuma<=conv_std_logic_vector(bit_three_out,4); set_shuma<=\ when \ num_shuma<=conv_std_logic_vector(bit_four_out,4); set_shuma<=\ end case; if(reset_all='1')then num_shuma<=\ --xian shi zhi 0 end if;
end process;
shuma_200:process(clk) --use to delay location set begin
if(clk'event and clk='1')then if(number_shuma=50000)then number_shuma<=0; temp_shuma<=not temp_shuma; else number_shuma<=number_shuma+1; end if; end if;
end process shuma_200;
add_outside:process(clk,reset_all) --key1 add num begin
if(key1'event and key1='0')then key1_clear<='1'; case location is when \ if(bit_one_out=9)then bit_one_out<=0; end if; when \ if(bit_two_out=9)then bit_two_out<=0; end if;
程硕 《基于VHDL的电子密码锁设计》
10 / 14
when \ if(bit_three_out=9)then bit_three_out<=0; end if; when \ if(bit_four_out=9)then bit_four_out<=0; end if; end case; end if;
if(clear_num=0)then key1_clear<='0'; end if;
if(reset_all='1')then bit_one_out<=0; bit_two_out<=0; bit_three_out<=0; bit_four_out<=0; end if;
end process add_outside;
location_set:process(clk,reset_all) begin if(key2'event and key2='0')then --led<='0'; key2_clear<='1'; location<=location+1; end if; if(reset_all='1')then location<=\ end if;
if(clear_num=0)then key2_clear<='0'; end if;
end process;
set_mima:process(clk,clear_num) begin
if(twice=2)then if(key4'event and key4='0')then --led<='0'; key4_clear<='1'; bit_one_in<=bit_one_out; bit_two_in<=bit_two_out; bit_three_in<=bit_three_out; bit_four_in<=bit_four_out;
--key2 location_set
--key4 set mima
程硕 《基于VHDL的电子密码锁设计》
11 / 14
end if; end if;
if(clear_num=0)then key4_clear<='0'; end if;
if(clear_num=3)then bit_one_in<=1; bit_two_in<=2; bit_three_in<=3; bit_four_in<=4; end if;
end process;
reset:process(clk,temp_reset,key1_clear,key2_clear,key3_clear,key4_clear) --key5 clear and reset begin
if(key5'event and key5='0')then --led<='0'; reset_all<='1'; if(clear_num=3)then clear_num<=0; else clear_num<=clear_num+1; end if; end if;
if(location=\and bit_one_out=0 and bit_two_out=0 and bit_three_out=0 and bit_four_out=0)then reset_all<='0'; end if;
if(temp_reset='1')then reset_all<='1'; end if;
if(key1_clear='1' or key2_clear='1' or key3_clear='1' or key4_clear='1')then --if other key clear num clear_num<=0; end if;
end process;
compare:process(clk,reset_all) --key3 compare begin
if(key3'event and key3='0')then key3_clear<='1'; if(bit_one_in=bit_one_out and bit_two_in=bit_two_out and
程硕 《基于VHDL的电子密码锁设计》
12 / 14
bit_three_in=bit_three_out and bit_four_in=bit_four_out)then led<='1'; temp_1<='0'; temp_reset<='1'; number_error<=0; if(twice=2)then twice<=twice; else twice<=twice+1; end if; else twice<=0; if(number_error=3)then number_error<=1; temp_1<='1'; else number_error<=number_error+1; led<='0'; temp_1<='0'; end if; end if; end if;
if(clear_num=0)then key3_clear<='0'; end if;
if(location=\and bit_one_out=0 and bit_two_out=0 bit_four_out=0)then --clear tong xin temp_reset<='0'; end if;
if(temp_1='1')then led<=temp_led; end if; end process compare ;
one_second:process(clk) begin
if(clk'event and clk='1')then if(number_led=5000000)then number_led<=0; temp_led<=not temp_led; else number_led<=number_led+1;
and bit_three_out=0 and 程硕
end if; end if;
end process one_second;
end architecture lock;
《基于VHDL的电子密码锁设计》
13 / 14
2. 消抖源程序 library ieee;
use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity xiao_dou is port(clk: in std_logic; din: in std_logic; dout: out std_logic); end entity xiao_dou;
architecture a of xiao_dou is
signal num :integer range 0 to 1000000; signal temp_10,temp,temp1 :std_logic; begin
process(clk) begin
if(clk'event and clk='1')then if(din='0')then if(num=1000000) then num<=num; else num<=num+1; end if; if(num=999999)then dout<='1'; else dout<='0'; end if; else num<=0; end if; end if;
end process;
end architecture a;
3. 译码源程序 library ieee;
use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity yima is
port(yuanma:in std_logic_vector(3 downto 0); shuma: out std_logic_vector(7 downto 0));
程硕 《基于VHDL的电子密码锁设计》
14 / 14
end entity yima;
architecture a of yima is begin
process(yuanma)is begin
case yuanma is when\ when\ when\ when\ when\ when\ when\ when\ when\ when\ when others=>shuma<=\end case; end process;
end architecture a ;
正在阅读:
基于VHDL的电子密码锁09-11
初中寒假日记大全02-07
我真纠结作文700字06-19
2006年高考江苏卷英语试题及参考答案06-24
河北省教育学会学校文化研究分会召开第四届学术年会的 通知10-22
衣服评语大全02-24
名家抒情散文11-21
幼儿园老师面试自我介绍最新4篇03-22
公告书之陕西公务员公告02-28
- exercise2
- 铅锌矿详查地质设计 - 图文
- 厨余垃圾、餐厨垃圾堆肥系统设计方案
- 陈明珠开题报告
- 化工原理精选例题
- 政府形象宣传册营销案例
- 小学一至三年级语文阅读专项练习题
- 2014.民诉 期末考试 复习题
- 巅峰智业 - 做好顶层设计对建设城市的重要意义
- (三起)冀教版三年级英语上册Unit4 Lesson24练习题及答案
- 2017年实心轮胎现状及发展趋势分析(目录)
- 基于GIS的农用地定级技术研究定稿
- 2017-2022年中国医疗保健市场调查与市场前景预测报告(目录) - 图文
- 作业
- OFDM技术仿真(MATLAB代码) - 图文
- Android工程师笔试题及答案
- 生命密码联合密码
- 空间地上权若干法律问题探究
- 江苏学业水平测试《机械基础》模拟试题
- 选课走班实施方案
- 密码锁
- 基于
- 电子
- VHDL
- 南方电网三种人考试 输电判断题
- 春季预防传染病致家长一封信
- 读《稻草人》,感受人间百态四年级课外阅读教学设计
- 停车场管理系统C++课程设计
- 通信英文缩写
- 工业设计方法学(答案)
- 岳池1
- 钢轨表面长裂纹的扩展路径研究
- 语文A版 小学语文六年级下册教学计划
- 基于PWM的逆变电路分析
- 小学科学教研组教学工作总结
- 中小学写作教学研究2017年下半年
- 化工原理(管国锋主编第三版)课后习题答案8塔设备
- 小学生信息素养调查与反思-模板
- 浙江专版2019届高考物理一轮复习第7章恒定电流1第一节欧姆定律电阻定律电功率及焦耳定律课后达标能力提升新
- 往届工商专业毕业论文格式规范参考
- 柳智宇
- 2016-2021年可降解餐具行业深度调查及发展前景研究报告
- 芜湖市人民政府办公室关于印发2017年“互联网+政务服务”工作考核
- 公允价值模式在投资性房地产中应用的现状分析