北邮数字电路综合实验报告_第1页
北邮数字电路综合实验报告_第2页
北邮数字电路综合实验报告_第3页
北邮数字电路综合实验报告_第4页
北邮数字电路综合实验报告_第5页
已阅读5页,还剩40页未读 继续免费阅读

下载本文档

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

文档简介

1、数字电路综合实验报告简易智能密码锁 一、实验课题及任务要求设计并实现一个数字密码锁,密码锁有四位数字密码和一个确认开锁按键,密码输入正 确,密码锁打开,密码输入错误进行警示。基本要求:1、密码设置:通过键盘进行4 位数字密码设定输入,在数码管上显示所输入数字。 通过密码设置确定键(BTN 键)进行锁定。2、开锁:在闭锁状态下,可以输入密码开锁,且每输入一位密码,在数码管上显示“-”,提示已输入密码的位数。输入四位核对密码后,按“开锁”键,若密码正确则系统开锁,若密码错误系统仍然处于闭锁状态,并用蜂鸣器或led 闪烁报警。3、在开锁状态下,可以通过密码复位键(BTN 键)来清除密码,恢复初始密码

2、“0000”。闭锁状态下不能清除密码。4、用点阵显示开锁和闭锁状态。提高要求:1、输入密码数字由右向左依次显示,即:每输入一数字显示在最右边的数码管上,同时 将先前输入的所有数字向左移动一位。2、密码锁的密码位数(46 位)可调。3、自拟其它功能。二、系统设计2.1系统总体框图2.2逻辑流程图2.3MDS图2.4分块说明 程序主要分为6个模块:键盘模块,数码管模块,点阵模块,报警模块,防抖模块,控制模块。以下进行详细介绍。1. 键盘模块本模块主要完成是44键盘扫描,然后获取其键值,并对其进行编码,从而进行按键的识别,并将相应的按键值进行显示。 键盘扫描的实现过程如下:对于44键盘,通常连接为4

3、行、4列,因此要识别按键,只需要知道是哪一行和哪一列即可,为了完成这一识别过程,我们的思想是,首先固定输出高电平,在读入输出的行值时,通常高电平会被低电平拉低,当当前位置为高电平“1”时,没有按键按下,否则,如果读入的4行有一位为低电平,那么对应的该行肯定有一个按键按下,这样便可以获取到按键的行值。同理,获取列值也是如此,先输出4列为高电平,然后在输出4行为低电平,再读入列值,如果其中有哪一位为低电平,那么肯定对应的那一列有按键按下。由此可确定按键位置。X78按键储存键盘译码消抖9X456X123XX0键盘扫描x(X为无效按键)2.数码管模块本实验采用六位七段共阴极数码管,通过选通6个位选管脚

4、,向相应的IO口送低电平来点亮其中任何一位数码管,因为现在采用四位密码锁,所以只是用了其中四个,最高位两位数码管位选全部置1.如下附上7段共阴极数码管真值表3.点阵模块点阵模块,共由8*8*2个发光二极管组成,行低电平有效,列高电平有效。要求在开锁模式和闭锁模式显示不同的图案,则先将要显示的每幅图像画8*8个小方格的矩形框中,再在有图案下落处的小方格里填上“1”,无图案处填上“0”,这样就形成了与图案所对应的二进制数据在该矩形框上的分布。当闭锁时以红色点阵显示,此时绿色点阵全部置0,反之亦然。4.报警模块 当报警程序被调用,蜂鸣器输出高电平进行报警,表示输入密码错误5防抖按键输入只有为15ms

5、以上的高电平时才会读出按键值从而消除电路中的抖动。6.控制中心 lockmode=1表示关锁,此时点阵显示落锁,按任何键都不会显示密码,清零或者开锁,在此时输入密码kwei从0开始不断加1,输入的密码位数在数码管上依次左移,当输入密码m与寄存器中预设密码mm相同时,按下确认键btn2切换为开锁状态,lockmode=0,此时按下btn1表示清零,恢复为初始密码0000,按set键寄存器内密码,按下btnloc切换为关锁状态。三、仿真波形分析在QUARTUS2中应用系统自带的功能进行波形仿真,这里采用了分模块仿真。主程序仿真在主要功能程序方面波形如下,在初始化模式按下set键系统进入修改密码状态

