?? ddddddd.c
字號:
#include <AT89X52.H>
unsigned char code ps[]={1,2,3,4,5};
unsigned char code dispcode[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
unsigned char pslen=5;
unsigned char templen;
unsigned char digit;
unsigned char funcount;
unsigned char digitcount;
unsigned char psbuf[9];
bit cmpflag;
bit hibitflag;
bit errorflag;
bit rightflag;
unsigned int second3;
unsigned int aa=0;
unsigned int bb=0;
bit alarmflag;
bit exchangeflag;
unsigned int cc;
unsigned int dd;
unsigned int n;
bit okflag;
unsigned char oka;
unsigned char okb;
main(void)
{
unsigned char i,j;
cmpflag=0;
n=0;
P2_0=0;
P0=dispcode[digitcount];
TMOD=0x01;
TH0=(65536-500)/256;
TL0=(65536-500)%256;
TR0=1;
ET0=1;
EA=1;
while(1)
{P1_0=1;
P1_1=1;
if(cmpflag==0)
{
if(P3_3==0)//function key
{
for(i=10;i>0;i--)
for(j=248;j>0;j--);
if(P3_3==0)
{
if(hibitflag==0) //按鍵是否被鎖
{
funcount++;
digitcount=0;
P0=dispcode[digitcount];
if(funcount==pslen+2) //前面有按下功能鍵1次和按數(shù)字鍵1次,來完成密碼長度的輸入
{
funcount=0;
cmpflag=1;
}
//P1=dispcode[funcount]; //可以由燈判斷按鍵是否按下,
}
else
{
second3=0;
}
while(P3_3==0);
}
}
if(P3_4==0)//digit key
{
for(i=10;i>0;i--)
for(j=248;j>0;j--);
if(P3_4==0)
{
if(hibitflag==0)
{
digitcount++;
if(digitcount==10)
{
digitcount=0;
}
P0=dispcode[digitcount];
if(funcount==1) //按下功能鍵后,開始輸入密碼長度
{
pslen=digitcount;
templen=pslen;
}
else if(funcount>1) //開始記錄各位密碼
{
psbuf[funcount-2]=digitcount;
}
}
else
{
second3=0;
}
while(P3_4==0);
}
}
} //原文少了這個“}”
if(cmpflag==1)//進行比較
{
cmpflag=0;
for(i=0;i<pslen;i++)
{
if(ps[i]!=psbuf[i])
{
hibitflag=1; //密碼輸入不正確,按鍵禁止功能被激活
i=pslen;
errorflag=1;
rightflag=0;
cmpflag=0;
second3=0;
goto a;
}
}
cc=0;
errorflag=0;
rightflag=1;
hibitflag=0;
a:
cmpflag=0;
n++;
while(n>=3)
{
//P1_2=0;
}
}
}
}
void t0(void)interrupt 1 using 0
{
TH0=(65536-500)/256;
TL0=(65536-500)%256;
if((errorflag==1)&& (rightflag==0))
{
bb++;
if(bb==800)
{
bb=0;
alarmflag=~alarmflag;
}
if(alarmflag==1)
{
P1_2=~P1_2; //報警聲
}
aa++;
if(aa==800)
{
aa=0;
P1_1=~P1_1; //LED2發(fā)光二極管閃
}
second3++;
if(second3==6401) //閃4次后(8次變換),自動復(fù)位到按ENTER前的狀態(tài)
{
second3=0;
hibitflag=0;
errorflag=0;
rightflag=0;
cmpflag=0;
P0_1=1;
P0=0x3f;
alarmflag=0;
bb=0;
aa=0;
}
}
if((errorflag==0)&& (rightflag==1))//發(fā)出長聲
{
n=0;
P1_2=~P1_2; //報警聲
aa++;
if(aa==800)
{
aa=0;
P1_1=~P1_1; //LED2發(fā)光二極管閃
}
second3++;
if(second3==6401) //閃4次后(8次變換),自動復(fù)位到按ENTER前的狀態(tài)
{
second3=0;
hibitflag=0;
errorflag=0;
rightflag=0;
cmpflag=0;
P0_1=1;
P0=0x3f;
alarmflag=0;
bb=0;
aa=0;
}
}
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -