标题:
在做一个单片机电子密码锁 小灯的功能实现了 但数码管和响声不管用 咋整
[打印本页]
作者:
caillkk
时间:
2020-6-27 16:47
标题:
在做一个单片机电子密码锁 小灯的功能实现了 但数码管和响声不管用 咋整
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar i,j,num,temp,wrong;
uchar passw[]={1,2,3,4,5,6,7,8};
uchar passt[]= {0,0,0,0,0,0,0,0};
uchar code table[]= {
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71,
0x76,0x79,0x38,0x3f,0};
bit lockflag;
bit editflag;
bit cmpflag;
bit pressflag;
sbit alarm=P1^3;
sbit rled=P1^0;
sbit gled=P1^1;
sbit yled=P1^2;
uint t0,a;
uchar right;
void delay(uint z)
{ uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void lock()
{
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
ET0=1;
EA=1;
TR0=1;
while(1)
{
if(t0<1200)
{
alarm=0;
for(a=2000;a>0;a--)
{
}
rled=~rled;
delay( 1000);
}
else
{
alarm=0;
rled=1;
TR0=0;
t0=0;
break;
}
}
}
void timer0() interrupt 1
{
TH0=(65536- 50000)/256;
TL0=(65536-50000)%256;
t0++;
}
uchar keyscan()
{
P3=0xfe;
temp=P3;
temp=P3&0xf0;
while(temp!=0xf0)
{
delay(50);
if(temp!=0xf0)
{
temp=P3;
switch(temp)
{
case 0xee: {num=0;pressflag=1;} //1110 1110
break;
case 0xde: {num= 1;pressflag=1;} //1101 1110
break;
case 0xbe: {num=2;pressflag=1;} //1010 1110
break;
case 0x7e: {num=3;pressflag=1;} //0111 1110
break;
}
while(temp!=0xf0)
{
temp=P3;
temp=temp&0xf0;
}
}
}
P3=0xfd;
temp=P3;
temp=P3&0xf0;
while(temp!=0xf0)
{
delay(50);
if(temp!=0xf0)
{
temp=P3;
switch(temp)
{
case 0xed: {num=4;pressflag=1;}
break;
case 0xdd: {num=5;pressflag=1;}
break;
case 0xbd: {num=6;pressflag=1;}
break;
case 0x7d: {num=7;pressflag=1;}
break;
}
while(temp!=0xf0)
{
temp=P3;
temp=temp&0xf0;
}
}
}
P3=0xfb;
temp=P3;
temp=P3&0xf0;
while(temp!=0xf0)
{
delay(50);
if(temp!=0xf0)
{
temp=P3;
switch(temp)
{
case 0xeb: {num=8;pressflag=1;}
break;
case 0xdb: {num=9;pressflag=1;}
break;
case 0xbb: {num= 10;pressflag=1;}
break;
}
while(temp!=0xf0)
{
temp=P3;
temp=temp&0xf0;
}
}
}
return num;
}
void input()
{
while(num!=10)
{
keyscan();
}
if(num== 10)
{
pressflag=0;
yled=0;
for(i=0;i<8;i++)
{
while(!pressflag)
{
keyscan();
}
pressflag=0;
temp=num;
if(temp!=10)
{
if(!editflag)
passt[i]=temp;
else
passw[i]=temp;
P0=table[num];
}
else
break;
}
yled=1;
cmpflag=~editflag;
delay(200);
P0=0;
num=0;
}
}
main()
{
i=0;
j=0;
lockflag=0;
editflag=0;
pressflag=0;
P0=0;
while(1)
{
input();
if(cmpflag)
{
cmpflag=0;
for(j=0;j<8;j++)
{
if(passw[j]!=passt[j])
{
if(wrong==2)
{
wrong=0;
lock();
}
else
{
gled=1;
rled=0;
alarm=0;
for(a=5000;a>0;a--)
{
}
delay(500);
rled=1;
alarm=1;
wrong++;
}
break;
}
else
{
if(j==7)
{
rled=1;
gled=0;
editflag=1;
input();
editflag=0;
gled=1;
wrong=0;
}
}
}
}
}
}
复制代码
作者:
caillkk
时间:
2020-6-27 17:11
仿真图
1.jpg
(353 KB, 下载次数: 46)
下载附件
2020-6-27 17:11 上传
这是仿真图
作者:
xianfajushi
时间:
2020-6-28 20:46
可参
https://bbs.csdn.net/topics/392713242
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1