课程设计模板(1)_第1页
课程设计模板(1)_第2页
课程设计模板(1)_第3页
课程设计模板(1)_第4页
课程设计模板(1)_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、可编程数字系统课程设计报告课程名称:可编程数字系统课程设计题目:电子密码锁姓 名:冼金学院:物理与电信工程学院专 业:通信工程年 级:2011学 号:20113100136一课程设计目的熟悉EDA工具,掌握用硬件描述语言VHDL进行数字系统设计的基本方法和流程,提高工程实践能力。二设计任务设计一密码锁,用VHDL语言描述,用QuartusII工具编译和综合,并在实验板上实现,撰写实验报告。数字锁即电子密码锁,锁内有预置密码,如果输入代码与锁内密码一致,锁被打开;否则,应封闭开锁电路,若多次输入错误密码,应发出报警信号。 三功能要求与技术指标本设计设计一个4 位数字锁,并验证其操作。1

2、、基本功能: (1)开锁密码为 4 位十进制数,通过按钮输入密码,输入的密码在4个数码管上显示,若与锁内预置的密码一致,输出开锁信号(以点亮一个LED灯表示开锁)。(2)按钮开关输入须消抖处理。2、扩展功能:(1) 用户可以设置锁内的密码;(2) 若输入密码三次不正确,输出报警信号,报警信号可以通过闪烁LED或某个数码管上小数点指示。(3) 设置一个复位按键,忘记密码后可通过该复位按键恢复出厂原始密码,如原始密码为“1234”。要求:1、每个同学必须完成基本功能,其中预存的密码可以固定为某个值(如“1234”)。 扩展功能为选作内容,在完成基本功能的基础上,可选择完成扩展功能部分的若

3、干项。2、实验报告主要内容包含:设计原理、系统分析、程序设计、仿真/实验结果(可附上实验板运行时的照片)、结论或分析、使用说明 等,在最后附上主要源程序。四设计原理 ledstartnumresetset1、实验板上的数码管和按钮对应操作界面如上图所示。start :当4位密码都输入了之后,再次按下Start则将用户输入的密码与内部预设的密码比较,匹配则输出开锁信号,即led点亮,按下一次,相当于确认。每按下一次num按钮,该数字加1;按钮用于切换输入的数字,为向左移位一个。 set:用于设置密码。用户需更改密码时,按下此键,进入更改密码状态,用户可以通过num按钮输入新密码,输入完毕,再次按

4、SET则确定为新密码。注意:更改密码应在已开锁了的状态下更改。reset:复位,用于忘记密码时复位为出厂密码。 设计思路:1、段选:首先要做一个计数器(0计到9),在按键按下的情况下计数加一,并且通过七段数码管显示当前的数字;2、位选:也是先做一个计数器w(0到3),按键按下时计数加一,并且通过位选控制选通所要亮的那个数码管。并且用小数点显示当前用户所操作的位。3、数字寄存:定义4个signal(num1,num2,num3,num4)分别记录保存对应数码管当前显示的数字。4、扫频:开发板上只有一个50MHZ的时钟,可通过计数实现分频,实现快速扫描,使得四个数码管同时显示数字。5、开锁:首先定

5、义四个signal(num111,num222,num333,num444)预先保存原始密码。如果输入的密码与预设密码匹配,则led灯亮,否则灯不亮。6、重新设置密码:在输入一次正确密码后用户可以重新设置密码,首先按下set键,重设密码后再按下set键,密码即设计成功。7、恢复出厂设置:在用户忘记密码时可按reset键进行恢复。8、消抖:消抖部分参照老师给的参考程序。五部分程序设计(一)库library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_arith.all; use ieee.std_logic_unsigned.all

6、;(二)实体的定义entity xianjin is PORT( clk : IN STD_LOGIC; key1 : IN STD_LOGIC;-按键计数输入 key2 : IN STD_LOGIC; key3 : IN STD_LOGIC; key4 : IN STD_LOGIC; key5 : IN STD_LOGIC; seg: out std_logic_vector(7 downto 0); -数码管的段数据,包括小数点共8段LED,低电平点亮 dig: out std_logic_vector(3 downto 0); led: buffer STD_LOGIC ); END x

