EDA电子密码锁课程教学设计
数字密码锁课程设计eda
数字密码锁课程设计eda一、课程目标知识目标:1. 学生理解数字密码锁的基本原理,掌握其组成部分及功能。
2. 学生掌握二进制数与十进制数的转换方法,并能应用于数字密码锁的设计与破解。
3. 学生了解数字密码锁的安全性评估标准,能分析常见密码锁的优缺点。
技能目标:1. 学生能运用所学知识设计简单的数字密码锁,具备实际操作能力。
2. 学生能通过小组合作,进行数字密码锁的破解,提高问题解决能力。
3. 学生能运用所学知识,对数字密码锁的安全性进行评估,提升分析能力。
情感态度价值观目标:1. 学生对数字密码锁产生兴趣,培养对电子技术的热爱。
2. 学生在小组合作中,学会沟通、协作,培养团队精神。
3. 学生认识到数字密码锁在生活中的应用,增强学以致用的意识。
本课程针对五年级学生,结合其年龄特点,注重培养学生的学习兴趣和动手能力。
课程性质为实践性较强的信息技术课程,要求学生在掌握基本原理的基础上,能将所学知识应用于实际操作。
通过本课程的学习,旨在提高学生的信息技术素养,培养创新精神和实践能力。
教学要求以学生为主体,注重启发式教学,引导学生主动探索、合作交流,实现课程目标的达成。
后续教学设计和评估将围绕以上具体学习成果展开。
二、教学内容1. 数字密码锁基本原理:介绍密码锁的起源、发展及分类,重点讲解数字密码锁的工作原理和组成部分。
2. 二进制与十进制转换:回顾二进制与十进制的概念,讲解转换方法,并通过实例进行操作演示。
3. 数字密码锁设计与制作:讲解数字密码锁的设计方法,引导学生动手制作简单的数字密码锁,并分析其安全性。
4. 数字密码锁破解:介绍常见的密码破解方法,组织学生进行小组合作,尝试破解数字密码锁,提高问题解决能力。
5. 数字密码锁安全性评估:讲解安全性评估标准,分析各类数字密码锁的优缺点,提升学生的分析能力。
教学内容安排和进度:第一课时:数字密码锁基本原理、二进制与十进制转换;第二课时:数字密码锁设计与制作;第三课时:数字密码锁破解;第四课时:数字密码锁安全性评估。
EDA电子密码锁课设
EDA课程设计报告书题目:电子密码锁成绩:设计题目:电子密码锁设计要求:1.用10个按键代表0~9,输入后应转换为8421BCD码,如按“6”后转换为“0110”;2.密码位数为6位,具有密码设置和修改功能;3.开锁和报警均有LED灯指示,且报警有声音提示,报警音频率为750Hz,每鸣叫1秒停1秒,共鸣叫5响;4.用6个数码管显示输入的密码。
设计步骤:1.电路模块化。
将要实现的功能电路分成若干小的功能模块,各自实现自己的功能。
2.设计具体化。
具体设计各个模块,然后将模块组合起来,完成课程设计的要求。
3.设计实现。
将电路下载到实验箱上,实现设计的电路。
设计过程及内容总体设计文字描述:总体设计共分为4个模块,分别为密码输入模块,密码校验模块,报警模块,输出显示模块。
主要模块描述:i.密码输入模块:密码输入模块电路图如图所示:初始密码保存仿真图如图所示:密码输入检验时仿真图如图所示:输入模块主要采用优先编码器,优先编码器允许输入信号多路同时有效,对多路信号的优先级别预先进行排队,同一时刻只对优先级别最高的进行编码,即优先级别低的输入信号只有在优先级别高的信号都为无效信号时,才能编码。
因此采用74148优先编码器,把从键盘的十进制输入转化成电路系统内部的二进制输入。
由D触发器构成的寄存器用来存储密码。
仿真时,当输入端bu3给低电频时,电路进行保存。
当输入端bu2给低电频时,电路进行检验。
ii.密码校验模块:校验模块电路图如图所示:校验模块比较相等时仿真图:校验模块比较不相等时仿真图:校验模块上部分连向输入检验模块,下部分连向输入的保存模块,用74194双向移位寄存器进行输入,输入后按下确定键,检验部分与保存部分开始比较,当保存部分与检验部分结果相等时,输出结果为1,此时报警模块中绿灯亮,当保存部分与检验部分结果不相等时,输出结果为0,此时红灯亮,蜂鸣器间歇报警。
iii.报警模块:报警模块电路图如图所示:分频模块与蜂鸣模块如下图所示:实验箱可提供732hz的频率,因此通过3个计数器74161进行分频得到1hz频率,作为蜂鸣模块的时钟。
EDA综合课程设计电子密码锁
EDA综合课程设计----电子密码锁一.EDA综合设计的任务和要求1 EDA综合设计的任务:利用Verilog HDL语言来设计一个8位的电子密码锁,并用FPGA 实现。
2 EDA综合设计的要求:(1)设计一个简单的数字密码锁,密码为8位,其功能:开锁代码为8位二进制数,串行输入,当输入代码的位数和位值与锁内给定的密码一致,且按规定程序开锁时方可开锁,并点亮开锁指示灯。
否则,系统进入“错误”状态,并发出报警信号。
(2)串行电子密码锁的报警方式是点亮指示灯,并使喇叭鸣叫报警,直到按下复位开关,报警才停止。
此时,电子密码锁又进入等待下一次开锁的状态。
(3)扩展功能:锁内给定的密码可调,且预置方便,保密性好。
3 verilog HDL与FPGA简介Verilog HDL是一种硬件描述语言(HDL:Hardware Description Language),是一种以文本形式来描述数字系统硬件的结构和行为的语言,用它可以表示逻辑电路图、逻辑表达式,还可以表示数字逻辑系统所完成的逻辑功能。
Verilog HDL和VHDL是目前世界上最流行的两种硬件描述语言,都是在20世纪80年代中期开发出来的。
前者由Gateway Design Automation公司(该公司于1989年被Cadence 公司收购)开发。
两种HDL均为IEEE标准。
[1]Verilog HDL是一种优秀的硬件描述语言,它与C语言有许多相似之处,并继承和借鉴了C 语言的多种操作符和语法结构,有C语言基础的人很快就能够学习并使用该语言。
电子设计中,系统开发平台为QuartusⅡ。
QuartusⅡ界面友好,使用便捷,被誉为业界最易用易学的EDA软件。
在Quartus Ⅱ上可以完成设计输入、元件适配、时序仿真和功能仿真、编程下载整个流程,它提供了一种与结构无关的设计环境,是设计者能方便地进行设计输入、快速处理和器件编程。
FPGA(Field-Programmable Gate Array),即现场可编程门阵列,它是在PAL、GAL、CPLD等可编程器件的基础上进一步发展的产物。
EDA课程设计电子密码锁.
1 概述和设计要求1.1概述随着科技的发展,电子产品的应用越来越广泛,电子电路的设计也越来越重要。
随着人们生活水平的提高,如何实现家庭防盗这一问题也变得尤其的突出,传统的机械锁由于结构简单,被撬的事件屡见不鲜,电子锁由于其保密性高,使用灵活性好,安全系数高,受到广大用户的亲昵。
同时随着电子产品向智能化和微型化的不断发展,数字逻辑电路电子芯片已成为电子产品研制和开发首选的控制器。
用电子逻辑电路设计的密码锁经实际操作表明,该密码锁具有安全、实用、成本低等优点,符合一般用锁的需要,具有一定的现实意义。
在本次课程设计中,我的的题目是电子密码锁,由输入密码、设定密码、寄存电路、比较电路、显示电路、修改密码组成。
主要工作部分是将输入密码与正确密码进行比较,密码正确时红色发光二极管亮,表示开锁成功,密码错误则蜂鸣器响三秒,表示开锁失败。
同时经过显示译码器作用到数码显示器显示密码。
随着电子产品向智能化和微型化的不断发展,数字逻辑电路电子芯片已成为电子产品研制和开发首选的控制器。
1.2设计要求利用基于所学EDA以及QuartusII7.2软件相关知识设计一个具有较高安全性和较低成本的通用电子密码锁,其具体功能要求如下:(1) 数码输入:每按下一个数字键,就输入一个数值,并在显示器上的最右方显示出该数值,同时将先前输入的数据依序左移一个数字位置。
(2) 数码清除:按下此键可清除前面所有的输入值,清除成为“0000”。
(3) 密码更改:按下此键时会将目前的数字设定成新的密码。
(4) 激活电锁:按下此键可将密码锁上锁。
(5) 解除电锁:按下此键会检查输入的密码是否正确,密码正确即开锁。
2功能模块整体结构设计作为通用电子密码锁,主要由三个部分组成:数字密码输入电路、密码锁控制电路和密码锁显示电路。
根据以上选定的输入设备和显示器件,并考虑到实现各项数字密码锁功能的具体要求,整个电子密码锁系统的总体组成框图如图2.1所示。
(1) 密码锁输入电路包括时序产生电路、键盘扫描电路、键盘弹跳消除电路、键盘译码电路等几个小的功能电路。
eda课程设计--电子密码锁
绍兴文理学院数理信息学院课程设计报告书题目电子密码锁设计姓名XXX学号XXX专业班级电信指导教师时间2013年1月14日课程设计任务书 班 级电信XXX 姓 名 XXX题目电子密码锁设计 技术参数、设计要求、检测数据等在EDA 实验箱上利用FPGA 、4*4键盘及数码管实现电子密码锁,功能要求如下: ● 模拟实现电子密码锁的开锁、解锁、改密码等基本功能 ● 实现万能密码功能 ● 当用户密码连续3次输入错误时,报警并锁定键盘 ● 当用户密码输入时间超过一定值(如30秒)时,提示超时 ● 在密码设置状态下输入密码时,所输入数字在数码管显示;其余状态下,所输密码在对应数码管上以特殊字符屏蔽显示 设计进度安排或工作计划 2013.1.4 ~2013.1.4: 任务分配,熟悉课题,查询相关资料,出方案初稿。
2013.1.5~2013.1.5: 方案交流并定稿,划分设计模块,课程设计开展。
2013.1.6~2013.1.7: 各模块设计实现及调试、验证。
(其中8、9 号暂停)2013.1.10~2013.1.13: 设计整体实现、调试及验证,并开始撰写报告。
2013.1.14~2013.1.15: 设计完成,课程设计报告撰写并定稿,上交。
其它认真阅读EDA 技术课程设计报告撰写规范;课题小组经协商好要指定组长并明确分工,形成良好团队工作氛围;基于课题基本要求,各小组课再细化、增加要求;课题小组每成员均需各自撰写一份课程设计报告。
电子密码锁设计摘要本文介绍了一种采用单片FPGA芯片进行电子密码锁的设计方法,主要阐述如何使用新兴的EDA器件取代传统的电子设计方法,利用FPGA的可编程性,简洁而又多变的设计方法,缩短了研发周期。
电子密码锁是一种通过密码输入来控制电路或是芯片工作,从而控制机械开关的闭合,完成开锁、闭锁任务的电子产品。
它的种类很多,有简易的电路产品,也有基于芯片的性价比较高的产品。
密码锁是以芯片为核心,通过编程来实现的,其性能和安全性已大大超过了机械锁。
eda电子密码锁课程设计
eda电子密码锁课程设计一、课程目标知识目标:1. 理解EDA(电子设计自动化)的基本概念,掌握其在电子密码锁设计中的应用。
2. 学习并掌握电子密码锁的基本原理,包括密码设置、存储、识别和验证过程。
3. 掌握电子密码锁设计中涉及的电子元件、电路图绘制及电路功能。
技能目标:1. 能够运用EDA软件完成电子密码锁的电路设计,具备基本的电路仿真能力。
2. 能够运用编程语言(如C语言)编写简单的密码验证程序,实现电子密码锁的功能。
3. 学会使用常见的电子测量工具,对电子密码锁进行调试和故障排查。
情感态度价值观目标:1. 培养学生对EDA技术及其在电子设计中的应用产生兴趣,激发学生的创新意识和探索精神。
2. 培养学生团队协作意识,提高沟通与协作能力,学会共同解决问题。
3. 增强学生的安全意识,了解电子密码锁在实际应用中的重要性,培养学生的责任心。
课程性质:本课程为实践性较强的课程,注重理论知识与实际操作相结合,旨在提高学生的实际动手能力和创新能力。
学生特点:学生具备一定的电子基础知识,对EDA技术有一定了解,但对电子密码锁的设计和制作相对陌生。
教学要求:结合课程性质、学生特点,将课程目标分解为具体的学习成果,通过理论教学、实践操作、团队协作等多种教学方式,确保学生能够达到课程目标。
同时,注重过程评估和成果评估,以提高教学效果。
二、教学内容根据课程目标,教学内容分为以下三个部分:1. 理论知识学习- 电子设计自动化(EDA)基本概念与原理- 电子密码锁的工作原理及其电路组成- 密码学基础,包括密码设置、存储和验证方法教学大纲:参照教材相关章节,安排2个课时进行理论知识学习。
2. 实践操作与技能培养- EDA软件使用,包括电路图绘制、仿真与调试- 编程语言(C语言)基础,编写密码验证程序- 电子元件识别与使用,完成电子密码锁的搭建教学大纲:实践操作部分安排4个课时,分为两次课程完成。
3. 团队协作与创新能力培养- 分组讨论,共同设计电子密码锁方案- 成果展示,组间交流与评价- 故障排查与优化,提高电子密码锁的安全性与稳定性教学大纲:团队协作部分安排2个课时,在实践操作过程中穿插进行。
EDA课程设计—电子密码锁
EDA课程设计—电子密码锁————————————————————————————————作者:————————————————————————————————日期:2目录摘要 (1)1绪论 (2)1.1电子密码锁简介 (2)1.2电子密码锁的国内外研究现状和发展趋势 (2)1.3 EDA技术及VHDL语言 (3)2电子密码锁总体设计 (5)2.1总体设计方案 (5)2.2设计思路简述 (6)2.3整体组装设计原理图 (7)3单元模块程序设计 (8)3.1 电子密码锁输入模块 (8)3.1.1输入模块程序 (8)3.1.2输入模块单元 (11)3.1.3输入模块仿真 (11)3.2电子密码锁系统控制模块 (11)3.2.1 控制模块程序 (12)3.2.2 控制模块单元 (14)3.2.3 控制模块仿真图 (14)3.3电子密码锁系统显示模块 (15)3.3.1 显示模块程序 (15)3.3.2 显示模块单元 (16)3.3.3 显示模块仿真 (16)4小结 (17)参考文献 (18)电子密码锁设计摘要随着人们生活水平的提高,如何实现家庭防盗这一问题逐渐变的尤为突出,传统的机械锁由于其构造简单,故安全性能不容乐观,同时电子技术的高速发展使得具有防盗报警等功能的电子密码锁代替密码量少、安全性差的机械式密码锁已是必然趋势。
电子密码锁是一种通过密码输入来控制电路或是芯片工作,从而控制机械开关的闭合,完成开锁、闭锁任务的电子产品。
目前设计密码锁的方法有很多,而用VHDL可以更加快速、灵活地设计出符合各种要求的密码锁,优于其他设计方法。
关键字:家庭防盗安全电子密码锁VHDL11绪论1.1电子密码锁简介电子密码锁是一种通过密码输入来控制电路或是芯片工作,从而控制机械开关的闭合,完成开锁、闭锁任务的电子产品。
它的种类很多,有简易的电路产品,也有基于芯片的性价比较高的产品。
现在应用较广的电子密码锁是以芯片为核心,通过编程来实现的。
EDA课程设计 ——3位电子密码锁
EDA课程设计报告电子密码锁设计学校:海南大学院(系):信息学院专业:通信一班学生姓名:学号:组员:指导教师:——2013年6月13日目录目录 (1)一.概述 (2)二.设计要求 (2)三.总体框图 (2)四.功能模块 (3)4.1 输入模块 (3)4.2 控制模块 (6)4.5显示模块 (11)五.总体设计电路图 (13)六.设计心得体会 (14)一.概述电子密码锁在生活中十分常见,在这我将设计一个具有较低成本的电子密码锁,本文讲述了我整个设计过程及收获。
讲述了电子密码锁的的工作原理以及各个模块的功能,并讲述了所有部分的设计思路,对各部分电路方案的选择、元器件的筛选、以及对它们的调试、对波形图的分析,到最后的总体图的分析。
二.设计要求本设计名称为电子密码锁,用四个模块,分别为输入模块、控制模块、扫描器模块、显示模块,来控制密码的输入、验证与显示。
设计所要实现的功能为:1 数码输入:手动输入3组四位二进制密码。
2 数码验证:开锁时输入密码后,拨动RT键使其为高电平,而CHANGE为低电平检测,密码正确时开锁,输出LOCK灯亮,表示开锁成功。
3 错误显示:当密码输入错误时,LOCK灯亮,LOCK灭,表示开锁失败。
4 更改密码:当改变密码时,按下CHANGE键使其为高电平,而RT为低电平时,可改变密码。
5 密码清除:按下RST可清除前面的输入值,清除为“000”。
三.总体框图1)设计方案:电子密码锁,主要由三部分组成:密码输入电路、密码锁控制电路和密码锁显示电路。
作为电子密码锁的输入电路,可选用的方案有拨码与按键来控制输入和触摸式键盘输入等多种。
拨码与按键和触摸式4*4键盘相比简单方便而且成本低,构成的电路简单,本设计中采用拨码与按键来作为该设计的输入设备。
数字电子密码锁的显示信息电路可采用LED数码显示管和液晶屏显示两种。
液晶显示具有高速显示、可靠性高、易于扩展和升级的特点,但是普通的液晶存在亮度低、对复杂环境适应能力差的特点,但是在本设计中任然使用LED数码管。
EDA课程设计电子密码锁
1概述和设计要求1.1概述随着科技的发展,电子产品的应用越来越广泛,电子电路的设计也越来越重要。
随着人们生活水平的提高,如何实现家庭防盗这一问题也变得尤其的突出,传统的机械锁由于结构简单,被撬的事件屡见不鲜,电子锁由于其保密性高,使用灵活性好,安全系数高,受到广大用户的亲昵。
同时随着电子产品向智能化和微型化的不断发展,数字逻辑电路电子芯片已成为电子产品研制和开发首选的控制器。
用电子逻辑电路设计的密码锁经实际操作表明,该密码锁具有安全、实用、成本低等优点,符合一般用锁的需要,具有一定的现实意义。
在本次课程设计中,我的的题目是电子密码锁,由输入密码、设定密码、寄存电路、比较电路、显示电路、修改密码组成。
主要工作部分是将输入密码与正确密码进行比较,密码正确时红色发光二极管亮,表示开锁成功,密码错误则蜂鸣器响三秒,表示开锁失败。
同时经过显示译码器作用到数码显示器显示密码。
随着电子产品向智能化和微型化的不断发展,数字逻辑电路电子芯片已成为电子产品研制和开发首选的控制器。
1.2设计要求利用基于所学EDA以及Quartusll7.2软件相关知识设计一个具有较高安全性和较低成本的通用电子密码锁,其具体功能要求如下:(1)数码输入:每按下一个数字键,就输入一个数值,并在显示器上的最右方显示出该数值,同时将先前输入的数据依序左移一个数字位置。
(2)数码清除:按下此键可清除前面所有的输入值,清除成为0000'。
(3)密码更改:按下此键时会将目前的数字设定成新的密码。
(4)激活电锁:按下此键可将密码锁上锁。
(5)解除电锁:按下此键会检查输入的密码是否正确,密码正确即开锁。
2功能模块整体结构设计作为通用电子密码锁,主要由三个部分组成:数字密码输入电路、密码锁控制电路和密码锁显示电路。
根据以上选定的输入设备和显示器件,并考虑到实现各项数字密码锁功能的具体要求,整个电子密码锁系统的总体组成框图如图2.1所示。
(1)密码锁输入电路包括时序产生电路、键盘扫描电路、键盘弹跳消除电路、键盘译码电路等几个小的功能电路。
EDA-密码锁
EDA课程设计——电子密码锁一、设计目的:在学习完大部分内容后,设计一个功能和市面上一模一样的“4位数电子密码锁”,可让学生学习查找相关资料,并对小型项目开发有一定的认识。
使学生能进行模块化设计,对每部分电路进行讨论、说明与仿真验证,最后在整合起来。
二、所需器材:本设计所需的硬件主要有:矩阵键盘、七段译码器,七段管脚数码管。
三、设计内容和要求:1、数码输入:每按下一个数字键,就输入一个数值,并在显示器上的最右方显示,将先前的输入数据依序左移一个数字位置。
2、数码清除:按下此键可清除之前所有的输入值,清除成为“0000”。
3、密码更改:按下此键时会将目前的数字设定成新的密码。
4、激活电锁:按下此键可将密码锁上锁。
5、解除电锁:按下此键会检查输入的密码是否正确,密码正确即开锁。
四、设计程序和调试情况:实验程序如下:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity key_led isport (x :in std_logic_vector(3 downto 0);y :out std_logic_vector(3 downto 0);clk :in std_logic;clr :in std_logic;ch_code :in std_logic;dx :out std_logic_vector(6 downto 0);wx :out std_logic_vector( 3 downto 0);open_key :out std_logic);end key_led;architecture one of key_led issignal count :std_logic_vector(10 downto 0);signal clk_key :std_logic;signal clk_key_1 :std_logic;signal clk_led :std_logic;signal key_in_0 :std_logic_vector(7 downto 0);signal key_in :std_logic_vector(4 downto 0);signal y_0 :integer range 0 to 3;signal y_temp :std_logic_vector(3 downto 0);signal SG :std_logic_vector(6 downto 0);signal j :std_logic_vector(2 downto 0);signal i :std_logic_vector(2 downto 0);signal i_test :std_logic_vector(2 downto 0);subtype one is std_logic_vector(6 downto 0);type two is array (3 downto 0) of one;signal Q :two;signal code :two;signal key_count :std_logic_vector(2 downto 0);beginfrequency division:process(clk)beginif(clk'event and clk='1') thenif(count="11111111111") thencount<=(others=>'0');else count<=count+1;end if;end if;end process;clk_key<=count(1);clk_led<=count(0);--再产生clk_key_1分频。
EDA电子密码锁课程设计
目录前言 (1)1 设计内容与目的 (1)1.1 设计内容 (1)1.2 设计目的 (1)2 方案设计 (2)2.1 设计总体框图 (2)2.2 电路原理图 (2)2.3 键盘接口电路 (2)2.4 电锁控制电路 (2)2.5 输出显示电路 (3)3 功能电路的设计 (3)3.1 键盘接口电路 (3)3.2 时序产生电路 (4)3.3 键盘扫描电路 (5)3.4 键盘消抖电路 (8)3.5 键盘译码电路 (9)3.6 按键存储电路 (11)3.7 电锁控制电路设计 (15)4 系统仿真 (16)5 程序清单 (16)6 参考文献 (25)电子密码锁前言电子密码锁的使用体现了人们消费水平、保安意识和科技水平的提高,而且避免了携带甚至丢失钥匙的麻烦。
目前设计密码锁的方法很多,例如用传统的PCB 板设计、用PLC设计或者用单片机设计等等。
而用VHDL可以更加快速、灵活地设计出符合各种要求的密码锁,优于其他设计方法。
VHDL是一种符合IEEE标准的硬件描述语言,其最大的特点是借鉴高级程序设计语言的功能特性,对电路的行为与结构进行高度抽象化、规范化的形式描述,并对设计的不同层次、不同领域的模拟验证与综合优化等处理,使设计过程廷到高度自动化。
1 设计内容与目的:1.1 设计内容:设计一个简单的数字电子密码锁,密码为 4 位。
要求具备如下功能:(1)如果输入数字键,第一个数字会从显示器的最右端开始显示,此后每按下一个数字键,显示器上的数字必须往左移动一格,以便将新的数字显示出来。
(2)本密码锁为四位密码锁,当输入的数字超过4个时,不会显示第四个以后的数字。
(3)按下清零键,清除所有输入的数字,即做归零动作。
(4)按下密码确认键,检查输入的密码是否正确,密码正确即开锁。
(5)按下密码变更键,将当前输入的数字设置成新密码。
(6)设计一个万能密码,只要输入万能密码即开锁。
1.2 设计目的:随着人们生活水平的提高,如何实现家庭防盗这一问题也变的尤其的突出,传统的机械锁由于其构造的简单,被撬的事件屡见不鲜,电子锁由于其保密性高,使用灵活性好,安全系数高,受到了广大用户的亲昵,电子密码锁的使用也体现了人们消费水平、保安意识和科技水平的提高,而且避免了携带甚至丢失钥匙的麻烦。
电子锁eda课程设计
电子锁eda课程设计一、课程目标知识目标:1. 学生能理解电子锁的基本工作原理,掌握EDA(电子设计自动化)软件的基本操作。
2. 学生能描述电子锁设计中的电路组成、元件功能及其相互关系。
3. 学生能运用数字电路知识,分析并设计简单的电子锁电路。
技能目标:1. 学生能够独立使用EDA软件完成电子锁电路的设计、仿真和布线。
2. 学生能够通过小组合作,解决电子锁设计过程中遇到的问题,进行有效沟通与协作。
3. 学生能够运用所学知识,对电子锁进行调试和优化,提高电路性能。
情感态度价值观目标:1. 培养学生对电子设计的兴趣和热情,激发创新意识。
2. 培养学生严谨的科学态度,养成良好的实验操作习惯。
3. 培养学生团队合作精神,提升沟通与交流能力,形成尊重他人、共同进步的价值观念。
分析课程性质、学生特点和教学要求,本课程目标旨在使学生通过实践操作,掌握电子锁设计的基本知识和技能,培养创新意识和团队协作能力,为后续学习打下坚实基础。
课程目标具体、可衡量,便于教师进行教学设计和评估。
二、教学内容本课程教学内容主要包括以下三个方面:1. 电子锁原理及其电路组成- 了解电子锁的基本工作原理,如密码锁、指纹锁等。
- 学习电子锁电路的组成,包括微控制器、键盘、显示、传感器等元件。
- 引导学生阅读教材中相关章节,理解各元件的功能及相互关系。
2. EDA软件操作与应用- 学习EDA软件的基本操作,如原理图绘制、仿真、布线等。
- 教学大纲中明确各操作步骤,安排实践操作课时,确保学生熟练掌握。
- 结合教材实例,指导学生运用EDA软件进行电子锁电路设计。
3. 电子锁设计与实践- 学习电子锁设计流程,包括需求分析、电路设计、仿真、调试等。
- 制定详细的教学进度,安排小组合作设计任务,明确各阶段目标和时间节点。
- 引导学生结合所学知识,完成电子锁设计与制作,并进行性能评估和优化。
教学内容科学系统,与教材紧密关联,注重理论与实践相结合,旨在帮助学生掌握电子锁设计和EDA软件应用技能,培养实际操作能力。
EDA课程设计电子密码锁
图3—5控制模块的原理图
图3—6控制模块的时序图
在电路图中,可见仍然有shangsuo和kaisuo使能端,仍然用enable=“01”有效来控制,dout1是前个模块的输出端口,q是控制开锁成功的led灯的亮灭,当dout1=”111”时为1,其他情况为0,p是蜂鸣器的控制端口,与q的值相反,即控制开锁成功为0,其他情况下为1,注意是在enable=“01”时本模块有效,即在此情况下的其他情况下p=1.
本密码锁在上锁开关为1,开锁开关为0时进入上锁状态,此时上锁状态指示灯亮,在三个开关上输入三个初始密码,此时上锁成功指示灯亮,当上锁开关为0,开锁开关为1时进入开锁状态,此时开锁状态指示灯亮,在三个开关上输入三个开锁密码,如果这三个开锁密码与三个初始密码相同则开锁成功指示灯亮,并且蜂鸣器不报警,如果这三个开锁密码与三个初始密码不相同则开锁成功指示灯不亮,并且蜂鸣器报警。
(2)。模块说明
本模块正是利用了D触发器的上述优点,才得以解决燃眉之急。本模块例化的电路图和时序图如下
图3—1上锁模块的原理图
图3-2上锁模块的时序图
本模块还有一点值得注意的是,鉴于对满足课设要求和对所有模块的控制,采用了语句
Enable<=shangsuo&kaisuo;
即把两个使能端shangsuo和kaisuo并置起来付给enable,假如shangsuo和kaisuo分别为‘1'和‘0',则enable就是“10”;以此类推。
其实这个课设任务也不是太难,就是密码存储和比较两个功能,其他的都很简单,就是LED的控制和蜂鸣器的控制,所以本课设分成三个模块就可以搞定:第一个是存储模块即后面的上锁模块,像上面所说的用D触发器来实现,第二个是比较模块即开锁模块,一个if语句就能搞定,最后是密码输入正确与否以及蜂鸣器的控制,很简单,不在话下,具体框图如下所示:
eda课程设计电子密码锁
eda课程设计 电子密码锁一、课程目标知识目标:1. 学生能够理解电子密码锁的基本原理,掌握其电路组成及功能。
2. 学生能够了解数字电路的基本知识,包括逻辑门、触发器等,并运用这些知识分析电子密码锁的工作原理。
3. 学生能够掌握二进制与十进制的转换方法,并应用于电子密码锁的设计。
技能目标:1. 学生能够运用所学知识设计并搭建简单的电子密码锁电路。
2. 学生能够通过实际操作,调试并优化电子密码锁的性能。
3. 学生能够运用EDA软件(如Multisim、Protel等)进行电子密码锁电路的设计、仿真和测试。
情感态度价值观目标:1. 培养学生动手实践、解决问题的能力,增强自信心和成就感。
2. 培养学生团队协作精神,学会沟通与分享,提高合作能力。
3. 增强学生对电子科技的兴趣和热爱,激发创新意识和潜能。
课程性质分析:本课程为电子技术实践课程,注重理论联系实际,强调学生的动手能力和创新能力。
学生特点分析:学生处于高中阶段,具有一定的电子基础和逻辑思维能力,对实践操作充满兴趣。
教学要求:结合课程性质和学生特点,将课程目标分解为具体的学习成果,以项目为导向,引导学生通过实践探索,完成电子密码锁的设计与制作。
在教学过程中,注重启发式教学,鼓励学生提问、思考、解决问题,培养其创新能力和实际操作能力。
后续教学设计和评估将以此为基础,确保学生达到预定的学习成果。
二、教学内容1. 理论知识:- 数字电路基础知识:逻辑门、触发器、计数器等;- 电子密码锁原理:锁体结构、电路设计、密码设置与识别;- 二进制与十进制转换方法及其应用。
2. 实践操作:- 使用EDA软件(如Multisim、Protel)进行电子密码锁电路设计;- 搭建电子密码锁电路,进行实际操作和调试;- 分析并优化电子密码锁性能,提高其安全性。
3. 教学大纲:- 第一阶段:数字电路基础知识学习,占总课时1/3;- 第二阶段:电子密码锁原理学习,占总课时1/3;- 第三阶段:实践操作,包括EDA软件使用、电路搭建、调试与优化,占总课时1/3。
eda数码锁课程设计
eda数码锁课程设计一、课程目标知识目标:1. 学生能够理解EDA数码锁的基本原理,掌握二进制编码与锁的开启机制之间的关联。
2. 学生能够运用已学的数字逻辑知识,分析并设计简单的EDA数码锁电路。
3. 学生能够描述锁电路中常见电子元件的作用,并解释其工作原理。
技能目标:1. 学生能够运用EDA软件进行简单的电路设计,完成数码锁的仿真。
2. 学生能够通过小组合作,进行电路搭建和调试,解决实际问题。
3. 学生能够运用逻辑思维和问题解决技巧,优化数码锁设计方案。
情感态度价值观目标:1. 培养学生对电子技术和数字逻辑的兴趣,激发他们的探究欲望。
2. 培养学生团队协作精神,学会在合作中互相学习,共同进步。
3. 培养学生勇于面对挑战,敢于尝试,善于总结经验教训的态度。
课程性质分析:本课程为电子设计自动化(EDA)领域的实践课程,结合了数字逻辑、电路原理等知识,旨在提高学生的实际操作能力和创新思维。
学生特点分析:学生为高中生,具备一定的电子基础和逻辑思维能力,对新鲜事物充满好奇心,喜欢动手实践。
教学要求:1. 理论与实践相结合,注重培养学生的实际操作能力。
2. 创设情境,激发学生兴趣,引导学生主动探究。
3. 注重团队合作,培养学生的沟通协调能力。
二、教学内容1. 引入新课:通过介绍数码锁在日常生活中的应用,激发学生对本课程的兴趣。
2. 理论知识:- 数码锁原理介绍,包括锁的工作机制、二进制编码与锁的关系。
- 电子元件知识,如开关、LED灯、按键、集成电路等。
- 数字逻辑基础,如逻辑门、组合逻辑电路等。
3. 实践操作:- EDA软件的使用,学会绘制电路图,进行仿真。
- 电路搭建,学会焊接、调试电路板。
- 设计并搭建简单的数码锁电路。
4. 教学安排与进度:- 第一阶段:理论知识学习,占总课时的30%。
- 第二阶段:EDA软件操作,占总课时的20%。
- 第三阶段:电路搭建与调试,占总课时的30%。
- 第四阶段:项目总结与评价,占总课时的20%。
电子密码锁EDA课程设计报告书
电子密码锁EDA课程设计报告书燕山大学EDA课程设计报告书题目:电子密码锁一、设计题目及要求题目:电子密码锁要求:1. 用10 个按键代表0~9,输入后应转换为8421BCD 码,如按“6”后转换为“0110”;2. 密码位数为6 位,具有密码设置和修改功能;3. 开锁和报警均有LED 灯指示,且报警有声音提示,报警音频率为750Hz,每鸣叫1 秒停1 秒,共鸣叫5 响;4. 用6 个数码管显示输入的密码。
二、设计过程及内容1.设计方案本次EDA设计项目主要由输入模块、数据分路模块、输入及密码寄存模块、比较模块、密码重置模块、显示模块及结果输出报警模块组成。
图一、电路总图Keyinput1为输入模块,其中包含防抖电路,利用74147编码器将单位输入转化成对应的十进制BCD码,并输出按键的脉冲以及计数器所记录按键次数的BCD码,计数器采用74160利用清零端转换成7进制以便记录六位密码。
Cinput1为数据分路模块,输入端为按键表示的4为BCD码和3位二进制地址码,利用74138(3线8线译码器)进行译码,利用四个译码器并联实现利用地址码对输入数据进行并行输出的功能。
Compare为寄存和密码比较模块,输入端为3位地址码、keycp 脉冲、chpw脉冲、六位十进制BCD码并行输入,其中包含的2个cinput模块用以利用输入的地址码将keycpt和chpw脉冲分别送入6个bj模块,6个bj 模块中包含两个寄存器,一个用来寄存系统内密码,一个用来寄存输入的密码,并利用7485进行逐位比较输出结果。
Flash模块为晶体管的扫描模块,输入为6组十进制BCD码,扫描输入cp,利用74151实现利用地址码对6组BCD码的选择输出,最后实现输出端为三位地址码和4位十进制BCD码。
地址码和输出对应循环变化实现数码管的动态显示。
Show1为显示模块,地址码和BCD码为输入,利用7448以直接驱动数码管。
结果输出报警模块包括蜂鸣器和LED指示灯。
eda课程设计电子密码锁
eda课程设计电子密码锁一、课程目标知识目标:1. 学生能理解电子密码锁的基本原理,掌握其电路组成及功能。
2. 学生能描述数字电路基础知识,包括逻辑门、触发器等,并了解它们在电子密码锁中的应用。
3. 学生能解释电子密码锁的安全性分析,了解如何提高电子密码锁的安全性。
技能目标:1. 学生能够设计简单的电子密码锁电路,运用所学知识解决实际问题。
2. 学生能够运用EDA软件进行电路设计、仿真和调试,提高实践操作能力。
3. 学生能够通过小组合作,进行电路搭建和测试,培养团队协作能力和沟通能力。
情感态度价值观目标:1. 学生对电子技术产生兴趣,提高对科学研究的热情。
2. 学生在学习过程中,培养勇于尝试、不断探索的精神,增强自信心。
3. 学生能够认识到电子技术在生活中的应用,激发创新意识,关注社会发展和科技进步。
课程性质:本课程为实践性较强的电子技术课程,结合理论知识和实际操作,培养学生的动手能力和创新能力。
学生特点:学生处于中学阶段,具有一定的电子技术基础和逻辑思维能力,对新鲜事物充满好奇心。
教学要求:教师需结合学生特点,采用启发式教学,引导学生自主探究,注重理论与实践相结合,提高学生的综合运用能力。
通过课程目标的实现,使学生能够将所学知识应用于实际生活中,提高解决实际问题的能力。
后续教学设计和评估将围绕上述具体学习成果展开。
二、教学内容依据课程目标,教学内容主要包括以下几部分:1. 数字电路基础知识:逻辑门、触发器、计数器等基本概念及工作原理,重点讲解与电子密码锁相关的数字电路。
教材章节:第二章“数字电路基础”2. 电子密码锁原理:介绍电子密码锁的电路组成、工作原理及安全性分析。
教材章节:第三章“组合逻辑电路”及第八章“数字电路应用”3. EDA软件使用:学习如何使用EDA软件进行电路设计、仿真和调试。
教材章节:第五章“EDA软件及其应用”4. 电子密码锁设计与制作:指导学生运用所学知识,设计并搭建简单的电子密码锁电路。
密码锁EDA课程设计报告
第1章设计说明1.1 总体设计说明本实验中说要求设计的电子密码锁密码为4位,由三大部分组成,每一部分又包含了若干子电路,将各电路组合起来,就构成了一个整体。
下面对每一大部分分别进行讨论:①、矩阵键盘接口电路设计,由于硬件电路没有提供该矩阵键盘,用开关代替该部分电路。
②、密码锁的控制电路设计③、输出七段显示电路的设计1.2 密码锁功能说明①、数据输入:每按一个数字键,就输入一个数值,并在显示器上的最右上方显示出该数字,并将先前已经输入的数据依序左移一个数字位置。
②、数码清除:按下此键可以清除前面所有的输入值,清除成为“0000”。
③、密码更改:按下此键时将目前的数字设定成新的密码。
④、激活电锁:按下此键可将密码锁上锁。
⑤、解除电锁:按下此键会检查输入的密码是否正确,密码正确即开锁。
第2章硬件说明本设计所需的硬件主要有:七段译码器、发光二极管(用来模拟电子锁,红灯亮为加锁,绿灯亮为解锁)、EPF10K10LC84-4适配器。
我们使用教学使用的EDA试验箱,用独立式开关按键,七段译码器,有发光二极管,有红色和绿色,芯片为EPF10K10LC84-4。
第3章设计内容程序包括六个逻辑元件,分别为:数字按键输入、控制功能按键输入、时钟分频器、处理核心、输出处理和七段译码器。
3.1 数字按键输入3.1.1 功能介绍读取数字键0~9。
高电平表示按键未按下,低电平表示按键按下。
按照0~9顺序读取,只能输出1位数字。
输出4位二进制代码,“0000”~“1001”表示0~9,用“1010”表示无输入。
3.1.2 程序输入1.建立项目文件2.建立设计文件在MAX+PLUSⅡ管理窗口中选择File\New命令,建立文本编辑区,并在File Name文本框中输入shuzishuru.vhd,存盘。
3.编辑程序在文本编辑区内,输入程序,程序如下:library ieee;use ieee.std_logic_1164.all;entity shuzishuru isport( numin:IN std_logic_vector(9 downto 0);numstate,clk:IN std_logic;numout:OUT std_logic_vector(3 downto 0));end shuzishuru;architecture EDA of shuzishuru issignal state:std_logic;signal mem:std_logic_vector(9 downto 0);beginprocess(clk)beginif clk'event and clk='1' thenif state/=numstate thenif mem/=numin thencase numin iswhen "1111111110" => numout<="0000";when "1111111101" => numout<="0001";when "1111111011" => numout<="0010";when "1111110111" => numout<="0011";when "1111101111" => numout<="0100";when "1111011111" => numout<="0101";when "1110111111" => numout<="0110";when "1101111111" => numout<="0111";when "1011111111" => numout<="1000";when "0111111111" => numout<="1001";when others => numout<="1010";end case;state<=numstate;else numout<="1010";end if;mem<=numin;end if;end if;end process;end EDA;4.保存文件并检查语法错误在MAX+PLUSⅡ管理窗口中选择File/Project/Save&Check命令,可将变异的文件存盘并检查语法错误,如果有错误则返回编辑区内修改。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
概述在当今社会中,人们对于隐私的保护和对物品安全的重视程度与日俱增。
因此,使用了现代电子技术的电子密码锁便有了广泛的应用前景。
本次所设计的电子密码锁,能够实现该六位十进制并行密码保护,当输入的密码与锁内密码一致时,绿灯亮,开锁;当输入的密码与锁内的密码不一致时,红灯亮,不能开锁。
密码锁的密码可由用户自行设置,并可在液晶显示屏上显示所输入的密码。
为人们的财产、信息安全提供了可靠地保障。
本次设计基于VHDL语言,对并行六位电子密码锁进行设计,并对设计过程进行了详细描述。
采用VHDL语言进行电子密码锁的设计可使设计工作简洁直观,快速实现既定功能。
电子密码锁在对财产安全保护等方面都有着重要作用,应用前景非常广泛。
开锁代码为六位十进制数,当输入代码的位数和位值与锁内给定的密码一致,且按规定程序开锁时,方可开锁,并点亮开锁指示灯。
否则,系统进入“错误”状态,并发出报警信号。
开锁程序由设计者确定,并要求锁内给定的密码是可调的,且预置方便,保密性好。
并行数字锁的报警方式是点亮指示灯,并使喇叭鸣叫来报警,直到按下复位开关,报警才停止。
此时,数字锁又自动进入等待下一次开锁的状态。
一、设计主要内容1、密码锁串行输入几位十进制数字口令2、输入口令全部正确即开锁并有绿灯显示3、口令输入最大次数3次,要求在完全输入六位之后进行判断口令正确与否;输入3次之后还不能开锁,进入死锁状态并报警4、有相应的显示功能5、开锁后能再次上锁二、系统设计方案作为通用电子密码锁,主要由三个部分组成:数字密码输入电路、密码锁控制电路和密码锁显示电路。
(1)密码锁输入电路包括时序产生电路、键盘扫描电路、键盘译码电路等几个小的功能电路。
(2) 密码锁控制电路包括按键数据的缓冲存储电路,密码的清除、存储、激活电锁电路(寄存器清除信号发生电路),密码核对(数值比较电路),解锁电路(开/关门锁电路)等几个小的功能电路。
(3)密码显示电路主要是在液晶显示屏显示输入的数值。
2.1密码锁输入电路的设计是电子密码锁的输入电路框图,由键盘扫描电路、弹跳消除电路、键盘译码电路、按键数据缓存器,加上外接的一个4×4矩阵式键盘组成。
图1-1密码锁的输入电路框图1.矩阵式键盘的工作原理矩阵式键盘是一种常见的输入装置,在日常的生活中,矩阵式键盘在计算机、电话、手机、微波炉等各式电子产品上已经被广泛应用。
图1-2是一个3×4矩阵式键盘的面板配置图,其中数字2.2密码锁输入电路各主要功能模块的设计1) 时序产生电路本时序产生电路中使用了三种不同频率的工作脉冲波形:系统时钟脉冲(它是系统内部所有时钟脉冲的源头,且其频率最高)、弹跳消除取样信号、键盘扫描信号。
2) 键盘扫描电路扫描电路的作用是用来提供键盘扫描信号的,扫描信号变化的顺序依次为1110-1101-1011-0111-1110......依序地周而复始。
3) 弹跳消除电路由于本设计中采用的矩阵式键盘是机械开关结构,因此在开关切换的瞬间会在接触点出现信号来回弹跳的现象,对于电子密码锁这种灵敏度较高的电路这种弹跳将很可能会造成误动作输入,从而影响到密码锁操作的正确性。
从图1-3中可以观察出弹跳现象产生的原因,虽然只是按下按键一次然后放掉,然而实际产生的按键信号却不止跳动一次,经过取样信号的检查后,将会造成误判断,以为键盘按了两次。
如果调整抽样频率(如图4.5所示),可以发现弹跳现象获得了改善。
图1-3弹跳现象产生错误的抽样结果图1-4 调整抽样频率后得到的抽样结果 4) 键盘译码电路上述键盘中的按键可分为数字按键和文字按键,每一个按键可能负责不同的功能,例如清除数码、退位、激活电锁、开锁等。
5) 按键存储电路因为每次扫描会产生新的按键数据,可能会覆盖前面的数据,所以需要一个按键存储电路,将整个键盘扫描完毕后的结果记录下来。
按键存储电路可以使用移位寄存器构成。
抽样结果抽样信号按键信号抽样结果抽样信号按键信号图1-5 输入电路仿真波形图2.3 密码锁控制电路的设计密码锁的控制电路是整个电路的控制中心,主要完成对数字按键输入和功能按键输入的响应控制。
1.数字按键输入的响应控制(1) 如果按下数字键,第一个数字会从显示器的最右端开始显示,此后每新按一个数字时,显示器上的数字必须左移一格,以便将新的数字显示出来。
(2) 假如要更改输入的数字,可以按倒退按键来清除前一个输入的数字,或者按清除键清除所有输入的数字,再重新输入六位数。
(3) 由于这里设计的是一个六位的电子密码锁,所以当输入的数字键超过四个时,电路不予理会,而且不再显示第六个以后的数字。
2.4功能按键输入的响应控制(1) 清除键:清除所有的输入数字,即做归零动作。
(2) 激活电锁键:按下此键时可将密码锁的门上锁。
(上锁前必须预先设定一个六位的数字密码。
)(3) 解除电锁键:按下此键会检查输入的密码是否正确,若密码正确无误则开门。
图1-5 电子密码锁的三种模式及关系2.5 密码锁显示电路的设计密码锁显示电路的设计比较复杂,这里直接采用12864液晶屏进行显示。
2.6 密码锁的整体组装设计将前面各个设计好的功能模块进行整合,可得到一个完整的电子密码锁系统的整体组装设计原理图,如图1-6所示。
图1-6 密码锁的整体组装设计原理图三、系统扩展思路(1) 本系统基本达到作为数字密码锁的绝大部分功能,但还有许多不足或需完善的地方。
比如说采用4×4的通用机械键盘受到键盘数量的限制,在很大的程度上限制了其功能的扩展。
(2)设计外围电路:系统用方波信号源,直流工作电源。
(3)可要求设计制作整个系统,包括PCB的制作。
四、实验收获课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程。
随着科学技术发展的日新月异,FPGA已经成为当今计算机应用中空前活跃的领域,在生活中可以说无处不在。
因此作为二十一世纪的大学来说掌握eda的开发技术是十分必要的。
回顾此次课程设计,我感慨颇多,的确,从理论到实践,在很长的一段时间里,可以说是苦多于甜,但确实学到了很多东西,不仅可以巩固以前学到的知识,还学到许多没学过的知识。
通过此次课程设计,使我了解了理论与实际结合的重要性,只有理论知识是远远不够的。
在设计的过程中,发现自己以前学习的知识理解不够深刻,掌握不够牢固等等。
通过这次课设之后,一定要把以前学习的知识温故知新。
这次的课设终于完成,通过老师的细心讲解,我解决了很多问题。
在这里,感谢老师的细心指导。
同时对于帮助我的同学,也表示衷心感谢。
附录1、液晶显示程序library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use IEEE.STD_LOGIC_ARITH.ALL;entity clock_lcd_disp isgeneric(divide_to_100k:integer:=500);port(clk:in std_logic;DATAIN:in std_logic_vector(31 downto 0);din: in INTEGER RANGE 15 DOWNTO 0;rw,rs,e,lcd_rst:out std_logic;lcd_data:out std_logic_vector(7 downto 0));end clock_lcd_disp;architecture tcl of clock_lcd_disp issignal mima:std_logic_vector(31 downto0):="00010010001101000101011001111000";signal clk_100k:std_logic;signal clkout:std_logic;signal temp:std_logic_vector(7 downto 0);type stateis(s0,s1,s2,s3,s4,s5,s6,s7,s8,s9,s10,s11,s12,s13,s14,s15,s16,s17,s18,s19,s20, s21,s22,s23,s24,s25,s26,s27,s28,s29,s30,s31);signal current_s:state;type data_buffer is array(0 to 15)of std_logic_vector(7 downto 0);type data_buffer1 is array(0 to 7)of std_logic_vector(7 downto 0);signal time:std_logic_vector(23 downto 0);signal disp_time:data_buffer1:=(x"31",x"32",x"3a",x"33",x"34",x"3a",x"35",x"36"); constant data_buf0:data_buffer:=(x"20",x"20",x"bb",x"aa", --华科武昌分校80x"bf",x"c6",x"ce",x"e4",x"b2",x"fd", x"b7",x"d6",x"d0",x"a3",x"20",x"20");constant data_buf1:data_buffer:=(x"20",x"20",x"b5",x"e7", --电子密码锁90x"d7",x"d3",x"c3",x"dc",x"c2",x"eb",x"cb",x"f8",x"20",x"20",x"20",x"20");constant data_buf2:data_buffer:=(x"20",x"20",x"c7",x"eb",x"ca",x"e4",x"c8",x"eb", --请输入密码:88x"c3",x"dc",x"c2",x"eb",x"3a",x"20",x"20",x"20");constant data_buf3:data_buffer:=(x"20",x"20",x"d6",x"d8",x"d0",x"c2",x"ca",x"e4", --重新输入x"c8",x"eb",x"20",x"20",x"20",x"20",x"20",x"20");constant data_buf4:data_buffer:=(x"20",x"20",x"bd",x"e2",x"cb",x"f8",x"b3",x"c9", --解锁成功x"b9",x"a6",x"20",x"20",x"20",x"20",x"20",x"20"); constant data_buf5:data_buffer:=( x"20",x"20", --进入死锁状态x"bd",x"f8",x"c8",x"eb",x"cb",x"c0",x"cb",x"f8",x"d7",x"b4",x"cc",x"ac",x"20",x"20");constant data_buf6:data_buffer:=(x"20",x"20",x"bd",x"e2", --x"cb",x"f8",x"b3",x"c9",x"b9",x"a6", x"21",x"20",x"20",x"20",x"20",x"20");begin--U1:divclk1 port map(clk,clk_100k);process(clk)variable cnt:integer range 0 to divide_to_100k;beginif(clk'event and clk='1')then cnt:=cnt+1;if(cnt=divide_to_100k)then cnt:=0;end if;if(cnt<divide_to_100k/2) then clk_100k<='0';else clk_100k<='1';end if;end if;end process;div_1Hz:process(clk)variable cnttemp:integer range 0 to 49999999;beginif clk='1' and clk'event thenif cnttemp=49999999 then cnttemp:=0;elseif cnttemp<25000000 then clkout<='1';else clkout<='0';end if;cnttemp:=cnttemp+1;end if;end if;end process div_1Hz;disp_time(7)<=DATAIN(3 downto 0)+x"30"; disp_time(6)<=DATAIN(7 downto 4)+x"30"; disp_time(5)<=DATAIN(11 downto 8)+x"30"; disp_time(4)<=DATAIN(15 downto 12)+x"30"; disp_time(3)<=DATAIN(19 downto 16)+x"30"; disp_time(2)<=DATAIN(23 downto 20)+x"30"; disp_time(1)<=DATAIN(27 downto 24)+x"30"; disp_time(0)<=DATAIN(31 downto 28)+x"30"; read_time:process(time)beginend process;process(clk_100k)variable cnt1:integer range 0 to 10000;variable cnt_1:integer range 0 to 1000;variable code_cnt:integer range 0 to 13;variable data_cnt:integer range 0 to 480;beginif(clk_100k'event and clk_100k='1')thencase current_s iswhen s0=>rw<='1';rs<='1';e<='1';cnt1:=cnt1+1;if cnt1<500 then lcd_rst<='0';elsif cnt1<1000 then lcd_rst<='1';elsif cnt1=1000 thenlcd_rst<='1';cnt1:=0;current_s<=s1;end if;when s1=>cnt_1:=cnt_1+1;if cnt_1<1*3 then e<='1';rs<='0';rw<='0';elsif cnt_1<2*3 then lcd_data<=x"0c";elsif cnt_1<10*3 then e<='0';elsif cnt_1=10*3 then cnt_1:=0;current_s<=s2;end if;when s2=>cnt_1:=cnt_1+1;if cnt_1<1*3 then e<='1';rs<='0';rw<='0';elsif cnt_1<2*3 then lcd_data<=x"90";elsif cnt_1<10*3 then e<='0';elsif cnt_1=10*3 then cnt_1:=0;current_s<=s3;end if;when s3=>if cnt_1<1*3 then e<='1';rs<='1';rw<='0';elsif cnt_1<2*3 thenlcd_data<=data_buf1(data_cnt);elsif cnt_1=2*3 then data_cnt:=data_cnt+1;elsif cnt_1<100 then e<='0';end if;cnt_1:=cnt_1+1;if cnt_1=100 then cnt_1:=0;if data_cnt=16 then current_s<=s4;data_cnt:=0;end if;end if;when s4=>cnt_1:=cnt_1+1;if cnt_1<1*3 then e<='1';rs<='0';rw<='0';elsif cnt_1<2*3 then lcd_data<=x"88";elsif cnt_1<10*3 then e<='0';elsif cnt_1=10*3 then cnt_1:=0;current_s<=s5;end if;when s5=>if cnt_1<1*3 then e<='1';rs<='1';rw<='0';elsif cnt_1<2*3 thenlcd_data<=data_buf2(data_cnt);elsif cnt_1=2*3 then data_cnt:=data_cnt+1;elsif cnt_1<100 then e<='0';end if;cnt_1:=cnt_1+1;if cnt_1=100 then cnt_1:=0;if data_cnt=16 then current_s<=s6;data_cnt:=0;end if;end if;when s6=>cnt_1:=cnt_1+1;if cnt_1<1*3 then e<='1';rs<='0';rw<='0';elsif cnt_1<2*3 then lcd_data<=x"80";elsif cnt_1<10*3 then e<='0';elsif cnt_1=10*3 then cnt_1:=0;current_s<=s7;end if;when s7=>if cnt_1<1*3 then e<='1';rs<='1';rw<='0';elsif cnt_1<2*3 thenlcd_data<=data_buf0(data_cnt);elsif cnt_1=2*3 then data_cnt:=data_cnt+1;elsif cnt_1<100 then e<='0';end if;cnt_1:=cnt_1+1;if cnt_1=100 then cnt_1:=0;if data_cnt=16 then current_s<=s8;data_cnt:=0;end if;end if;--动态显示when s8=>cnt_1:=cnt_1+1;if cnt_1<1*3 then e<='1';rs<='0';rw<='0';elsif cnt_1<2*3 then lcd_data<=x"9a";elsif cnt_1<10*3 then e<='0';elsif cnt_1=10*3 then cnt_1:=0;current_s<=s9;end if;when s9=>if cnt_1<1*3 then e<='1';rs<='1';rw<='0';elsif cnt_1<2*3 thenlcd_data<=disp_time(data_cnt);elsif cnt_1=2*3 then data_cnt:=data_cnt+1;elsif cnt_1<100 then e<='0';end if;cnt_1:=cnt_1+1;if cnt_1=100 then cnt_1:=0;if data_cnt=8 then current_s<=s10;data_cnt:=0;end if;end if;--------------------------------------------------------------when s10=>cnt_1:=cnt_1+1;if din<=10 thenif cnt_1<1*3 then e<='1';rs<='0';rw<='0';elsif cnt_1<2*3 then lcd_data<=x"88";elsif cnt_1<10*3 then e<='0';elsif cnt_1=10*3 then cnt_1:=0;current_s<=s11;end if;else current_s<=s12;end if;when s11=>if cnt_1<1*3 then e<='1';rs<='1';rw<='0';elsif cnt_1<2*3 thenlcd_data<=data_buf4(data_cnt);elsif cnt_1=2*3 then data_cnt:=data_cnt+1;elsif cnt_1<100 then e<='0';end if;cnt_1:=cnt_1+1;if cnt_1=100 then cnt_1:=0;if data_cnt=8 then current_s<=s0;data_cnt:=0;end if;end if;when s12=>cnt_1:=cnt_1+1;if cnt_1<1*3 then e<='1';rs<='0';rw<='0';elsif cnt_1<2*3 then lcd_data<=x"88";elsif cnt_1<10*3 then e<='0';elsif cnt_1=10*3 then cnt_1:=0;current_s<=s13;end if;when s13=>if cnt_1<1*3 then e<='1';rs<='1';rw<='0';elsif cnt_1<2*3 thenlcd_data<=data_buf3(data_cnt);elsif cnt_1=2*3 then data_cnt:=data_cnt+1;elsif cnt_1<100 then e<='0';end if;cnt_1:=cnt_1+1;if cnt_1=100 then cnt_1:=0;if data_cnt=8 then current_s<=s14;data_cnt:=0;end if;end if;when s14=>cnt_1:=cnt_1+1;if cnt_1<1*3 then e<='1';rs<='0';rw<='0';elsif cnt_1<2*3 then lcd_data<=x"98";elsif cnt_1<10*3 then e<='0';elsif cnt_1=10*3 then cnt_1:=0;current_s<=s15;end if;when s15=>if cnt_1<1*3 then e<='1';rs<='1';rw<='0';elsif cnt_1<2*3 thenlcd_data<=disp_time(data_cnt);elsif cnt_1=2*3 then data_cnt:=data_cnt+1;elsif cnt_1<100 then e<='0';end if;cnt_1:=cnt_1+1;if cnt_1=100 then cnt_1:=0;if data_cnt=8 then current_s<=s16;data_cnt:=0;end if;end if;------------------------------------------------------------------------------------------------when s16=>cnt_1:=cnt_1+1;if din<=10 thenif cnt_1<1*3 then e<='1';rs<='0';rw<='0';elsif cnt_1<2*3 then lcd_data<=x"88";elsif cnt_1<10*3 then e<='0';elsif cnt_1=10*3 then cnt_1:=0;current_s<=s17;end if;else current_s<=s18;end if;when s17=>if cnt_1<1*3 then e<='1';rs<='1';rw<='0';elsif cnt_1<2*3 thenlcd_data<=data_buf4(data_cnt);elsif cnt_1=2*3 then data_cnt:=data_cnt+1;elsif cnt_1<100 then e<='0';end if;cnt_1:=cnt_1+1;if cnt_1=100 then cnt_1:=0;if data_cnt=8 then current_s<=s0;data_cnt:=0;end if;end if;when s18=>cnt_1:=cnt_1+1;if cnt_1<1*3 then e<='1';rs<='0';rw<='0';elsif cnt_1<2*3 then lcd_data<=x"88";elsif cnt_1<10*3 then e<='0';elsif cnt_1=10*3 then cnt_1:=0;current_s<=s19;end if;when s19=>if cnt_1<1*3 then e<='1';rs<='1';rw<='0';elsif cnt_1<2*3 thenlcd_data<=data_buf3(data_cnt);elsif cnt_1=2*3 then data_cnt:=data_cnt+1;elsif cnt_1<100 then e<='0';end if;cnt_1:=cnt_1+1;if cnt_1=100 then cnt_1:=0;if data_cnt=8 then current_s<=s20;data_cnt:=0;end if;end if;when s20=>cnt_1:=cnt_1+1;if cnt_1<1*3 then e<='1';rs<='0';rw<='0';elsif cnt_1<2*3 then lcd_data<=x"98";elsif cnt_1<10*3 then e<='0';elsif cnt_1=10*3 then cnt_1:=0;current_s<=s21;end if;when s21=>if cnt_1<1*3 then e<='1';rs<='1';rw<='0';elsif cnt_1<2*3 thenlcd_data<=disp_time(data_cnt);elsif cnt_1=2*3 then data_cnt:=data_cnt+1;elsif cnt_1<100 then e<='0';end if;cnt_1:=cnt_1+1;if cnt_1=100 then cnt_1:=0;if data_cnt=8 then current_s<=s22;data_cnt:=0;end if;end if;------------------------------------------------------------------------------ when s22=>cnt_1:=cnt_1+1;if din<=10 thenif cnt_1<1*3 then e<='1';rs<='0';rw<='0';elsif cnt_1<2*3 then lcd_data<=x"88";elsif cnt_1<10*3 then e<='0';elsif cnt_1=10*3 then cnt_1:=0;current_s<=s23;end if;else current_s<=s24;end if;when s23=>if cnt_1<1*3 then e<='1';rs<='1';rw<='0';elsif cnt_1<2*3 thenlcd_data<=data_buf4(data_cnt);elsif cnt_1=2*3 then data_cnt:=data_cnt+1;elsif cnt_1<100 then e<='0';end if;cnt_1:=cnt_1+1;if cnt_1=100 then cnt_1:=0;if data_cnt=8 then current_s<=s0;data_cnt:=0;end if;end if;when s24=>cnt_1:=cnt_1+1;if cnt_1<1*3 then e<='1';rs<='0';rw<='0';elsif cnt_1<2*3 then lcd_data<=x"88";elsif cnt_1<10*3 then e<='0';elsif cnt_1=10*3 then cnt_1:=0;current_s<=s25;end if;when s25=>if cnt_1<1*3 then e<='1';rs<='1';rw<='0';elsif cnt_1<2*3 thenlcd_data<=data_buf3(data_cnt);elsif cnt_1=2*3 then data_cnt:=data_cnt+1;elsif cnt_1<100 then e<='0';end if;cnt_1:=cnt_1+1;if cnt_1=100 then cnt_1:=0;if data_cnt=8 then current_s<=s26;data_cnt:=0;end if;end if;when s26=>cnt_1:=cnt_1+1;if cnt_1<1*3 then e<='1';rs<='0';rw<='0';elsif cnt_1<2*3 then lcd_data<=x"98";elsif cnt_1<10*3 then e<='0';elsif cnt_1=10*3 then cnt_1:=0;current_s<=s27;end if;when s27=>if cnt_1<1*3 then e<='1';rs<='1';rw<='0';elsif cnt_1<2*3 thenlcd_data<=disp_time(data_cnt);elsif cnt_1=2*3 then data_cnt:=data_cnt+1;elsif cnt_1<100 then e<='0';end if;cnt_1:=cnt_1+1;if cnt_1=100 then cnt_1:=0;if data_cnt=8 then current_s<=s28;data_cnt:=0;end if;end if;--------------------------------------------------------------------------------------when s28=>cnt_1:=cnt_1+1;if din<=10 thenif cnt_1<1*3 then e<='1';rs<='0';rw<='0';elsif cnt_1<2*3 then lcd_data<=x"88";elsif cnt_1<10*3 then e<='0';elsif cnt_1=10*3 then cnt_1:=0;current_s<=s29;end if;else current_s<=s30;end if;when s29=>if cnt_1<1*3 then e<='1';rs<='1';rw<='0';elsif cnt_1<2*3 thenlcd_data<=data_buf4(data_cnt);elsif cnt_1=2*3 then data_cnt:=data_cnt+1;elsif cnt_1<100 then e<='0';end if;cnt_1:=cnt_1+1;if cnt_1=100 then cnt_1:=0;if data_cnt=8 then current_s<=s0;data_cnt:=0;end if;end if;when s30=>cnt_1:=cnt_1+1;if cnt_1<1*3 then e<='1';rs<='0';rw<='0';elsif cnt_1<2*3 then lcd_data<=x"88";elsif cnt_1<10*3 then e<='0';elsif cnt_1=10*3 then cnt_1:=0;current_s<=s31;end if;when s31=>if cnt_1<1*3 then e<='1';rs<='1';rw<='0';elsif cnt_1<2*3 thenlcd_data<=data_buf4(data_cnt);elsif cnt_1=2*3 then data_cnt:=data_cnt+1;elsif cnt_1<100 then e<='0';end if;cnt_1:=cnt_1+1;if cnt_1=100 then cnt_1:=0;if data_cnt=8 then current_s<=s30;data_cnt:=0;end if;end if;when others=>current_s<=s0;end case;end if;end process;end tcl;2、键盘控制子程序LIBRARY ieee;USE ieee.std_logic_1164.all;USE ieee.std_logic_unsigned.all;use ieee.std_logic_arith.all;ENTITY bian_ma0 IS ------编码PORT(en,clk:IN std_logic;kr3,kr2,kr1,kr0:IN std_logic;kc3,kc2,kc1:IN std_logic;SDIN,lock,sec,CR,set,crack:out std_logic; dout:OUT std_logic);END bian_ma0;ARCHITECTURE one OF bian_ma0 IS signal data:std_logic_vector(5 downto 0); signal ker:std_logic_vector(3 downto 0); signal kec:std_logic_vector(2 downto 0); BEGINker<=kr3&kr2&kr1&kr0;kec<=kc3&kc2&kc1;PROCESS(ker)BEGINif(ker="1111")thencase kec iswhen others=>data<=data;end case;elsif(ker="1110") thencase kec iswhen "100"=>data<="000001";when "010"=>data<="000010";when "001"=>data<="000100";when others=>data<=data;end case;elsif(ker="1101") thencase kec iswhen "001"=>data<="001000";when others=>data<=data;end case;elsif(ker="1011") thencase kec iswhen "001"=>data<="010000";when others=>data<=data;end case;elsif(ker="0111") thencase kec iswhen "001"=>data<="100000";when others=>data<=data;end case;end if;dout<=((not kr3)or(not kr2)or(not kr1)or(not kr0)); end PROCESS;SDIN<=data(5);lock<=data(4);sec<=data(3);CR<=data(2);set<=data(1);crack<=data(0);END one;LIBRARY ieee;USE ieee.std_logic_1164.all;USE ieee.std_logic_unsigned.all;use ieee.std_logic_arith.all;ENTITY bian_ma IS ------编码PORT(en,clk:IN std_logic;kr3,kr2,kr1,kr0:IN std_logic;kc2,kc1,kc0:IN std_logic;kk: out std_logic_vector(31 downto 0); dout:OUT std_logic);END bian_ma;ARCHITECTURE one OF bian_ma ISsignal data:std_logic_vector(3 downto 0);signal ker:std_logic_vector(3 downto 0);signal d7,d6,d5,d4,d3,d2,d1,d0: std_logic_vector(3 downto 0); signal kec:std_logic_vector(2 downto 0);BEGINker<=kr3&kr2&kr1&kr0;kec<=kc2&kc1&kc0;PROCESS(ker)BEGINif(ker="1111")thencase kec iswhen others=>data<=data;end case;elsif(ker="1110") thencase kec iswhen "001"=>data<="1010";when others=>data<=data;end case;elsif(ker="1101") thencase kec iswhen "001"=>data<="0001";when "010"=>data<="0010";when "100"=>data<="0011";when others=>data<=data;end case;elsif(ker="1011") thencase kec iswhen "001"=>data<="0100";when "010"=>data<="0101";when "100"=>data<="0110";when others=>data<=data;end case;elsif(ker="0111") thencase kec iswhen "001"=>data<="0111";when "010"=>data<="1000";when "100"=>data<="1001";when others=>data<=data;end case;end if;dout<=((not kr3)or(not kr2)or(not kr1)or(not kr0)); end PROCESS;d7<=data;d6<=data;d5<=data;d4<=data;d3<=data;d2<=data;d1<=data;d0<=data;kk<=d7&d6&d5&d4&d3&d2&d1&d0;END one;(3)工作状态选择library IEEE;use IEEE.std_logic_1164.all;use IEEE.std_logic_unsigned.all; --包含库--use IEEE.std_logic_arith.all;entity kong_zhi_qi isport(SDIN: IN std_logic; -- 串行数据输入trig : IN std_logic; -- 触发时钟lock : in std_logic; -- 上锁信号sec : in std_logic; -- 选择消隐输出CR: IN std_logic; -- 确认输入SET: IN std_logic; -- 设口令CRACK:IN std_logic; -- 解锁din: out integer range 15 downto 0; --输入的数据进行显示n_err: out std_logic_vector(1 downto 0); --错误次数n_cr : out std_logic_vector(2 downto 0); -- 输入数据个数ALERT: OUT std_logic; --报警输出REDL: out std_logic; -- 上锁显示标志sc: out std_logic; -- 消隐显示标志dead_lock: out std_logic; -- 死锁标志GREL: out std_logic --解锁显示标志);end entity kong_zhi_qi;architecture behv of kong_zhi_qi is--signal 声明signal pW_reg0: INTEGER RANGE 15 DOWNTO 0; --口令寄存器signal pW_reg1: INTEGER RANGE 15 DOWNTO 0;signal pW_reg2: INTEGER RANGE 15 DOWNTO 0;signal pW_reg3: INTEGER RANGE 15 DOWNTO 0;signal pW_reg4: INTEGER RANGE 15 DOWNTO 0;signal pW_reg5: INTEGER RANGE 15 DOWNTO 0;signal pW_reg6: INTEGER RANGE 15 DOWNTO 0;signal pW_reg7: INTEGER RANGE 15 DOWNTO 0;signal pc_reg0: INTEGER RANGE 15 DOWNTO 0; --解锁暂存器signal pc_reg1: INTEGER RANGE 15 DOWNTO 0;signal pc_reg2: INTEGER RANGE 15 DOWNTO 0;signal pc_reg3: INTEGER RANGE 15 DOWNTO 0;signal pc_reg4: INTEGER RANGE 15 DOWNTO 0;signal pc_reg5: INTEGER RANGE 15 DOWNTO 0;signal pc_reg6: INTEGER RANGE 15 DOWNTO 0;signal pc_reg7: INTEGER RANGE 15 DOWNTO 0;signal data_cnt: integer range 15 downto 0; --输入数据累加器signal cr_cnt : std_logic_vector(2 downto 0);signal err_cnt: std_logic_vector(1 downto 0);signal tag: std_logic;signal sb : std_logic;--signal bff: INTEGER RANGE 15 DOWNTO 0;beginprocess(trig)beginif trig'event and trig = '1' thenif sec = '0' then sb <= not sb; sc <= sb; --消隐控制end if;if lock = '0' then REDL <= '0'; GREL<='1'; ALERT <= '1'; --上锁end if ;if tag = '1' then din <=1;REDL <= '0';ALERT <= '0'; GREL<='1';-- 死锁else if SDIN = '0' thendin <= data_cnt;end if;end if;if tag = '0' thenif CR = '0' then -- 确认键按下if SET = '0' then -- 设置口令case cr_cnt iswhen "000" => pW_reg0 <= data_cnt; cr_cnt <= cr_cnt + '1';when "001" => pw_reg1 <= data_cnt; cr_cnt <= cr_cnt + '1';when "010" => pw_reg2 <= data_cnt; cr_cnt <= cr_cnt + '1';when "011" => pw_reg3 <= data_cnt; cr_cnt <= cr_cnt + '1';when "100" => pw_reg4 <= data_cnt; cr_cnt <= cr_cnt + '1';when "101" => pw_reg5 <= data_cnt; cr_cnt <= cr_cnt + '1';when "110" => pw_reg6 <= data_cnt; cr_cnt <= cr_cnt + '1';when "111" => pw_reg7 <= data_cnt; cr_cnt <= cr_cnt + '1'; REDL <= '0'; GREL<='1'; ALERT <= '1';when others => pw_reg0 <= 0;end case;else if crack = '0' then -- 解锁case cr_cnt iswhen "000" => pc_reg0 <= data_cnt; cr_cnt <= cr_cnt + '1';when "001" => pc_reg1 <= data_cnt; cr_cnt <= cr_cnt + '1';when "010" => pc_reg2 <= data_cnt; cr_cnt <= cr_cnt + '1';when "011" => pc_reg3 <= data_cnt; cr_cnt <= cr_cnt + '1';when "100" => pc_reg4 <= data_cnt; cr_cnt <= cr_cnt + '1';when "101" => pc_reg5 <= data_cnt; cr_cnt <= cr_cnt + '1';when "110" => pc_reg6 <= data_cnt; cr_cnt <= cr_cnt + '1';when "111" => cr_cnt <= cr_cnt + '1';-- when "11" => cr_cnt <= cr_cnt + '1';if (pc_reg0 = pw_reg0) thenif (pc_reg1 = pw_reg1) thenif (pc_reg2 = pw_reg2) then-- if (data_cnt = pw_reg3) thenif (pc_reg3 = pw_reg3) thenif (pc_reg4 = pw_reg4) thenif (pc_reg5 = pw_reg5) thenif (pc_reg6 = pw_reg6) thenif (data_cnt = pw_reg7) then din <=10; err_cnt <= "00";REDL <= '1'; GREL<='0'; ALERT <= '1'; --解锁成功输出开锁信号else err_cnt <= err_cnt + '1';end if;else err_cnt <= err_cnt + '1';end if;else err_cnt <= err_cnt + '1';end if;else err_cnt <= err_cnt + '1';end if;else err_cnt <= err_cnt + '1';end if;else err_cnt <= err_cnt + '1';end if;else err_cnt <= err_cnt + '1';end if;else err_cnt <= err_cnt + '1';end if;when others => ALERT <= '1';end case;end if;end if;end if;end if;case err_cnt is -- 判断错误次数when "00" => tag <= '0';when "01" => tag <= '0';when "10" => tag <= '0';when "11" => tag <= '1'; ALERT <= '1'; --死锁when others => tag <= '1'; ALERT <= '1';end case;n_cr <= cr_cnt; --送显示n_err <= err_cnt;end if;dead_lock <= tag ;。