6、,setmode波形显示高电平。为仿真方便,仅使kbin(即行输入信号)在1011和1111两个状态下相互转换,在不同的kbout(即列扫描输出信号)下分别对应4、5、6、7四个数字,故密码寄存器mx为输入的修改后的密码。按下btn2(确认键)确认密码后,setmode变为低电平,即修改密码状态结束。按下btn1时清零,密码寄存器取值还原为0000,至此均为开锁状态下的操作,lockmode一直为低电平。按下闭锁键btnloc后,lockmode从0跳变到1,由此进入闭锁模式。按键消抖模块仿真当按下键时得到的高电平为输入x,持续一定时间后方可输出一个高电平,而无论按下的时间多长,都只输出一个高

7、电平y,从而实现消除按键电路中的抖动。分频模块仿真为仿真方便,改变分频比。原程序在50Mhz时钟输入下,输出分别为1Mhz、200hz、1000hz、500hz,分别用于键盘扫描、消抖模块输入、点阵扫描以及数码管扫描。数码管模块仿真由smgcatout输出可以看出低四位数码管依次选通。第i位选通时,smgzf为mi的七段数码管的译码值。点阵模块仿真当lockmode=1时dzcolr全部为0仅dzcolg显示图案; 当lockmode=0时dzcolg全部为0由dzcolr显示图案;而dzrow一直在进行行扫描,形成了两种不同颜色点阵。报警模块仿真当bj=0时,fmq为0;bj=1时,fmq将

8、clk分频后输出,即蜂鸣器发出声响。四、源程序-顶层文件-library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity lock isport (clk : in std_logic; setmode:out std_logic; lockmode:out std_logic; set:in std_logic; btn1,btn2,btnloc:in std_logic; smgzf: out std_logic_vector(6 downto 0); smgcatout:out std_log

9、ic_vector(5 downto 0); kbin: in std_logic_vector(3 downto 0); kbout: buffer std_logic_vector(3 downto 0); dzrow,dzcolr,dzcolg: out std_logic_vector(7 downto 0); fmq: out std_logic );end lock;architecture behave of lock is signal setm: std_logic; signal lockm: std_logic; signal lbj: std_logic; signal

10、 lkwei: integer range 0 to 4; signal lm1,lm2,lm3,lm4:integer range 0 to 9; signal clk_1: std_logic;-1MHzsignal clk_2: std_logic;-200Hzsignal clk_3: std_logic;-1000Hz signal clk_4: std_logic; -500Hzcomponent kb is -键盘模块port (clk : in std_logic; set:in std_logic; btn1,btn2,btnloc:in std_logic; kbin: i

11、n std_logic_vector(3 downto 0); kbout: buffer std_logic_vector(3 downto 0); bj:out std_logic; setmod:out std_logic; lockmod:out std_logic; kbwei:out integer range 0 to 4; m1x,m2x,m3x,m4x:out integer range 0 to 9 );end component;component smg is -数码管显示模块 port (clk : in std_logic; setmode:in std_logic

12、; lockmode:in std_logic; kwei:in integer range 0 to 4; m1,m2,m3,m4:in integer range 0 to 9; smgzf: out std_logic_vector(6 downto 0); smgcatout:out std_logic_vector(5 downto 0) );end component;component dz is -点阵模块 port (clk : in std_logic; -set:in std_logic; lockmode:in std_logic; dzrow,dzcolr,dzcol

13、g: out std_logic_vector(7 downto 0) ); end component; component alarm is -报警模块port (clk : in std_logic; bj:in std_logic; fmq: out std_logic );end component;component fenpin is -分频模块port(clk: in std_logic; clk_out1: out std_logic; clk_out2: out std_logic; clk_out3: out std_logic; clk_out4: out std_lo

14、gic);end component;begina1: fenpinport map(clk=clk,clk_out1=clk_1,clk_out2=clk_2, clk_out3=clk_3,clk_out4=clk_4);u1: kbport map(clk = clk, set = set, btn1 =btn1,btn2=btn2,btnloc=btnloc, kbin=kbin, kbout=kbout, bj=lbj, setmod=setm, lockmod=lockm, kbwei=lkwei, m1x=lm1,m2x=lm2,m3x=lm3,m4x=lm4);u2 :smgp

