电子密码锁实验报告

合集下载

数电实验报告电子密码锁设计

数电实验报告电子密码锁设计

数电实验报告电子密码锁设计
实验报告
实验十四电子密码锁设计与实现
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.了解电子密码锁的原理,学会用硬件描述语言来建立电子密码锁的模块。

2.利用该软件进行可编程逻辑器件设计,完成电子密码锁的逻辑仿真功能。

3.使用编译器将设计实现,下载到JDEE—10实验箱上进行调试和验证所设计的电子密码锁的功能。

二、实验器材1.Pentium—Ⅲ计算机一台;2.JDEE—10实验箱一只;三、实验要求设计一个电子密码锁,实现以下的功能:用8个拨码开关分别代表预设的密码和输入待验证的密码。

一个微动开关做为触发判断。

判断结果通过点阵和蜂鸣器表示。

正确的话,所有点阵的绿色灯点亮,同时蜂鸣发出“di”声。

否则,点阵显示红色,同时蜂鸣“do”音。

四、实验方案及设计过程1.第一部是实验电子密码锁的基本功能,该程序的主体是一个密码判断程序:首先是将输入的预设的密码和待验证密码用数组储存起来进行比较,比较结果通过IF语句,相同则触动绿色点阵和蜂鸣器的一个频率,不同则触动红色点阵和蜂鸣器的另一个频率2.开始丰富附肢程序:两种不同的响声需要两个计数器来产生不同的频率;要有一个上升沿保证颜色显示程序和密码判断程序以一个高频率运行,需要一个计数器;一个密码验证开关,由微动开关实现,在密码验证开关触动后能够保持一个高电位,这样则需要一个由D触发器构成的锁存器来锁定高电平。

3.点阵的显示:点阵的显示控制,由于显示OK的原代码之前已经练习过,然后设计好NO的字符,可以直接完成拓展之一。

此部分不需要详述。

五、拓展功能设计拓展主要是为了实现八位密码,这样所有的拨码开关都要用上,所以还需要两个微动开关来确定密码设定和输入。

同时,微动开关启动后,能够将拨码开关的密码储存到数组A[7..0]和B[7..0]中,待判断开关启动后调用,所以要用寄存器储存起来,所以声明一个串进串出的寄存器。

同时对主程序的判断器的输入变量进行修改。

六、顶层文件和源程序文本文件顶层文件文本:SUBDESIGN ECLOCK ( a[7..0],b[7..0]:input;key: input;freq1,freq2: input;red: output;green: output;spk: output;)begindefaultsred=gnd; green=gnd;spk=gnd;end defaults;if key thenif a[]==b[] then red=vcc;spk=freq1;else green=vcc;spk=freq2;end if;end if;end;点阵显示文本:subdesign leddiaplay( green,red: input;clk[2..0]: input;row[8..1],colred[16..1],colgreen[16..1]: output; )begindefaultscolred[]=h"ffff";colgreen[]=h"ffff";end defaults;if green thentableclk[2..0]=>row[8..1],colgreen[16..1];H"0" =>H"1", H"DBC3"; %1101 1011 1100 0011% H"1" =>H"2", H"EBDB";H"2" =>H"4", H"EBDB";H"3" =>H"8", H"F3DB";H"4" =>H"10", H"F3DB";H"5" =>H"20", H"EBDB";H"6" =>H"40", H"EBDB";H"7" =>H"80", H"DBC3";end table;end if;if red thentableclk[2..0]=>row[8..1],colred[16..1];h"0" =>h"1", h"C3DB";h"1" =>h"2", h"DBD3";h"2" =>h"4", h"DBD3";h"3" =>h"8", h"DBC3";h"4" =>h"10", h"DBCB";h"5" =>h"20", h"DBCB";h"6" =>h"40", h"DBCB";h"7" =>h"80", h"C3DB";end table;end if;end;寄存器文本:SUBDESIGN register(clk,load,d[7..0] :input;q[7..0] :OUTPUT;)VARIABLEff[7..0] :DFFE;BEGINff[].clk=clk;ff[].ena=load;ff[].d=d[];q[]=ff[].q;end;七、试验中遇到的问题1、设计八位密码的时候,需要将八位的密码输进判断器,起初采取的不是寄存器的手段,而是自己定义了一个使能开关,当微动开关高电平就允许密码通过使能开关到达a[7..0]或者b[7..0],但是实验发现这样密码并不能被储存起来,后来想明白应该是由于并没有变量储存的机制,所以要想将变量储存必须有寄存器才行,根据教材定义寄存器后,该问题得到解决。

