?? 程序(c語言).c
字號:
for(i=0;i<16;i++)
{
write_1602dat(Error[i]);
}
}
else
{
//DisplayListChar(0,1,start_line);
write_1602com(er);
for(i=0;i<16;i++)
{
write_1602dat(start_line[i]);
}
}
}
}
void DisplayInput(void)
{
unsigned char i;
if(CorrectCont==1)
{
//DisplayListChar(0,0,Input);
write_1602com(er);
for(i=0;i<16;i++)
{
write_1602dat(Input[i]);
}
}
}
//========================重置密碼==================================================
//==================================================================================
void ResetPassword(void)
{
unsigned char i;
unsigned char j;
if(pass==0)
{
pass=0;
DisplayChar();
ThreeAlam();
}
else
{
if(ReInputEn==1)
{
if(N==6)
{
ReInputCont++;
if(ReInputCont==2)
{
for(i=0;i<6;)
{
if(TempPassword[i]==InputData[i]) //將兩次輸入的新密碼作對比
i++;
else
{
//DisplayListChar(0,1,Error);
write_1602com(er);
for(j=0;j<16;j++)
{
write_1602dat(Error[j]);
}
ThreeAlam(); //錯(cuò)誤提示
pass=0;
ReInputEn=0; //關(guān)閉重置功能,
ReInputCont=0;
DisplayChar();
break;
}
}
if(i==6)
{
//DisplayListChar(0,1,ResetOK);
write_1602com(er);
for(j=0;j<16;j++)
{
write_1602dat(ResetOK[j]);
}
TwoAlam(); //操作成功提示
WrToROM(TempPassword,0,6); //將新密碼寫入24C02存儲
ReInputEn=0;
}
ReInputCont=0;
CorrectCont=0;
}
else
{
OneAlam();
//DisplayListChar(0, 1, again); //顯示再次輸入一次
write_1602com(er);
for(j=0;j<16;j++)
{
write_1602dat(again[j]);
}
for(i=0;i<6;i++)
{
TempPassword[i]=InputData[i]; //將第一次輸入的數(shù)據(jù)暫存起來
}
}
N=0; //輸入數(shù)據(jù)位數(shù)計(jì)數(shù)器清零
}
}
}
}
//=======================輸入密碼錯(cuò)誤超過三過,報(bào)警并鎖死鍵盤======================
void Alam_KeyUnable(void)
{
P1=0x00;
{
ALAM=~ALAM;
Delay5Ms();
}
}
//=======================取消所有操作============================================
void Cancel(void)
{
unsigned char i;
unsigned char j;
//DisplayListChar(0, 1, start_line);
write_1602com(er);
for(j=0;j<16;j++)
{
write_1602dat(start_line[j]);
}
TwoAlam(); //提示音
for(i=0;i<6;i++)
{
InputData[i]=0;
}
KEY=1; //關(guān)閉鎖
ALAM=1; //報(bào)警關(guān)
operation=0; //操作標(biāo)志位清零
pass=0; //密碼正確標(biāo)志清零
ReInputEn=0; //重置輸入充許標(biāo)志清零
ErrorCont=0; //密碼錯(cuò)誤輸入次數(shù)清零
CorrectCont=0; //密碼正確輸入次數(shù)清零
ReInputCont=0; //重置密碼輸入次數(shù)清零
open_led=1;
s3_keydown=0;
key_disable=0;
N=0; //輸入位數(shù)計(jì)數(shù)器清零
}
//==========================確認(rèn)鍵,并通過相應(yīng)標(biāo)志位執(zhí)行相應(yīng)功能===============================
void Ensure(void)
{
unsigned char i,j;
RdFromROM(CurrentPassword,0,6); //從24C02里讀出存儲密碼
if(N==6)
{
if(ReInputEn==0) //重置密碼功能未開啟
{
for(i=0;i<6;)
{
if(CurrentPassword[i]==InputData[i])
{
i++;
}
else
{
ErrorCont++;
if(ErrorCont==3) //錯(cuò)誤輸入計(jì)數(shù)達(dá)三次時(shí),報(bào)警并鎖定鍵盤
{
write_1602com(er);
for(i=0;i<16;i++)
{
write_1602dat(Error[i]);
}
do
Alam_KeyUnable();
while(1);
}
else
{
TR0=1; //開啟定時(shí)
key_disable=1; //鎖定鍵盤
pass=0;
break;
}
}
}
if(i==6)
{
CorrectCont++;
if(CorrectCont==1) //正確輸入計(jì)數(shù),當(dāng)只有一次正確輸入時(shí),開鎖,
{
//DisplayListChar(0,1,LockOpen);
write_1602com(er);
for(j=0;j<16;j++)
{
write_1602dat(LockOpen[j]);
}
TwoAlam(); //操作成功提示音
KEY=0; //開鎖
pass=1; //置正確標(biāo)志位
TR0=1; //開啟定時(shí)
open_led=0; //開鎖指示燈亮
for(j=0;j<6;j++) //將輸入清除
{
InputData[i]=0;
}
}
else //當(dāng)兩次正確輸入時(shí),開啟重置密碼功能
{
//DisplayListChar(0,1,SetNew);
write_1602com(er);
for(j=0;j<16;j++)
{
write_1602dat(SetNew[j]);
}
TwoAlam(); //操作成功提示
ReInputEn=1; //允許重置密碼輸入
CorrectCont=0; //正確計(jì)數(shù)器清零
}
}
else //=========================當(dāng)?shù)谝淮问褂没蛲浢艽a時(shí)可以用131420對其密碼初始化============
{
if((InputData[0]==1)&&(InputData[1]==3)&&(InputData[2]==1)&&(InputData[3]==4)&&(InputData[4]==2)&&(InputData[5]==0))
{
WrToROM(initpassword,0,6); //強(qiáng)制將初始密碼寫入24C02存儲
//DisplayListChar(0,1,initword); //顯示初始化密碼
write_1602com(er);
for(j=0;j<16;j++)
{
write_1602dat(initword[j]);
}
TwoAlam();
Delay400Ms();
TwoAlam();
N=0;
}
else
{
//DisplayListChar(0,1,Error);
write_1602com(er);
for(j=0;j<16;j++)
{
write_1602dat(Error[j]);
}
ThreeAlam(); //錯(cuò)誤提示音
pass=0;
}
}
}
else //當(dāng)已經(jīng)開啟重置密碼功能時(shí),而按下開鎖鍵,
{
//DisplayListChar(0,1,Er_try);
write_1602com(er);
for(j=0;j<16;j++)
{
write_1602dat(Er_try[j]);
}
ThreeAlam();
}
}
else
{
//DisplayListChar(0,1,Error);
write_1602com(er);
for(j=0;j<16;j++)
{
write_1602dat(Error[j]);
}
ThreeAlam(); //錯(cuò)誤提示音
pass=0;
}
N=0; //將輸入數(shù)據(jù)計(jì)數(shù)器清零,為下一次輸入作準(zhǔn)備
operation=1;
}
//==============================主函數(shù)===============================
void main(void)
{
unsigned char KEY,NUM;
unsigned char i,j;
P1=0xFF;
TMOD=0x11;
TL0=0xB0;
TH0=0x3C;
EA=1;
ET0=1;
TR0=0;
Delay400Ms(); //啟動(dòng)等待,等LCM講入工作狀態(tài)
lcd_init(); //LCD初始化
write_1602com(yi);//日歷顯示固定符號從第一行第0個(gè)位置之后開始顯示
for(i=0;i<16;i++)
{
write_1602dat(name[i]);//向液晶屏寫日歷顯示的固定符號部分
}
write_1602com(er);//時(shí)間顯示固定符號寫入位置,從第2個(gè)位置后開始顯示
for(i=0;i<16;i++)
{
write_1602dat(start_line[i]);//寫顯示時(shí)間固定符號,兩個(gè)冒號
}
write_1602com(er+9); //設(shè)置光標(biāo)位置
write_1602com(0x0f); //設(shè)置光標(biāo)為閃爍
Delay5Ms(); //延時(shí)片刻(可不要)
N=0; //初始化數(shù)據(jù)輸入位數(shù)
while(1)
{
if(key_disable==1)
Alam_KeyUnable();
else
ALAM=1; //關(guān)報(bào)警
KEY=keynum();
if(KEY!=0)
{
if(key_disable==1)
{
second=0;
}
else
{
NUM=coding(KEY);
{
switch(NUM)
{
case ('A'): ; break;
case ('B'): ; break;
case ('C'): ; break;
case ('D'): ResetPassword(); break; //重新設(shè)置密碼
case ('*'): Cancel(); break; //取消當(dāng)前輸入
case ('#'): Ensure(); break; //確認(rèn)鍵,
default:
{
//DisplayListChar(0,1,Input);
write_1602com(er);
for(i=0;i<16;i++)
{
write_1602dat(Input[i]);
}
operation=0;
if(N<6) //當(dāng)輸入的密碼少于6位時(shí),接受輸入并保存,大于6位時(shí)則無效。
{
OneAlam(); //按鍵提示音
//DisplayOneChar(6+N,1,'*');
for(j=0;j<=N;j++)
{
write_1602com(er+6+j);
write_1602dat('*');
}
InputData[N]=NUM;
N++;
}
else //輸入數(shù)據(jù)位數(shù)大于6后,忽略輸入
{
N=6;
break;
}
}
}
}
}
}
}
}
//*********************************中斷服務(wù)函數(shù)**************************************
void time0_int(void) interrupt 1
{
TL0=0xB0;
TH0=0x3C;
//TR0=1;
countt0++;
if(countt0==20)
{
countt0=0;
second++;
if(pass==1)
{
if(second==1)
{
open_led=1; //關(guān)指示燈
TR0=0; //關(guān)定時(shí)器
TL0=0xB0;
TH0=0x3C;
second=0;
}
}
else
{
if(second==3)
{
TR0=0;
second=0;
key_disable=0;
s3_keydown=0;
TL0=0xB0;
TH0=0x3C;
}
else
TR0=1;
}
}
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -