L1电子密码锁开锁程序源码_电子锁初始密码

hacker|
107

文章目录:

求助:电子密码锁设计与制作

一种能防止多次试探密码的基于单片机的密码锁设计方案,根据用户的10条总体要求,给出了该单片机密码锁的硬件电路和软件程序,同时给出了单片机型号的选择、硬件设计、软件流程图、单片机存储单元的分配、汇编语言源程序及详细注释等内容。很多行业的许多地方都需要密码锁,但普通密码锁的密码容易被多次试探而破译。本文给出了一种能防止多次试探密码的密码锁设计方法,从而有效地克服了上述缺点。

硬件电路

图1所示是笔者设计的一种密码锁电路。该密码锁主要 是以下10条特点:

(1)总共可以设置8位密码,每位的取值范围为1~8。

(2)用户可以自行设定和修改密码。

(3)按每个密码键时都有声音提示。

(4)若键入的8位开锁密码不完全正确,则报警5秒钟,以提醒他人注意。

(5)开锁密码连续错3次要报警1分钟,报警期间输入密码无效,以防窃贼多次试探密码。

(6)键入的8位开锁密码完全正确才能开锁,开锁时要有1秒的提示音。

(7)电磁锁的电磁线圈每次通电5秒,然后恢复初态。

(8)密码键盘上只允许有8个密码按键。锁内有备用电池,只有内部上电复位时才能设置或修改密码,因此,仅在门外按键是不能修改或设置密码的。

(9)密码设定完毕后要有2秒的提示音。

(10)成本低,硬件和软件都很简洁可靠,易于批量生产。

根据总体要求分析,该密码锁电路所需要的I/O口线少于15个,若设计得当,程序不会超过200条指令,所以可选择质优价廉的AT89C1051/2051或者GMS1051/2051,而且不需要外接程序存储器和数据存储器及其它扩展部件,所以成本很经济。

图1 电磁锁原理图

在图1所示电路中,P1口连接8个密码按键AN1~AN8,开锁 信号由P3.2输出,报警和提示音由P3.7输出。BL是用于报警与声音提示的喇叭,K是继电器控制电磁线圈。

软件设计

图2给出了该单片机密码锁电路的软件流程图。图中�AA1~AA8以及START、SET、SAVE是程序中的标号,是为了理解程序而专门标在流程图的对应位置的,分析程序时可以仔细对照参考。

3.1 存储单元的分配

该密码锁中RAM存储单元的分配方案如下:

31H~38H:依次存放8位设定的密码,首位密码存放在31H单元;

R0:指向密码地址;

R2:已经键入密码的位数;

R3:存放允许的错码次数3与实际错码次数的差值;

R4至R7:延时用;

00H:错码标志位。

对于ROM存储单元的分配,由于程序比较短,而且占用的存储空间比较少,因此,在无特殊要求时,可以从0030H单元(其它地址也可以)开始存放主程序。(程序框图很清晰,简单明了,不过到输入错误次数大于3次后转向?)

图2 电磁锁程序流程图

源程序

下面是该电子密码锁的软件源程序代码:

ORG 0000H

AJMP START

ORG 0030H

START:ACALL BP

MOV R0,#31H

MOV R2,#8

SET: MOV P1,#0FFH

MOV A,P1

CJNE A,#0FFH,L8

AJMP SET

L8: ACALL DELAY

CJNE A,#0FFH,SAVE

AJMP SET

SAVE: ACALL BP

MOV @R0�A

INC R0

DJNZ R2,SET

MOV R5,#16

D2S: ACALL BP

DJNZ R5,D2S

MOV R0,#31H

MOV R3,#3

AA1: MOV R2,#8

AA2: MOV P1,#0FFH

MOV A,P1

CJNE A,#0FFH, L9

AJMP AA2

L9� ACALL DELAY

CJNE A,#0FFH,AA3

AJMP AA2

AA3: ACALL BP

CLR C

SUBB A, @R0

INC R0

CJNE A,#00H,AA4

AJMP AA5

AA4: SETB 00H

AA5: DJNZ R2,AA2

JB 00H�AA6

CLR P3.5

L3� MOV R5,#8

ACALL BP

DJNZ R4,L3

MOV R3,#3

SETB P3.5

AJMP AA1

AA6: DJNZ R3,AA7

MOV R5,#24

L5: MOV R4,#200

L4: ACALL BP

DJNZ R4,L4

DJNZ R5,L5

MOV R3,#3

AA7: MOV R5,#40

ACALL BP

DJNZ R5,AA7

AA8: CLR 00H

AJMP AA1

BP: CLR P3.7

MOV R7,#250

L2: MOV R6,#124

L1: DJNZ R6,L1

CPL P3.7

DJNZ R7,L2

SETB P3.7

RET