电子密码锁实习报告

电子密码锁实习报告

实习报告:电子密码锁设计与实现一、实习背景及目的随着科技的不断发展,电子密码锁作为一种新型的安全防护设备,逐渐应用于日常生活和工作中。

本次实习旨在通过设计和实现一个基于单片机的电子密码锁,掌握电子密码锁的工作原理,提升自己的实际动手能力和创新能力。

二、实习内容1. 电子密码锁的总体设计本次实习设计的电子密码锁主要包括以下几个部分:4x4矩阵键盘、单片机、LCD显示模块、掉电存储模块、报警机构和开锁机构。

其中,4x4矩阵键盘用于输入密码,单片机负责密码的存储、比较和处理,LCD显示模块用于显示密码输入状态和锁的开关状态,掉电存储模块用于保存密码信息,报警机构在密码输入错误时发出报警,开锁机构在密码输入正确时解锁。

2. 硬件设计(1)4x4矩阵键盘:采用行列矩阵式布局,减小了键盘占用的空间,提高了可靠性。

(2)单片机:选用51系列单片机,具备较强的逻辑处理能力和稳定性。

(3)LCD显示模块:采用液晶显示屏,清晰显示密码输入状态和锁的开关状态。

(4)掉电存储模块:采用EEPROM芯片,用于保存密码信息,确保数据不丢失。

(5)报警机构:采用蜂鸣器,声音响亮,提醒用户密码输入错误。

(6)开锁机构:采用继电器,实现电控锁的开关。

3. 软件设计(1)密码输入:用户通过4x4矩阵键盘输入6位密码,密码输入过程中,LCD显示模块实时显示输入的密码。

(2)密码比较:单片机对输入的密码进行处理,与预设的密码进行比较。

(3)密码存储:将正确的密码存储到EEPROM芯片中,确保断电后密码信息不丢失。

(4)报警功能:当密码输入错误达到一定次数时,触发报警。

(5)开锁功能:当输入的密码正确时,通过继电器控制开锁机构解锁。

三、实习心得通过本次实习,我深入了解了电子密码锁的工作原理和设计方法,掌握了单片机、矩阵键盘、LCD显示模块等硬件组件的使用,以及C语言编程技巧。

在实习过程中,我学会了如何根据需求进行合理的模块划分,如何通过程序实现密码的存储、比较和处理,以及如何调试硬件电路。

电子密码锁设计报告

电子密码锁设计报告

电子密码锁实验报告一,实验目的1. 学习按键扫描及LED数码管显示的设计方法。

2. 设计任务及要求利用实验平台上8个LED数码管,led发光二级管,蜂鸣器设计一电子密码锁。

二,实验要求1:用4×4矩阵键盘组成0-9数字键及确认键和删除键。

2:可以自行设定或删除8位密码,能够掉电保存。

3:用5位数码管组成显示电路提示信息,当输入密码时,只显示“8.”,当密码位数输入完毕按下确认键时,对输入的密码与设定的密码进行比较,若密码正确,则门开,此处用绿色led发光二极管亮一秒钟做为提示,若密码不正确,禁止按键输入3秒,同时用红色led发光二极管亮三秒钟做为提示;若在3秒之内仍有按键按下,则禁止按键输入3秒被重新禁止。

4:自由发挥其他功能.5:要求有单片机硬件系统框图,电路原理图,软件流程图。

三,实验基本原理这个密码锁的功能是使用矩阵键盘中的十二个键输入密码0到9还有退格键和enter 键,输入的同时在八位数码管上显示用户所输入的密码,未输入的位置用横杆填补表述未输入。

