密码锁设计VHDL源程序文档.doc_第1页
密码锁设计VHDL源程序文档.doc_第2页
密码锁设计VHDL源程序文档.doc_第3页
密码锁设计VHDL源程序文档.doc_第4页
密码锁设计VHDL源程序文档.doc_第5页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

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

文档简介

2.2系统的输入、输出端口以及寄存器清单及说明: CLK 输入时钟方波信号端口 KIN 键盘按键输入端口 KOUT 键盘完整编码码值输出端口(七位二进制数) KOUT1 扫描信号输出端口(三位二进制数) SIN 键盘消抖输入端口(七位二进制数) SOUT 键盘消抖输出端口(七位二进制数) LIN 键盘按键编码模块输入端口(七位二进制数) DF 数字按键标志寄存器 FF 功能按键标志寄存器 ND 数字按键识别编码寄存器 NF 功能按键识别编码寄存器 LOCK 电子密码锁上锁状态标志寄存器 LOCK1 电子密码锁报警状态标志寄存器 UNLOCK 电子密码锁开锁状态标志寄存器 NULL1 电子密码锁无密码状态标志寄存器 DATA 电子密码锁数码显示数据寄存器 CAT 电子密码锁数码显示位选寄存器 DISPLAY 电子密码锁数码显示段选寄存器(十七位二进制数) NUM0、NUM1、NUM2、NUM3数码显示中分位显示数据寄存器 DISNUM 数码显示段选数据寄存器 I1 数码显示计数器 SCANS 键盘扫描中按键完整编码寄存器 SCAN 键盘扫描寄存器 CNT 键盘消抖计数器 SIN1 键盘按键键值寄存器 I 键盘扫描计数器 DF1 数字按键状态标志寄存器 ACC 键盘数字输入暂存器 T 报警计数器 REG 电子密码锁密码存储器 NC 计数器1键盘输入扫描部分源程序LIBRARY IEEE;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;USE IEEE.STD_LOGIC_1164.ALL;ENTITY kbscan1 is PORT(clk:in STD_LOGIC; kin:in STD_LOGIC_VECTOR(3 DOWNTO 0);-PC7-PC4 kout:out STD_LOGIC_VECTOR(7 downto 0);-PC3-PC kout1: out STD_LOGIC_VECTOR(3 downto 0); end kbscan1; architecture a of kbscan1 is signal scans: std_logic_vector(7 downto 0);-PC7-PC0 signal scan : std_logic_vector(3 downto 0);-PC3-PC0 signal cnt :integer range 0 to 140; signal sin1:std_logic_vector(3 downto 0); signal i:integer range 0 to 3; begin scans=scan& kin; kout=scans; kout1=scan; process(clk) begin if(falling_edge(clk)then if(i=3)then i=0; else iscanscanscanscan=1000; end case; end if; end process; End a;2键盘输入消抖部分源程序LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY xiaodou is Port(clk :in STD_LOGIC; sin:in std_logic_vector(7 downto 0); sout:out std_logic_vector(7 downto 0); end xiaodou; architecture behavioral of xiaodou is signal cnt :integer range 0 to 120; signal sin1:std_logic_vector(7 downto 0); begin process(clk) begin sin1=sin; if (rising_edge(clk)then if(sin1=sin)then cnt=cnt+1; else sin1=sin; cnt=0; end if; if(cnt=120)then sout=sin; cntNDNDNDNDNDNDNDNDNDNDNDNFNFNFNFNFNFNF=1000; END CASE; END IF; END PROCESS; DF=NOT(ND(3) AND ND(2) AND ND(1) AND ND(0); FF=NF(2) OR NF(1) OR NF(0); end b;4 电子密码锁的控制部分程序DF 数字按键标志寄存器 FF 功能按键标志寄存器 ND 数字按键识别编码寄存器 NF 功能按键识别编码寄存器 LOCK 电子密码锁上锁状态标志寄存器 LOCK1 电子密码锁报警状态标志寄存器 UNLOCK 电子密码锁开锁状态标志寄存器 NULL1 电子密码锁无密码状态标志寄存器 DATA 电子密码锁数码显示数据寄存器LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY kongzhi IS PORT(CLK: IN STD_LOGIC; DF,FF: in STD_LOGIC; ND,NF:in STD_LOGIC_VECTOR(3 downTO 0); LOCK,LOCK1,UNLOCK:buffer STD_LOGIC; NULL1: buffer STD_LOGIC; DATA: out STD_LOGIC_VECTOR(15 downTO 0) ); END kongzhi; ARCHITECTURE V1 OF kongzhi IS signal i1:integer range 0 to 3; signal df1:std_logic; signal ACC: STD_LOGIC_VECTOR(15 DOWNTO 0); signal t: INTEGER RANGE 0 TO 2; signal REG:STD_LOGIC_VECTOR(15 downTO 0); signal NC,A:INTEGER RANGE 0 TO 3; begin PROCESS(FF,DF)IS BEGIN if rising_edge(clk) then IF FF=1THEN IF NF=0001THEN ACC=0000000000000000; NC=0; END IF; ELSE df1=df; IF df1=0and DF=1 THEN IF NC4 THEN ACC=ACC(11 DOWNTO 0)&ND; NC=NC+1; END IF; END IF; END IF; IF FF=1 THEN IF NF=0011 THEN REG=ACC; LOCK=0; UNLOCK=1; LOCK1=1; NULL1=1; else IF NF=0100 THEN IF REG=ACC THEN LOCK=1; UNLOCK=0; LOCK1=1; NULL1=1; ELSE LOCK=0; UNLOCK=1; IF t=2 THEN REG=1000100010001000; LOCK1=0; lock=1; unlock=1; null1=1; t=0; ELSE t=t+1; END IF; END IF; else IF NF=0101 THEN REG=1000100010001000; LOCK=0; UNLOCK=1; LOCK1=1; NULL1=1; else IF NF=0111 THEN IF UNLOCK=1 THEN IF REG=ACC THEN REG=0000000000000000; NULL1=0; LOCK=1; LOCK1=1; UNLOCK=1; END IF; END IF; else IF NF=0010 THEN REG=ACC; NULL1=1; LOCK=0; LOCK1=1; UNLOCK=1; END IF; end if; end if; end if; end if; end if; end if; END PROCESS; DATA=ACC; END ARCHITECTURE V1; CAT 电子密码锁数码显示位选寄存器 DISPLAY 电子密码锁数码显示段选寄存器(十七位二进制数) DISPLAY 电子密码锁数码显示段选寄存器(十七位二进制数) NUM0、NUM1、NUM2、NUM3数码显示中分位显示数据寄存器 DISNUM 数码显示段选数据寄存器 I1 数码显示计数器 5电子密码锁的数码显示模块源程序LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY LEDXIANSHI IS PORT(CLK :IN STD_LOGIC; DATA: in STD_LOGIC_VECTOR (15 DOWNTO 0); CAT:OUT STD_LOGIC_VECTOR(0 TO 3); DISPLAY:OUT STD_LOGIC_VECTOR(16 DOWNTO 0); END LEDXIANSHI; ARCHITECTURE BEHAVIORAL OF LEDXIANSHI IS Signal NUM0,NUM1,NUM2,NUM3: STD_LOGIC_VECTOR(3 DOWNTO 0); SIGNAL DISNUM:STD_LOGIC_VECTOR(16 DOWNTO 0); SIGNAL I1:INTEGER RANGE 0 TO 3; BEGIN NUM0=DATA(3 DOWNTO 0);NUM1=DATA(7 DOWNTO 4);NUM2=DATA(11 DOWNTO 8);NUM3=DATA(15 DOWNTO 12); DISPLAY=DISNUM; PROCESS(CLK) BEGIN IF(RISING_EDGE(CLK)THEN IF(I1=3)THEN I1=0; ELSE I1CATDISNUMDISNUMDISNUMDISNUMDISNUMDISNUMDISNUMDISNUMDISNUMDISNUMDISNUM CATDISNUMDISNUMDISNUMDISNUMDISNUMDISNUMDISNUMDISNUMDISNUMDISNUMDISNUM CATDISNUMDISNUMDISNUMDISNUMDISNUMDISNUMDISNUMDISNUMDISNUMDISNUMDISNUM CATDISNUMDISNUMDISNUMDISNUMDISNUMDISNUMDISNUMDISNUMDISNUMDISNUMDISNUM=NULL; END CASE; END CASE; END PROCESS; END BEHAVIORAL;6电子密码锁的数码显示部分(附加)LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY LEDXIANSHI IS PORT(CLK :IN STD_LOGIC; DATA: in STD_LOGIC_VECTOR (15 DOWNTO 0); CAT:OUT STD_LOGIC_VECTOR(0 TO 3); DISPLAY:OUT STD_LOGIC_VECTOR(16 DOWNTO 0); END LEDXIANSHI; ARCHITECTURE BEHAVIORAL OF LEDXIANSHI IS signal NUM0,NUM1,NUM2,NUM3: STD_LOGIC_VECTOR(3 DOWNTO 0); SIGNAL DISNUM:STD_LOGIC_VECTOR(16 DOWNTO 0); SIGNAL I1:INTEGER RANGE 0 TO 3; BEGIN NUM0=DATA(3 DOWNTO 0);NUM1=DATA(7 DOWNTO 4);NUM2=DATA(11 DOWNTO 8);NUM3=DATA(15 DOWNTO 12); DISPLAY=DISNUM; PROCESS(CLK) BEGIN IF(RISING_EDGE(CLK)THEN IF(I1=3)THEN I1=0; ELSE I1CATDISNUMDISNUM CATDISNUMDISNUM CATDISNUMDISNUM CATDISNUMDISNUM=01111111100000000; END CASE; END CASE; END PROCESS; END BEHAVIORAL;数码管显示library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;entity KeyScan isport(RESET:in std_logic;CLK:in std_logic; -基本时钟源6MHzKeyIn:in std_logic_vector(3 downto 0);-column列KeyOut:out std_logic_vector(3 downto 0); -row行LED_A: out std_logic; -4位数码管引脚LED_B: out std_logic;LED_C: out std_logic;LED_D: out std_logic;LED_E: out std_logic;LED_F: out std_logic;LED_G: out std_logic;LED_VCC1: out std_logic; -时十位LED_VCC2: out std_logic; -时个位LED_VCC3: out std_logic; -分十位LED_VCC4: out std_logic; -分个位LED_TimePoint:out std_logic; -冒号LED_Point:out std_logic; -小数点 LED_EN1:out std_logic -小数点 );end KeyScan;architecture Behavioral of KeyScan issignal timecnt:integer range 0 to 100000; -分频计数器,用来得到10ms时钟signal time10ms:std_logic;-10ms时钟signal scanvalue : std_logic_vector(3 downto 0);-记录扫描数据signal combvalue : std_logic_vector(7 downto 0);-KeyIn、KeyOut组合值signal cpy_scanvalue : std_logic_vector(3 downto 0);-备份扫描数据signal count:integer range 0 to 60000;-分频器,产生毫秒时钟基准signal scancnt:integer range 0 to 3;-LED扫描轮转signal Data0:integer range 0 to 9; beginLED_EN1=0;-进程1:产生20ms时钟process( CLK,RESET)beginif RESET=0 then time10ms=0;-初始化elsif CLKevent and CLK=1 thentimecnt=timecnt+1;if timecnt=100000 then time10ms=not time10ms; timecnt=0;end if;end if;end process;-进程2:键盘扫描输出process( time10ms,RESET)beginif RESET=0 then scanvalue=0001;combvalue=00000000;Data0=0;-初始化elsif time10msevent and time10ms=1 then-每10ms进行一次键盘扫描KeyOut=scanvalue; -输出扫描值 cpy_scanvalue scanvalue scanvalue scanvalue scanvalue scanvalue=0001; end case;combvalue Data0 Data0 Data0 Data0 Data0 Data0 Data0 Data0 Data0 Data0 null; -无键盘按下 end case;end if;end process;-数码管扫描 process(CLK,RESET)-时钟进程,产生各种时钟信号beginif RESET=0 then NULL;elsif CLKevent and CLK=1 then count=count+1;if count=60000 then count3 then scancnt=0; else scancnt=scancnt+1;end if;end if; end if;end process;-数码管扫描 process(CLK, RESET)be

温馨提示

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

最新文档

评论

0/150

提交评论