基于CPLD的数字锁.docx

上传人:b****4 文档编号:5458840 上传时间:2022-12-16 格式:DOCX 页数:11 大小:86.34KB
下载 相关 举报
基于CPLD的数字锁.docx_第1页
第1页 / 共11页
基于CPLD的数字锁.docx_第2页
第2页 / 共11页
基于CPLD的数字锁.docx_第3页
第3页 / 共11页
基于CPLD的数字锁.docx_第4页
第4页 / 共11页
基于CPLD的数字锁.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

基于CPLD的数字锁.docx

《基于CPLD的数字锁.docx》由会员分享,可在线阅读,更多相关《基于CPLD的数字锁.docx(11页珍藏版)》请在冰豆网上搜索。

基于CPLD的数字锁.docx

基于CPLD的数字锁

基于CPLD设计的数字锁

EDA技术作为现代电子技术的核心,它依赖功能强大的计算机,在EDA工具软件平台上,对以硬件描述语言HDL为系统逻辑描述手段完成的设计文件,自动地完成逻辑编译、逻辑化简、逻辑分割、逻辑综合、结构综合,以及逻辑优化和仿真测试。

一、总体设计思路

关于这个课题,我们把逻辑功能划分为两个大的模块:

控制部分和处理部分。

控制模块是整个系统的控制核心,负责接收其模块传来的输入信号,再根据系统的功能产生相应的控制信号送到相关的模块。

具体思路如下:

密码预先存入寄存器中,开锁时,输入密码存入另一寄存器中,当按下“确定”键时,启动比较器,比较两个寄存器中的内容,当结果相同时M=1,LT绿灯亮,并开锁;当结果不同时M=0,LF红灯亮,不开锁。

用户需要修改密码时,先开锁,再按“设定密码”,清除预先存入的密码,通过键盘输入新的2位十进制数,然后再按下确定键完成操作。

总设计框图如下:

二、单元模块设计

2.1消除抖动模块

我们使用的按键通常都是机械弹性开关,当机械触点断开、闭合时,由于机械触点的弹性作用,一个按键开关在闭合时不会马上稳定地接通,在断开时也不会一下子断开。

因而在闭合及断开的瞬间均伴随有一连串的抖动(如下图所示)。

然而,抖动时间的长短由按键的机械特性决定,一般为5ms~10ms。

这是一个很重要的时间参数,在很多场合都要用到。

在这里,我们用软件去除抖动。

当检测到键闭合时,执行一个延时程序产生数毫秒的延时,让前沿弹跳消失后再检测闭合;当发现键松开后,也给数毫秒的延时,当后沿弹跳消失后,再检测下一个键的输入。

或者当前沿弹跳消失后,将检测到的信号所存,然后再输出,这样就不需要后沿延时了。

消除抖动的电路封装图如下:

程序如下:

LIBRARYieee;

USEieee.std_logic_1164.ALL;

USEieee.std_logic_arith.ALL;

USEieee.std_logic_unsigned.ALL;

LIBRARYaltera;

USEaltera.maxplus2.ALL;

ENTITYxiaodouIS

PORT

(CLK,B_IN:

INSTD_LOGIC;

B_OUT:

OUTSTD_LOGIC);

END;

ARCHITECTUREaOFxiaodouIS

signalVcc,INV_B:

std_logic;

signalA0,A1:

std_logic;

signalB0,B1:

std_logic;

BEGIN

Vcc<='1';

INV_B<=notB_IN;

dff1:

dffPORTMAP(d=>Vcc,q=>A0,clk=>CLK,prn=>Vcc,clrn=>INV_B);

dff2:

dffPORTMAP(d=>Vcc,q=>A1,clk=>CLK,prn=>Vcc,clrn=>INV_B);

process(CLK)

begin

ifCLK'EVENTandCLK='1'then

B0<=notA1;

B1<=B0;

endif;

endprocess;

B_OUT<=not(B1andnotB0);

END;

消抖电路的仿真波形图:

2.2键盘扫描模块

我们在键盘的四列输入口中输入一个低电平时钟扫描,当有按键被打下时,对应的行被键接通也呈现低电平状态,然后将此输入输出信号输出到键盘编码就可以进行键盘按键识别了。

键盘扫描封装图如下:

该模块程序如下:

LIBRARYIEEE;

USEIEEE.std_logic_1164.ALL;

USEIEEE.STD_LOGIC_ARITH.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYSAOMIAOIS

PORT(

CLK:

INSTD_LOGIC;

CLK_SAOMIAO:

OUTSTD_LOGIC_VECTOR(4downto1));

END;

ARCHITECTUREaOFSAOMIAOIS

SignalM:

STD_LOGIC_VECTOR(2DOWNTO1);