输错的密码可以用退格键删除,当输入的密码超出设置的位数时,数据溢出,清零。

用5位数码管组成显示电路提示信息,当输入密码时,只显示“8.”,当密码位数输入完毕按下确认键时,对输入的密码与设定的密码进行比较,若密码正确,则门开,此处用绿色led发光二极管亮一秒钟做为提示,若密码不正确,禁止按键输入3秒,同时用红色led 发光二极管亮三秒钟做为提示;若在3秒之内仍有按键按下,则禁止按键输入3秒被重新禁止。

当输入正确的密码,按enter键(每一次密码匹配都要按),本程序时间P1口全部打开,在实际中可以将P1口或是其他IO口接一个电位器,然后打开锁。

四,实验设计分析设计思想本系统采用单片机AT89S52作为核心元件的一款具有本机开锁,加锁,修改密码和错误报警的电子密码锁。

电子密码锁的原理是:从键盘输入一组密码,CPU把该密码和设置密码比较,对则将锁打开,错则要求重新输入,并记录错误次数,如果三次错误,则被强制锁定并报警。

电子密码锁实训报告心得

电子密码锁实训报告心得

一、前言随着科技的发展,人们对安全的重视程度日益提高,电子密码锁作为一种高科技产品,广泛应用于家庭、企业、银行等领域。

为了提高自己的实践能力,我参加了电子密码锁实训课程,通过本次实训,我对电子密码锁的设计与实现有了更深入的了解,以下是我对本次实训的心得体会。

二、实训内容与过程1. 实训内容本次实训主要包括以下几个方面:(1)电子密码锁原理及设计方法;(2)电子密码锁硬件电路设计;(3)电子密码锁软件编程;(4)电子密码锁仿真与调试。

2. 实训过程(1)理论学习:通过查阅相关资料,了解电子密码锁的基本原理、设计方法以及常见硬件电路。

(2)硬件电路设计:根据实训要求,设计电子密码锁的硬件电路,包括键盘输入、密码存储、显示、报警等模块。

(3)软件编程:根据硬件电路设计,编写电子密码锁的软件程序,实现密码输入、密码存储、密码比较、报警等功能。

(4)仿真与调试:利用Proteus软件对电子密码锁进行仿真,观察电路运行状态,根据仿真结果调整电路参数,直至满足设计要求。

三、实训心得体会1. 基本原理与设计方法通过本次实训,我对电子密码锁的基本原理有了更深入的了解。

电子密码锁主要由以下几个部分组成:(1)密码输入模块:用于输入密码,一般采用键盘输入方式;(2)密码存储模块:用于存储密码,一般采用EEPROM或Flash存储器;(3)密码比较模块:用于比较输入密码与存储密码是否一致;(4)显示模块:用于显示密码输入情况、锁状态等信息;(5)报警模块:用于在密码输入错误时发出报警信号。

在设计电子密码锁时,需要考虑以下几个因素:(1)安全性:密码存储方式要保密,防止他人非法获取;(2)可靠性:电路设计要稳定,防止因电路故障导致密码丢失或误操作;(3)易用性:操作简单,便于用户使用;(4)成本:尽量降低成本,提高产品竞争力。

2. 硬件电路设计在硬件电路设计过程中,我学习了如何选择合适的元器件,如何设计电路板,以及如何布线。

电子密码锁【精选文档】

电子密码锁【精选文档】

电子密码锁实验报告一、实验目的。

1.了解电子密码锁的工作方式,制定设计方案。

2.利用ISE软件进行可编程逻辑器件设计,完成逻辑仿真功能。

3.使用编译器将设计实现,下载到BASYS2实验板上进行调试和验证所设计的四位二进制数的运算.二、实验器材.1.Pentium—Ⅲ计算机一台;2.BASYS2 实验板一只;三、实验方案。

1.基本功能。

利用开关进行密码输入,并利用一个微动开关作为触发判断,密码正确则显示RRRR,错误则显示FFFF。

2.清零功能。

利用一个微动开关,当微动开关按下则预设密码和验证密码都为0,可以重新设定密码。

