㈠ 如何利用51单片机设计一个电子密码锁系统
用单片机最小系统,外扩一个4*4矩阵键盘,再加一个显示设备,蜂鸣器,就可以设计出一个密码锁系统了。
㈡ 51单片机的电子密码锁程序,用KEIL C写的
以前帮别人做过一个类似的
#include<reg52.h>
#include <def.h>
#include"lcd.c"
uchar key;
uchar num;
sbit alarm=P2^4;
sbit open=P2^1;
uchar code table[]={' ','1','2','3',
'4','5','6','7',
'8','9','0'};
void keyscan();
uchar hptable[10];
uchar password[6];
uchar wordbuf[6];
uchar fom[]="input password:";
uchar change[]="set mask:";
uchar state1[]="right";
uchar state2[]="error";
uchar sflag;
uchar dflag,cnt;
uchar setf,fset;
uchar flag;
void main ()
{
uchar hp;
alarm=0;
flag=0;
setf=0;
fset=0;
dflag=0;
lcden=0;
lcdrw=1;
lcdrs=1;
P3=0x0f;
for(hp=0;hp<6;hp++)
{
password[hp]='8';
}
write(0x38,0); //0为写命令
delay(9);
write(0x08,0);
write(0x01,0);
write(0x06,0);
write(0x0c,0);
write(0x80,0);
for(hp=0;hp<15;hp++)
{
write(fom[hp],1);
}
while(1)
{
// alarm=!alarm;
keyscan();
if(setf==0)
{
if(num>=1&&num<=10)
{
write(0x80+0x40+cnt,0);
write('*',1);
wordbuf[cnt]=table[num];
cnt++;
num=0;
}
}
else
{
write(0x01,0);
write(0x80,0);
for(hp=0;hp<9;hp++)
{
write(change[hp],1);
}
fset=1;
cnt=0;
while(fset)
{
keyscan();
if(num>=1&&num<=10)
{
write(0x80+0x40+cnt,0);
write('*',1);
password[cnt]=table[num];
cnt++;
num=0;
}
if(num==11)
{
write(0x80+0x40+cnt-1,0);
write('',1);
cnt--;
num=0;
}
if(num==13)
{
flag=1;
num=0;
fset=0;
setf=0;
// goto chuz;
}
}
cnt=0;
}
if(flag==1)
{
write(0x01,0);
write(0x80,0);
for(hp=0;hp<15;hp++)
{
write(fom[hp],1);
}
flag=0;
}
if(num==11)
{
write(0x80+0x40+cnt-1,0);
write('',1);
cnt--;
num=0;
}
if(num==12)
{
if(dflag==1)
setf=1;
num=0;
}
if(num==13)
{
num=0;
write(0x80+0x40+10,0);
if(wordbuf[0]==password[0]&&wordbuf[1]==password[1]&&wordbuf[2]==password[2]&&wordbuf[3]==password[3]&&wordbuf[4]==password[4]&&wordbuf[5]==password[5])
{
for(hp=0;hp<5;hp++)
{
write(state1[hp],1);
}
sflag=0;
dflag=1;
}
else
{
for(hp=0;hp<5;hp++)
{
write(state2[hp],1);
}
sflag++;
}
}
if(sflag==3)
{
alarm=!alarm;
//delay(9);
}
if(num==14)
{
num=0;
cnt=0;
write(0x01,0);
write(0x80,0);
for(hp=0;hp<15;hp++)
{
write(fom[hp],1);
}
}
if(num==15)
{
if(dflag==1)
{
open=0;
dflag=0;
}
}
}
}
void keyscan ()
{
uchar tem,temp;
P3=0xfe;
temp=P3;
tem=temp&0xf0;
if (tem!=0xf0) //没有键按下时它的值是不变的,即仍为0XF0,而有键接下时要变
{
delay(5); //延时消抖
temp=P3;
tem=temp&0xf0;
if (tem!=0xf0) //确认有键按下
{
temp=P3;
tem=temp&0xf0; //这里也可以不要这一步,但下面的case里的值也要变
switch (tem)
{
case 0xe0: num=0; break;
case 0xd0: num=1; break;
case 0xb0: num=2; break;
case 0x70: num=3; break;
default : ; break ;
}
while(tem!=0xf0) //等待松手
{
temp=P3;
tem=temp&0xf0;
}
}
}
P3=0xfd;
temp=P3;
tem=temp&0xf0;
if (tem!=0xf0)
{
delay(5);
temp=P3;
tem=temp&0xf0;
if (tem!=0xf0)
{
temp=P3;
tem=temp&0xf0;
switch (tem)
{
case 0xe0: num=4; break;
case 0xd0: num=5; break;
case 0xb0: num=6; break;
case 0x70: num=7; break;
default : ; break ;
}
while(tem!=0xf0)
{
temp=P3;
tem=temp&0xf0;
}
}
}
P3=0xfb;
temp=P3;
tem=temp&0xf0;
if (tem!=0xf0)
{
delay(5);
temp=P3;
tem=temp&0xf0;
if (tem!=0xf0)
{
temp=P3;
tem=temp&0xf0;
switch (tem)
{
case 0xe0: num=8; break;
case 0xd0: num=9; break;
case 0xb0: num=10; break;
case 0x70: num=11; break;
default : ; break ;
}
while(tem!=0xf0)
{
temp=P3;
tem=temp&0xf0;
}
}
}
P3=0xf7;
temp=P3;
tem=temp&0xf0;
if (tem!=0xf0)
{
delay(5);
temp=P3;
tem=temp&0xf0;
if (tem!=0xf0)
{
temp=P3;
tem=temp&0xf0;
switch (tem)
{
case 0xe0: num=12; break;
case 0xd0: num=13; break;
case 0xb0: num=14; break;
case 0x70: num=15; break;
default : ; break ;
}
while(tem!=0xf0)
{
temp=P3;
tem=temp&0xf0;
}
}
}
}
㈢ 51单片机密码锁的原理是什么
简单密码锁,扫描按键,获得6位或8位数字,与事先设定好的密码比较,相同则开锁,不同则返回或报警。简单的程序密码可以直接写进程序中。
㈣ 基于51单片机的密码锁
基于51单片机的密码锁的话其实我是不知道是什么意思的 所以说不好意思咯(๑ó﹏ò๑)
㈤ 51单片机关于密码锁的毕业设计,论文
程序设计内容
(1). 密码的设定,在此程序中密码是固定在程序存储器ROM中,假设预设的密码为“12345”共5位密码。
(2). 密码的输入问题:由于采用两个按键来完成密码的输入,那么其中一个按键为功能键,另一个按键为数字键。在输入过程中,首先输入密码的长度,接着根据密码的长度输入密码的位数,直到所有长度的密码都已经输入完毕;或者输入确认功能键之后,才能完成密码的输入过程。进入密码的判断比较处理状态并给出相应的处理过程。
(3).按键禁止功能:初始化时,是允许按键输入密码,当有按键按下并开始进入按键识别状态时,按键禁止功能被激活,但启动的状态在3次密码输入不正确的情况下发生的。
C语言源程序
#includeunsignedcharcodeps[]={1,2,3,4,5};
unsignedcharcodedispcode[]={0x3f,0x06,0x5b,0x4f,0x66,
0x6d,0x7d,0x07,0x7f,0x6f,0x00,0x40};
unsignedcharpslen=9;unsignedchartemplen;
unsignedchardigit;unsignedcharfuncount;
unsignedchardigitcount;
unsignedcharpsbuf[9];
bitcmpflag;
bithibitflag;
biterrorflag;
bitrightflag;
unsignedintsecond3;
unsignedintaa;
unsignedintbb;
bitalarmflag;
bitexchangeflag;
unsignedintcc;
unsignedintdd;
bitokflag;
unsignedcharoka;
unsignedcharokb;
voidmain(void)
{
unsignedchari,j;
P2=dispcode[digitcount];
TMOD=0x01;
TH0=(65536-500)/256;
TL0=(65536-500)%6;
TR0=1;
ET0=1;
EA=1;
while(1)
{
if(cmpflag==0)
{
if(P3_6==0)//functionkey
{
for(i=10;i>0;i--)
for(j=248;j>0;j--);
if(P3_6==0)
{
if(hibitflag==0)
{
funcount++;
if(funcount==pslen+2)
{
funcount=0;
cmpflag=1;
}
P1=dispcode[funcount];
}
else
{
second3=0;
}
while(P3_6==0);
}
}
if(P3_7==0)//digitkey
{
for(i=10;i>0;i--)
for(j=248;j>0;j--);
if(P3_7==0)
{
if(hibitflag==0)
{
digitcount++;
if(digitcount==10)
{
digitcount=0;
}
P2=dispcode[digitcount];
if(funcount==1)
{
pslen=digitcount;
templen=pslen;
}
elseif(funcount>1)
{
psbuf[funcount-2]=digitcount;
}
}
else
{
second3=0;
}
while(P3_7==0);
}
}
}
else
{
cmpflag=0;
for(i=0;i
{
if(ps[i]!=psbuf[i])
{
hibitflag=1;
i=pslen;
errorflag=1;
rightflag=0;
cmpflag=0;
second3=0;
gotoa;
}
}
cc=0;
errorflag=0;
rightflag=1;
hibitflag=0;
a: cmpflag=0;
}
}
}
voidt0(void)
interrupt1using0{ TH0=(65536-500)/256;
TL0=(65536-500)%6;
if((errorflag==1)&&(rightflag==0))
{
bb++;
if(bb==800)
{
bb=0;
alarmflag=~alarmflag;
}
if(alarmflag==1)
{
P0_0=~P0_0;
}
aa++;
if(aa==800)
{
aa=0;
P0_1=~P0_1;
}
second3++;
if(second3==6400)
{
second3=0;
hibitflag=0;
errorflag=0;
rightflag=0;
cmpflag=0;
P0_1=1;
alarmflag=0;
bb=0;
aa=0;
}
}
if((errorflag==0)&&(rightflag==1))
{
P0_1=0;
cc++;
if(cc<1000)
{
okflag=1;
}
elseif(cc<2000)
{
okflag=0;
}
else
{
errorflag=0;
rightflag=0;
hibitflag=0;
cmpflag=0;
P0_1=1;
cc=0;
oka=0;
okb=0;
okflag=0;
P0_0=1;
}
if(okflag==1)
{
oka++;
if(oka==2)
{
oka=0;
P0_0=~P0_0;
}
}
else
{
okb++;
if(okb==3)
{
okb=0;
P0_0=~P0_0;
}
}
}
}
㈥ 基于51单片机的指纹密码锁lcd1602显示
有七51单片机的指纹密码锁,这个屏不认识,1602显示你这可以上网咨询一下,到。怎么回就知
㈦ 怎么设计一个由51单片机控制的电子密码锁
#include<reg51.h>
#defineuintunsignedint
charleab[]={0x7f,0x7f,0x7f,0x7f,0x7f,0x7f};
delay(uintz)
{
uintx;
for(;z<0;z--)
for(x=0;x<10;x++);//1ms
}
disp()
{
charx,y;
for(x=5;x>=0;x--)
{for(y=0;y<10;y++)
{P0=0;
P2=x;
P0=leab[x];
delay(10);
P0=0;}
}
}
charsao(charg)
{chard;
switch(g)
{
case1:d=1;break;
case2:d=2;break;
case4:d=3;break;
case8:d=4;break;
default:d=0;break;
}
returnd;
}
charkey()
{
charH=0,L=0,d,d1,d2;
while(1)
{d=0;
P1=0xf0;
if(P1!=0xf0)
{
delay(10);
if(P1!=0xf0)
{
H=(~(P1^0x0f))>>4;
P1=0xff;
P1=0x0f;
L=~(P1^0xf0);
d2=sao(L);
d1=sao(H);
d=(d1-1)*4+d2;
P2=d;
}}
if(d!=0)break;
disp();
}
returnd;
}
main()
{
charleab1[]={0x00,0x00,0x00,0x00,0x00,0x00};
charleab2[]={0x09,0x08,0x00,0x06,0x01,0x01};
chara,b,d,e=0;
intf;
while(1)
{
P3=0xff;
for(a=0;a<6;a++)
{
leab[a]=0x7f;
leab1[a]=0x00;
}
for(b=0;b<100;b++)
{
disp();
}
//for(c=0;c<6;c++)
//{
//leab[c]=0x00;
//}
while(1)
{
for(d=0;d<6;d++)
{
e=key();
if((e>=1)&(e<=10))
{
leab[d]=0x71;
disp();
leab1[d]=e-1;
}
else
{d=d-1;disp();}
if(e==15)break;
}
if(e==15)break;
while(e!=16)
{disp();
e=key();
if(e==16)break;
if(e==15)break;
}
if(e==15)break;
if((leab1[0]==leab2[0])&(leab1[0]==leab2[0])&
(leab1[0]==leab2[0])&(leab1[0]==leab2[0])&
(leab1[0]==leab2[0])&(leab1[0]==leab2[0]))
{
for(f=0;f<800;f++)
{P3=0x02;
delay(100);
disp();
}
}
else
{for(f=0;f<800;f++)
{P3=0x01;
delay(100);
disp();
}}
break;
}
}}
㈧ 求一个51单片机的简易密码锁程序
你好!
从你的功能要求来看,这个密码锁不简易,功能很强很全了;
你这个是仿真验证程序还是要做出实物来验证程序。
采用仿真软件模拟出的密码锁