SIGNALN:

STD_LOGIC_VECTOR(4DOWNTO1);

Begin

PROCESS(CLK)

Begin

IFCLK'EventANDCLK='1'THEN

N<=N+1;

M<=N(4DOWNTO3);

ENDIF;

ENDPROCESS;

CLK_SAOMIAO<="1110"WHENM=0ELSE

"1101"WHENM=1ELSE

"1011"WHENM=2ELSE

"0111"WHENM=3ELSE

"1111";

END;

键盘扫描模块仿真图:

2.3七段数码显示电路模块

本模块我们通过串行扫描方式驱动LED数码管,可较少地占用可编程器件资源;并利用MAXPLUSⅡ对动态扫描LED显示电路进行仿真。

显示电路模块封装图如下:

 

程序如下:

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYSCAN_LEDIS

PORT(A:

INSTD_LOGIC_VECTOR(6DOWNTO0);

B:

INSTD_LOGIC_VECTOR(6DOWNTO0);

CLK:

INSTD_LOGIC;

E:

OUTSTD_LOGIC_VECTOR(6DOWNTO0);

BT:

OUTSTD_LOGIC_VECTOR(1DOWNTO0));

END;

ARCHITECTUREONEOFSCAN_LEDIS

SIGNALN:

STD_LOGIC_VECTOR(1DOWNTO0);

BEGIN

PROCESS(N)

BEGIN

CASENIS

WHEN"00"=>BT<="01";E<=A;

WHEN"01"=>BT<="10";E<=B;

WHENOTHERS=>NULL;

ENDCASE;

ENDPROCESS;

PROCESS(CLK)

BEGIN

IFCLK'EVENTANDCLK='1'THEN

N<=N+1;

ENDIF;

ENDPROCESS;

END;

七段数码显示电路仿真图:

2.4译码电路模块

本模块上接键盘扫描模块,下接七段数码显示电路模块。

主要功能是实现键盘的译码。

该模块封装图如下:

 

具体程序如下:

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

ENTITYkeycodeIS

PORT(X:

INSTD_LOGIC_VECTOR(2DOWNTO0);

Y:

INSTD_LOGIC_VECTOR(3DOWNTO0);

XT:

INSTD_LOGIC;

C,D:

OUTSTD_LOGIC_VECTOR(6DOWNTO0):

="0111111";

CO:

OUTSTD_LOGIC_VECTOR(3DOWNTO0));

ENDkeycode;

ARCHITECTUREyimaOFkeycodeIS

SIGNALE:

STD_LOGIC_VECTOR(3DOWNTO0);

SIGNALF:

STD_LOGIC_VECTOR(3DOWNTO0);

SIGNALS,EN,EN1:

STD_LOGIC;

BEGIN

PROCESS(X,Y)

VARIABLExy:

STD_LOGIC_VECTOR(6DOWNTO0);

BEGIN

xy:

=(X&Y);

IFXT='1'THEN

CASExyIS

WHEN"1101110"=>E<="0000";C(6downto0)<="0111111";

WHEN"1101101"=>E<="0001";C(6downto0)<="0000110";

WHEN"1101011"=>E<="0010";C(6downto0)<="1011011";

WHEN"1100111"=>E<="0011";C(6downto0)<="1001111";

WHEN"1011110"=>E<="0100";C(6downto0)<="1100110";

WHEN"1011101"=>E<="0101";C(6downto0)<="1101101";

WHEN"1011011"=>E<="0110";C(6downto0)<="1111100";

WHEN"1010111"=>E<="0111";C(6downto0)<="0000111";

WHEN"0111110"=>E<="1000";C(6downto0)<="1111111";

WHEN"0111101"=>E<="1001";C(6downto0)<="1100111";

WHEN"0111011"=>CO<="1010";

WHEN"0110111"=>CO<="1011";

WHENOTHERS=>E<="0000";C(6downto0)<="0111111";

ENDCASE;

ELSIFXT='0'THEN

CASExyIS

WHEN"1101110"=>F<="0000";D(6downto0)<="0111111";

WHEN"1101101"=>F<="0001";D(6downto0)<="0000110";

WHEN"1101011"=>F<="0010";D(6downto0)<="1011011";

WHEN"1100111"=>F<="0011";D(6downto0)<="1001111";

WHEN"1011110"=>F<="0100";D(6downto0)<="1100110";

WHEN"1011101"=>F<="0101";D(6downto0)<="1101101";

WHEN"1011011"=>F<="0110";D(6downto0)<="1111100";

WHEN"1010111"=>F<="0111";D(6downto0)<="0000111";

WHEN"0111110"=>F<="1000";D(6downto0)<="1111111";

