EDA4位密码锁的课程设计.doc

上传人:b****2 文档编号:1638928 上传时间:2022-10-23 格式:DOC 页数:23 大小:447KB
下载 相关 举报
EDA4位密码锁的课程设计.doc_第1页
第1页 / 共23页
EDA4位密码锁的课程设计.doc_第2页
第2页 / 共23页
EDA4位密码锁的课程设计.doc_第3页
第3页 / 共23页
EDA4位密码锁的课程设计.doc_第4页
第4页 / 共23页
EDA4位密码锁的课程设计.doc_第5页
第5页 / 共23页
点击查看更多>>
下载资源
资源描述

EDA4位密码锁的课程设计.doc

《EDA4位密码锁的课程设计.doc》由会员分享,可在线阅读,更多相关《EDA4位密码锁的课程设计.doc(23页珍藏版)》请在冰豆网上搜索。

EDA4位密码锁的课程设计.doc

信息技术学院

《可编程逻辑器件原理及应用》课程

综合设计报告书

姓名:

景显冬

班级:

B1106

学号:

04

时间:

2013.12.31

指导教师:

李海成

设计

题目

密码锁设计

数据输入:

每按一个数字键,就输入一个数值,并在显示器上的最右方显示出该数值,并将先前已经输入的数据依序左移一个数字位置。

数码清除:

按下此键可清除前面所有的输入值,清除成为“0000”。

密码更改:

按下此键时将目前的数字设定成新的密码。

激活电锁:

按下此键可将密码锁上锁。

解除电锁:

按下此键会检查输入的密码是否正确,密码正确即开锁。

设计方案

本系统采用模块化的设计,整个系统分为数字按键输入、时钟输入、功能按键输入、数字译码块、功能译码模块、核心处理模块、输出处理模块、显示译码电路八个模块。

整体电路如图1.1所示。

数字按键输入

时钟模块

功能按键输入

数字译码模块

功能译码模块

核心处理模块

输出处理模块

显示译码电路

图1.1数字密码锁总方框图

硬件电路的设计

4位数字密码锁包括五个基本逻辑模块,分别为:

数字按键输入模块(numinput)、功能按键输入模块(funcinput)、核心处理模块(core)、输出处理模块(allout)、七段译码器模块(dataout)。

数字按键输入--numinput

说明:

读取数字键0~9。

按键为矩阵形式,高电平表示按键未按下,低电平表示按键按下。

经数字按键输入模块处理后输出4位二进制代码,“0000”~“1001”分别表示0~9,用“1010”表示其他无效输入。

如表2.1所示。

表2.1数字按键输入模块(numinput)的数据输入输出

按键数字

按键扫描输出

Numinput二进制输出

对应十进制数字

0

11011110

0000

0

1

01111101

0001

1

2

01111110

0010

2

3

10110111

0011

3

4

10111011

0100

4

5

10111101

0101

5

6

10111110

0110

6

7

11010111

0111

7

8

11011011

1000

8

9

11011101

1001

9

其他按键

其他

1010

10

(1)numinput--数字按键输入模块程序:

libraryieee;

useieee.std_logic_1164.all;

entitynuminputis

port(numin:

INstd_logic_vector(7downto0);

numstate,clk:

INstd_logic;

numout:

OUTstd_logic_vector(3downto0));

endnuminput;

architectureoneofnuminputis

signalstate:

std_logic;

signalmem:

std_logic_vector(7downto0);

begin

process(clk)

begin

ifclk'eventandclk='1'then

ifstate/=numstatethen

ifmem/=numinthen

casenuminis

when"11011110"=>numout<="0000";---"0"

when"01111101"=>numout<="0001";---"1"

when"01111110"=>numout<="0010";---"2"

when"10110111"=>numout<="0011";---"3"

when"10111011"=>numout<="0100";---"4"

when"10111101"=>numout<="0101";---"5"

when"10111110"=>numout<="0110";---"6"

when"11010111"=>numout<="0111";---"7"

when"11011011"=>numout<="1000";---"8"

when"11011101"=>numout<="1001";---"9"

whenothers=>numout<="1010";

endcase;

state<=numstate;

elsenumout<="1010";

endif;

mem<=numin;

endif;

endif;

endprocess;

endone;

(2)数字按键输入模块仿真图:

图2.1数字按键输入模块仿真图

由图可知,当数字按键输入模块的输入依次为"11011110"、"01111101"、"01111110"、"10110111"、"10111011"、"10111101"、"10111110"、"11010111"、"11011011"、"11011101"时,numout输出依次输出“0000”、“0001”、“0010”、“0011”、“0100”、“0101”、“0110”、“0111”、“1000”、“1001”;当为其他按键输入时,numout输出均为“1010”。

(3)数字按键输入--numinput符号文件:

图2.2数字按键输入--numinput符号文件

功能按键输入模块--funcinput

读取矩阵按键区控制功能按键-—清除键、改密键、上锁键、解锁键。

高电平表示按键未按下,低电平表示按键按下。

按照“清除,改

密,上锁,解锁”顺序读取按键时,只能输出一位控制信号。

输出的信号为3位二进制代码,“001”~“100”,依次表示“清除按键、改密按键、上锁,解锁”,用“000”表示输入不为功能按键信号。

表2.2控制功能按键输入模块(funcinput)的输出输入数据

功能按键

功能按键扫描输出

Funcinput二进制输出

对应十进制数字

清除键

11100111

001

1

改密键

11101101

010

2

上锁键

11101110

011

3

解锁键

11101011

100

4

其他按键

其他

000

0

(1)Funcinput--功能按键输入模块程序:

libraryieee;

useieee.std_logic_1164.all;

entityfuncinputis

port(funcin:

INstd_logic_vector(7downto0);

constate,clk:

INstd_logic;

conout:

OUTstd_logic_vector(2downto0));

endfuncinput;

architectureoneoffuncinputis

signalstate:

std_logic;

signalmem:

std_logic_vector(7downto0);

begin

process(clk)

begin

ifclk'eventandclk='1'then

ifconstate/=statethen

state<=constate;

ifmem/=funcinthen

withfuncinselect

conout<="001"when"11100111",--清除键

"010"when"11101101",--改密键

"011"when"11101110",--上锁键

"100"when"11101011",--解锁键

"000"whenothers;

mem<=funcin;

elseconout<="000";

endif;

endif;

endif;

endprocess;

endone;

(2)功能按键输入模块仿真图:

图2.3功能按键输入模块仿真图

由图可知:

当功能按键输入模块的输入依次为“11100111”、“11101101”、“11101110”、“11101011”时,conout输出依次为“001”、“010”、“011”、“100”,当为其他按键输入时,conout输出均为“000”。

(3)功能按键输入模块--funcinput符号文件:

图2.4功能按键输入模块--funcinput符号文件

核心处理模块--core

核心处理模块将根据输入(数字按键输入以及功能按键输入)来改变存储器状态、数码管显示以及LED灯显示(红灯亮为上锁,绿灯亮为解锁)。

(1)Core--核心处理程序:

libraryieee;

useieee.std_logic_1164.all;

entitycoreis

port(numin:

instd_logic_vector(3downto0);

conin:

instd_logic_vector(2downto0);

clk:

instd_logic;

dataa,datab,datac,datad:

outstd_logic_vector(3downto0);

ledr,ledg,numout,conout:

outstd_logic);

endentity;

architectureoneofcoreis

typelockstateis(unlock,locked);

signalnuma,numb,numc,numd,codea,codeb,codec,coded:

std_logic_vector(3downto0);

signalnumstate,constate:

std_logic;

signallocksta:

lockstate;

begin

process(clk,numin,conin)

ifclk'eventandclk='1'then--上升沿

ifnumin/="1010"then--当不是其他键时

numd<=numc;

numc<=numb;

numb<=numa;

numa<=numin;---移位

endif;

ifconin/="000"then

ifconin="001"then--清除键按下

num

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 成人教育 > 专升本

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1