数字电路设计实验-简易密码锁
- 格式:doc
- 大小:467.37 KB
- 文档页数:26
数字电路课程设计设计报告课题名称:密码锁设计成员1:设计成员2:设计成员3:密码锁一、目录1、设计项目综述 (2)2、设计方案及分析 (3)2.1设计方案 (3)2.2设计分析 (4)2.3方案优缺点 (4)3、电路原理分析 (5)3.1模块1:八进制优先编码器74ls148 (5)3.2模块2:4位双稳锁存器74LS75 (6)3.3模块3:4位数字比较器74LS85 (8)3.4模块4:可预置bcd计数器74LS160 (9)3.5 总图 (14)4、总结 (16)4.1设计中遇到的问题及解决方法 (17)4.2设计方案中需要改进的地方 (17)4.3这次设计中的收获和教训 (17)二、设计项目综述:1、可以预置1位十进制数密码,并保存密码。
2、开锁时,输入正确密码,按开锁键,锁打开。
3、当输入密码时,数码管显示相应的输入数字。
密码输入错误时计数一次,当输入错误密码连续达到四次,拒绝再输入密码。
需用复位键将其还原才能再次输入。
4、输入密码时,数码管8显示密码的数值。
拒绝输入密码时,只显示0。
按开锁键时,数码管5显示密码输入错误的次数;当错误次数连续少于4次以下时,则当输入密码正确时数码管5清“0”。
5、开锁指示灯亮表示锁已经打开。
三、设计方案及分析1、设计方案根据以上密码锁的设计任务,我们拟定的方案可以简略的如以下框图所示:2、方案分析(1)密码输入:由于要求通过每按一个输入键时直接显示为对应的十进制数密码,所以需要将二进制数转换为对应的十进制数。
根据前面这个要求,我们有两个选择74ls147和74ls148。
74ls147与74ls148比较,74ls148比74ls147多一个功能端。
使用74ls148可以实现输入四次错误自动锁定。
虽74ls148总的输入键只有8个,使用两块74ls148,并他们通过级联可以解决0~9输入。
当多过输入端同时出现时,只对其中优先权最高的一个进行编码,这个编码就是我们要的对应的十进制数。
数电实验报告电子密码锁设计
实验报告
实验十四电子密码锁设计与实现
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作计数器。
当连续三次输入错误密码即产生报警信号同时锁住,此时再输入正确密码不产生开锁信号。
仿真图如下:。
简易14位数字密码锁控制电路设计实验报告实验目的:本实验旨在掌握基本的数字锁控制电路设计方法,通过具体实验操作,使学生对数字锁的原理、控制电路以及数字电路的设计方法等有更加深入的了解和认识。
实验器材:1.数字集成电路:CD4017B、CD4069UB、CD4073B、SN74LS08N;2.10K电位器、电容、电阻器、LED灯等。
实验原理:密码锁控制电路是由数字集成电路CD4017B、CD4069UB、CD4073B及SN74LS08N组成的。
其中CD4017B为计数器,CD4069UB、CD4073B和SN74LS08N为逻辑门电路,用于实现密码锁控制功能。
CD4017B为数字集成电路,它是一个10位二进制计数器,可以用于电子时钟、计时器、频率分频器等电路中。
它具有高速、低功耗、可升级性等优点,被广泛地应用于数字电路中。
CD4069UB、CD4073B和SN74LS08N均为逻辑门电路,主要用来实现与门、或门、非门等逻辑运算。
在本实验中,CD4017B接在控制端,用于实现计数和循环控制功能;CD4069UB、CD4073B和SN74LS08N三个逻辑门电路用于实现锁定、解锁功能。
实验步骤:1. 选择合适的元器件,按照电路图连接电路。
将电路连接好后,注意检查电路连接是否正确、元器件是否插紧等。
2. 按照实验要求进行编程。
将编程程序设置为14位数字密码,具体程序如下:3. 按照要求测试实验电路。
输入正确的密码,即可实现锁定或解锁功能。
实验结果:通过实验操作,我们成功地设计出一款14位数字密码锁控制电路,其操作流程为输入密码-验证密码-锁定或解锁。
通过实验可以看出,密码锁控制电路设计简单,操作方便,具有广泛的应用前景。
实验分析:数字密码锁是一种常见的电子密码产品,可以用于保护个人财产、资料等,在家庭、宾馆等场所得到了广泛的应用。
基于数字集成电路和逻辑门电路设计数字密码锁控制电路,具有操作简单、易于维护和升级等优点,被广泛地应用于数字电路中。
简易位数字密码锁控制电路设计实验报告Coca-cola standardization office【ZZ5AB-ZZSYT-ZZ2C-ZZ682T-目录一、前言 (2)二、课设任务 (2)三、方案设计、原理分析 (2)四、译码电路设计 (8)五、报警信号产生器 (10)六、调试及结果..........................................(12)七、体会 (13)一、前言本次课程设计的基本任务是着重提高学生在EDA知识学习与应用方面的实践技能。
学生通过电路设计安装、调试、整理资料等环节,初步掌握工程设计方法和组织实践的基本技能,逐步熟悉开展科学实践的程序和方法。
EDA技术是电子信息类专业的一门新兴学科,是现代电子产品设计的核心,其任务是掌握在系统可编程逻辑器件及其应用设计技术,为电子产品开发研制打下坚实基础。
本课程设计对学生有如下要求:根据设计任务和指标,初步电路;通过调查研究,设计计算,确定电路方案;选择元器件,在计算机上连好线路,独立进行试验,并通过调试、仿真、改进方案;分析实验结果,写出设计总结报告:学会自己分析,找出解决问题方法;对设计中遇到的问题,能独立思考、查阅资料,寻找答案。
二、课设任务1、14位数字密码分成高7位(DH6…DH0)和低7位(DL6…DL0),用数字逻辑开关预置,输出信号out为1表示开锁,否则关闭。
2、14位数字密码分时操作,先预置高7位,然后再置入低7位。
3、要求电路工作可靠,保密性强,开锁出错立即报警。
4、利用MAX plus2 软件进行设计、编译,并在FPGA芯片上实现。
5、简易14位数字密码锁模块的框图如下:三、方案设计、原理分析首先我是一班的三号,所以我的密码时0100010 0000011。
我所做的设计是先把高七位输入锁存,然后在输入低七位,最后判断密码是否正确,密码正确就开锁,密码错误就报警。
数字密码锁控制电路的组成部分:YMQ 模块,1、IC9A的设计设计要求14位数字密码分时操作,先预置高七位0100010,而后置低七位0000011,首先可以使用寄存器将高七位存起来,而后与低七位一起进行译码,如果密码正确,输出OUT2为1,否则为0.2、数字密码锁控制电路原理图:输入密码正确时波形图输入错误密码时波形图数字密码锁控制电路的VHDL语言编程原理分析:当CLR为0时,寄存器与D触发器被清零,此时在A……G输入高七位密码0100010,用CLK给一个脉冲,由于此时输出端Q为0,经过一个非门为1,与CLK一起经过一个与门,送入寄存器CLK 端,产生上升沿;而经过非门的CLR为1,送入寄存器中,将高七位通过寄存器送入译码器的高七位中。
数电实验三报告姓名:xxx班级:xxx 学号:xxxx实验:基于有限状态机的密码锁一、实验目的学习如何通过Verilog HDL 编程,利用Basys3板上的开关控制七段数码管实现四位密码锁。
二、实验要求使用有限状态机设计一个 4 位密码锁。
利用 Basys3 板上的滑动开关 sw[0]到sw[9]分别代表 0‐9 十个数字,依次输入 4 位不重复的密码。
如果密码输入顺序与设计设置的一致,则显示大写字母P,否则显示大写字母F。
注意,即使密码输入错误,也必须在输入完整的 4 位密码输入,才能显示大写字母 F。
三、实验设计及内容1.基础版实验代码module doorlock(input CLK,input clr,input [9:0] sw,output reg [10:0] display_out);reg[3:0] present_state,next_state;parameter S0=4'b0000,S1=4'b0001,S2=4'b0010,S3=4'b0011,S4=4'b0100,E1=4'b0101,E2=4'b0110,E3=4'b0111,E4=4'b1000;reg [29:0] count;reg [9:0] keys=0;always @(posedge CLK or posedge clr)beginif (clr) count<=0;else count<=count+1;endassign clk_3=count[24];// ~3Hzalways @(posedge clk_3 or posedge clr) // STATE TRANSITIONbeginif (keys!=sw) keys <= sw;if (clr) present_state <= S0;else present_state <= next_state;end// Demo for Finite State Machine// the correct password is 0->1->2->3 (Switch sw[0]->sw[1]->sw[2]->sw[3] in order. always @(*)begincase (present_state)S0: beginif (~|keys[9:0]) next_state <=S0; // no key pressedelse if (keys[2]) next_state <=S1; // first valid key pressedelse next_state <=E1; // first invalid key pressedendS1: beginif (~|keys[9:3]&&~|keys[1:0]) next_state <=S1; // no key pressedelse if (keys[1]) next_state <=S2;// second valid key pressedelse next_state <=E2;// second invalid key pressedendS2: beginif (~|keys[9:3]&&~|keys[0]) next_state <=S2; // no key pressedelse if (keys[7]) next_state <=S3; // third valid key pressedelse next_state <=E3;// third invalid key pressedendS3: beginif (~|keys[9:8]&&~|keys[6:3]&&~|keys[0]) next_state <=S3; // no key pressedelse if (keys[3]) next_state <=S4;// fourth vaild key pressedelse next_state <=E4;// fourth invalid key pressedendS4: beginif (~|keys[9:8]&&~|keys[6:4]&&~|keys[0]) next_state <=S4; // no keypressedelse next_state <=E1; // fifth key pressed, but ignored *** endE1:beginif (keys!=sw) next_state <=E2; // second invalid key pressedelse next_state <=E1; // no key pressedendE2:beginif (keys!=sw) next_state <=E3; // third invalid key pressedelse next_state <=E2; // no key pressedendE3:beginif (keys!=sw) next_state <=E4; // fourth invalid key pressedelse next_state <=E3; // no key pressedendE4: next_state <=E4; // the additional keys are ALL ignored ***default: next_state <=S0;endcaseendalways @(*) // indicate the number of inputs and display the tag begincase(present_state)S4: display_out<=11'b0111_0011000;// P in left-most segmentE4: display_out<=11'b1110_0111000;// F in right-most segmentS0: display_out<=11'b1001_0011100;// oo in the middle segmentsS1,E1: display_out<=11'b1001_0111111;// confirm first inputS2,E2: display_out<=11'b1001_0011111;// confirm second inputS3,E3: display_out<=11'b1001_0011110;// confirm third inputdefault:display_out<=11'b1111_1111111; // no displayendcaseendendmodule2.进阶版实验代码module doorlock2(input CLK,input clr,input [9:0] sw,output reg [10:0] display_out);reg[3:0] present_state,next_state;reg [19:0]count1=0;reg [2:0] sel=0;parameter S0= 4'b0000,S1=4'b0001,S2=4'b0010,S3=4'b0011,S4=4'b0100, S01=4'b1001,S02=4'b1010,S03=4'b1011,E1=4'b0101,E2=4'b0110,E3=4'b0111,E4=4'b1000;parameter T1MS=50000,T2MS=20000_0000;reg [29:0] count;reg [32:0] count2=0;reg [9:0] keys=0;reg flag;always @(posedge CLK or posedge clr)beginif (clr)begincount<=0;endelse count<=count+1;endwire clk_3;assign clk_3=count[24];// ~3Hzalways @(posedge clk_3 or posedge clr) // STATE TRANSITIONbeginif (keys!=sw) keys <= sw;if (clr) present_state <= S0;else present_state <= next_state;endalways@(posedge CLK or posedge clr)beginif(present_state == S4)beginif(count2<T2MS)begincount2<=count2+1;flag<=1'b0;endelsebeginflag<=1'b1;endendif(clr) count2<=0;end// Demo for Finite State Machine// the correct password is 0->1->2->3 (Switch sw[0]->sw[1]->sw[2]->sw[3] in order. always @(*)begincase (present_state)S0: beginif (~|keys[9:0]) next_state <=S0; // no key pressedelse if (keys[2]) next_state <=S1; // first valid key pressedelse next_state <=E1; // first invalid key pressedendS1: beginif (~|keys[9:3]&&~|keys[1:0]) next_state <=S1; // no key pressed//else if (!sw) next_state <=S01;// second valid key pressedelse if(keys[1]&&keys[2]) next_state<=S2;else next_state <=E2;// second invalid key pressedendS01:beginif(!sw) next_state<=S01;else if(sw[2]) next_state<=S2;else next_state<=E2;endS2: beginif (~|keys[9:3]&&~|keys[0]) next_state <=S2; // no key pressed//else if (!sw) next_state <=S02; // third valid key pressedelse if (keys[2]&&keys[1]&&keys[3]) next_state <=S3;else next_state<=E3;// third invalid key pressedendS02: beginif(!sw) next_state<=S02;else if(sw[1]) next_state<=S3;else next_state<=E3;endS3: beginif (keys[1]&&keys[2]&&keys[3]) next_state <=S3; // no key pressed else if (!sw[3]) next_state <=S03;// fourth vaild key pressedelse next_state <=E4;// fourth invalid key pressedendS03:beginif(~|keys[9:3]&&~|keys[0]) next_state<=S03;else if(keys[3]) next_state<=S4;else next_state<=E4;endS4: beginif (~|keys[9:4]&&~|keys[0]) next_state <=S4; // no key pressedelse next_state <=E1; // fifth key pressed, but ignored *** endE1:beginif (keys!=sw) next_state <=E2; // second invalid key pressedelse next_state <=E1; // no key pressedendE2:beginif (keys!=sw) next_state <=E3; // third invalid key pressedelse next_state <=E2; // no key pressedendE3:beginif (keys!=sw) next_state <=E4; // fourth invalid key pressedelse next_state <=E3; // no key pressedendE4: next_state <=E4; // the additional keys are ALL ignored ***default: next_state <=S0;endcaseendalways@(posedge CLK)begincount1<=count1+1;if(count1==T1MS)begincount1<=0;sel<=sel+1;if(sel==4)sel<=0;endendalways @(posedge CLK) // indicate the number of inputs and display the tagbegincase(present_state)S0: begincase(sel)0:display_out<=11'b0111_0101000;1:display_out<=11'b1011_0110000;2:display_out<=11'b1101_1000100;3:display_out<=11'b1110_0110110;default:display_out<=11'b1111_1111111;endcaseendS1: begincase(sel)0:display_out<=11'b0111_0010010;1:display_out<=11'b1011_1110111;2:display_out<=11'b1101_1110111;3:display_out<=11'b1110_1110111;default:display_out<=11'b1111_1111111;endcaseend // confirm first inputS2: begincase(sel)0:display_out<=11'b0111_0010010;1:display_out<=11'b1011_1001111;2:display_out<=11'b1101_1110111;3:display_out<=11'b1110_1110111;default:display_out<=11'b1111_1111111;endcaseend // confirm second inputS3: begincase(sel)0:display_out<=11'b0111_0010010;1:display_out<=11'b1011_1001111;2:display_out<=11'b1101_0000110;3:display_out<=11'b1110_1110111;default:display_out<=11'b1111_1111111;endcaseend // confirm third inputS4: beginif(!flag)begincase(sel)0:display_out<=11'b0111_0010010;1:display_out<=11'b1011_1001111;2:display_out<=11'b1101_0000110;3:display_out<=11'b1110_0000110;default:display_out<=11'b1111_1111111;endcaseendelse display_out<= 11'b0111_0011000 ;end // P in left-most segmentS01:begincase(sel)0:display_out<=11'b0111_0010010;1:display_out<=11'b1011_1110111;2:display_out<=11'b1101_1110111;3:display_out<=11'b1110_1110111;default:display_out<=11'b1111_1111111;endcaseendS02:begincase(sel)0:display_out<=11'b0111_0010010;1:display_out<=11'b1011_1001111;2:display_out<=11'b1101_1110111;3:display_out<=11'b1110_1110111; default:display_out<=11'b1111_1111111;endcaseendS03: begincase(sel)0:display_out<=11'b0111_0010010;1:display_out<=11'b1011_1001111;2:display_out<=11'b1101_0000110;3:display_out<=11'b1110_1110111;default:display_out<=11'b1111_1111111;endcaseendE1: display_out<=11'b0111_0111000;E2: display_out<=11'b1011_0111000;E3: display_out<=11'b1101_0111000;E4: display_out<=11'b1110_0111000;// F in right-most segment default:display_out<=11'b1111_1111111; // no displayendcaseendendmodule约束文件代码:## Clock signalset_property PACKAGE_PIN W5 [get_ports CLK]set_property IOSTANDARD LVCMOS33 [get_ports CLK]## Switchesset_property PACKAGE_PIN V17 [get_ports {sw[0]}] set_property IOSTANDARD LVCMOS33 [get_ports {sw[0]}]set_property PACKAGE_PIN V16 [get_ports {sw[1]}] set_property IOSTANDARD LVCMOS33 [get_ports {sw[1]}]set_property PACKAGE_PIN W16 [get_ports {sw[2]}] set_property IOSTANDARD LVCMOS33 [get_ports {sw[2]}]set_property PACKAGE_PIN W17 [get_ports {sw[3]}] set_property IOSTANDARD LVCMOS33 [get_ports {sw[3]}]set_property PACKAGE_PIN W15 [get_ports {sw[4]}] set_property IOSTANDARD LVCMOS33 [get_ports {sw[4]}]set_property PACKAGE_PIN V15 [get_ports {sw[5]}] set_property IOSTANDARD LVCMOS33 [get_ports {sw[5]}]set_property PACKAGE_PIN W14 [get_ports {sw[6]}] set_property IOSTANDARD LVCMOS33 [get_ports {sw[6]}]set_property PACKAGE_PIN W13 [get_ports {sw[7]}] set_property IOSTANDARD LVCMOS33 [get_ports {sw[7]}]set_property PACKAGE_PIN V2 [get_ports {sw[8]}] set_property IOSTANDARD LVCMOS33 [get_ports {sw[8]}]set_property PACKAGE_PIN T3 [get_ports {sw[9]}] set_property IOSTANDARD LVCMOS33 [get_ports {sw[9]}]## sw[15]set_property PACKAGE_PIN R2 [get_ports {clr}]set_property IOSTANDARD LVCMOS33 [get_ports {clr}]## 7-seg displayset_property PACKAGE_PIN W4 [get_ports {display_out[10]}]set_property PACKAGE_PIN V4 [get_ports {display_out[9]}]set_property PACKAGE_PIN U4 [get_ports {display_out[8]}]set_property PACKAGE_PIN U2 [get_ports {display_out[7]}]set_property PACKAGE_PIN W7 [get_ports {display_out[6]}]set_property PACKAGE_PIN W6 [get_ports {display_out[5]}]set_property PACKAGE_PIN U8 [get_ports {display_out[4]}]set_property PACKAGE_PIN V8 [get_ports {display_out[3]}]set_property PACKAGE_PIN U5 [get_ports {display_out[2]}]set_property PACKAGE_PIN V5 [get_ports {display_out[1]}]set_property PACKAGE_PIN U7 [get_ports {display_out[0]}]set_property IOSTANDARD LVCMOS33 [get_ports {display_out[9]}]set_property IOSTANDARD LVCMOS33 [get_ports {display_out[8]}]set_property IOSTANDARD LVCMOS33 [get_ports {display_out[7]}]set_property IOSTANDARD LVCMOS33 [get_ports {display_out[6]}]set_property IOSTANDARD LVCMOS33 [get_ports {display_out[5]}]set_property IOSTANDARD LVCMOS33 [get_ports {display_out[4]}]set_property IOSTANDARD LVCMOS33 [get_ports {display_out[3]}]set_property IOSTANDARD LVCMOS33 [get_ports {display_out[1]}]set_property IOSTANDARD LVCMOS33 [get_ports {display_out[2]}]set_property IOSTANDARD LVCMOS33 [get_ports {display_out[0]}]set_property IOSTANDARD LVCMOS33 [get_ports {display_out[10]}]四、实验结果1基础结果图2.进阶结果图进阶实验成品效果说明:进阶视频演示:正确示范:密码输入错误示范:五、实验总结1.通过本次实验了解了时钟信号的作用原理以及对时序电路的控制机理。
数字电路设计实验报告——简易密码锁学院:班级:学号:姓名:目录●任务要求●系统设计✓设计思路✓总体框图✓分块设计●波形仿真及波形分析●源代码●功能分析●故障分析及问题解决●总结及结论●任务要求设计并实现一个数字密码锁,密码锁有四位数字密码和一个确认开锁按键,密码输入正确,密码锁打开,密码输入错误进行警示。
基本要求:1、密码设置:通过键盘进行4 位数字密码设定输入,在数码管上显示所输入数字。
通过密码设置确定键(BTN 键)进行锁定。
2、开锁:在闭锁状态下,可以输入密码开锁,且每输入一位密码,在数码管上显示“-”,提示已输入密码的位数。
输入四位核对密码后,按“开锁”键,若密码正确则系统开锁,若密码错误系统仍然处于闭锁状态,并用蜂鸣器或led 闪烁报警。
3、在开锁状态下,可以通过密码复位键(BTN 键)来清除密码,恢复初始密码“0000”。
闭锁状态下不能清除密码。
4、用点阵显示开锁和闭锁状态。
提高要求:1、输入密码数字由右向左依次显示,即:每输入一数字显示在最右边的数码管上,同时将先前输入的所有数字向左移动一位。
2、密码锁的密码位数(4~6 位)可调。
3、自拟其它功能。
●系统设计设计思路将电子密码锁系统分为三个部分来进行设计,数字密码输入部分、密码锁控制电路和密码锁显示电路。
密码锁输入电路包括时序产生电路,键盘扫描电路,键盘译码电路等,将用户手动输入的相关密码信息转换为软件所能识别的编码,作为整个电路的输入。
密码锁控制电路包括相应的数据存储电路,密码核对电路,能够进行数值的比较,进行电路解锁,开锁,密码的重新设置等。
密码锁显示电路包括将待显示数据的BCD 码转换成数码管的七段显示驱动编码,密码锁在相应的状态下的点阵输出以及蜂鸣器的报警输出。
总体框图按复位键 键入初始密码0000 密码错误密码正确 按确认键 按复位键按确认键密码锁显示电路 密码锁控制电路 数码管显示报警电路密码更改与密码设计电路键入状态闭锁状态开锁状态 报警状态分块设计✓键盘扫描电路首先,向列扫描地址逐列输出低电平,然后从行码地址读回,如果有键摁下,则相应行的值应为低,如果没有按键按下,由于上拉的作用,行码为高。
数字电路实验综合设计二
一.实验名称:设计一个四位密码锁。
二.实验要求:设计一个密码锁,假如有四位密码输入,同时还需使用钥匙,如果密码和钥匙都正确,则密码锁打开,输出端Z为高电平,如果钥匙正确,而密码错误,这则输出端L为高电平同时报警。
根据组合电路的设计过程,设计电路,设计的电路要求符合客观实际的要求,用与非门来实现。
三.设计步骤:
1.设ABCD=1111为初设密码。
如果钥匙错误,则不管密码是否正确都将无法打开锁,所以将钥匙E设为使能端。
如果钥匙正确E=1,密码正确ABCD=1111,则开锁Z=1.
如果钥匙正确E=1,密码错误,则输出响铃L=1.
如果钥匙和密码都不正确,则Z=0,L=0.
2.根据以上可以作出真值表:
3.从上图真值表很容易得出其开锁端Z和报警端L的逻辑表达式如下:
4.根据逻辑表达式可以设计出逻辑电路图如下:(用与非门实现)
5.功能仿真:
(1)当钥匙错误时,不管你输入的密码是否正确。
两灯都是低电平,都没有反应。
仿真图如上图。
(2)当钥匙正确,密码错误时,D2变亮(即输出为高电平,且报警)。
(3)当钥匙正确,密码也正确时,D1变亮(即输出高电平,开锁成功)。
仿真图如下:
6.综上就是设计过程,经过仿真也达到要求。
不过我的设计中也许还有许多不足之处,希望老师查阅后给出意见。
谢谢老师!。
简易密码锁设计实验报告(一)简易密码锁设计实验报告研究背景在当前的社会中,密码锁已经广泛应用于各种领域,如个人家庭、办公场所、银行等。
密码锁在保障安全的同时,也带来了便捷。
因此,设计一款简易密码锁具有重要意义。
实验目的本次实验旨在设计一款简易密码锁,能够通过输入正确的密码从而打开锁,同时能够保护用户的安全。
实验步骤1.确定锁的锁舌位置和大小,确定锁的存储方式。
2.选择合适的电子元件,如单片机、键盘、LED灯等。
3.设计程序流程,完成程序并进行调试。
4.进行实验,并测试相关数据。
5.对实验结果进行分析,总结实验过程中的问题并提出改进方案。
实验结果及分析经过一段时间的实验,我们设计出了一款简易密码锁。
该密码锁通过输入正确的密码可以打开锁,密码为“123456”。
在打开锁的过程中,如果输入错误的密码,则锁将不会打开,并提示密码错误。
同时,该密码锁还具有防止暴力破解的功能,在输入密码错误达到一定次数时,将自动锁死。
在实验过程中,我们发现了一些问题,如电路连线不够稳定、程序层次不够清晰等。
针对这些问题,我们进行了相应的改进,在稳定电路连线的同时,也简化了程序层次,提高了密码锁的使用体验。
结论通过本次实验,我们成功地设计出了一款简易密码锁,并成功地实现了输入正确密码可以打开锁的功能。
在实验过程中,我们遇到了一些问题,但经过不断地实验和调整,最终得到了一个较为完善的版本。
参考文献无。
实验心得通过本次实验,我进一步了解了密码锁的设计和工作原理。
在实验过程中,我采用科学严谨的方法去解决问题,例如测试数据、重新设计程序以及频繁的测试与优化。
这个过程让我深深地体会到了科学实验具有的重要性,只有不断地实验、总结、优化,才能得到一个经得起实验检验的好结果。
同时,在实验过程中我还学会了合理地进行电路的布线以及如何选取合适的元件,这些都是我在日后实际工作中所必备的技能。
在实验过程中,我还发现设计中的细节问题常常决定一个产品的品质,在以后的工作中,我会更加注重产品的细节设计。
简易位数字密码锁控制电路设计实验报告目录一、前言 (2)二、课设任务 (2)三、方案设计、原理分析 (2)四、译码电路设计 (8)五、报警信号产生器 (10)六、调试及结果 (12)七、体会 (13)一、前言本次课程设计的基本任务是着重提高学生在EDA知识学习与应用方面的实践技能。
学生通过电路设计安装、调试、整理资料等环节,初步掌握工程设计方法和组织实践的基本技能,逐步熟悉开展科学实践的程序和方法。
EDA技术是电子信息类专业的一门新兴学科,是现代电子产品设计的核心,其任务是掌握在系统可编程逻辑器件及其应用设计技术,为电子产品开发研制打下坚实基础。
本课程设计对学生有如下要求:根据设计任务和指标,初步电路;通过调查研究,设计计算,确定电路方案;选择元器件,在计算机上连好线路,独立进行试验,并通过调试、仿真、改进方案;分析实验结果,写出设计总结报告:学会自己分析,找出解决问题方法;对设计中遇到的问题,能独立思考、查阅资料,寻找答案。
二、课设任务1、14位数字密码分成高7位(DH6…DH0)和低7位(DL6…DL0),用数字逻辑开关预置,输出信号out为1表示开锁,否则关闭。
2、14位数字密码分时操作,先预置高7位,然后再置入低7位。
3、要求电路工作可靠,保密性强,开锁出错立即报警。
4、利用MAX plus2 软件进行设计、编译,并在FPGA芯片上实现。
5、简易14位数字密码锁模块的框图如下:三、方案设计、原理分析首先我是一班的三号,所以我的密码时0100010 0000011。
我所做的设计是先把高七位输入锁存,然后在输入低七位,最后判断密码是否正确,密码正确就开锁,密码错误就报警。
数字密码锁控制电路的组成部分:YMQ模块,1、IC9A的设计设计要求14位数字密码分时操作,先预置高七位0100010,而后置低七位0000011,首先可以使用寄存器将高七位存起来,而后与低七位一起进行译码,如果密码正确,输出OUT2为1,否则为0.2、数字密码锁控制电路原理图:输入密码正确时波形图输入错误密码时波形图数字密码锁控制电路的VHDL语言编程原理分析:当CLR为0时,寄存器与D触发器被清零,此时在A……G输入高七位密码0100010,用CLK给一个脉冲,由于此时输出端Q为0,经过一个非门为1,与CLK一起经过一个与门,送入寄存器CLK 端,产生上升沿;而经过非门的CLR为1,送入寄存器中,将高七位通过寄存器送入译码器的高七位中。
利用数字电路实现电子密码锁学生:XXX 指导老师:XXX内容摘要:本数字密码锁采用单片机AT89S52为主控芯片,由EEPROM存储密码。
硬件部分包括主控制系统、人机交互界面以及输出系统三大部分。
主控制系统中主控制芯片使用了AT89S52单片机,该单片机性能优良,能满足一般的普通应用;EEPROM采用AT24C02芯片,掉电后可以存储密码,从而保证了系统的安全性。
人机交互通道部分采用了4×4矩阵键盘输入以及LCD1602标准字符型液晶显示。
输出系统部分包括驱动开锁电路和报警电路;其中,在本系统设计中,驱动开锁电路用发光二极管表示,而报警电路则使用蜂鸣器。
本系统中使用的AT24C02芯片是一个带有I2C总线接口的EEPROM存储器。
I2C总线是一种双向二线制总线,它的结构简单,可靠性和抗干扰性能好。
I2C总线结构很简单,只有两条线,包括一条数据线(SDA)和一条串行时钟线(SCL)。
具有I2C接口的器件可以通过这两根线接到总线上,进行相互之间的信息传递。
本数字密码锁的功能为:密码位数为8位,可选值为0~9,从而保证足够的锁体强度;用户可以自行设定和修改密码;防止密码被盗,输入密码错误次数超过3次则报警;友好的人机界面;输入正确的密码后,驱动开锁电路。
软件部分应用单片机C语言实现了本设计的全部控制功能。
C语言编译方便,易读性好,且移植性方便,能够满足实现本系统的功能要求。
在设计过程中,给出了本系统C语言编程的原理和流程图。
本数字密码锁系统稳定性好,设计人性化,由于使用单片机控制并有记忆模块,功能齐全可靠,并有很好的扩展性,而且成本低廉,具有良好的发展前景。
关键词:数字密码锁 AT24C02芯片安全性Electronic combination lockAbstract:Using the digital circuit realize electronic combination lock This digital locks USES the monolithic integrated circuit AT89S52 as the controller chip, by EEPROM memory password. Hardware including master control system, man-machine interface and output system of three.The Lord control system used in the control chip AT89S52 SCM, this single chip good performance, can satisfy the general common application; The AT24C02 chip EEPROM, after power off can be stored password, so as to ensure the security of the system. Man-machine interactive channel part adopts the 4 x 4 matrix keyboard input and LCD1602 standard character type LCD display. The output of system including drive circuit and alarm lock circuit; Which, in the system design, drive the lock circuit using light-emitting diodes said, and alarm circuit is using a buzzer.The system used AT24C02 chip is a with the I2C bus interface EEPROM memory. The I2C bus is a two-way two wire bus, its simple structure, reliability and anti-interference capability. The I2C bus structure is simple, only two lines, including a data line (SDA) and a serial clock line (SCL). Has the I2C devices through this interface to two lines on the bus, the mutual information transfer.This digital locks function for: password digits for eight, optional value is 0 ~ 9, so as to ensure enough lock body strength; The user can set and modify the password; To prevent the password is stolen, the input password mistake number more than three times the alarm; Friendly human-machine interface; To enter the correct password, drive the lock circuit.Application software of single chip microcomputer C language realized this design of all control function. C compiler convenient, easy to read the gender is good, and easy portability, and can meet the requirement of system function realization. In the design process are given, and the system of the C programming language principle and flow chart.This digital locks system stability, humanized design, because use asingle-chip microcomputer control and a memory module, complete function and reliable, and have a good scalability, and the cost is low, have good development prospect.Keywords: Electronic combination lock AT24C02 chip safety目录前言 (1)1 系统的硬件设计 (2)1.1 硬件的总体结构和原理 (2)1.1.1 硬件系统的总体结构图 (2)1.1.2 硬件系统组成 (2)1.1.3 系统的可能性分析 (3)1.2 单片机AT89S51简介 (4)1.2.1 主要性能 (4)1.2.2 引脚功能描述 (5)1.3 AT24C02简介 (7)1.3.1 功能描述 (7)1.3.2 管脚描述 (7)1.3.3 I2C总线协议 (8)1.4 LCD1602介绍 (8)1.4.1 引脚描述 (9)1.4.2 LCDI602控制指令 (9)1.4.3 LCDI602读写控制时序 (11)1.5 4×4矩阵键盘 (11)1.6 复位电路 (12)1.7 振荡电路 (12)1.8 发光二极管LED电路 (13)1.9 报警电路 (13)1.10 电源输入电路 (14)1.11 使用到的元器件列表 (15)2 软件程序设计 (15)2.1 编译器Keil uVision2简介 (16)2.2 软件总设计流程图 (16)2.3 具体功能软件实现 (17)2.3.1 4×4矩阵键盘扫描程序 (17)2.3.2 显示程序 (19)2.3.3 时钟运行子程序 (19)2.3.4 时钟时、分修改子程序 (20)2.3.5 掉电存储服务程序 (21)2.3.7 密码修改子程序 (23)3 结束语 (24)附录1:PCB原理图 (26)附录2:仿真原理图 (27)附录3:单片机硬件实物图 (28)参考文献 (29)利用数字电路实现电子密码锁前言随着社会物质财富的日益增长,安全防盗已成为社会问题。
数字电路设计实验报告——简易密码锁学院:班级:学号:姓名:目录●任务要求●系统设计✓设计思路✓总体框图✓分块设计●波形仿真及波形分析●源代码●功能分析●故障分析及问题解决●总结及结论●任务要求设计并实现一个数字密码锁,密码锁有四位数字密码和一个确认开锁按键,密码输入正确,密码锁打开,密码输入错误进行警示。
基本要求:1、密码设置:通过键盘进行4 位数字密码设定输入,在数码管上显示所输入数字。
通过密码设置确定键(BTN 键)进行锁定。
2、开锁:在闭锁状态下,可以输入密码开锁,且每输入一位密码,在数码管上显示“-”,提示已输入密码的位数。
输入四位核对密码后,按“开锁”键,若密码正确则系统开锁,若密码错误系统仍然处于闭锁状态,并用蜂鸣器或led 闪烁报警。
3、在开锁状态下,可以通过密码复位键(BTN 键)来清除密码,恢复初始密码“0000”。
闭锁状态下不能清除密码。
4、用点阵显示开锁和闭锁状态。
提高要求:1、输入密码数字由右向左依次显示,即:每输入一数字显示在最右边的数码管上,同时将先前输入的所有数字向左移动一位。
2、密码锁的密码位数(4~6 位)可调。
3、自拟其它功能。
●系统设计设计思路将电子密码锁系统分为三个部分来进行设计,数字密码输入部分、密码锁控制电路和密码锁显示电路。
密码锁输入电路包括时序产生电路,键盘扫描电路,键盘译码电路等,将用户手动输入的相关密码信息转换为软件所能识别的编码,作为整个电路的输入。
密码锁控制电路包括相应的数据存储电路,密码核对电路,能够进行数值的比较,进行电路解锁,开锁,密码的重新设置等。
密码锁显示电路包括将待显示数据的BCD 码转换成数码管的七段显示驱动编码,密码锁在相应的状态下的点阵输出以及蜂鸣器的报警输出。
总体框图按复位键 键入初始密码0000 密码错误密码正确 按确认键 按复位键按确认键密码锁显示电路 密码锁控制电路 数码管显示报警电路密码更改与密码设计电路键入状态闭锁状态开锁状态 报警状态分块设计✓键盘扫描电路首先,向列扫描地址逐列输出低电平,然后从行码地址读回,如果有键摁下,则相应行的值应为低,如果没有按键按下,由于上拉的作用,行码为高。
这样就可以通过输出列码和读取的行码来判断按下的是什么键。
在判断有按键的按下后,要有一定的延时,防止键盘抖动。
entity keyboard isport(row:in std_logic_vector(3 downto 0);col:out std_logic_vector(3 downto 0);keyout:out std_logic_vector(3 downto 0);q:out std_logic;clk:in std_logic);end keyboard;architecture struct of keyboard issignal col_buffer1:std_logic_vector(3 downto 0);signal col_buffer2:std_logic_vector(3 downto 0);signal key :std_logic_vector(7 downto 0);signal counter:integer range 0 to 3;signal delay:integer range 0 to 10;signal stop:std_logic;begincol <= col_buffer2;q <= stop;process(CLK,row,stop)beginif clk'event and clk = '1' thenif counter = 3 thencounter <= 0;elsecounter <= counter + 1;//由于只要求输入四个数字所以需要计数end if;case counter iswhen 0 => col_buffer1 <= "1110";when 1 => col_buffer1 <= "1101";when 2 => col_buffer1 <= "1011";when 3 => col_buffer1 <= "0111";end case;end if;end process;key <= row & col_buffer2;process(clk,key)beginif clk'event and clk = '0' thencase key iswhen "01111110" => stop<='1';keyout<="0000";when "01111101" => stop<='1';keyout<="0001";when "01111011" => stop<='1';keyout<="0010";when "01110111" => stop<='1';keyout<="0011";when "10111110" => stop<='1';keyout<="0100";when "10111101" => stop<='1';keyout<="0101";when "10111011" => stop<='1';keyout<="0110";when "10110111" => stop<='1';keyout<="0111";when "11011110" => stop<='1';keyout<="1000";when "11011101" => stop<='1';keyout<="1001";when others => stop <= '0';//仅仅在摁0~9的时候会有显示,在摁除了这十个键之外的键的时候是不会有反应的,将keyout的值转换为相应的数码管值,来控制数码管的显示end case ;end if;end process;process(clk,stop)beginif clk'event and clk = '1'thenif stop = '0' thencol_buffer2 <= col_buffer1;end if;end if;end process;end struct;点阵显示电路采用行扫描的方式,每经过一段时间,给一行一个低电平。
则若在列的方向上如果接入高电平,则会使相应的二极管发光。
由于人眼的的暂留效应就回使我们看到我们想要的图案。
library ieee;use ieee.std_logic_1164.all;entity led isport(row:out std_logic_vector(7 downto 0);num:in std_logic_vector(1 downto 0);clk:in std_logic;col:out std_logic_vector(7 downto 0));end entity;architecture struct of led issignal counter : integer range 0 to 7;beginprocess(clk)beginif clk'event and clk = '1' thenif counter = 7 thencounter <= 0;elsecounter <= counter +1;end if;end if;end process;process(clk,counter)beginif clk'event and clk = '0' thenif num <= "00" then//键入状态case counter iswhen 0 => row <= "11111110"; col <= "00111100";when 1 => row <= "11111101"; col <= "00111100";when 2 => row <= "11111011"; col <= "00111100";when 3 => row <= "11110111"; col <= "00111100";when 4 => row <= "11101111"; col <= "00111100";when 5 => row <= "11011111"; col <= "00011000";when 6 => row <= "10111111"; col <= "00111100";when 7 => row <= "01111111"; col <= "00011000";end case;elsif num = "01" then//闭锁状态case counter iswhen 0 => row <= "11111110"; col <= "11111111";when 1 => row <= "11111101"; col <= "11111111";when 2 => row <= "11111011"; col <= "11111111";when 3 => row <= "11110111"; col <= "11111111";when 4 => row <= "11101111"; col <= "01000010";when 5 => row <= "11011111"; col <= "01000010";when 6 => row <= "10111111"; col <= "01000010";when 7 => row <= "01111111"; col <= "00111100";end case;elsif num = "10" then//开锁状态case counter iswhen 0 => row <= "11111110"; col <= "00000000";when 1 => row <= "11111101"; col <= "00011111";when 2 => row <= "11111011"; col <= "00011111";when 3 => row <= "11110111"; col <= "00011111";when 4 => row <= "11101111"; col <= "10011111";when 5 => row <= "11011111"; col <= "10001000";when 6 => row <= "10111111"; col <= "10001000";when 7 => row <= "01111111"; col <= "01110000";end case;elsecase counter is//报警状态when 0 => row <= "11111110"; col <= "00011000";when 1 => row <= "11111101"; col <= "00111100";when 2 => row <= "11111011"; col <= "00011000";when 3 => row <= "11110111"; col <= "00011000";when 4 => row <= "11101111"; col <= "00111100";when 5 => row <= "11011111"; col <= "00111100";when 6 => row <= "10111111"; col <= "00111100";when 7 => row <= "01111111"; col <= "00011000";end case;end if;end if;end process;end struct;数码管显示其中引脚图的两个COM端连在一起,是公共端,共阴数码管要将其接地,共阳数码管将其接正5伏电源。