基于單片機(jī)控制的密碼鎖設(shè)計(jì)(含電路圖及源程序)
//初始化51的寄存器
TMOD=0x20; //用T1計(jì)時 8位自動裝載定時模式
TH1=0x19; //500微秒溢出一次; 250=(256-x)*12/11.0592 -> x=19
TL1=0x19;
EA=1; //開中斷
ET1=1;
TR1=0; //開定時器T1
while(1)
{ key_val=scan_key(); //按鍵輸入,有鍵按下key_val為0-7,無鍵按下key_val為255。
if (key_val!=key_val_old)
{ key_val_old=key_val;
if (key_val!=255 cnt_state!=2)
{ audio_out=0;
delay(100); //延時去抖動
audio_out=1;
switch (key_val)
{ case 0:
case 1:
case 2:
case 3:
case 4:
case 5:
if(key_index6) //密碼為6位,超過6位視為輸入無效
{ show_val[key_index]=key_val;
key_index++; }
break;
case 6: //確認(rèn)鍵
if(check_input_pw())
{//密碼正確
error_num=0; //密碼輸入錯誤次數(shù)清零
//---------
pw_error=1; //密碼錯誤指示燈滅
relay_open=0; //開鎖驅(qū)動信號燈亮
open_lock=0; //已開鎖信號燈亮
//---------
delay(50000); //兩聲短“滴”聲
audio_out=0;
delay(50000);
audio_out=1;
delay(50000);
audio_out=0;
delay(50000);
audio_out=1;
//---------
cnt_state=1; //下一狀態(tài)處于4秒計(jì)時的狀態(tài)
TR0=1; //啟動定時
}
else
{ if (error_num2)
{error_num++; //輸入錯誤次數(shù)小于3次時,沒錯一次error_num增一
pw_error=0; //密碼錯誤指示燈亮
//-----------
delay(20000);//一聲長“滴”聲,提示錯誤
audio_out=0;
delay(60000);
audio_out=1;
//-----------
init_variant();//清除所有輸入,等待下一次輸入
}
else //輸入錯誤次數(shù)超過3次
{ alarm_out=0; //報警燈亮
pw_error=0; //密碼錯誤指示燈亮
error_num=0; //密碼輸入錯誤次數(shù)清零
//----------
audio_out=0; //長鳴聲報警
delay(60000);
delay(60000);
delay(60000);
delay(60000);
delay(60000);
delay(60000);
delay(60000);
delay(60000);
delay(60000);
audio_out=1;
//-------------
TR1=1; //打開定時器計(jì)時
cnt_state=2; //下一狀態(tài)處于15秒計(jì)時的狀態(tài)
}
}
break;
case 7://取消鍵
init_variant();
break;
}
}
}
led_show();
}
}
//-----程序結(jié)束-----------------本文引用地址:http://m.butianyuan.cn/article/170863.htm
電路圖文章專題:電路圖符號大全
電路圖符號相關(guān)文章:電路圖符號大全
評論