7、ianjin;(三)信号量的定义 signal num:integer range 0 to 9; signal count:integer range 0 to 3; signal key1filt:std_logic;-按键key1消抖后得到的信号 signal key1cnt:integer range 0 to 50000000; -用于对key1按键输入有效时间进行计数 signal key2filt:std_logic; signal key2cnt:integer range 0 to 50000000; signal key3filt,clk1:std_logic; signa

8、l key3cnt:integer range 0 to 50000000; signal key4filt:std_logic; signal key4cnt:integer range 0 to 50000000; signal key5filt:std_logic; signal key5cnt:integer range 0 to 50000000; signal x:integer range 0 to 2; signal clk0,u,z,y: integer range 0 to 50000000; signal v: integer range 0 to 1:=0; signa

9、l a,b,c,d:integer range 0 to 3; signal num1,num2,num3,num4:integer range 0 to 9; signal num11,num22,num33,num44:integer range 0 to 9; signal g,w:integer range 0 to 3; signal num444: integer range 0 to 9:=1; signal num333: integer range 0 to 9:=2; signal num222: integer range 0 to 9:=3; signal num111

10、: integer range 0 to 9:=4;(四)扫频部分的程序process (clk)begin if clk'event and clk ='1' then if clk0=4000 then clk0<=0; else clk0<=clk0+1; end if; if (clk0>=0 and clk0<=1000) then g<=0; elsif (clk0>=1000 and clk0<=2000) then g<=1; elsif (clk0>=2000 and clk0<=3000)

11、then g<=2; elsif (clk0>=3000 and clk0<=4000) then g<=3; end if;end if; end process;(五)数码管显示部分的程序(以第一个数码管为例,其他三个数码管的显示方法一样)首选是位选控制process (key2filt)beginif key2filt='1' then if w=3 then w<=0; else w<=w+1; end if; end if;end process;数码管的显示process(w,g)beginif g=0 thendig<=&

12、quot;0111" if w=0 then case num1 is(下面这段是显示用户操作的位,显示带小数点) when 0 => seg <= "01000000" - 0when 1 => seg <= "01111001" - 1when 2 => seg <= "00100100" - 2when 3 => seg <= "00110000" - 3when 4 => seg <= "00011001" - 4wh

13、en 5 => seg <= "00010010" - 5when 6 => seg <= "00000010" - 6when 7 => seg <= "01111000" - 7when 8 => seg <= "00000000" - 8when 9 => seg <= "00010000" - 9when others =>NULL; end case;else case num1 iswhen 0 => seg &

14、lt;= "11000000" - 0when 1 => seg <= "11111001" - 1when 2 => seg <= "10100100" - 2when 3 => seg <= "10110000" - 3when 4 => seg <= "10011001" - 4when 5 => seg <= "10010010" - 5when 6 => seg <= "1000001

15、0" - 6when 7 => seg <= "11111000" - 7when 8 => seg <= "10000000" - 8when 9 => seg <= "10010000" - 9when others =>NULL; end case;end if;end if;(六)实现数码管数字的加循环部分if key1filt='1' then if w=0 then if num1=9 then num1<=0;elsenum1<=num1+1

16、;end if; end if; if w=1 then if num2=9 then num2<=0; elsenum2<=num2+1; end if; end if; if w=2 thenif num3=9 then num3<=0;elsenum3<=num3+1;end if; end if; if w=3 thenif num4=9 then num4<=0;elsenum4<=num4+1;end if; end if;end if;(7)消抖程序(以key1为例,key2,key3,key4,key5的消抖同理,此处略) constant

17、N :integer := 5000000;-消抖时间,对于50Mhz的基准时钟,这相当于0.1Sbegin if clk'event and clk ='1' thenif key1 ='0' then -当key1 输入低电平,即按键按下if key1cnt/= N then -一直计数到Nkey1cnt<=key1cnt+1;end if;if key1cnt=N-1 then -最后一个计数时输出key1filt脉冲 key1filt<='1'elsekey1filt<='0'end if;els

18、e -若key1 输入高电平,表明按键被释放key1cnt<= 0;end if;(八)比较密码是否匹配部分、修改密码和恢复出厂设置原始密码的程序 if key5filt='1' then if num444=num4 and num333=num3 and num222=num2 and num111=num1 then v<=1; a<=0; elsev<=0;if a=3 then a<=0; b<=1; else a<=a+1; b<=0; end if; end if; end if; if key3filt='1' then num444<=1; num333<=2; num222<=3; num111<=4; end

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论