跪求! ! ! ! 单片机电子密码锁电路图和源程序
- 提问者网友:你挡着我发光了
- 2021-04-12 18:14
主要设计要求:输入密码正确绿灯亮,蜂鸣器短叫5声,锁习动作,打开锁;输入错误时,红灯亮,锁不动,蜂鸣器长叫。
设置电源指示灯
- 五星知识达人网友:末日狂欢
- 2021-04-12 19:09
我刚好也在练习编写,这段程序是密码锁,或许对你有用,
你在 每一行的 while(key!=D[0]);后面加上 红灯亮,蜂鸣器响的程序
我的密码正确是蜂鸣器响,你把它改成for(i=0;i<5;I++)的形式
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit dula=P2^6;
sbit wela=P2^7;
sbit beep=P2^3;
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
uchar temp,key;
void delay(uint z)//延时函数
{
uint x,y;
for(x=110;x>0;x--)
for(y=z;y>0;y--);
}
void display(uchar num)//数码管上显示
{
P0=table[num];
dula=1;
dula=0;
}
void main()
{
uchar code D[]={3,7,5,2,7,0,6,2,3};//设定的密码为375270623
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;//开定时器 0
P0=0;
dula=1;
dula=0;
P0=0xc0;
wela=1;
wela=0;
while(key!=D[0]);//第一位密码输入不正确,等待
while(key!=D[1]);//第二位密码输入不正确,等待
while(key!=D[2]);//
while(key!=D[3]);//
while(key!=D[4]);//
while(key!=D[5]);//
while(key!=D[6]);//
while(key!=D[7]);//
while(key!=D[8]);//
beep=0;//密码全都正确后,蜂鸣器响(代表密码锁开了)
}
void t0() interrupt 1
{
TR0=0;//定时器0 关闭
P3=0xfe;
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
delay(10);
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
temp=P3;
switch(temp)
{
case 0xee:
key=0;
break;
case 0xde:
key=1;
break;
case 0xbe:
key=2;
break;
case 0x7e:
key=3;
break;
}
while(temp!=0xf0)
{
temp=P3;
temp=temp&0xf0;
}
display(key);//数码管上显示按键的数
}
}
P3=0xfd;
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
delay(10);
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
temp=P3;
switch(temp)
{
case 0xed:
key=4;
break;
case 0xdd:
key=5;
break;
case 0xbd:
key=6;
break;
case 0x7d:
key=7;
break;
}
while(temp!=0xf0)
{
temp=P3;
temp=temp&0xf0;
}
display(key);//数码管上显示按键的数
}
}
P3=0xfb;
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
delay(10);
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
temp=P3;
switch(temp)
{
case 0xeb:
key=8;
break;
case 0xdb:
key=9;
break;
case 0xbb:
key=10;
break;
case 0x7b:
key=11;
break;
}
while(temp!=0xf0)
{
temp=P3;
temp=temp&0xf0;
}
display(key);//数码管上显示按键的数
}
}
P3=0xf7;
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
delay(10);
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
temp=P3;
switch(temp)
{
case 0xe7:
key=12;
break;
case 0xd7:
key=13;
break;
case 0xb7:
key=14;
break;
case 0x77:
key=15;
break;
}
while(temp!=0xf0)
{
temp=P3;
temp=temp&0xf0;
}
display(key);//数码管上显示按键的数
}
}
TR0=1;//定时器0 开
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
}
正方形一边上任一点到这个正方形两条对角线的 |
阴历怎么看 ? |