標(biāo)題:
51單片機(jī)六位密碼鎖程序源碼
[打印本頁(yè)]
作者:
cyfdc51
時(shí)間:
2018-7-10 19:24
標(biāo)題:
51單片機(jī)六位密碼鎖程序源碼
這是基于89c52的六位密碼鎖,在通過矩陣鍵盤來(lái)輸入密碼,也可以進(jìn)行密碼的修改,詳情請(qǐng)下載附件。
單片機(jī)源程序如下:
/**********************密碼鎖**************************/
#include"lcd1602.h"
#include"jianpan.h"
#include"buzzer.h"
#include"relay.h"
#define uint unsigned int
void delay_ms(uint x)
{
uint i,j;
for(i=x;i>0;i--)
for(j=110;j>0;j--);
}
uchar password[]={14,10,6,13,9,5}; //用來(lái)裝密碼
main()
{
uchar num,i=0,j; //num為按鍵值,i為字符數(shù),j數(shù)值比較變量
uchar input_number_test[10]; //裝剛輸入的密碼
uchar wrongtimes=0; //用來(lái)記錄輸入錯(cuò)誤次數(shù)
uchar input_number_length, //輸入密碼長(zhǎng)度,
infact_number_length=6; //實(shí)際密碼長(zhǎng)度
bit Flag; //標(biāo)志
bit huan=1; //進(jìn)入密碼修改模式的標(biāo)志
buzzer_init(); //蜂鳴器初始化
relay_init(); //綠燈初始化
InitLCD(); //初始化液晶屏
Delay(10); //延時(shí)用于穩(wěn)定,可以去掉
LCD_Clear(); //清屏
while(1) //主循環(huán)
{
Write_String(0,0," Welcome! ^_^ "); //寫入第一行信息,主循環(huán)中不再更改此信息,所以在while之前寫入
i=0;
Write_String(0,1,"Enter password");//寫入第二行信息,提示輸入密碼
while (huan) //輸入密碼循環(huán)
{
num=KeyPro(); //看看鍵盤按下什么東西(沒按下時(shí)輸出0xff)
if(num!=0xff) //如果有值的話就執(zhí)行下一步操作
{
if(i==0) //輸入是第一個(gè)字符的時(shí)候需要把改行清空,方便觀看密碼
Write_String(0,1," "); //清除該行
if((i<6)&&(num!=0)) //如果輸入的是前七位
{
input_number_test[i]=num;
LCD_Write_Char(i,1,'*'); //輸入的密碼用"*"代替
i++;
}
if(0==num) //刪除鍵,按下0就刪除
{
--i;
LCD_Write_Char(i,1,' ');
}
if(1==num) //修改密碼程序開始階段
{
huan=0;
i=0;
Write_String(0,1," "); //清除該行
}
/************************按下確認(rèn)鍵,進(jìn)行密碼比較,查看密碼是否正確******************/
if((15==num)||(i==9)) //輸入按鍵值15或者密碼輸入到最大值6后按OK表示輸入結(jié)束,需要進(jìn)行比對(duì)
{
input_number_length=i; //計(jì)算輸入密碼長(zhǎng)度
i=0; //計(jì)數(shù)器復(fù)位
if(input_number_length==infact_number_length) //長(zhǎng)度相等則比較,否則直接輸出錯(cuò)誤
{
Flag=1; //比較位置1
for(j=0;j<infact_number_length;j++) //循環(huán)比較8個(gè)數(shù)值,如果有一個(gè)不等 則最終Flag值為0
Flag=Flag&&(input_number_test[j]==password[j]);//比較輸入值和已有密碼
}
if(!Flag)
{
Write_String(0,1," "); //清除該行
Write_String(0,1,"Wrong! Retry!"); //密碼錯(cuò)誤,提示重新輸入
wrongtimes++; //連續(xù)輸入錯(cuò)誤,則次數(shù)累加
if(wrongtimes==3)
{
Write_String(0,1," "); //清除該行
Write_String(0,1,"Wrong 3 times!");
relay_work(); //
buzzer_work(); //蜂鳴器工作
while(1); //停止該位置,重啟電源后才能輸入,實(shí)際實(shí)用中則需要等到一定時(shí)間后才能再次輸入?。
}
}
if(Flag) //如果比較全部相同,標(biāo)志位置1
{
Write_String(0,1," "); //清除該行
Write_String(0,1,"Right!OPEN .*-*."); //密碼正確
wrongtimes=0; //輸入正確則次數(shù)清零,重新計(jì)數(shù)
Flag=0;
}
}
}
}
//********************進(jìn)入密碼修改模式程序**********************************************************************************************************
while (!huan) //修改密碼循環(huán)
{
Write_String(0,0,"Enter old code:");
num=KeyPro(); //看看鍵盤按下什么東西(沒按下時(shí)輸出0xff)
if(num!=0xff) //如果有值的話就執(zhí)行下一步操作
{
if(i==0) //輸入是第一個(gè)字符的時(shí)候需要把改行清空,方便觀看密碼
Write_String(0,1," "); //清除該行
if((i<6)&&(num!=0)) //如果輸入的是前七位
{
input_number_test[i]=num;
LCD_Write_Char(i,1,'*'); //輸入的密碼用"*"代替
i++;
}
if(0==num) //刪除鍵,按下0就刪除
{
--i;
LCD_Write_Char(i,1,' ');
}
if(2==num) //退出修改密碼模式
{
huan=1;
break;
}
/***********************修改密碼的程序******************/
if((15==num)||(i==9)) //輸入按鍵值15或者密碼輸入到最大值6后按OK表示輸入結(jié)束,需要進(jìn)行比對(duì)
{
input_number_length=i; //計(jì)算輸入密碼長(zhǎng)度
i=0; //計(jì)數(shù)器復(fù)位
if(input_number_length==infact_number_length) //長(zhǎng)度相等則比較,否則直接輸出錯(cuò)誤
{
Flag=1; //比較位置1
for(j=0;j<infact_number_length;j++) //循環(huán)比較8個(gè)數(shù)值,如果有一個(gè)不等 則最終Flag值為0
Flag=Flag&&(input_number_test[j]==password[j]);//比較輸入值和已有密碼
}
if(!Flag)
{
Write_String(0,1," "); //清除該行
Write_String(0,1,"Wrong! Retry!"); //密碼錯(cuò)誤,提示重新輸入
break;
}
if(Flag) //如果比較全部相同,標(biāo)志位置1
{
Write_String(0,1," "); //清除該行
Write_String(0,0,"Enter new code"); //密碼正確
wrongtimes=0; //輸入正確則次數(shù)清零,重新計(jì)數(shù)
while(1)
{
num=KeyPro(); //看看鍵盤按下什么東西(沒按下時(shí)輸出0xff)
if(num!=0xff) //如果有值的話就執(zhí)行下一步操作
{
if(i==0) //輸入是第一個(gè)字符的時(shí)候需要把改行清空,方便觀看密碼
Write_String(0,1," "); //清除該行
if((i<6)&&(num!=0)) //如果輸入的是前七位
{
password[i]=num;
LCD_Write_Char(i,1,'*'); //輸入的密碼用"*"代替
i++;
}
if(0==num) //刪除鍵,按下0就刪除
{
--i;
LCD_Write_Char(i,1,' ');
}
if((num==15))
{
Write_String(0,0,"Change succeeded");
Write_String(0,1," ");
delay_ms(1500);
huan=1;
Write_String(0,0," "); //清除該行
break;
}
}
}
}
}
}
}
}
}
復(fù)制代碼
所有資料51hei提供下載:
密碼鎖.zip
(57.48 KB, 下載次數(shù): 101)
2018-7-10 19:22 上傳
點(diǎn)擊文件名下載附件
密碼鎖程序
下載積分: 黑幣 -5
作者:
是一片白
時(shí)間:
2019-6-3 15:08
剛好需要用到資料,感謝分享
作者:
惡法違法
時(shí)間:
2019-6-23 09:25
OK,,,,,
作者:
ViViliu
時(shí)間:
2019-12-10 21:04
有點(diǎn)棒
作者:
不周
時(shí)間:
2019-12-14 00:50
要是回復(fù)能給一點(diǎn)幣就好了,急用著
作者:
MAFNMCHS
時(shí)間:
2019-12-14 21:02
贊美,感謝
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1