当前位置:首页 > 单片机密码锁设计毕业论文
}
I2C_receive_string(6,0); EA=1;
//读取24C02内部密码
mode=1; //去mode1
//////////////////////////////mode1密码输入和验证/////////////////////////////// //该模式为密码输入模式
//进入后显示Input code 输入密码后第二行显示 ****** //输入6个密码后,系统自动验证密码 //验证正确显示Unlock OK! 开锁
//验证错误显示 ERROR ! 然后再次输入密码,5次后锁键盘,报警 if(mode==1) {
KeyNo=16; //清零为键盘扫描做准备 i=0; {
//输入密码次数计数
while(1) P2 = 0xF0;
if(P2 != 0xF0) KeyNo = Keys_Scan(); //扫描键盘获取键序号KeyNo
switch ( KeyNo )
{ case 0: case 1: case 2: case 3: case 4:
case 5: case 6: case 7: case 8: case 9: //当4*4键盘输入0123456789这几个数字时执行以下选择
if ( i<= 5 ) {
UserPassword[i] = KeyNo + '0'; //用户输入的密码UserPassword[0]-UserPassword[5]共6个
UserPassword[i+1] = '\\0';
DSY_BUFFER[i] = '*'; //1602上显示***** DSY_BUFFER[i+1] = '\\0';
LCD_Write_String(0,1,DSY_BUFFER); //1602上显示*****
// LCD_Write_String(8,1,UserPassword); i++; } break;
}//switch
32
//如果i为0则执行一次清屏
if (i ==0) LCD_Write_String(0,1,\当i=0时显示空白
//密码限制在6位以内
if(i==6)
OK!
//输入6个后系统自动进行密码验证
{if(strcmp(UserPassword,IIC_Password) == 0)
{JDQ
=
//密码验证
0;error5=0;mode=2;LCD_Write_String(0,1,\
Unlock
\密码正确,显示OK mode=2,
else{JDQ = 1;error5++;LCD_Write_String(0,1,\! \密码 i=0;delayms(2000);LCD_Write_String(0,0,\
Input
code
\
错误,显示错误
LCD_Write_String(0,1,\第一排显示 Input code 第二排显示空白
} //if(i==6)
if(error5>2){LCD_Write_String(0,1,\
P2= 0xF0;
while (P2 != 0xF0); //如果有键未释放则等待
while (P2 == 0xF0); //如果没有再次按下按键则等待 }
//////////////////////////////mode1软密码///////////////////////////////////////// //////////////////////////////mode2密码验证///////////////////////////////////// //输入密码正确后选择修改密码还是退出 //若选择修改密码 进入mode3
//若选择退出,关锁 则进入模式mode1 if(mode==2) {
delayms(1000); //延时1秒 LCD_Write_String(0,0,\修改软密码 LCD_Write_String(0,1,\修改硬密码 KeyNo=16; while(1) { P2 = 0xF0;
if(P2 != 0xF0) KeyNo = Keys_Scan(); //扫描键盘获取键序号KeyNo
if(KeyNo==10){KeyNo=16;mode=3;delayms(500);break;}; //到mode=3 延时0.5秒 软密码//读 if(KeyNo==11){KeyNo=16;mode=0;delayms(500);JDQ=1;break;}; //到mode=0,继电器关,延时0.5秒
//清零为键盘扫描做准备 //循环需选择后退出
i=0; //输入密码次数计数 }//while(1)
// 错误3次,键盘锁,蜂鸣器响
EEPROMPassword 退出mode3
33
}
P2= 0xF0;//按键音
while (P2 != 0xF0); //如果有键未释放则等待 while (P2 == 0xF0); //如果没有再次按下按键则等待 }
//////////////////////////////mode2密码验证///////////////////////////////////// ///////////////////////////////mode3改软密码//////////////////////////////////////// //输入新密码需要输入2次密码
//两次输入密码正确修改密码成功 数据存入24c02 显示 OK! Password Saved! 然后进入mode=1; //两次新密码输入不一样,不能修改密码 显示 No rights ! 返回到mode1 if(mode==3) {
while(1) {
P2 = 0xF0;
if(P2 != 0xF0) KeyNo = Keys_Scan();
switch ( KeyNo )
{ case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7: case 8: case 9: 行以下选择
if ( i<= 5 ) {
OnePassword[i] = KeyNo + '0'; //用户第一次输入的密码 OnePassword[i+1] = '\\0';
DSY_BUFFER[i] = '*'; DSY_BUFFER[i+1] = '\\0'; }
34
LCD_Write_String(0,1,DSY_BUFFER);
// 显示***
i++;
// 显示***用
//密码限制在6位以内
//如果i为0则执行一次清屏
//当4*4键盘输入0123456789这几个数字时执
//扫描键盘获取键序号KeyNo
delayms(500);
//延时0.5S
LCD_Write_String(0,0,\显示New Soft code 1 LCD_Write_String(0,1,\显示空白 KeyNo=16;
//清零为键盘扫描做准备
i=0; //输入密码次数计数
if (i ==0) LCD_Write_String(0,1,\显示空白
break;
}//switch
//输入6个后退出 //如果有键未释放则等待
P2= 0xF0;//按键音 if(i==6){break;}
while (P2 != 0xF0); while (P2 == 0xF0);
} //while(1) delayms(1000); //1s
LCD_Write_String(0,0,\显示New Soft code 2 LCD_Write_String(0,1,\界面 KeyNo=16; i=0;
//清零为键盘扫描做准备 //输入密码次数计数
while(1) {
P2 = 0xF0;
if(P2 != 0xF0) KeyNo = Keys_Scan(); //扫描键盘获取键序号KeyNo
switch ( KeyNo )
{ case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7: case 8: case 9: if ( i<= 5 ) {
TwoPassword[i] = KeyNo + '0'; //用户第二次输入的密码 TwoPassword[i+1] = '\\0';
DSY_BUFFER[i] = '*'; DSY_BUFFER[i+1] = '\\0'; } break;
}//switch
LCD_Write_String(0,1,DSY_BUFFER);
//显示字符
i++;
//
//当4*4键盘输入0123456789这几个数字//密码限制在6位以内
//如果i为0则执行一次清屏
时执行以下选择
if (i ==0) LCD_Write_String(0,1,\
if(i==6){ if (strcmp(OnePassword,TwoPassword) == 0) //输入6个后系统自动进行密码验证
{ for(i=0;i<6;i++){UserPassword[i] = TwoPassword[i];}
//验证两次输
入的密码是否正确
EA=0;I2C_send_string(6,0);EA=1; //密码正确 存入
35
共分享92篇相关文档