15、ort map(clk = clk_4, setmode=setm, lockmode=lockm, kwei=lkwei, m1=lm1,m2=lm2,m3=lm3,m4=lm4, smgzf=smgzf, smgcatout=smgcatout);u3 :dzport map(clk=clk_3, lockmode=lockm ,dzrow=dzrow, dzcolr=dzcolg, dzcolg=dzcolr );u4 :alarmport map(clk = clk, bj=lbj, fmq=fmq);setmode=setm;lockmode=lockm; end;-键盘模块-lib

16、rary ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity kb isport (clk : in std_logic; set:in std_logic; btn1,btn2,btnloc:in std_logic; kbin: in std_logic_vector(3 downto 0); kbout: buffer std_logic_vector(3 downto 0); bj:out std_logic; setmod:out std_logic; lockmod:out std_logi

17、c; kbwei:out integer range 0 to 4; m1x,m2x,m3x,m4x:out integer range 0 to 9 );end kb;architecture behave of kb is signal jpout:integer range 0 to 10; signal alarm:std_logic; signal tmp4: integer range 0 to 2499999; signal clkfd: std_logic; signal m1,m2,m3,m4,mm1,mm2,mm3,mm4: integer range 0 to 9; si

18、gnal wei:integer range 0 to 3; signal kwei:integer range 0 to 4; signal setmode:std_logic; signal lockmode:std_logic; signal set1:std_logic; signal clear: std_logic; signal sure: std_logic; signal lock: std_logic; signal en,finish: std_logic;signal btn1_out, btn2_out, btnloc_out, set_out: std_logic;

19、signal clk_1: std_logic;-1MHzsignal clk_2: std_logic;-200Hz component scan isport(clk_1: in std_logic; clk_2: in std_logic; row: in std_logic_vector(3 downto 0); col: buffer std_logic_vector(3 downto 0); en_up: buffer std_logic; y: out integer range 0 to 10);end component;component fenpin isport(clk

20、: in std_logic; clk_out1: out std_logic; clk_out2: out std_logic; clk_out3: out std_logic; clk_out4: out std_logic);end component;component debounce isport(clk, x: in std_logic; y: out std_logic);end component; begin setmod=setmode; lockmod=lockmode; bj=alarm; kbwei=kwei; m1x=m1;m2x=m2;m3x=m3;m4xclk

21、_1, clk_2=clk_2, row=kbin, col=kbout, en_up=en, y=jpout); u2: fenpin port map(clk=clk, clk_out1=clk_1, clk_out2=clk_2, clk_out3=open,clk_out4=open); u3: debounce port map(clk=clk_2, x=btn1, y=btn1_out); u4: debounce port map(clk=clk_2, x=btn2, y=btn2_out); u5: debounce port map(clk=clk_2, x=btnloc,

22、y=btnloc_out); u6: debounce port map(clk=clk_2, x=set, y=set_out);process(clk) begin if(clkevent and clk=1)then if (tmp4=2499999) then tmp4=0;clkfd=not clkfd; else tmp4=tmp4+1; end if; end if; end process; process(clk_1,en,jpout) begin if(clk_1event and clk_1=1) then if(lockmode=1)then -闭锁状态下输入密码并读入

23、按键值后存入mm wei=0; if(jpout/=10)then if(kwei=3)then mm4=jpout;kwei=kwei+1; elsif(kwei=2)then mm3=jpout;kwei=kwei+1; elsif(kwei=1)then mm2=jpout;kwei=kwei+1; elsif(kwei=0)then mm1=jpout;kwei=kwei+1; end if; end if ; if(sure=1)then -确认后判断密码是否正确 if(mm1=m1)and(mm2=m2)and(mm3=m3)and(mm4=m4) then lockmode=0;

24、alarm=0;-正确开锁 else kwei=0;alarm=1; -错误报警 end if; end if; else kwei=0;-开锁状态下 if(lock=1)then -上锁 lockmode=1; else if(set1=1)then setmode=1; -修改密码 else setmode=0; end if; if(clear=1) then -清零 m1=0;m2=0;m3=0;m4=0;-mm1=0;mm2=0;mm3=0;mm4=0; wei=0;kwei=0;alarm=0 elsif(setmode=1)then if(jpout/=10)then -修改密码

25、状态下读入按键值存入m并移位 if(wei=0)then m1=m2;m2=m3;m3=m4;m4=jpout;wei=wei+1; elsif(wei=1)then m1=m2;m2=m3;m3=m4;m4=jpout;wei=wei+1; elsif(wei=2)then m1=m2;m2=m3;m3=m4;m4=jpout;wei=wei+1; elsif(wei=3)then m1=m2;m2=m3;m3=m4;m4=jpout;wei=0; end if; end if; if(sure=1)then -确认后结束修改密码状态setmode=0;alarm=0; end if; en

26、d if; end if; end if; end if; end process; process(set,sure) -修改密码键 begin if(clkfdevent and clkfd=1)then if(set=1)then set1=1; end if; if(sure=1)then set1=0; end if; end if;end process; process(btn1) -清零键 begin if(btn1=1)then clear=1; else clear=0; end if; end process; process(btn2) -确认键 begin if(bt

27、n2=1)then sure=1; else sure=0; end if; end process; process(btnloc) -闭锁键 begin if(btnloc=1)then lock=1; else lockclk_2, x=en, y=en_up);process(clk_1)beginif(clk_1event and clk_1=1) then -列扫描if(en=1) thencol col col col colif(row(3) and row(2) and row(1) and row(0)=1) thenencase row is-when 1110 = yy

28、=1; eny=4; eny=7; en ycase row iswhen 1110 =y=0; eny=2; eny=5; eny=8; enycase row is-when 1110 = yy=3; eny=6; eny=9; eny null;end case;end if;end process;end a;-消抖-library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity debounce isport(clk, x: in std_logic; - 200hz低频时钟y: out

29、std_logic);end debounce;architecture a of debounce istype state is(s0,s1,s2,s3,s4); -5个状态signal pre_s, next_s: state;beginprocess(clk)beginif(clkevent and clk=1) thenpre_s -初始状态s0if(x=1) thennext_s=s1;elsenext_s=s0;end if;yif(x=1) thennext_s=s2;elsenext_s=s0;end if;yif(x=1) thennext_s=s3;elsenext_s=

30、s0;end if;y -连续3个高电平,输出一个高电平y=1;next_s -3个以上高电平,不再继续输出高电平y=0;if(x=1) thennext_s=s4;elsenext_s=s0;end if;end case;end process;end a;-分频模块-library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity fenpin isport(clk: in std_logic;clk_out1: out std_logic;clk_out2: out std_logic;clk

31、_out3: out std_logic;clk_out4: out std_logic );end fenpin;architecture div of fenpin isconstant div1: integer:=24;-1Mhz,用于键盘扫描constant div2: integer:=124999;-200hz,用于消抖constant div3: integer:=24999;-1000hz,用于点阵扫描constant div4: integer:=49999;-500hz,用于数码管扫描signal c1: integer range 0 to div1;signal c2

32、: integer range 0 to div2;signal c3: integer range 0 to div3;signal c4: integer range 0 to div4;signal temp1: std_logic;signal temp2: std_logic;signal temp3: std_logic;signal temp4: std_logic;begin process(clk)beginif(clkevent and clk=1) then if(c1=div1) thentemp1=not temp1;c1=0;elsec1=c1+1;end if;i

33、f(c2=div2) thentemp2=not temp2;c2=0;elsec2=c2+1;end if;if(c3=div3) thentemp3=not temp3;c3=0;elsec3=c3+1;end if;if(c4=div4) thentemp4=not temp4;c4=0;elsec4=c4+1;end if;end if;end process;clk_out1=temp1;clk_out2=temp2;clk_out3=temp3;clk_out4=temp4;end div;-数码管-library ieee;use ieee.std_logic_1164.all;

34、use ieee.std_logic_unsigned.all;entity smg isport (clk : in std_logic; -500hz clkout4 setmode:in std_logic; lockmode:in std_logic; kwei:in integer range 0 to 4; m1,m2,m3,m4:in integer range 0 to 9; -四位密码的值 smgzf: out std_logic_vector(6 downto 0); -编码值 smgcatout:out std_logic_vector(5 downto 0) );end

35、 smg;architecture behave of smg is signal smgcat:integer range 0 to 5; signal m1y,m2y,m3y,m4y:std_logic_vector(6 downto 0); begin process(clk) -位选码 begin if(clkevent and clk=1)then if (smgcat=5)then smgcat=0; else smgcatsmgcatout=110111;smgzfsmgcatout=111011;smgzfsmgcatout=111101;smgzfsmgcatout=111110;smgzfsmgcatoutsmgcatout=111111; end case;

温馨提示

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

评论

0/150

提交评论