3.利用开关进行十进制密码输入。

本密码锁使用sw[3:0]进行密码输入,利用开关表示出十进制数的二进制形式,利用两个微动开关分别作为预设密码与验证密码的确认键,按下确认键则密码输入。

4。

数码管显示本密码锁可以动态显示输入的密码,并且当每一位密码输入时,原密码自动左移一位,未输入密码时数码管显示零。

四、实验原理图。

五、实验模块说明及部分代码。

module checker(s1,c1,c2,c3,an,a_to_go,clk,clr);input [3:0]s1;input c1,c2,c3;output reg[3:0]an;output [6:0]a_to_go;input clr;input clk;reg [16:0] clk_cnt;reg [3:0]num_ge1;reg [3:0]num_shi1;reg [3:0]num_bai1;reg [3:0]num_qian1;reg [3:0]num_ge2;reg [3:0]num_shi2;reg [3:0]num_bai2;reg [3:0]num_qian2;reg [3:0]flag;reg [3:0]choose=0;(* KEEP =”TRUE" *)reg [1:0]panduan;always @(posedge clk)begin //分频clk_cnt=clk_cnt+1;if(clk_cnt[16])clk_cnt=0;endalways @(*)begin //数码管是能循环case(clk_cnt[14:13])2'b00:begin an[3]=1;an[2]=1;an[1]=1;an[0]=0;end2'b01:begin an[3]=1;an[2]=1;an[1]=0;an[0]=1;end2’b10:begin an[3]=1;an[2]=0;an[1]=1;an[0]=1;end2’b11:begin an[3]=0;an[2]=1;an[1]=1;an[0]=1;end default:begin an[3]=1;an[2]=1;an[1]=1;an[0]=1;end endcaseendalways @(posedge c2 or posedge clr)begin //输入设定密码if(clr)beginnum_ge1=0;num_shi1=0;num_bai1=0;num_qian1=0;endelsebeginnum_qian1=num_bai1;num_bai1=num_shi1;num_shi1=num_ge1;num_ge1=s1[3]*8+s1[2]*4+s1[1]*2+s1[0];endendalways @(posedge c3 or posedge clr)begin //输入测试密码if(clr)beginnum_ge2=0;num_shi2=0;num_bai2=0;num_qian2=0;endelsebeginnum_qian2=num_bai2;num_bai2=num_shi2;num_shi2=num_ge2;num_ge2=s1[3]*8+s1[2]*4+s1[1]*2+s1[0];endendalways @(posedge c2 or posedge c3 or posedge c1)begin //显示密码还是原码if(c2)beginchoose=0;endelseif(c3)beginchoose=1;endelsebeginchoose=2;endendalways @(*)begin //显示case(choose)0:case(clk_cnt[14:13])2’b00:begin flag=num_ge1;end2'b01:begin flag=num_shi1;end2’b10:begin flag=num_bai1;end2’b11:begin flag=num_qian1;enddefault begin flag=0;endendcase1:case(clk_cnt[14:13])2'b00:begin flag=num_ge2;end2’b01:begin flag=num_shi2;end2’b10:begin flag=num_bai2;end2’b11:begin flag=num_qian2;enddefault begin flag=0;endendcase2:if(panduan==1)begin flag=4'ha;endelseif(panduan==0)begin flag=4’hf;endelsebegin flag=0;endendcaseendalways @(posedge c1 or posedge clr)begin //判断if(clr)beginpanduan=2;endelseif(num_ge1==num_ge2)if(num_shi1==num_shi2)if(num_bai1==num_bai2)if(num_qian1==num_qian2)beginpanduan=1;endelse begin panduan=0;endelse begin panduan=0;endelse begin panduan=0;endelse begin panduan=0;endendset a1(.flag(flag),。

密码报警锁实验报告(3篇)

密码报警锁实验报告(3篇)

第1篇一、实验目的1. 了解密码报警锁的基本原理和设计方法。

2. 掌握密码报警锁的硬件电路设计和软件编程。

3. 通过实验,验证密码报警锁的功能和性能。

二、实验原理密码报警锁是一种结合了密码识别和报警功能的电子锁。

其基本原理如下:1. 用户输入密码:当用户需要开锁时,通过键盘输入预设的密码。

2. 密码识别:系统对输入的密码进行识别,判断是否与预设密码一致。

3. 开锁:若密码正确,则通过继电器控制锁具开启;若密码错误,则系统发出报警信号。

4. 报警:当密码连续输入错误达到预设次数时,系统发出声光报警信号。

三、实验器材1. 实验箱:包含AT89C51单片机、键盘、继电器、蜂鸣器、LED灯、电源等。

2. 仿真软件:Proteus。

四、实验步骤1. 硬件电路设计(1)根据实验要求,设计密码报警锁的硬件电路图。

(2)使用Proteus软件进行电路仿真,验证电路的正确性。

2. 软件编程(1)编写密码报警锁的软件程序,实现密码识别、开锁、报警等功能。

(2)使用Proteus软件进行程序仿真,验证程序的正确性。

3. 硬件调试(1)将设计好的电路焊接成实体电路。

(2)将编写好的程序烧录到单片机中。

(3)进行硬件调试,验证密码报警锁的功能和性能。

4. 功能测试(1)输入正确密码,验证开锁功能。

(2)输入错误密码,验证报警功能。

五、实验结果与分析1. 硬件电路设计经过Proteus仿真,电路设计符合预期,能够实现密码报警锁的基本功能。

2. 软件编程经过Proteus仿真,软件程序运行正常,能够实现密码识别、开锁、报警等功能。

3. 硬件调试经过硬件调试,密码报警锁能够实现预设功能,性能稳定。

4. 功能测试(1)输入正确密码,锁具开启,验证开锁功能。

(2)输入错误密码,系统发出报警信号,验证报警功能。

六、实验总结本次实验成功设计并实现了密码报警锁。

通过实验,掌握了密码报警锁的基本原理、硬件电路设计和软件编程方法。

实验过程中,提高了动手能力和问题解决能力。

密码锁实验报告doc

密码锁实验报告doc

密码锁实验报告篇一:电子密码锁实验报告密码锁实验报告一,实验目的1. 学习8051定时器时间计时处理、跑马灯、按键扫描及LED数码管显示的设计方法。

2. 设计任务及要求利用实验平台上8个LED数码管,按键,跑马灯实现设置密码,密码锁的功能二,实验要求基本要求:1:用4×4矩阵键盘组成0-9数字键及确认键和删除键。

2:可以自行设定或删除8位密码。

3:用5位数码管组成显示电路提示信息,当输入密码时,只显示“8.”,当密码位数输入完毕按下确认键时,对输入的密码与设定的密码进行比较,若密码正确,则门开,此处用绿色led发光二极管亮一秒钟做为提示,若密码不正确,禁止按键输入3秒,同时用红色led发光二极管亮三秒钟做为提示;若在3秒之内仍有按键按下,则禁止按键输入3秒被重新禁止。

三,实验基本原理利用单片机定时器完成计时功能,定时器0计时中断程序每隔0.05s中断一次并当作一个计数,设定定时1秒的中断计数初值为20。

为了将时间在LED数码管上显示,可采用静态显示法和动态显示法,由于静态显示法需要译码器,数据锁存器等较多硬件,可采用动态显示法实现LED显示,通过对每位数码管的依次扫描,使对应数码管亮,同时向该数码管送对应的字码,使其显示数字。

由于数码管扫描周期很短,由于人眼的视觉暂留效应,使数码管看起来总是亮的,从而实现了各种显示。

四,实验设计分析针对要实现的功能,采用AT89S51单片机进行设计,AT89S51 单片机是一款低功耗,高性能CMOS8位单片机,片内含4KB在线可编程(ISP)的可反复擦写1000次的Flash 只读程序存储器,器件采用高密度、非易失性存储技术制造,兼容标准MCS- 51指令系统及80C51引脚结构。

这样,既能做到经济合理又能实现预期的功能。

1在程序方面,采用分块设计的方法,这样既减小了编程难度、使程序易于理解,又能便于添加各项功能。

程序可分为闹钟的声音程序、时间显示程序、日期显示程序,秒表显示程序,时间调整程序、闹钟调整程序、定时调整程序,延时程序等。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

电子密码锁实验报告一,实验目的1.进一步巩固和加深理论课基本知识的理解,提高综合运用所学知识的能力。

2.能根据需要选择参考书,查阅资料,通过独立思考,深入钻研有关问题。

3.学会自己独立分析问题、解决问题。

4学习定时器时间计时处理、按键扫描及LED数码管显示的设计方法。

5.根据设计任务及要求利用实验平台上单片机及其外围元器件,设计符合功能的电子密码锁。

二,实验要求设计要求:1:用4×4矩阵键盘组成0-9数字键及确认键和删除键。

2:可以自行设定或删除8位密码,能够掉电保存。

3:用5位数码管组成显示电路提示信息,当输入密码时,只显示“8.”,当密码位数输入完毕按下确认键时,对输入的密码与设定的密码进行比较,若密码正确,则门开,此处用绿色led发光二极管亮一秒钟做为提示,若密码不正确,禁止按键输入3秒,同时用红色led发光二极管亮三秒钟做为提示;若在3秒之内仍有按键按下,则禁止按键输入3秒被重新禁止。

三,实验基本原理1.键盘接口必须具有去抖动、按键识别基本功能。

(1)去抖动:每个按键在按下或松开时,都会产生短时间的抖动。

抖动的持续时间与键的质量相关,一般为5—20mm。

所谓抖动是指在识别被按键是必须避开抖动状态,只有处在稳定接通或稳定断开状态才能保证识别正确无误。

去抖问题可通过软件延时或硬件电路解决。

(2)被按键识别:如何识别被按键是接口解决的主要问题,一般可通过软硬结合的方法完成。

常用的方法有行扫描法和线反转法两种。

行扫描法的基本思想是,由程序对键盘逐行扫描,通过检测到的列输出状态来确定闭合键,为此,需要设置入口、输出口一个,该方法在微机系统中被广泛使用。

线反转法的基本思想是通过行列颠倒两次扫描来识别闭合键,为此需要提供两个可编程的双向输入/输出端口。

2.利用键盘扫描原理分别设4×4矩阵键盘组成0-9数字键及确认键和删除键,通过0—9数字键设定8位密码和删除键删除密码,利用存储器的永久存储特性将设定的密码存于存储器中,再次重启程序时,能从存储器中读取出来,从而实现掉电保存。

为了将时间在LED数码管上显示,可采用静态显示法和动态显示法,由于静态显示法需要译码器,数据锁存器等较多硬件,可采用动态显示法实现LED显示,通过对每位数码管的依次扫描,使对应数码管亮,同时向该数码管送对应的字码,使其显示数字。

由于数码管扫描周期很短,由于人眼的视觉暂留效应,使数码管看起来总是亮的,从而实现了各种显示。

Led发光二级管低电平发亮,高电平熄灭的特性实现led提示功能。

利用单片机定时器完成计时功能,定时器0计时中断程序每隔0.05s中断一次并当作一个计数,设定定时1秒的中断计数初值为20,每中断一次中断计数初值减1,当减到0时,则表示1s到了,秒变量加1,从而实现led亮1秒或3秒。

四,实验设计分析针对要实现的功能,采用AT89S52单片机进行设计,AT89S52 单片机是一款低功耗,高性能CMOS8位单片机,片内含4KB在线可编程(ISP)的可反复擦写1000次的Flash只读程序存储器,器件采用高密度、非易失性存储技术制造,兼容标准MCS- 51指令系统及80C51引脚结构。

这样,既能做到经济合理又能实现预期的功能。

在程序方面,采用分块设计的方法,这样既减小了编程难度、使程序易于理解,又能便于添加各项功能。

程序可分为按键程序、数码管显示程序、发光二级管程序,存储器程序,密码设定程序、密码删除程序、定时器程序,延时程序等。

运用这种方法,关键在于各模块的兼容和配合,若各模块不匹配会出现意想不到的错误。

首先,在编程之前必须了解硬件结构尤其是各引脚的用法,以及内部寄存器、存储单元的用法,否则,编程无从下手,电路也无法设计。

这是前期准备工作。

第二部分是硬件部分:依据想要的功能分块设计设计,比如输入需要开关电路,输出需要显示驱动电路和数码管电路等。

第三部分是软件部分:先学习理解C语言的编程方法再根据设计的硬件电路进行分块的编程调试,最终完成程序设计。

第四部分是软件画图部分:设计好电路后进行画图,包括电路图和仿真图的绘制。

第五部分是软件仿真部分:软硬件设计好后将软件载入芯片中进行仿真,仿真无法完成时检查软件程序和硬件电路并进行修改直到仿真成功。

第六部分是硬件实现部分:连接电路并导入程序检查电路,若与设计的完全一样一般能实现想要的功能。

最后进行功能扩展,在已经正确的设计基础上,添加额外的功能!五,实验要求实现A.电路设计1. 整体设计此次设计主要是应用单片机来设计电子密码锁,硬件部分主要分以下电路模块:显示电路用5个共阴数码管显示8和发光二级管的发亮提示,存储器的存储模块,单片机采用AT89S52系列,这种单片机应用简单,适合电子钟设计。

电路的总体设计框架如下:2. 分块设计模块电路主要分为:输入部分、输出部分、复位和晶振电路。

输入模块:键盘输入键盘接入单片机P3接口,输出模块:数码管输出AT89S52复位模块AT89S52晶振模块各模块拼接,总的模块图如下:B.程序设计B.1 程序总体设计本实验用C 程序完成.流程图如下:输入密码 密码识别 错误红灯亮 绿灯亮1秒 正确 禁止3秒图1总设计框图B.2 程序主要模块主程序:#include<reg52.h>#define uint unsigned int#define uchar unsigned char//uchar code a[]={0x00,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,};uchar code a[]={0x00,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x3 9,0x5e,0x79,0x71};uchar code b[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};uchar code c[]={0xff,0x7f,0x3f,0x1f,0x0f,0x07,0x07,0x07};uinttemp,num,x,y,z,aa,bb=0,i=0,j=0,k=0,n=0,m=0,cc=0,dd=12345,t,kk;void delay(uint z){unsigned int x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}void main(){TMOD=0x01;TH0=(65536-50000)/256;TL0=(65536-50000)%256;EA=1;ET0=1;TR0=1;//P0=0x00;while(1){if(kk==0){P3=0xfe;temp=P3;temp=temp&0xf0;if(temp!=0xf0){delay(5);temp=P3;temp=temp&0xf0;if(temp!=0xf0){temp=P3;switch(temp){case 0xee:num=1;break;case 0xde:num=2;break;case 0xbe:num=3;break;case 0x7e:num=4;break; }if(num==1){bb++;cc++;if(bb==1)i=num;else if(bb==2)j=num;else if(bb==3)k=num;else if(bb==4)n=num;else if(bb==5)m=num;}if(num==2){bb++;cc++;if(bb==1)i=num;else if(bb==2)j=num;else if(bb==3)k=num;else if(bb==4)n=num;else if(bb==5)m=num;}if(num==3){bb++;cc++;if(bb==1)i=num;else if(bb==2)j=num;else if(bb==3)k=num;else if(bb==4)n=num;else if(bb==5)m=num;}if(num==4){bb++;cc++;if(bb==1)i=num;else if(bb==2)j=num;else if(bb==3)k=num;else if(bb==4)n=num;else if(bb==5)m=num;}while(temp!=0xf0) { temp=P3;temp=temp&0xf0;}}}P3=0xfd;temp=P3;temp=temp&0xf0;if(temp!=0xf0){delay(5);temp=P3;temp=temp&0xf0;if(temp!=0xf0){temp=P3;switch(temp){case 0xed:num=5;break;case 0xdd:num=6;break;case 0xbd:num=7;break;case 0x7d:num=8;break; }if(num==5){bb++;cc++;if(bb==1)i=num;else if(bb==2)j=num;else if(bb==3)k=num;else if(bb==4)n=num;else if(bb==5)m=num;}if(num==6){bb++;cc++;if(bb==1)i=num;else if(bb==2)j=num;else if(bb==3)k=num;else if(bb==4)n=num;else if(bb==5)m=num;}if(num==7){bb++;cc++;if(bb==1)i=num;else if(bb==2)j=num;else if(bb==3)k=num;else if(bb==4)n=num;else if(bb==5)m=num;}if(num==8){bb++;cc++;if(bb==1)i=num;else if(bb==2)j=num;else if(bb==3)k=num;else if(bb==4)n=num;else if(bb==5)m=num;}while(temp!=0xf0) {temp=P3;temp=temp&0xf0;}}}P3=0xfb;temp=P3;temp=temp&0xf0;if(temp!=0xf0){delay(5);temp=P3;temp=temp&0xf0;if(temp!=0xf0){temp=P3;switch(temp){case 0xeb:num=9;break;case 0xdb:num=10;break;case 0xbb:num=11;break;case 0x7b:num=0;break;}if(num==9){bb++;cc++;if(bb==1)i=num;else if(bb==2) j=num;else if(bb==3) k=num;else if(bb==4) n=num;else if(bb==5) m=num;}if(num==10){if(aa==dd){P1=0xbf;t=0;}else if(aa!=dd){ P1=0xfe;kk=1;t=0;}}if(num==11){i=j=k=n=m=0;cc=0;}if(num==0){bb++;cc++;if(bb==1)i=num;else if(bb==2) j=num-12;else if(bb==3) k=num;else if(bb==4) n=num;else if(bb==5)m=num;}while(temp!=0xf0) {temp=P3;temp=temp&0xf0;}P0=a[num-1];}}/*P3=0xf7;temp=P3;temp=temp&0xf0;if(temp!=0xf0){delay(5);temp=P3;temp=temp&0xf0;if(temp!=0xf0){temp=P3;switch(temp){case 0xe7:num=13;break;case 0xd7:num=14;break;case 0xb7:num=15;break;case 0x77:num=16;break; }if(num==13){bb++;cc++;if(bb==1)i=num;else if(bb==2)j=num;else if(bb==3)k=num;else if(bb==4)n=num;else if(bb==5)m=num;}if(num==14){bb++;cc++;if(bb==1)i=num;else if(bb==2)j=num;else if(bb==3)k=num;else if(bb==4)n=num;else if(bb==5)m=num;}if(num==15){if(aa==dd){P1=0xbf;t=0;}else if(aa!=dd){P1=0xfe;kk=1;t=0;}while(temp!=0xf0) {temp=P3;temp=temp&0xf0;}}}}*/}aa=i*10000+j*1000+k*100+n*10+m; if(cc>=5)cc=5;P2=c[cc];P0=0x7f;/*P0=0x00;P2=0xef;P0=a[aa%10];delay(5);P0=0x00;P2=0xf7;P0=a[aa%10000%1000%100/10]; delay(5);P0=0x00;P2=0xfb;P0=a[aa%10000%1000/100]; delay(5);P0=0x00;P2=0xfd;P0=a[aa%10000/1000];delay(5);P0=0x00;P2=0xfe;P0=a[aa/10000];delay(5);*/}}void exter0() interrupt 1 {TH0=(65536-50000)/256;TL0=(65536-50000)%256;t++;if(kk==1){P3=0xf0;temp=P3;temp=temp&0xf0;if(temp!=0xf0){delay(5);temp=P3;temp=temp&0xf0;if(temp!=0xf0){temp=P3;t=0;}while(temp!=0xf0) {temp=P3;temp=temp&0xf0;}}}if(P1==0xbf){if(t==20)P1=0xff;}else if(kk==1){if(t==60){t=0;P1=0xff;kk=0;}}}C. 程序调试及仿真本程序通过Keil单片机开发平台实现程序的编译,链接,生成HEX文件。

相关文档
最新文档