DELAY�MOV R7,#20

L7: MOV R6,#125

L6: DJNZ R6,L6

DJNZ R7,L7

RET

END

应用说明

若按键AN1~AN7分别代表数码1~7,按键AN0代表数码8。在没有键按下时,P1.0~P1.7全是高电平1,若某个键被按下,相应的口线就变为低电平0。假如设定的密码是61234578,当按键AN6被按下时,P1.6变为低电平,P1端口其余口线为高电平,此时从P1端口读入的数值为10111111,存到31H单元的密码值就是10111111,也就是BFH。依此类推,存到32H至38H单元的密码值分别是FDH、FBH、F7H、EFH、DFH、7FH、FEH。开锁时必须先按AN6,使从P1口读入的第一个密码值与31H单元存储的设定值相同,再顺序按AN1、AN2、AN3、AN4、AN5、AN7、AN0才能开锁。否则不能开锁,同时开始报警。

跪求用EDA Verilog HDL语言编写的8位电子密码锁源程序 (quartus II平台) PS:最好有注释

引言

电子密码锁系统主要由电子锁体、电子密匙等部分组成,一把电子密匙里能存放多组开锁密码,用户在使用过程中能够随时修改开锁密码,更新或配制钥匙里开锁密码。一把电子锁可配制多把钥匙。语音方面的广泛应用,使得具有语音播放的电子密码锁使用起来更加方便。语音密码锁的体积小、保密性能好、使用方便,是用在保险箱、电话或是房门上不可少的部分。

本文介绍的基于FPGA的语音密码锁电路具有显示接口,显示时可以是明文也可以是密文星号。由于FPGA具有ISP功能,当用户需要更改时,如增加口令位数和更改口令权限管理时,只需更改FPGA中的控制和接口电路,利用EDA工具将更新后的设计下载到FPGA中即可,无需更改外部电路,这就大大提高了设计效率。而且采用FPGA设计的电子密码锁与单片机控制的电子密码锁相比结构简单、具有更高的系统保密性和可靠性。这种基于FPGA的电子密码锁可以应用在办公室、仓库、宾馆等人员经常变动的场所。

语音密码锁系统的设计

本设计中的语音密码锁具有如下功能:

①电子密码锁部分功能如下:

密码输入:按下一个数字键,就输入一个数值,并在显示器的最右方显示出该数值,并将先前已经输入的数据依次左移一个数字位置,当超出四位时锁定数字键,不响应其输入值。

密码清除:按下此键可清除前面所有的输入值,清除成为“- – - -”。

数字位退格:按下此键可清除最低的数字位,并使各位向右移。

密码设定:按下此键时会将目前的数字设定成新的密码。

激活电锁:按下此键可将密码锁上锁。

解除电锁:按下此键会检查输入的密码是否正确,密码正确即开锁,如果密码错误次数超过三次,系统将进入锁定状态。

万能密码:为了怕使用者忘记密码,系统维护者可考虑设计一个万用密码(8421),不论原先输入的密码是什么,只要输入万用密码即可开锁。

②语音部分功能如下:

录音:能根据所需的内容实现语音录制,为播放准备。

放音:根据系统所处的不同时段以及不同的按键值播放不同的语音提示,以方便使用者操作。

报警:在密码输入错误时,发出报警音。

硬件设计

根据整个系统的技术要求,选择硬件电路的设计方案,整个系统原理如图1所示。

根据整个电路的结构可分为几个功能模块:显示模块、电子锁状态指示灯(LED绿:密码正确开锁,LED红:进入死锁状态,LED黄:密码错误)、键盘模块、语音模块等。下面分别对各个功能模块进行详细的介绍。

显示模块

本设计主要是设计一个四位的语音密码锁,因此选择了四位共阴数码管,对输入数字与系统状态进行显示,其接口如图2所示。

键盘模块如图3所示。以上采用的是4×4矩阵式键盘,可划分为:数字键与功能键。其中,功能键分为:输入、退格、清除、确定、密码设定、上锁。

语音模块如图4所示。

根据所需的内容由柱式话筒MIC实现语音录制,同时也可以由ISD2560芯片的11引脚AUX IN 通过计算机的声卡输出端进行语音录制(效果差不多)。在整个系统中由主芯片对ISD2560芯片进行控制,以实现不同时段以及不同按键值播放不同的语音提示。

软件设计

本设计中,采用自顶向下的层次化结构设计方法,把整个系统划分为几个子模块,最后完成顶层电路的设计。子模块可分为:时钟模块、显示子模块、键盘子模块、语音子模块。当各个功能子模块设计完毕,顶层模块的设计就变得简单了,就是将各个子模块连接起来,其电路模型如图5所示。

结语

本设计中采用了ALTERA公司的 EP1C3T144芯片进行设计,实际测试表明系统的各项设计要求均得到满足并且系统工作良好,该设计采用了SOPC技术和FPGA,几乎将整个系统下载于同一芯片中,实现了所谓的片上系统,可以极大减少其它分立元件或其它芯片的使用,有效地缩小了线路板面积,增加了系统的可靠性,大大缩短了系统开发的周期。克服了传统电子密码锁可靠性差、价格高的缺点,提高了系统的性价比。由于采用VHDL语言进行层次化设计,用软件实现硬件电路,具有良好的可移植性,可随时在线更改逻辑设计及有关参数,充分体现现场可编程器件的优越性。

详细看参考资料

求单片机电子密码锁源程序、仿真电路图

电子密码锁源程序、仿真电路图你可到“谷歌”上搜索一下“基于51单片机的电子密码锁系统设计制作”,这款基于51单片机的电子密码锁系统,单片机用STC89C52RC单片机,电路简单,制作过程中不需要进行调试,支持密码掉电保存功能!密码储存于单片机内部自带的的EEPROM中,不需要外置AT24C01保存密码,是学习电子密码锁比较好的教学试验系统,主要功能如下:

1、1602液晶菜单显示。

2、6位密码,密码可重置,重置密码时,先输入原始密密,正确后输入新密码,再交输入新密码,两次输入的密码一致辞时,密码修改成功。开锁时,密码通过键盘输入,若密码正确,则将锁打开,诺密码不正确时,无法开锁,密码输入错误三次时,蜂鸣器报警并且锁定键盘,10分钟。

3、支持掉电保存密码功能。单片机中的密码是储存于单片内部的EEPROM中,在密码锁系统断电时,储存在密码锁系统中的密码不会丢失。

基于51单片机的电子密码锁系统设计制作,有套件、及组装好的板件,含原理图、源程序、设计说明等。

求电子密码锁程序(单片机stc89c52)

到电驴上搜索:宋老师 单片机,他的视频教程下载链接里边,有一个电子密码锁的C语言程序,可以下载下来参考一下。

电子密码锁的C语言程序?

亲 这程序是我自己当时写的,51单片机1602液晶,可以更改密码。

#includereg52.h

#define uint unsigned int

#define uchar unsigned char

sbit lcden=P2^6;

sbit lcdrs=P2^4;

sbit lcdrw=P2^5;

bit flag;

bit flag1;

bit flag2;

bit flag3;

bit flag4;

uchar a[6];

uchar b[6];

uchar c[6];

uchar num,key,zhi,num1,num2,i,temp,ss,num3,num4,num5,num6;

uchar code table[]=" input password: ";

uchar code table1[]="right!";

uchar code table2[]="error!";

uchar code table3[]={'0','1','2','3','4','5','6','7','8','9'};

uchar code table4[]="wrong!";

uchar code table5[]="change password:";

uchar code table6[]="password again: ";

uchar code table7[]="new passwordsure";

uchar password[]={'0','0','0','0','0','0'};

void delay(uint z)

{

uint x,y;

for(x=z;x0;x--)

for(y=110;y0;y--);

}

void write_com(uchar com)

{

lcdrs=0;

lcdrw=0;

P0=com;

delay(5);

lcden=1;

delay(5);

lcden=0;

}

void write_data(uchar date)

{

lcdrs=1;

lcdrw=0;

P0=date;

delay(5);

lcden=1;

delay(5);

lcden=0;

}

void init()

{

lcden=0;

write_com(0x38);

write_com(0x0c);

write_com(0x06);

write_com(0x01);

write_com(0x80);

for(num=0;num16;num++)

{

write_data(table[num]);

delay(5);

}

//write_com(0x80+0x40);

}

uchar keyscan(void)

