共设了9个用户输入键,其中只有4个是有效的密码按键,其它的都是干扰按键,若按下干扰键,键盘输入电路自动清零,原先输入的密码无效,需要重新输入;如果用户输入密码的时间超过40秒(一般情况下,用户不会超过40秒,若用户觉得不便,还可以修改)电路将报警80秒,若电路连续报警三次,电路将锁定键盘5分钟,防止他人的非法操作。
#include<reg52.h>
sbit fmq=P0^7;
sbit pass_1 = P2^0;
sbit pass_2 = P2^1;
sbit pass_3 = P2^2;
sbit pass_4 = P2^3;
unsigned int count;
unsigned int jishu;
void delay500us()
{
unsigned char j;
for(j=0;j<57;j++) //500us基准延时程序
{
;
}
}
void beep() //产生1KHZ频率声音的函数
{
fmq=0;
delay500us();
fmq=1;
delay500us();
}
void delay1ms(unsigned int i)
{
unsigned char j;
while(i--)
{
for(j=0;j<115;j++) //1ms基准延时程序
{
;
}
}
}
void delayms(unsigned int m)
{
unsigned int i,j;
for(i = m; i > 0; i--)
{
for(j = 110; j > 0; j--)
;
}
}
unsigned int i,j,t;
void voice()
{
for(i = 10000; i > 0; i--)
{
for(j = 110; j > 0; j--)
{
for(t=0;t<1000;t++)
{
beep();
}
fmq=1;
delay1ms(1000);
}
}
}
unsigned char temp;
void monitor_key()
{
P2 = 0xff;
temp = P2;
if(temp != 0xff)
{
delayms(10);
if(temp != 0xff)
{
if(pass_1 == 0)
{
count++;
}else if(pass_2 == 0)
{
count++;
}else if(pass_3 == 0)
{
count++;
}else if(pass_4 == 0)
{
count++;
}else{
count = 0;
jishu++;
}
}
delayms(10);
}
}
void main()
{
unsigned int t;
while(1)
{
monitor_key();
if(jishu == 3)
{
voice();
delayms(5 * 60 * 1000);
jishu = 0;
}
}
}