数电课程设计电子密码锁
数字电子技术课程设计电子密码锁
数字电子技术课程设计电子密码锁(总17页)--本页仅作为文档封面,使用时请直接删除即可----内页可以根据需求调整合适字体及大小--课程设计说明书课程名称:数字电子技术课程设计题目:电子密码锁学生姓名:专业:班级:学号:指导教师:日期:年月日电子密码锁一、设计任务与要求1.用电子器件设计制作一个密码锁,使之在输入正确的代码时开锁。
2.在锁的控制电路中设一个可以修改的4位代码,当输入的代码和控制电路的代码一致是锁打开。
3.用红灯亮、绿灯灭表示关锁,绿灯亮、红灯灭表示开锁4.如5s内未将锁打开,则电路自动复位进入自锁状态,并发报警信号。
二、方案设计与论证1、用按键输入四位十进制数字,输入密码要存储。
2、比较输入密码和原始密码。
当输入正确密码时,给出开锁信号,开锁信号用一个绿色指示灯表示,绿灯亮表示密码输入正确;如果输入密码不正确,用红灯表示。
3、锁的开关用红灯和绿灯表示,一次只能亮一盏。
红灯亮、绿灯灭表示关锁,绿灯亮、红灯灭表示开锁。
4、设置倒计时电路和自锁电路。
如果密码在5s内未能输入正确则发出报警声,并且自锁电路。
5、设置密码设置开关,开关闭合后,允许设置密码,设置好密码后,打开此开关。
6、需要在输入密码开始时识别输入,并由此触发计时电路。
方案一用74LS147译码器来把按键输入转化为二进制。
通过8片四位寄存器74LS194实现密码功能,其中四片用来存储预置密码,另四片则用来存储输入的密码。
当密码开始输入时开始计时,通过74LS192计数器实现计时功能;然后在密码输入期间,用74LS138数据选择器来选片存储。
数据选择器的输入端又一个两位的二进制的加法计数器来控制,当键盘有按键输入时计数器就加1,当一个按键按完后会轮到下一个芯片存储。
自锁功能利用74LS138来控制。
通过四片74LS85芯片判断原始密码和输入密码是否相同,接着用指示灯来表示密码的输入正确与否,如果密码没有输入正确的话,则红灯亮,否则则绿灯亮。
数电电子密码锁课程设计
数电电子密码锁课程设计一、课程目标知识目标:1. 理解数字电路基础知识,掌握电子密码锁的基本原理;2. 学会使用逻辑门、触发器等基本数字电路元件,并应用于电子密码锁的设计;3. 掌握电子密码锁的编码与解码技术,了解其安全性分析。
技能目标:1. 能够运用所学知识,设计并搭建一个简单的电子密码锁电路;2. 学会使用相关软件(如Multisim等)进行电路仿真,提高实际操作能力;3. 培养学生团队协作、动手实践和问题解决能力。
情感态度价值观目标:1. 培养学生对数字电路和电子技术的兴趣,激发创新意识;2. 增强学生的信息安全意识,了解密码学在生活中的应用;3. 树立正确的价值观,认识到科学技术对社会发展的积极作用。
课程性质:本课程为实践性较强的课程,结合理论知识,培养学生的实际操作能力和团队协作能力。
学生特点:学生在本年级已具备一定的数字电路基础,对电子技术有一定了解,但实际操作能力有待提高。
教学要求:教师应注重理论与实践相结合,关注学生个体差异,提供个性化指导,确保学生在课程中学有所获。
通过课程学习,使学生在知识、技能和情感态度价值观方面均取得具体的学习成果。
二、教学内容1. 数字电路基础知识回顾:逻辑门、触发器、计数器等基本元件的工作原理与应用;- 教材章节:第一章 数字逻辑电路基础2. 电子密码锁原理讲解:密码锁的工作流程、安全性分析;- 教材章节:第三章 安全电子密码锁3. 电子密码锁电路设计:使用逻辑门、触发器等元件设计密码锁电路;- 教材章节:第二章 组合逻辑电路设计4. 电路仿真与实验操作:利用Multisim软件进行电路仿真,实际搭建电子密码锁;- 教材章节:第四章 电路仿真与实验5. 编码与解码技术:了解常见编码方式,学习密码锁的解码技巧;- 教材章节:第三章 安全电子密码锁6. 团队协作与项目实施:分组进行项目实践,培养学生的团队协作能力和实际操作能力;- 教材章节:附录 实践项目指导教学进度安排:第一周:回顾数字电路基础知识,学习电子密码锁原理;第二周:设计电子密码锁电路,进行电路仿真;第三周:实际操作,搭建电子密码锁,学习编码与解码技术;第四周:团队协作,完成项目实施,进行成果展示与评价。
密码锁数电课程设计
密码锁数电课程设计一、课程目标知识目标:1. 学生能理解数字电路的基本原理,掌握密码锁中涉及的逻辑门电路及其功能。
2. 学生能描述密码锁数电课程的电路组成,解释其工作原理。
3. 学生能运用二进制数进行基本运算,并将其应用于密码锁的设计中。
技能目标:1. 学生能够运用所学知识,设计并搭建一个简单的密码锁电路。
2. 学生能够运用逻辑门电路进行问题分析,解决密码锁数电课程中遇到的实际问题。
3. 学生能够通过实验操作,培养动手能力和团队协作能力。
情感态度价值观目标:1. 学生培养对数字电路的兴趣,激发学习热情,形成主动探究的学习态度。
2. 学生在学习过程中,培养严谨、细心的实验操作习惯,增强安全意识。
3. 学生通过团队协作,培养沟通能力,学会尊重他人意见,形成合作共赢的意识。
分析课程性质、学生特点和教学要求,本课程目标注重理论与实践相结合,以项目式教学引导学生主动参与,旨在提高学生的数字电路知识水平,培养实际操作能力和团队协作精神。
通过本课程的学习,学生能够将所学知识应用于实际项目中,提高解决实际问题的能力。
二、教学内容本课程教学内容主要包括以下几部分:1. 数字电路基础知识:介绍逻辑门电路、触发器、计数器等基本概念和原理,对应教材第2章。
- 逻辑门电路:与门、或门、非门、与非门、或非门等。
- 触发器:RS触发器、D触发器、JK触发器等。
- 计数器:二进制计数器、十进制计数器等。
2. 密码锁原理及设计:分析密码锁的工作原理,学习设计简单的密码锁电路,对应教材第3章。
- 密码锁工作原理:介绍密码锁的基本组成、功能及其工作过程。
- 电路设计:根据密码锁原理,运用逻辑门电路设计密码锁。
3. 实践操作:分组进行实验,动手搭建和调试密码锁电路,对应教材第4章。
- 实验器材:准备逻辑门电路、触发器、计数器等实验器材。
- 实验步骤:根据教学大纲和实验指导书,分步完成密码锁电路的搭建和调试。
4. 教学进度安排:- 数字电路基础知识:2课时- 密码锁原理及设计:2课时- 实践操作:4课时三、教学方法针对本课程的教学目标、内容和学生的特点,采用以下多样化的教学方法:1. 讲授法:通过教师系统的讲解,使学生掌握数字电路基本原理和密码锁的相关知识。
数电实验报告电子密码锁设计
数电实验报告电子密码锁设计
实验报告
实验十四电子密码锁设计与实现
3.4.1 实验目的与设计要求
目的:(1)学习4位数值比较器CC14585和74LS85的功能。
(2)掌握电子密码锁的工作原理及综合实验技能。
要求:(1)电路可以由主持人预置16种不同的开锁密码,并能够更换。
(2)当输入和预置开锁密码相同时,发出开锁信号(LED 显示)。
(3)如果连续三次输入错误密码即产生报警信号。
报警信号用声光报警电路指示(蜂鸣器等)。
(4)具备能够取消报警状态的功能。
3.4.2 实验仪器与器件
直流稳压电源一台;数字实验箱一个;计算机一台。
74LS75锁存器、74LS00、74LS10、74LS20、4位数值比较器CC14585或74LS85。
3.4.3 实验原理框图
设计思路:用74LS194四位寄存器作锁存电路,74LS75四位锁密
码
预
置
输
入锁存电路密码比较电路密码锁存装置计数器确认按钮
报警电路开锁电路确认按钮
密码输入
存器作密码锁存装置,4位数值比较器4585作密码比较电路,74LS160作计数器。
当连续三次输入错误密码即产生报警信号同时锁住,此时再输入正确密码不产生开锁信号。
仿真图如下:。
数字电子技术课程设计密码锁
题目密码锁控制电路设计一、设计任务与要求设计任务:设计一个密码锁的控制电路,使二在输入正确的开锁代码时,输出开锁信号将锁开启;并用红灯亮,绿灯灭表示关锁;而绿灯亮,红灯灭表示开锁。
要求:1.在锁的控制电路中存储一个能够修改的4位代码,当开锁按钮开关的输入代码等于存储的代码时,将锁打开。
2.从第一个按钮触动以后的5S内若未将锁打开,则电路自动复位并进入自锁状态,使之无法再打开,并由杨声器发出报警信号(可用黄色发光二极管指示)。
二、方案设计与论证1方案论证基于数字系统的设计方式有两大类:1)、自下而上的设计方式;2)、自下而上的设计方式。
方案一:用TTL与COMS芯片设计,由下而上设计总个系统,第一组成功能单元电路在山此组装。
此方案设汁思路明确,所用知识简但。
易于调试安装接线,但利用器件较多,系统不是很稳固,用明显不足。
方案二:用TTL与COMS芯片设计,由下而上设计总个系统,第一肯定系统的逻辑功能,将系统分为控制器和逻辑器,再用ASM肯定控制器算法。
此方案系统集成度较高且稳固,但控制器实现算法较难设计,且接线繁乱(需用总线), 鉴于设计可实现问题。
方案三:用可编程逻辑器件ispLSI1061实现设计,山下而上设计总个系统将逻辑电路输入可编程开发系统,编译成JEDEC文件实现系统电路。
可是,基于初学者对可编程逻辑器件知识欠缺,对系统软件平台和硕件的不熟悉,所以该设计方案有明显的难度。
方案四:用单片机设计,用Keil编写一个C程序,将其拷进单片机系统,从而实现密码锁功能。
此方案只需再程序上花点功夫,易于实现,可是对于单片机未免牛鼎烹鸡,不适于大规模设计。
基于以上方案论证:相对于初学者而言,选择方案一较为实际,易于实现。
2方案设计现对方案一作如下设计讨论:数字密码锁控制电路的设计,能够理解为是数字信号的处置和控制,即信号的输入、存储、对比、分析、检测、反馈、输出。
第一,输入四位二进制数并把二进制数进行存储;第二;二进制数的数字逻辑与设置密码对比;再者,分析比较结果和比较位数;最后,检测输出控制锁信号。
密码锁数电课程设计
密码锁数电课程设计一、课程目标知识目标:1. 理解数字电路基本原理,掌握密码锁中涉及的逻辑门、触发器等组件的工作原理;2. 学会分析简单的数字电路图,识别密码锁电路中的关键电子元件及其功能;3. 掌握二进制数与十进制数的转换方法,并运用至密码锁的密码设置与破解。
技能目标:1. 能够运用所学知识设计简单的密码锁电路,并进行仿真测试;2. 培养学生动手操作能力,完成密码锁电路的搭建与调试;3. 提高学生问题解决能力,学会运用逻辑推理和分析方法解决密码锁相关的问题。
情感态度价值观目标:1. 培养学生对电子技术的兴趣,激发学习热情,形成积极探索科学技术的态度;2. 增强学生的团队协作意识,培养合作解决问题的能力;3. 强化学生的创新意识,鼓励学生在设计过程中提出独特见解,形成独立思考的习惯。
课程性质分析:本课程为初中信息技术课程,结合了电子技术与实际应用,旨在帮助学生将理论知识与实践操作相结合。
学生特点分析:初中学生对新鲜事物充满好奇,具备一定的动手操作能力和逻辑思维能力,但缺乏实际电子技术应用经验。
教学要求:1. 注重理论与实践相结合,强调动手实践在教学过程中的重要性;2. 以学生为主体,激发学生主动探索、合作学习的兴趣;3. 关注个体差异,鼓励学生发挥自身优势,提高综合素质。
二、教学内容1. 数字电路基础:包括逻辑门(与、或、非门等)、触发器(RS触发器、D触发器等)的基本原理与运用;2. 密码锁原理:介绍密码锁的基本构成,分析其工作原理,讲解密码设置与破解的方法;3. 二进制与十进制转换:学习二进制数与十进制数的转换方法,并应用于密码锁密码的设置与破解;4. 电路图分析:学会分析简单的数字电路图,识别密码锁电路中的关键电子元件及其功能;5. 密码锁电路设计与仿真:运用所学知识设计简单的密码锁电路,利用Multisim等软件进行仿真测试;6. 密码锁电路搭建与调试:动手操作,搭建密码锁电路,进行调试与优化。
电子密码锁数电课程设计
电子密码锁数电课程设计课程设计任务书学生姓名:专业班级:指导教师:工作单位:题目: 《数字电子密码锁》初始条件:利用集成集成芯片和门电路等设计一个数字电子密码锁。
要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)(1)设计一个数字电子锁,有其预先设定好的密码,该密码可以修改。
(2) 输入密码按确定键后,若密码正确则锁打开;若密码不正确则电路发出报警信号。
任意输入密码而不按确定键的话电路不会有反应。
(3)任意输入密码而不按确定键的话电路不会有反应。
(4)打开的持续时间为Tx ,警报持续时间也为Tx,即按下确定键到松开后10秒,按住确定键不放的话一直打开或者报警。
时间安排:第17周理论讲解,地点:新3-205第18周理论设计及实验安装调试,地点: 鉴主15楼通信实验室第19周撰写报告及答辩,地点:鉴主16楼报告厅指导教师签名:年月日系主任(或责任教师)签名:年月日目录1 绪论 (1)1.1 课程设计的目的 (1)1.2 课程设计的任务及要求 (1)2 工作原理及方案选择 (1)2.1 电路设计的多种方案 (1)方案一 (2)方案二 (2)2.2 电路设计方案的比较 (2)3 电路设计及仿真 (3)3.1 数字电子密码锁的设计原理框图 (3)3.2 各组成部分电路的设计 (3)密码输入及验证电路的工作原理 (3)密码修改及输出锁定 (5)计时模块 (6)逻辑组合模块 (7)3.3 数字电子密码锁的总电路图 (8)3.4 电路参数的选择及计算 (8)4 电路软件仿真 (10)4.1 开锁的仿真 (10)4.2 报警的仿真 (11)4.3 数据测试 (12)5 电路的安装与调试 (15)5.1 焊接电路 (15)5.2 总电路的调试 (16)5.3 调试中遇到的问题及分析与总结 (16)6 心得体会 (17)7 附录 (18)7.1 仪器仪表电子元器件明细清单 (18)7.2参考文献 (19)摘要电子密码锁是一种通过密码输入来控制电路或是芯片工作,从而控制机械开关的闭合,完成开锁、闭锁任务的电子产品。
数电课程设计电子密码锁
数字逻辑设计课程设计报告书题目名称:电子密码锁学院:光电信息学院小组成员:钟永捷2011059080024侯晨涛2011059170003徐昊2011059060029指导教师:李力日期: 2013年6月28日一、小组成员分工情况侯晨涛:所有编程工作、资料查找工作量:60%钟永捷:辅助编程、图表制作、资料查找工作量:20%徐昊:论文写作、图表制作、资料查找工作量:20%二、题目分析1.输入信号通过扫描键盘的行与检测键盘的列得到输入信号。
2.输出信号通过译码器得到的显示器显示信息,开关锁动作。
三、设计总框图四、各模块说明(一)键盘扫描模块1.原理通过时序信号产生脉冲,不间断地向矩阵键盘的行输入1110-1101-1011-0111的循环序列。
同时将各列的电平置高,检测矩阵键盘各列的电平变化。
若在一定时间内,扫描到第n列电平为零时恰好第m行的m,位置上键被按下。
输入电平也为零,则判断键盘上[]n2. 模块框图3. 状态表此模块只需要通过编码器实现即可,假定前四位表示各行扫描结果,后三位表示各列扫描的结果。
4.仿真结果Key_in代表按键按下与否情况,Key_mem将其记录并输出,scan为行扫描信号,Key_out为按键输出值。
如上仿真结果所示,当scan为1110时,扫描第一行。
按下第一个键,即Key_in为110,此时Key_out 为0001,即输出值为1。
其它状态依此类推。
(二)输入模块1.原理设置两个寄存器,一个作为用户所想设置密码的密码寄存器。
另一个寄存器则是将键盘Input的键值存储起来。
最后通过一个比较器将两个寄存器的值进行比较。
若相同则输出“open”,反之,输出“error”。
比较器内部通过多位异或门实现。
2.模块框图3.状态图1)删除字符第一次输入值为0101,Number_sig第0到3位将其保存。
第二次输入值为0011,Number_sig第4到7位将其保存。
第三次输入值为0001,Number_sig第8到11位将其保存。
电子密码锁课程设计
电子密码锁课程设计电子密码锁是一种基于数字密码的智能锁,广泛应用于家庭、商业、工业等领域中。
电子密码锁的课程设计则是为了培养学生的电子密码锁设计与制作能力,以适应社会对电子安全的迫切需求。
本文将介绍电子密码锁课程设计的目的、内容、实验步骤及教学效果等。
一、课程设计目的电子密码锁课程设计的主要目的是培养学生的专业技能,提高学生的综合能力和创新能力。
具体包括以下几个方面:1.掌握数字电路设计基础知识和技能,如数字电路基本元件、电路图的绘制和理解,电路板设计和制作等。
2.了解电子密码锁的工作原理和结构,掌握其主要构成要素及其功能,例如输入模块、控制模块和输出模块等。
3.通过实验,训练学生的思维能力、动手能力和创新能力,培养学生的实验技巧,提高实验能力。
4.提高学生的实践能力,让学生在实践中了解课程中相关知识的应用,增强实践动手能力。
二、课程设计内容电子密码锁课程设计主要包括以下内容:1.电路基础知识及电路设计实验学习数字电路基础知识,并通过电路设计实验掌握数字电路的基本元件、电路图的绘制和理解等内容。
2.电子密码锁的设计原理和结构学习电子密码锁的工作原理和结构,并理解其主要构成要素及其功能,例如输入模块、控制模块和输出模块等。
3.电子密码锁的实验制作通过实验制作电子密码锁,运用所学知识对电子密码锁进行详细设计、调试及测试。
4.课程设计报告将实验结果进行分析、总结并撰写报告,包括电路图,电路板设计图,电路原理图,测试结果和实验过程的记录等。
三、实验步骤电子密码锁课程设计实验具体步骤如下:1. 学生需了解电子密码锁的原理和结构,包括输入模块、控制模块和输出模块等。
2. 进行电路设计实验,学习数字电路基础知识,并掌握数字电路的基本元件和电路图绘制和理解等。
3. 设计电子密码锁电路图,包括输入模块、控制模块和输出模块等,并通过电路软件仿真验证电路的正确性。
4. 设计电子密码锁的电路板设计图,进行电路板的制作和焊接。
数电课程设计-电子密码锁
数电课程设计-电子密码锁电子密码锁设计任务及要求:使用电子器件设计制作一个密码锁,只有输入正确的代码时才能开锁。
在锁的控制电路中设一个可以修改的4位代码,当输入的代码和控制电路的代码一致时,锁打开。
用红灯亮、绿灯灭表示关锁,绿灯亮、红灯灭表示开锁。
如果30秒内未将锁打开,则电路自动复位进入自锁状态,并发报警信号。
方案设计及论证:设计思路是设多组用户输入键,其中只有4个是有效的密码按键,其它的都是干扰按键,若按下干扰键,键盘输入电路自动清零,输入的密码无效。
电路内部设置一个密码校验电路来验证密码正确与否,只有密码输入正确才能输出开锁所需的信号。
还应设置一组密码修改按键。
但用户按动输入开始键开始计时(只有按动了输入开始键之后输入的密码才有效),密码输入时间超过设定时间电路将报警,只有输入正确密码或断开电源报警铃才能停止,同时电路自锁,防止他人的非法操作。
具体方案如下:设17个用户输入键,其中只有4个是有效的密码按键,其它都是干扰键,还预设了4个密码修改键。
打开输入开关,电路开始计时,输入密码,开始校验,密码正确则开锁(绿灯亮表示开锁)同时停止计时;如果密码输入错误,则运行555单稳态电路密码锁定5分钟(红灯亮表示关锁),输入时间超过30秒密码也会锁定。
本文介绍了一个基于逻辑电路原理设计的电子密码锁电路。
该电路包括16个密码按键,其中4个为有效输入按键,采用4位密码输入。
只有在输入正确的密码后,才能实现对灯的电子控制。
该电路还包括各种附加电路,如报警和锁定功能,从而具有较高的安全系数。
该电路经过多次修改和整理,可以满足人们的基本要求。
但是,由于水平有限,该电路中存在一定的问题。
例如,电路的计时功能有误差,不能精确地对电路进行限时输入。
此外,用开关作为74LS112的CLK脉冲不是很稳定,可以考虑调换其他高速开关或计数脉冲。
最后,电路中未加显示电路,但可以通过其他数字模块实现这一功能。
为了进一步完善该电路,本文使用EWB软件对设计电路进行了逐步调试。
数字逻辑电路课程设计电子密码锁
数字逻辑电路课程设计课题:电子密码锁设计姓名:班级:13通信学号:成绩:指导教师:开课时间:目录摘要 (1)一课程设计目的内容及安排 (2)1.1设计目的 (2)1.2设计内容 (2)1.3设计安排 (2)1.4设计内容 (2)二电子密码锁设计要求及总框图 (3)2.1设计要求 (3)2.2总框图 (4)三各模块电路设计 (5)3.1密码输入存储比较模块 (5)3.2五秒计时电路 (6)3.3二十秒计时电路 (8)3.4报警电路 (10)3.5总电路 (11)四设计心得 (12)五参考文献 (13)电子密码锁摘要:设计一个密码锁的控制电路,当输入正确代码时,输出开锁信号以推动执行机构工作,用红灯亮、绿灯熄灭表示关锁,用绿灯亮、红灯熄灭表示开锁;在锁的控制电路中储存一个可以修改的4位代码,当开锁按钮开关(可设置成6位至8位,其中实际有效为4位,其余为虚设)的输入代码等于储存代码时,开锁;从第一个按钮触动后的5秒内若未将锁打开,则电路自动复位并进入自锁状态,使之无法再打开,并由扬声器发出持续20秒的报警信号。
密码输入存储及比较部分使用芯片74LS194及74LS85。
五秒及时部分采用芯片74LS161和数码显示管。
二十秒报警电路由74LS160,555定时器组成的多谐振荡器,LED灯和蜂鸣器组成。
利用multisim对电路进行仿真可以得到结果。
关键词:电子密码锁,计时电路,报警电路一课程设计目的内容及安排1.1设计目的1 根据设计要求,完成对交通信号灯的设计。
2 加强对Multisim10仿真软件的应用。
3 掌握交通信号灯的主要功能与在仿真软件中的实现方法。
4 掌握74LS160,74LS192等功能。
1.2 设计内容设计一个密码锁的控制电路,当输入正确代码时,输出开锁信号以推动执行机构工作,用红灯亮、绿灯熄灭表示关锁,用绿灯亮、红灯熄灭表示开锁;在锁的控制电路中储存一个可以修改的4位代码,当开锁按钮开关(可设置成6位至8位,其中实际有效为4位,其余为虚设)的输入代码等于储存代码时,开锁;从第一个按钮触动后的5秒内若未将锁打开,则电路自动复位并进入自锁状态,使之无法再打开,并由扬声器发出持续20秒的报警信号。
数电电子密码锁课程设计
数电电子密码锁课程设计一、课程目标知识目标:1. 学生能理解数字电子密码锁的基本原理,掌握二进制编码、逻辑门电路等基础知识。
2. 学生能运用所学知识,设计并实现一个简单的数字电子密码锁。
技能目标:1. 学生能运用逻辑门电路设计出正确的密码锁电路,并能够进行电路仿真。
2. 学生能通过实践操作,掌握数字电路的调试与排错方法。
情感态度价值观目标:1. 学生培养对电子技术的兴趣,激发创新意识和实践能力。
2. 学生在团队协作中,学会沟通与交流,培养合作精神和解决问题的能力。
3. 学生意识到电子技术在日常生活中的应用,认识到科技发展对生活的影响。
课程性质:本课程为实践性课程,强调理论知识与实际操作相结合,提高学生的动手能力和创新能力。
学生特点:初三学生已具备一定的物理知识和电子技术基础,对新鲜事物充满好奇,但需要引导和激发。
教学要求:结合课本内容,注重实践操作,引导学生将理论知识运用到实际中,培养解决问题的能力。
将课程目标分解为具体的学习成果,以便于教学设计和评估。
二、教学内容1. 理论知识:- 二进制编码原理及转换方法- 逻辑门电路的种类、功能及相互关系- 数字电路的基本组成及工作原理2. 实践操作:- 设计数字电子密码锁的电路图- 选用合适的逻辑门电路进行密码锁电路搭建- 进行电路仿真,验证密码锁功能的正确性3. 教学大纲:- 第一阶段:讲解二进制编码原理、逻辑门电路知识,使学生掌握数字电路基础知识。
- 第二阶段:指导学生设计数字电子密码锁电路图,培养学生动手设计能力。
- 第三阶段:组织学生进行实践操作,搭建密码锁电路,并进行调试与排错。
- 第四阶段:总结课程内容,展示学生作品,进行交流与评价。
4. 教材章节:- 《电子技术基础》第三章:数字电路基础- 《电子技术基础》第四章:逻辑门电路及其应用教学内容安排和进度:- 理论知识:2课时- 实践操作:4课时- 课程总结与评价:1课时教学内容注重科学性和系统性,结合课程目标,确保学生能够将所学知识运用到实际操作中,培养其创新能力和实践能力。
数电课程设计密码锁
数电课程设计密码锁一、课程目标知识目标:1. 让学生理解数字电路基础知识,特别是组合逻辑电路的原理和应用;2. 掌握使用逻辑门设计简单的密码锁电路,并能够用逻辑表达式表示;3. 了解数字电路在实际应用中的安全性和可靠性,特别是在密码锁系统中的作用。
技能目标:1. 培养学生运用所学的数字电路知识,解决实际问题的能力;2. 能够使用逻辑门和触发器设计并搭建简单的密码锁电路;3. 学会使用相关软件工具(如Multisim等)进行电路仿真,验证设计电路的正确性。
情感态度价值观目标:1. 激发学生对数字电路和电子技术的学习兴趣,培养创新意识和探索精神;2. 培养学生团队协作精神,在小组合作中共同分析问题、解决问题;3. 引导学生认识到科技发展对社会安全的重要性,树立正确的科技伦理观念。
分析:本课程针对高中年级学生,他们在前期课程中已经学习了基础的数字电路知识,具有一定的电路分析和设计能力。
课程性质为实践性强的设计与实验课,旨在通过设计密码锁的实践活动,深化对数字电路知识的理解和应用。
教学要求:1. 结合教材内容,通过实例引入,使学生将理论与实践相结合;2. 引导学生通过小组讨论和动手实践,培养解决实际问题的能力;3. 强调安全性、可靠性和科技伦理,培养学生对社会负责的态度。
二、教学内容1. 理论知识回顾:- 复习数字电路基础,特别是逻辑门的工作原理和逻辑表达式;- 温习组合逻辑电路的设计方法和步骤。
2. 实践教学内容:- 密码锁的原理介绍,包括常见的密码锁类型和安全性分析;- 使用逻辑门设计密码锁电路,涉及基本的逻辑运算和组合逻辑设计;- 引导学生了解触发器在密码锁中的应用,如RS触发器、D触发器等。
3. 教学大纲安排:- 教材章节:第五章“组合逻辑电路”和第六章“时序逻辑电路基础”;- 第一课时:回顾数字电路基础,介绍密码锁原理;- 第二课时:设计和分析密码锁的组合逻辑部分;- 第三课时:引入时序逻辑,探讨触发器在密码锁中的应用;- 第四课时:动手实践,小组合作设计并搭建简单的密码锁电路。
数字电路课程设计电子密码锁
《数字电子技术》课程设计报告电子密码锁控制电路设计人:黄亮学号:1887090112专业:09网络工程班级:1班成绩:评阅人:安徽科技学院理学院2011/6/16设计要求1、设计一个密码锁的控制电路,当输入正确代码时,输出开锁信号以推动执行机构工作,用红灯亮、绿灯熄灭表示关锁,用绿灯亮、红灯熄灭表示开锁;2、在锁的控制电路中储存一个可以修改的4位代码,当开锁按钮开关(可设置成6位至8位,其中实际有效为4位,其余为虚设)的输入代码等于储存代码时,开锁;3、从第一个按钮触动后的10秒内若未将锁打开,则电路自动复位并进入自锁状态,使之无法再打开,并由扬声器发出持续20秒的报警信号。
一.实验目的①利用小规模电路设计一个简易的电子密码锁控制电路。
②设计一个电子密码锁的控制电路,当输入正确时,会输出开锁信号以推动执行机构工作。
用灯1亮表示开锁。
③学习使用Multisim 10.0软件进行数字电路设计。
二.实验内容电子密码锁的控制电路中储存一个可以修改的4为代码。
当开锁按钮开关(可以设置成6~8位,其中有效的是4位,其余为虚设)的输入代码等于储存代码时,发出开锁信号(用灯2亮表示报警)。
电子密码共分为两个输入区:密码输入区和密码修改区。
密码输入区内,有4个是有效地密码按键,1个为密码启动键(可当做干扰键)。
若不按启动键,则无法开锁。
如果输入密码的时间超过20s(一般而言用户不会超过20s),电路将锁定键盘并报警,防止他人非法操作。
密码修改区内,有4个是密码更改键,另一个是电路复位键(解除锁定)。
电子密码锁的控制仿真电路如下:电路剖析:此电路可以分为三个部分:●密码检测与修改电路开始时可以在电路中设置起始开锁密码,只有当输入密码与设置密码相同时,锁才能被打开;并且,如果你想换密码,也很容易,只要将电路中的密码修改区中的几个开关变换一下就可以了。
●键盘输入限时电路:如果输入密码的时间超过10s(一般而言用户不会超过10s),电路将锁定键盘并报警,防止他人非法操作。
数电课程设计-电子密码锁
数字电子技术课程设计一、设计题目电子密码锁二、主要内容及要求(1)用电子器件设计制作一个密码锁,使之在输入正确的代码时开锁。
(2)在锁的控制电路中设一个可以修改的4位代码,当输入的代码和控制电路的代码一致是锁打开。
(3)用红灯亮、绿灯灭表示关锁,绿灯亮、红灯灭表示开锁(4)如5s内未将锁打开,则电路自动复位进入自锁状态,并发报警信号。
四、总评成绩指导教师学生签名电子密码锁一、设计任务与要求(1)用电子器件设计制作一个密码锁,使之在输入正确的代码时开锁。
(2)在锁的控制电路中设一个可以修改的4位代码,当输入的代码和控制电路的代码一致是锁打开。
(3)用红灯亮、绿灯灭表示关锁,绿灯亮、红灯灭表示开锁(4)如30s内未将锁打开,则电路自动复位进入自锁状态,并发报警信号。
二、方案设计与论证设计思路:设多组用户输入键,其中只有4 个是有效的密码按键,其它的都是干扰按键,若按下干扰键,键盘输入电路自动清零,输入的密码无效。
电路内部设置一个密码校验电路来验证密码正确与否,只有密码输入正确才能输出开锁所需的信号。
还应设置一组密码修改按键。
但用户按动输入开始键开始计时(只有按动了输入开始键之后输入的密码才有效),密码输入时间超过设定时间电路将报警(老师要求的输入时间5秒太短了),只有输入正确密码或断开电源报警铃才能停止,同时电路自锁,防止他人的非法操作。
方案一:我共设了17个用户输入键,其中只有4个是有效的密码按键,其它都是干扰键,还预设了4个密码修改键。
打开输入开关,电路开始计时,输入密码,开始校验,密码正确则开锁(绿灯亮表示开锁)同时停止计时;如果密码输入错误,则运行555单稳态电路密码锁定5分钟(红灯亮表示关锁),输入时间超过30秒密码也会锁定。
大概思路:用四个74LS112 JK触发器串联,输入密码正确与否,输入的电平不同,由此达到密码校验。
密码的输入有16组开关控制,分为0和1两种情况。
限时30秒由74LS160计数器控制,而锁定时间则由555单稳态电路控制,开锁、关锁由指示灯点亮模拟。
电子密码锁—数电课程设计
《数字电子技术》课程设计报告设计课题:数字密码锁设计姓名:李力飞学号:201211911114专业班级:电科1121指导教师:欧触灵设计时间: 14年11月24日—11月28日目录一、摘要 (2)二、设计任务与要求 (2)三、单元电路设计、参数计算及元器件选择 (7)3.1总体框图设计 (7)3.2 功能模块部分 (9)3.2.1 脉冲电路 (9)3.2.2 密码保存及读取 (11)3.2.3 密码比较电路 (13)3.2.4 密码恢复与修改模块 (14)3.2.5 电路状态显示与报警电路 (16)3.2.6 时间控制电路 (17)3.2.7 错误次数计数电路 (19)3.2.8 锁定计时电路 (20)四、总图 (22)4.1 总原理图 (22)4.2 PCB图 (24)4.2 元件清单 (24)五、结论与心得 (29)六、参考文献 (30)七、老师点评 (30)一、摘要本次课程设计的题目是电子密码校验设计,由输入密码、设定密码、寄存电路、比较电路、显示电路、修改密码组成。
本电子密码锁利用数字逻辑电路,实现对锁的电子控制,突破了传统的机械锁的单一性、保密性低、易撬性的缺点,数字电子密码锁具有保密性高、使用灵活性好、安全系数高的优点。
二、设计任务与要求1、利用所学电路的理论和知识进行设计,设计一个电子锁,密码为4位十进制数当开锁输入码与密码一致时,绿灯亮表示锁开,当开锁输入码与密码不一致时,红灯亮。
具有错误报警,输入时间限制,输入次数限制及锁定电路等功能。
在锁定期间一切操作无效并且发出警报声。
2、操作流程:1):电路初始化后,初始密码位0000,绿灯亮。
2):打开修改密码按键,输入用户密码,输入用户密码后将修改键关闭。
3):电路已经储存用户密码,再次开锁时应按下打开确认键再输入密码绿灯亮即可。
若密码输入错误,红灯亮。
4):开锁时,电路开始计时,并且会记录误操作次数。
当电路计时打到120秒或者误操作达到四次时,电路自锁256秒。
数电课程设计---电子密码锁
电子技术课程设计光控报警电路系、部:机电工程学院学生姓名:吴盼盼朱峰学号:0414110118 0414110126指导教师:闫栋梁侯桂成专业:电子信息工程班级:电子1101班完成时间: 2013年7月4日摘要电子电路设计常用的方法是实验设计法,一般都包括设计法案提出、方案验证、方案修改3个阶段。
传统的实验设计法通常采用手工接实验电路来完成,往往需要经过试验和修改的反复过程,直到设计出正确的电路。
随着电子和计算机技术的发展,生产了在计算机平台上的EDA(电子设计自动化)技术,这种技术除了具有强大的设计功能外,还具有测试、仿真分析、管理等功能。
在“EDA桌面设计环境”下用计算机来完成电路的系统综合设计和仿真。
用VHDL可以更加快速、灵活地设计出符合各种要求的密码锁,优于其他设计方法。
VHDL 是一种符合IEEE标准的硬件描述语言,其最大的特点是借鉴高级程序设计语言的功能特性,对电路的行为与结构进行高度抽象化、规范化的形式描述,并对设计的不同层次、不领域的模拟验证与综合优化等处理,使设计过程廷到高度自动化。
关键词电子密码锁电压比较器 555单稳态电路计数器 JK触发器 UPS电源。
1 引言随着人们生活水平的提高,如何实现家庭防盗这一问题也变的尤其的突出,传统的机械锁由于其构造的简单,被撬的事件屡见不鲜,电子锁由于其保密性高,使用灵活性好,安全系数高,受到了广大用户的亲睐。
设计本课题时构思了两种方案:一种是用以AT89C2051为核心的单片机控制方案;另一种是用以74LS112双JK触发器构成的数字逻辑电路控制方案。
考虑到单片机方案原理复杂,而且调试较为繁琐,所以本文采用后一种方案。
2 总体方案设计2.1设计思路共设了9个用户输入键,其中只有4个是有效的密码按键,其它的都是干扰按键,若按下干扰键,键盘输入电路自动清零,原先输入的密码无效,需要重新输入;如果用户输入密码的时间超过40秒(一般情况下,用户不会超过40秒,若用户觉得不便,还可以修改)电路将报警80秒,若电路连续报警三次,电路将锁定键盘5分钟,防止他人的非法操作。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数字逻辑设计课程设计报告书题目名称:电子密码锁学院:光电信息学院小组成员:钟永捷2011059080024侯晨涛2011059170003徐昊2011059060029指导教师:李*日期: 2013年6月28日一、小组成员分工情况侯晨涛:所有编程工作、资料查找工作量:60%钟永捷:辅助编程、图表制作、资料查找工作量:20%徐昊:论文写作、图表制作、资料查找工作量:20%二、题目分析1.输入信号通过扫描键盘的行与检测键盘的列得到输入信号。
2.输出信号通过译码器得到的显示器显示信息,开关锁动作。
三、设计总框图四、各模块说明(一)键盘扫描模块1.原理通过时序信号产生脉冲,不间断地向矩阵键盘的行输入1110-1101-1011-0111的循环序列。
同时将各列的电平置高,检测矩阵键盘各列的电平变化。
若在一定时间内,扫描到第n列电平为零时恰好第m行的m,位置上键被按下。
输入电平也为零,则判断键盘上[]n2. 模块框图3. 状态表此模块只需要通过编码器实现即可,假定前四位表示各行扫描结果,后三位表示各列扫描的结果。
按下“8”键1011 101 S8 1000按下“9”键1011 011 S9 1001按下“#”键0111 011 S10 1010按下“*”键0111 110 S11 10114.仿真结果Key_in代表按键按下与否情况,Key_mem将其记录并输出,scan为行扫描信号,Key_out为按键输出值。
如上仿真结果所示,当scan为1110时,扫描第一行。
按下第一个键,即Key_in为110,此时Key_out 为0001,即输出值为1。
其它状态依此类推。
(二)输入模块1.原理设置两个寄存器,一个作为用户所想设置密码的密码寄存器。
另一个寄存器则是将键盘Input的键值存储起来。
最后通过一个比较器将两个寄存器的值进行比较。
若相同则输出“open”,反之,输出“error”。
比较器内部通过多位异或门实现。
2.模块框图3.状态图4.仿真结果1)删除字符判断寄存器输入寄存器第一次输入值为0101,Number_sig第0到3位将其保存。
第二次输入值为0011,Number_sig第4到7位将其保存。
第三次输入值为0001,Number_sig第8到11位将其保存。
第四次输入值为1010,即删除键。
第五次输入值为0111,Number_sig第8到11位的值由0001变为0111,即实现了删除功能。
2)密码输入正确Correct=1说明密码输入正确,Number_sig的值为000011001101111000000000,Number_sig的值通过七段显示译码器之后将使数码管显示OPEn00。
3)密码输入错误Correct=1说明密码输入正确,Number_sig的值为110111111111000011110000,Number_sig的值通过七段显示译码器之后将使数码管显示ERROR0。
(三)密码判断及更改1.原理密码判断模块:通过比较器将输入寄存器与存储寄存器中的数据进行比较,如果数据相同,则判断密码正确。
如果数据不同,则返回输入等待状态,并对输入寄存器中的数据清零。
密码更改模块:将第一次与第二次输入寄存器中的数据输入比较器比较,如果数据相同则将该数据输入进密码存储寄存器中。
如果数据不同,则返回数据输入前的数据等待状态。
2.模块框图比较器相同不同存储寄存器返回输入前状态第一次输入寄存器第二次输入寄存器输入输入比较器输入寄存器存储寄存器输入输入不同相同判断密码正确3.仿真结果main_state为10000即update状态,按键六次输入值为0110,0110,0110,0110,0110,0010,第二次输入相同。
即将密码由666666改为266666。
第二次输入完成same为1,说明两次输入相同。
按“#”键确认后。
当状态变为01000时,即in_put输入密码Inputpd为001001100110011001100110即266666,correct 为1说明密码修改成功并开锁。
(四)主状态机1.原理状态分五个状态:Waits,Input,Pass,Update,Forbid。
在Waits状态下,摁下“#”进入密码“Input”状态,在“Input”状态下摁“*”可删除当前Input 的字符。
若密码输入正确则进去“Pass”状态,否则进入“Forbid”状态,这时若摁下“#”键,则重新返回“Waits”状态。
摁下“*”键进入“Update”状态,输入两次密码然后摁“#”键进行确定,若两次密码不相同则Update失败,重新返回到“Pass”状态。
若两次密码相同,则返回到“Waits”状态。
2.模块框图3. 状态表Waits in_put Pass Forbid Update Right1Right2Error当前状态S Waits in_put Pass Forbid Update Update Update DS*Key_scan#*00Waits in_put Update Forbid Update Update Update D01in_put in_put Pass Waits Update Update Waits Pass10Waits in_put Pass Forbid Update Update Update D11D Pass D D Right1Right2D D1D Forbid D D D Error D DRight4. 仿真结果1) 密码输入错误按下“#”键,进行密码输入(main_state 由00001变为01000),此时error 为1说明密码输入错误。
main_state 变为forbid 状态(由01000变为00100)。
再按下“#”键,重新返回waits 状态(由00100变为00001)。
2)密码输入正确,且修改密码成功按下“#”键,进行密码输入(main_state由00001变为01000),此时correct为1说明密码输入正确。
由in_put变为pass(由01000变为00010)。
按下“*”进行密码修改,由00010变为10000修改正确,主状态重新返为wait。
3)密码输入正确,但密码修改失败按下“#”键,进行密码输入(main_state由00001变为01000),此时correct为1说明密码输入正确。
由in_put变为pass(由01000变为00010)。
按下“*”进行密码修改,由00010变为00010主状态由修改错误重新返为pass。
(五) 显示1. 原理这里的选择24位数码管控制模块,将24位拆分为六组四位编码输入七段译码器。
将译码输出与扫描模块产生的扫描时序共同作用于六位数码管。
得到所需显示结果。
2. 模块框图3. 仿真结果输入信号Number_sig 的值为000100100011010001010110即123456,Scan_sig 的值为011111时,即第一个数码管亮时Duan_date 的值为0110000即数码管显示数字为1。
综合以上,此时第一个数码管显示为1,之后第二个数码管显示为2,第三个数码管显示为3……数码管控制模块 (24位)七段译码器扫描模块六位数码管输入扫描分六组输入四位编码开始扫描五、验证方案采取自上而下的设计方案,首先将题目要求拆分成各大模块,然后通过编写Verilog语言的程序实现各模块的功能。
在2quatus中仿真出时序逻辑图,并验证程序的正确性。
图1.设计总框图的实现六、课程设计心得体会通过这次数字密码锁的课程设计,我们掌握了如何通过数字逻辑知识来设计一个可应用于生产生活中的拥有实际应用功能的数字逻辑器件。
首先我们要了解其具体功能要求,然后采用自上而下的设计方法,建立整体逻辑框图并将其划分为各个具体功能模块。
之后,我们通过编写Verilog程序实现每一模块的功能。
在编译无错误后,通过quartus 2软件自带的波形仿真功能检测模块功能是否实现。
当波形达到要求,将各模块拼接,得到最终的密码锁整体逻辑结构(如图1)。
在讨论课程设计时,我们最初想通过简单的逻辑门和逻辑器件来实现密码锁功能,以简化程序部分。
但是因为状态之间转换的复杂性,无法实现。
之后我们决定每一功能模块均通过程序来实现,并自动生成状态图及逻辑图。
这样工作的任务全部转移到编程上。
编程的感想:对于编程,我想说从对verilog一窍不通(C也不太会)到能独立地使用其进行编程,这将近一月的时间里,我学会了很多,一开始面对这个题目,完全不知道从何下手,从图书馆借了一本书就开始慢慢看,然后就尝试着去写,有时候一个简单的错误困扰了我整整一天甚至两天都想不出来。
这个题目的程序是我这将近一个月的心血,每一行都是经过思考后写下的。
通过这次课程设计,我体会到了编程的乐趣,当你长时间困扰在一个问题上,突然间的一个奇思妙想就可以解决问题或者实现一个以前实现不了的功能,就是这种偶尔的惊喜使得我坚持了下来。
这次课程设计美中不足的是,虽然各个模块都可以实现其功能,但是将其和在一起就会有问题,虽然编译无错误,但是功能无法实现。
因为时间原因,无法对其进行修正,这是我的一个遗憾。
程序编写的同时我们进行状态表的绘制,不同于软件仿真出的状态表,我们将状态简化绘制表格,只体现编程时的大致思路。
在这个过程中,我们熟练掌握了如何将抽象的状态变化绘制成状态转移表。
以及简单状态图的绘制方法。
七、源文件(详见附件)源代码:top.v //顶层文件****************************************************************************************** module top(clk,Rst,key_out,Duan_date,Scan_sig);input clk;input Rst;input [3:0] key_out;output [6:0] Duan_date;output [5:0] Scan_sig;wire [3:0] scan;wire [2:0] key_in;wire [2:0] key_mem;wire correct;wire error;wire same;wire [4:0] main_state;wire [23:0] Number_sig;wire [23:0] Inputpd;main_state_machine M1(.clk(clk),.Rst(Rst),.key_out(key_out),.correct(correct),.error(error),.same(same),.main_state(main_state),.key_mem(key_mem));key_scan M2(.clk(clk),.Rst(Rst),.key_in(key_in),.scan(scan),.key_out(key_out),.key_mem(key_mem));In_put M3(.clk(clk),.Rst(Rst),.key_out(key_out),.key_mem(key_mem),.correct(correct),.error(error),.main_state(main_state),.Number_sig(Number_sig),.Inputpd(Inputpd));passwdcom M4(.clk(clk),.Rst(Rst),.key_out(key_out),.Inputpd(Inputpd),.main_state(main_state),.key_mem(key_mem),.correct(correct),.error(error),.same(same));top_led M5(.clk(clk),.Rst(Rst),.Number_sig(Number_sig),.Duan_date(Duan_date),.Scan_sig(Scan_sig));endmodule******************************************************************************************Key_scan.v //键盘扫描****************************************************************************************** module key_scan(clk,scan,key_in,key_out,key_mem,Rst);input clk;input Rst;input [2:0] key_in;output [3:0] scan;output [3:0] key_out;output [2:0] key_mem;reg [3:0] scan;reg [3:0] key_out;reg [31:0] counter;reg _20clk;reg [1:0] Q;reg [2:0] key_mem;always @(posedge clk or negedge Rst)if(!Rst)begincounter <= 0;endelsebegincounter <= counter + 1'b1;if( counter == 12500)begincounter <= 0;_20clk <= ~_20clk;endendalways @( posedge _20clk )beginQ <= Q + 1'b1;endalways @(posedge clk or negedge Rst)beginif(!Rst)key_mem <= 3'b111;elsecase(Q)2'b00:beginscan = 4'b1110;case( key_in )3'b110 :beginkey_out <= 4'd1;key_mem <= 3'b110;end3'b101 :beginkey_out <= 4'd2;key_mem <= 3'b101;end3'b011 :beginkey_out <= 4'd3;key_mem <= 3'b011;enddefault : key_out <= 4'dz; endcaseend2'b01:beginscan = 4'b1101;case( key_in )3'b110 :beginkey_out <= 4'd4;key_mem <= 3'b110;end3'b101 :beginkey_out <= 4'd5;key_mem <= 3'b101;end3'b011 :beginkey_out <= 4'd6;key_mem <= 3'b011;enddefault : key_out <= 4'dz; endcaseend2'b10:beginscan = 4'b1011;case( key_in )3'b110 :beginkey_out <= 4'd7;key_mem <= 3'b110;end3'b101 :beginkey_out <= 4'd8;key_mem <= 3'b101;end3'b011 :beginkey_out <= 4'd9;key_mem <= 3'b011;enddefault : key_out <= 4'dz; endcaseend2'b11:beginscan=4'b0111;case( key_in )3'b110 : key_out <= 4'd10; 3'b101 :beginkey_out <= 4'd0;key_mem <= 3'b101;end3'b011 : key_out <= 4'd11; default : key_out <= 4'dz; endcaseendendcaseendendmodule******************************************************************************************In_put.v //输入****************************************************************************************** module In_put (clk,Rst,key_mem,Number_sig,key_out,Inputpd,correct,error,main_state);input clk;input Rst;input [3:0] key_out;input [2:0] key_mem;input correct;input error;input [4:0] main_state;output [23:0] Number_sig; //数码管显示数据output [23:0] Inputpd;reg [23:0] Number_sig;reg [23:0] Inputpd;reg [5:0] cur_state;reg [5:0] next_state;parameter first = 6'b000_001,second = 6'b000_010,third = 6'b000_100,fourth = 6'b001_000,fifth = 6'b010_000,sixth = 6'b100_000,finish = 6'b111_111;parameter [4:0] waits = 5'b00001,pass = 5'b00010,forbid = 5'b00100,in_put = 5'b01000,update = 5'b10000;always @(posedge clk or negedge Rst)beginif(!Rst)cur_state <= first;elsecur_state <= next_state;endreg KH2L_f1; //检测按键电平reg KH2L_g1;reg KH2L_f2;reg KH2L_g2;reg KH2L_f3;reg KH2L_g3;wire H2L_sig1;wire H2L_sig2;wire H2L_sig3;always @(posedge clk or negedge Rst)if(!Rst)beginKH2L_f1 <= 1'b1;KH2L_g1 <= 1'b1;KH2L_f2 <= 1'b1;KH2L_g2 <= 1'b1;KH2L_f3 <= 1'b1;KH2L_g3 <= 1'b1;endelsebeginKH2L_f1 <= key_mem[0];KH2L_g1 <= KH2L_f1;KH2L_f2 <= key_mem[1];KH2L_g2 <= KH2L_f2;KH2L_f3 <= key_mem[2];KH2L_g3 <= KH2L_f3;endassign H2L_sig1 = (KH2L_g1&(!KH2L_f1))? 1'b1:1'b0; assign H2L_sig2 = (KH2L_g2&(!KH2L_f2))? 1'b1:1'b0; assign H2L_sig3 = (KH2L_g3&(!KH2L_f3))? 1'b1:1'b0;always @(posedge clk or negedge Rst)beginif(!Rst)Number_sig <= 24'b0000_0000_0000_0000_0000_0000;else if(main_state == in_put)beginif(correct == 1)Number_sig <= 24'b0000_1100_1101_1110_0000_0000;else if(error == 1)Number_sig <= 24'b1101_1111_1111_0000_1111_0000;else if(error == 0 && correct == 0)case(cur_state)first :if((H2L_sig1||H2L_sig2||H2L_sig3) && (key_out == 4'd10)) next_state <= first;else if((H2L_sig1||H2L_sig2||H2L_sig3) && (key_out != 4'd10)) beginNumber_sig[3:0] <= key_out;next_state <= second;endelsenext_state <= first;second :if((H2L_sig1||H2L_sig2||H2L_sig3) && (key_out == 4'd10)) next_state <= first;else if((H2L_sig1||H2L_sig2||H2L_sig3) && (key_out != 4'd10)) beginNumber_sig[7:4] <= key_out;next_state <= third;endelsenext_state <= second;third :if((H2L_sig1||H2L_sig2||H2L_sig3) && (key_out == 4'd10)) next_state <= second;else if((H2L_sig1||H2L_sig2||H2L_sig3) && (key_out != 4'd10)) beginNumber_sig[11:8] <= key_out;next_state <= fourth;endelsenext_state <= third;fourth :if((H2L_sig1||H2L_sig2||H2L_sig3) && (key_out == 4'd10)) next_state <= third;else if((H2L_sig1||H2L_sig2||H2L_sig3) && (key_out != 4'd10)) beginNumber_sig[15:12] <= key_out;next_state <= fifth;endelsenext_state <= fourth;fifth :if((H2L_sig1||H2L_sig2||H2L_sig3) && (key_out == 4'd10))next_state <= fourth;else if((H2L_sig1||H2L_sig2||H2L_sig3) && (key_out != 4'd10))beginNumber_sig[19:16] <= key_out;next_state <= sixth;endelsenext_state <= fifth;sixth :if((H2L_sig1||H2L_sig2||H2L_sig3) && (key_out == 4'd10))next_state <= fifth;else if((H2L_sig1||H2L_sig2||H2L_sig3) && (key_out != 4'd10))beginNumber_sig[23:20] <= key_out;next_state <= finish;endelsenext_state <= sixth;finish :if((H2L_sig1||H2L_sig2||H2L_sig3) && (key_out == 4'd10))next_state <= sixth;elsenext_state <= finish;default next_state <= first;endcaseendendalways @(posedge clk or negedge Rst)if(!Rst)Inputpd = 0;else if (cur_state == finish)Inputpd = Number_sig;endmodule****************************************************************************************** Led_encode.v //数码管加码****************************************************************************************** module led_encode(clk,Rst,Number_date,Duan_date);input clk;input Rst;input [3:0] Number_date;output [6:0] Duan_date;parameter _0 = 7'b1111_110,_1 = 7'b0110_000,_2 = 7'b1101_101,_3 = 7'b1111_001,_4 = 7'b0110_011,_5 = 7'b1011_011,_6 = 7'b1011_111,_7 = 7'b1110_000,_8 = 7'b1111_111,_9 = 7'b1111_011,_p = 7'b1100_111,_e = 7'b1001_111,_n = 7'b1110_110,_r = 7'b1110_111;reg [6:0] rDuan;always @(posedge clk or negedge Rst)if(!Rst)beginrDuan <= 7'b0000_000;endelsecase(Number_date)4'd0 : rDuan <= _0;4'd1 : rDuan <= _1;4'd2 : rDuan <= _2;4'd3 : rDuan <= _3;4'd4 : rDuan <= _4;4'd5 : rDuan <= _5;4'd6 : rDuan <= _6;4'd7 : rDuan <= _7;4'd8 : rDuan <= _8;4'd9 : rDuan <= _9;4'd12 : rDuan <= _p;4'd13 : rDuan <= _e;4'd14 : rDuan <= _n;4'd15 : rDuan <= _r;endcaseassign Duan_date = rDuan;endmodule******************************************************************************************passwdcom.v //密码比较及修改****************************************************************************************** module passwdcom(clk,Rst,Inputpd,main_state,key_out,correct,error,key_mem,same);input clk;input Rst;input [3:0] key_out;input [23:0] Inputpd;input [4:0] main_state;input [2:0] key_mem;output correct;output error;output same;reg correct;reg error;reg [5:0] cur_state;reg [5:0] next_state;reg one;reg same;reg [4:0] in_put ,update ;initialbeginin_put = 5'b01000;update = 5'b10000;endreg [23:0] Password = 24'b0110_0110_0110_0110_0110_0110; //初始密码666666always @(posedge clk or negedge Rst) //判断输入密码是否正确if(!Rst)begincorrect <= 0;error <= 0;endelse if(main_state == in_put)if(Inputpd === Password) //密码输入正确begincorrect <= 1;error <= 0;endelse //密码输入错误begincorrect <= 0;error <= 1;endparameter first = 6'b000_001, //定义按键状态 second = 6'b000_010,third = 6'b000_100,fourth = 6'b001_000,fifth = 6'b010_000,sixth = 6'b100_000,finish = 6'b111_111,finish2 = 6'b011_111;reg KH2L_f1; //检测按键电平reg KH2L_g1;reg KH2L_f2;reg KH2L_g2;reg KH2L_f3;reg KH2L_g3;wire H2L_sig1;wire H2L_sig2;wire H2L_sig3;always @(posedge clk or negedge Rst)if(!Rst)KH2L_f1 <= 1'b1;KH2L_g1 <= 1'b1;KH2L_f2 <= 1'b1;KH2L_g2 <= 1'b1;KH2L_f3 <= 1'b1;KH2L_g3 <= 1'b1;endelsebeginKH2L_f1 <= key_mem[0];KH2L_g1 <= KH2L_f1;KH2L_f2 <= key_mem[1];KH2L_g2 <= KH2L_f2;KH2L_f3 <= key_mem[2];KH2L_g3 <= KH2L_f3;endassign H2L_sig1 = (KH2L_g1&(!KH2L_f1))? 1'b1:1'b0; assign H2L_sig2 = (KH2L_g2&(!KH2L_f2))? 1'b1:1'b0; assign H2L_sig3 = (KH2L_g3&(!KH2L_f3))? 1'b1:1'b0;reg [23:0] password;reg [23:0] password2;always @(posedge clk or negedge Rst)beginif(!Rst)beginone = 1'b0;cur_state = first;endelse if(cur_state == finish && one == 0)beginone = 1'b1;cur_state = first;endelsecur_state = next_state;endalways @(posedge clk or negedge Rst) //修改密码beginif(!Rst)password = 24'b0110_0110_0110_0110_0110_0110;password2 = 24'b0110_0110_0110_0110_0110_0110;endelse if(main_state == update)case(one)0:case(cur_state)first :if(H2L_sig1||H2L_sig2||H2L_sig3)beginpassword[3:0] = key_out;next_state = second;endelsenext_state = first;second :if(H2L_sig1||H2L_sig2||H2L_sig3)beginpassword[7:4] = key_out;next_state = third;endelsenext_state = second;third :if(H2L_sig1||H2L_sig2||H2L_sig3)beginpassword[11:8] = key_out;next_state = fourth;endelsenext_state = third;fourth :if(H2L_sig1||H2L_sig2||H2L_sig3)beginpassword[15:12] = key_out;next_state = fifth;endelsenext_state = fourth;fifth :if(H2L_sig1||H2L_sig2||H2L_sig3)beginpassword[19:16] = key_out;next_state = sixth;endelsenext_state = fifth;sixth :if(H2L_sig1||H2L_sig2||H2L_sig3)beginpassword[23:20] = key_out;next_state = finish;endelsenext_state = sixth;finish :next_state = finish;default next_state = first;endcase1: //新密码第二次输入case(cur_state)first :if(H2L_sig1||H2L_sig2||H2L_sig3)beginpassword2[3:0] = key_out;next_state = second;endelsenext_state = first;second :if(H2L_sig1||H2L_sig2||H2L_sig3)beginpassword2[7:4] = key_out;next_state = third;endelsenext_state = second;third :if(H2L_sig1||H2L_sig2||H2L_sig3)beginpassword2[11:8] = key_out;next_state = fourth;endelsenext_state = third;fourth :if(H2L_sig1||H2L_sig2||H2L_sig3)beginpassword2[15:12] = key_out;next_state = fifth;endelsenext_state = fourth;fifth :if(H2L_sig1||H2L_sig2||H2L_sig3)beginpassword2[19:16] = key_out;next_state = sixth;endelsenext_state = fifth;sixth :if(H2L_sig1||H2L_sig2||H2L_sig3)beginpassword2[23:20] = key_out;next_state = finish2;endelsenext_state = sixth;finish2 :next_state = finish2;default next_state = first;endcaseendcaseendalways @(posedge clk or negedge Rst)beginif (!Rst)same <= 1'b0;else if (main_state == update && cur_state == finish2 && one == 1) beginif(password === password2)same <= 1'b1;elsesame <= 1'b0;endendalways @(posedge clk)beginif((H2L_sig1||H2L_sig2||H2L_sig3) && (key_out == 4'd10))Password = 24'b0110_0110_0110_0110_0110_0110;else if((H2L_sig1||H2L_sig2||H2L_sig3) && (key_out == 4'd11) && (same == 1))Password = password;elsePassword = Password;endendmodule******************************************************************************************led_scan.v //数码管扫描****************************************************************************************** module led_scan(clk,Rst,Scan_sig);input clk;input Rst;output [5:0] Scan_sig;parameter T1ms = 16'd49999;reg [15:0] C1;always @(posedge clk or negedge Rst)if(!Rst)C1 <= 16'd0;else if(C1 == T1ms)C1 <= 16'd0;elseC1 <= C1 + 1'b1;reg [3:0] i;reg [5:0] rScan;always @(posedge clk or negedge Rst)if(!Rst)begini <= 4'd0;rScan <= 6'b111_111;endelsecase(i)0:if(C1 == T1ms) i <= i + 1'b1;else rScan <= 6'b011_111;1:if(C1 == T1ms) i <= i + 1'b1;else rScan <= 6'b101_111;2:if(C1 == T1ms) i <= i + 1'b1;else rScan <= 6'b110_111;3:if(C1 == T1ms) i <= i + 1'b1;else rScan <= 6'b111_011;4:if(C1 == T1ms) i <= i + 1'b1;else rScan <= 6'b111_101;5:if(C1 == T1ms) i <= i + 1'b1;else rScan <= 6'b111_110;endcaseassign Scan_sig = rScan;endmodule******************************************************************************************led_control.v //数码管显示控制****************************************************************************************** module led_control(clk,Rst,Number_sig,Number_date);input clk;input Rst;input [23:0] Number_sig;output [3:0] Number_date;parameter T1ms = 16'd49999;reg [15:0] C1;always @(posedge clk or negedge Rst)if(!Rst)C1 <= 16'd0;else if(C1 == T1ms)C1 <= 16'd0;elseC1 <= C1 + 1'b1;reg [3:0] i;reg [3:0] rNumber;always @(posedge clk or negedge Rst)if(!Rst)begini <= 4'd0;rNumber <= 4'd0;endelsecase(i)0:if(C1 == T1ms) i <= i + 1'b1;else rNumber <= Number_sig[23:20];1:if(C1 == T1ms) i <= i + 1'b1;else rNumber <= Number_sig[19:16];2:if(C1 == T1ms) i <= i + 1'b1;else rNumber <= Number_sig[15:12];3:if(C1 == T1ms) i <= i + 1'b1;else rNumber <= Number_sig[11:8];4:if(C1 == T1ms) i <= i + 1'b1;else rNumber <= Number_sig[7:4];5:if(C1 == T1ms) i <= i + 1'b1;else rNumber <= Number_sig[3:0];endcaseassign Number_date = rNumber;endmodule******************************************************************************************main_state_machine.v //主状态机****************************************************************************************** module main_state_machine(clk,Rst,key_out,correct,error,main_state,same,key_mem);input clk;input Rst;input [3:0] key_out;input [2:0] key_mem;input correct;input error;input same;output [4:0] main_state;reg [4:0] main_state; //主状态parameter [4:0] waits = 5'b00001,pass = 5'b00010,forbid = 5'b00100,in_put = 5'b01000,update = 5'b10000;reg KH2L_f1; //检测按键电平reg KH2L_g1;reg KH2L_f2;reg KH2L_g2;reg KH2L_f3;reg KH2L_g3;wire H2L_sig1;wire H2L_sig2;wire H2L_sig3;always @(posedge clk or negedge Rst)if(!Rst)beginKH2L_f1 <= 1'b1;KH2L_g1 <= 1'b1;KH2L_f2 <= 1'b1;KH2L_g2 <= 1'b1;KH2L_f3 <= 1'b1;KH2L_g3 <= 1'b1;endelsebeginKH2L_f1 <= key_mem[0];KH2L_g1 <= KH2L_f1;KH2L_f2 <= key_mem[1];KH2L_g2 <= KH2L_f2;KH2L_f3 <= key_mem[2];KH2L_g3 <= KH2L_f3;endassign H2L_sig1 = (KH2L_g1&(!KH2L_f1))? 1'b1:1'b0;assign H2L_sig2 = (KH2L_g2&(!KH2L_f2))? 1'b1:1'b0;assign H2L_sig3 = (KH2L_g3&(!KH2L_f3))? 1'b1:1'b0;//主状态机always@(posedge clk or negedge Rst)beginif(!Rst)main_state <= waits;elsecase(main_state)waits:if ((H2L_sig1 || H2L_sig2 || H2L_sig3) &&(key_out === 4'd11)) main_state <= in_put;in_put:if(correct == 1) //由in_put转换到pass的条件main_state <= pass;//还要显示correctelse if (error == 1)main_state <= forbid;//显示errorpass:if((H2L_sig1 || H2L_sig2 || H2L_sig3) &&(key_out == 4'd10))main_state <= update; //进入修改密码状态else if((H2L_sig1 || H2L_sig2 || H2L_sig3) && (key_out == 4'd11)) //关锁main_state <= waits;update:if((H2L_sig1 || H2L_sig2 || H2L_sig3) && (key_out == 4'd11) && (same == 1)) main_state <= waits;else if((H2L_sig1 || H2L_sig2 || H2L_sig3) && (key_out == 4'd11) && (same == 0)) main_state <= pass;forbid:if((H2L_sig1 || H2L_sig2 || H2L_sig3) && (key_out == 4'd11))main_state <= waits;endcaseendendmodule******************************************************************************************top_led.v //数码管模块顶层封装****************************************************************************************** module top_led(clk,Rst,Number_sig,Duan_date,Scan_sig);input clk;input Rst;input [23:0] Number_sig;output [6:0] Duan_date;output [5:0] Scan_sig;wire [3:0] Number_date;led_control U1(.clk(clk),.Rst(Rst),.Number_sig(Number_sig),.Number_date(Number_date));led_encode U2(.clk(clk),.Rst(Rst),.Number_date(Number_date),.Duan_date(Duan_date));led_scan U3(.clk(clk),.Rst(Rst),.Scan_sig(Scan_sig));endmodule******************************************************************************************。