WHEN"0111101"=>F<="1001";D(6downto0)<="1100111";

WHENOTHERS=>E<="0000";D(6downto0)<="0111111";

ENDCASE;

ENDIF;

ENDPROCESS;

END;

键盘译码电路仿真波形图:

2.5密码控制电路模块

密码控制电路是本次课题设计的核心部分,我们通过密码控制来断定数字锁的开或关。

当密码输入时,按下确定键,输入数字和所存的密码进行比较,若相同则进入开锁状态。

若输入密码不正确则立刻进入报警状态,然后按下清零键,重新输入密码。

密码控制封装图如下:

具体程序如下:

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

ENTITYkongzhiIS

PORT(E_IN:

INSTD_LOGIC_VECTOR(3DOWNTO0);

F_IN:

INSTD_LOGIC_VECTOR(3DOWNTO0);

CO_IN:

INSTD_LOGIC_VECTOR(3DOWNTO0);

K,M:

OUTSTD_LOGIC);

END;

ARCHITECTUREluojiOFkongzhiIS

SIGNALG,H:

STD_LOGIC_VECTOR(3DOWNTO0):

=‘0‘;

SIGNALS,EN,EN1:

STD_LOGIC;

SIGNALCOUNT1,COUNT2:

STD_LOGIC:

='0';

SIGNALCO:

STD_LOGIC_VECTOR(3DOWNTO0);

BEGIN

PROCESS(CO_IN)

begin

IFCO_IN="1011"THEN

EN1<='1';

ELSIFCO_IN="1010"THEN

EN<='0';EN1<='0';

ENDIF;

if(S='1')and(en='1')and(count1='0')then

G(3downto0)<=E_IN(3downto0);

H(3downto0)<=F_IN(3downto0);

count1<=not(count1);

endif;

if(en1='1')and(count2='0')then

if(E_IN(3downto0)=G(3downto0)andF_IN(3downto0)=H(3downto0))then

k<='1';EN<='1';s<='1';

else

k<='0';m<='1';

endif;

count2<=not(count2);

ELSif(en='0')and(en1='0')then

count1<='0';count2<='0';k<='0';s<='0';m<='0';

endif;

ENDPROCESS;

END;

三、调试下载

1、引脚锁定:

这个过程中特别要注意的是,在锁定引脚后必须再通过MAX+plusⅡ的编译器“Compiler”,对文件重新进行编译一次,以便将引脚信息编入下载文件中。

2、连接线路:

选择主菜单“MAX+plusⅡ”中的“Programmer”选项,改变为适合实验箱的模式,按照引脚锁定连接好线路,打开电源。

3、正式下载:

单击“Configure”按钮,向EP1K30下载配置文件,如果连接无误,将出现报告配置完成的信息提示“ConfigurationComplete”。

总框图如下:

 

四、心得体会

为期一周的课程设计结束了,刚开始由于对嵌入式系统不熟悉,拿到这个课题时毫无头绪,根本不知道从何处入手,并且在设计过程中遇到了很多的问题,但老师和同学的帮助下,加上自己的努力,终于逐个解决了每一个难题。

在这两周中的学习使我对EDA这门课程有了进一步的了解,使我加强了动手、思考和解决实际问题的能力。

并让我深刻的体会到,嵌入式系统的应用十分广泛,运行硬件描述语言,能很容易地设计出具有严格要求的数字锁。

在做完每一个单元模块后,都要验证它是否能够满足此单元的功能。

有时候就是按照了原理来连接,但就是不能实现预期的功能。

这就需要细心地找问题,是不是哪根线坏了,还是哪块芯片坏了或接触不好,但有时也存在原理上的错误。

在设计过程中,同时也暴露出了自身的许多不足,如自己自主解决问题的能力有所欠缺,这在以后需要更好的加强。

同时在此设计过程中还用到了MAX+PLUSⅡ等软件,我更熟悉了此软件的使用,这对以后的工作和解决实际问题都有了很好的帮助。

我感觉本次课程设计我的收获还是颇多的!

 

五、参考文献

1.康华光主编.电子技术基础(数字部分),高等教育出版社。

2.彭介华主编,电子技术课程设计指导,高等教育出版社。

3.张原编著,可编程逻辑器件设计及应用,机械工业出版社。

4.MAX+PLUSⅡ入门

5.刘洪喜,陆颖编著.VHDL电路设计实用教程,清华大学出版社

 

河南机电高等专科学校

EDA课程设计报告

设计题目:

基于CPLD的数字锁

系部:

电子通信工程系

专业:

医用电子仪器与维护

班级:

091

学生姓名:

郭呈芬

学号:

090411102

成绩:

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

当前位置:首页 > 解决方案 > 学习计划

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

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