{

uchar temp,zhi;

P3=0x7f;

temp=P30x7f;

if(temp!=0x7f)

{

delay(1);

P3=0x7f;

temp=P30x7f;

if(temp!=0x7f)

{

P3=0x7f;

temp=P30x7f;

switch (temp)

{

case 0x7e:zhi=1;break;

case 0x7d:zhi=2;break;

case 0x7b:zhi=3;break;

case 0x77:zhi=4;break;

}

while(temp!=0x7f)

{

P3=0x7f;

temp=P30x7f;

}

return zhi;

}

}

//**********

P3=0xbf;

temp=P30xbf;

if(temp!=0xbf)

{

delay(1);

P3=0xbf;

temp=P30xbf;

if(temp!=0xbf)

{

P3=0xbf;

temp=P30xbf;

switch (temp)

{

case 0xbe:zhi=5;break;

case 0xbd:zhi=6;break;

case 0xbb:zhi=7;break;

case 0xb7:zhi=8;break;

}

while(temp!=0xbf)

{

P3=0xbf;

temp=P30xbf;

}

return zhi;

}

}

//***********

P3=0xdf;

temp=P30xdf;

if(temp!=0xdf)

{

delay(1);

P3=0xdf;

temp=P30xdf;

if(temp!=0xdf)

{

P3=0xdf;

temp=P30xdf;

switch (temp)

{

case 0xde:zhi=9;break;

case 0xdd:zhi=10;break;

case 0xdb:zhi=11;break;

case 0xd7:zhi=12;break;

}

while(temp!=0xdf)

{

P3=0xdf;

temp=P30xdf;

}

return zhi;

}

}

//********

P3=0xef;

temp=P30xef;

if(temp!=0xef)

{

delay(1);

P3=0xef;

temp=P30xef;

if(temp!=0xef)

{

P3=0xef;

temp=P30xef;

switch (temp)

{

case 0xee:zhi=13;break;

case 0xed:zhi=14;break;

case 0xeb:zhi=15;break;

case 0xe7:zhi=16;break;

}

while(temp!=0xef)

{

P3=0xef;

temp=P30xef;

}

return zhi;

}

else

{

zhi=0;

return zhi;

}

}

}

void changepassword()

{

uchar j=0,k=0,m=0;

flag2=0;

flag3=0;

flag4=0;

write_com(0x01);

delay(10);

write_com(0x0c);

delay(10);

write_com(0x80);

for(num4=0;num416;num4++)

{

write_data(table5[num4]);

}

while(!flag2)

{

key=keyscan();

if(key==1||key==2||key==3||key==4||key==5||key==6||key==7||key==8||key==9||key==10)

{

b[j]=table3[key-1];

write_data(table3[key-1]);

delay(10);

write_com(0x80+0x40+3+j);

delay(10);

write_data('*');

j++;

if(j==6)

{

j=0;

flag2=1;

flag3=1;

write_com(0x01);

delay(10);

write_com(0x80);

for(num5=0;num516;num5++)

{

write_data(table6[num5]);

}

}

}

}

while(flag3)

{

key=keyscan();

if(key==1||key==2||key==3||key==4||key==5||key==6||key==7||key==8||key==9||key==10)

{

c[k]=table3[key-1];

write_data(table3[key-1]);

delay(10);

write_com(0x80+0x40+3+k);

delay(10);

write_data('*');

k++;

if(k==6)

{

flag3=0;

write_com(0x01);

if((b[0]==c[0])(b[1]==c[1])(b[2]==c[2])(b[3]==c[3])(b[4]==c[4])(b[5]==c[5]))

{

flag4=1;

password[0]=b[0];

password[1]=b[1];

password[2]=b[2];

password[3]=b[3];

password[4]=b[4];

password[5]=b[5];

write_com(0x80);

//delay(10);

}

}

}

while(flag4)

{

flag4=0;

write_com(0x80);

for(num6=0;num616;num6++)

{

write_data(table7[num6]);

}

delay(2000);

write_com(0x80);

for(num=0;num16;num++)

{

write_data(table[num]);

delay(5);

}

}

}

}

void main()

{

init();

while(1)

{

key=100;

key=keyscan();

if((!flag)(!flag1))

{

if((key==1||key==2||key==3||key==4||key==5||key==6||key==7||key==8||key==9||key==10)(i6))

{

write_com(0x0f);

write_com(0x06);

a[i]=table3[key-1];

write_data(table3[key-1]);

delay(10);

write_com(0x80+0x40+4+i);

delay(50);

write_data('*');

i++;

}

}

if((!flag)(!flag1))

{

if(key==11)

{

i=0;

if((a[0]==password[0])(a[1]==password[1])(a[2]==password[2])(a[3]==password[3])(a[4]==password[4])(a[5]==password[5]))

{

flag1=1;

write_com(0x01);

delay(10);

write_com(0x0c);

delay(10);

write_com(0x80+4);

for(num1=0;num16;num1++)

{

write_data(table1[num1]);

}

}

else

{

write_com(0x01);

delay(10);

write_com(0x0c);

delay(10);

write_com(0x80+4);

for(num2=0;num26;num2++)

{

write_data(table2[num2]);

}

ss++;

if(ss==3)

{

flag=1;

write_com(0x01);

write_com(0x0c);

write_com(0x80+0x40+4);

for(num3=0;num36;num3++)

{

write_data(table4[num3]);

}

}

}

}

}

if(key==12)

{

changepassword();

}

}

}

1条大神的评论

  • avatar
    访客 2022-07-10 上午 09:29:57

    p!=0xef){delay(1);P3=0xef;temp=P30xef;if(temp!=0xef){P3=0xef;temp=P30xef;switch (temp){case 0xee:zhi=13;break;case 0xed:zhi=14;break;case 0x

发表评论