📄 at89c2051单片机密码锁.c
字号:
#include <at89x51.h>
unsigned char led[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
unsigned char password[7]={0,1,3,5,7,9,0};
unsigned char getword[7];
unsigned char count,bitcount;
unsigned char k,wrongcount;
unsigned long ul;
unsigned int n;
bit flag;
void delay10ms(void)
{
unsigned char i,j;
for(i=20;i>0;i--)
for(j=248;j>0;j--);
}
void alarmring(void) //输出报警声音
{
for(k=0;k<2;k++)
{
for(ul=0;ul<1000;ul++)
{
for(n=0;n<80;n++);
P3_7=~P3_7;
}
for(ul=0;ul<800;ul++)
{
for(n=0;n<100;n++);
P3_7=~P3_7;
}
}
}
void delay3s(void) //延时程序
{
unsigned char i;
for(i=3;i>0;i--)
{
for(ul=0;ul<1000;ul++)
{
for(n=0;n<80;n++);
P3_4=~P3_4;
if((P3_0==0)||(P3_1)==0)
{
delay10ms();
if((P3_0==0)||(P3_1)==0)
{
i=3;
alarmring();
}
}
}
for(ul=0;ul<800;ul++)
{
for(n=0;n<100;n++);
P3_4=~P3_4;
if((P3_0==0)||(P3_1)==0)
{
delay10ms();
if((P3_0==0)||(P3_1)==0)
{
i=3;
alarmring();
}
}
}
}
}
void rightring(void) //输出叮咚声音
{
for(ul=0;ul<800;ul++)
{
for(n=0;n<40;n++);
P3_7=~P3_7;
}
for(ul=0;ul<1000;ul++)
{
for(n=0;n<60;n++);
P3_7=~P3_7;
}
}
comp(void) //密码比较程序
{
unsigned char m;
for (m=1;m<6;m++)
{
if (getword[m]==password[m])
flag = 1;
else
{
flag = 0;
m = 6;
wrongcount++;
}
}
return(flag);
}
void pressring(void) //输出按键声音
{
unsigned long c;
unsigned int n;
for(c=0;c<50;c++)
{
for(n=0;n<50;n++); //延时
P3_7=~P3_7; //取反输出到喇叭的信号
}
}
void main(void)
{
bitcount=0;
count=0;
P3_2=1;
P3_3=0;
P3_4=0;
P3_5=0;
P3_7=0;
k=0;
while(1)
{
if(P3_1==0)
{
pressring();
delay10ms();
if(P3_1==0)
{
count++;
if(count>9)
{
count=0;
}
P1=led[count];
while(P3_1==0);
}
}
if(P3_0==0)
{
pressring();
delay10ms();
if(P3_0==0)
{
bitcount++;
if(bitcount<7)
P1=led[bitcount];
getword[--bitcount]=count;
bitcount++;
count=0;
if(bitcount>6)
{
bitcount=0;
P1=led[bitcount];
comp();
if(flag==1)
{
k=0;
P3_3=~P3_3;
P3_2=~P3_2;
rightring();
}
if(flag==0)
{
alarmring();
if(wrongcount>2)
{
delay3s();
}
}
}
while(P3_0==0);
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -