📄 mima.c
字号:
/*****************************************************
*****************************************************/
#include <lcd_1602.h>
#include <key.h>
#define BUZZER PORTA.2 //输出波形
uchar i;
uchar cnt,state,state1,correct;
flash uchar show_0[]="press enter to input password!";
flash uchar show_1[]="The password is:" ;
flash uchar show_2[]="*";
flash uchar show_3[]="The password is wrong!";
flash uchar show_4[]="One chance left!";
flash uchar show_5[]="Try it after 5 minutes!";
flash uchar show_6[]="Correct! 'enter' to lock!";
flash uchar show_7[]="Old password:";
flash uchar show_8[]="Input it again!";
flash uchar show_9[]="New password: ";
flash uchar show_10[]="Successful to change password!";
flash uchar show_11[]=" ";
flash uchar show_12[]="Not same,again!";
uchar psd[8]={0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08};
uchar pswd[8],pswd1[8];
void play(flash uchar *j,uchar k) //lcd显示函数,K是显示的个数,j是地址
{
uchar ii;
for(ii=0;ii<k;ii++)
{
dat_w(*(j+ii));
delay_ms(20);
}
}
uchar keycheck(uchar init_pswd[8]) //密码输入判断程序
{
signed char iii;
for(iii=0;;iii++)
{
do
{
keywork();
}while((num>0x09 && num<0xF3)||(num>0xF4));
spk(10);
if(num<0xf3) //按下数字键时
{
if(iii<=7)
{
pswd[iii]=num;
gotoxy(2,iii);
play(show_2,1);
}
else
{
iii--;
}
}
else if(num==0xf3 && iii!=0) //输入密码过程中按下了删除时
{
if(iii>8)
{
iii=8;
}
iii=iii-2;
gotoxy(2,iii+1);
play(show_11,1);
gotoxy(2,iii+1);
}
else if(num==0xf4) //按下确定键时
{
if(iii>7)
{
correct=0;
for(i=0;i<8;i++)
{
if(pswd[i]==init_pswd[i])
{
correct++;
}
}
if(correct==8) //输入密码正确
{
return(1);
}
else //输入密码错误
{
return(0);
}
}
else
{
iii--;
}
}
}
}
void main()
{
PORTA=0xff;
DDRA=0xFF;
PORTB=0x00;
DDRB=0xFF;
PORTC=0x00;
DDRC=0xFF;
PORTD=0x00;
DDRD=0xFF;
init();
again:
//lcd初始化
clear(); //清屏
//显示提示输入密码
gotoxy(1,0);
play(show_0,14);
gotoxy(2,0);
play(show_0+15,15);
//扫描是否按下"enter"键
do
{
keywork();//此函数将返回num的值表示键盘特征码
}while((num!=0xf4)&&(num!=0xf1));
spk(10);
//输入密码状态
if(num==0xf4)
{
clear(); //清屏
gotoxy(1,0);
play(show_1,16);
gotoxy(2,0);
state=keycheck(psd);
if(state==1)
{
clear(); //清屏
gotoxy(1,5);
play(show_6,8); //输入正确
gotoxy(2,0);
play(show_6+9,16);
do //按确定之后就重新上锁
{
keywork();
}while(num!=0xf4);
cnt=0;
goto again;
}
else if(state==0)
{
cnt++;
clear();
gotoxy(1,0);
play(show_3,12);
gotoxy(2,0);
play(show_3+13,9);
delay_ms(1000);
if(cnt==2)
{
clear(); //清屏
gotoxy(1,0);
play(show_4,16);
delay_ms(1000);
goto again;
}
else if(cnt>2)
{
clear();
gotoxy(1,0);
play(show_5,12);
gotoxy(2,0);
play(show_5+13,10);
for(i=0;i<200;i++) //3次输入错误,禁止输入密码5分钟
delay_ms(1500);
cnt=0;
goto again;
}
else
{
goto again;
}
}
}
//设置密码状态
else if(num==0xf1)
{
notright: clear(); //清屏
gotoxy(1,0);
play(show_7,13);
gotoxy(2,0);
state=keycheck(psd);
if(state==1)
{
clear(); //清屏
gotoxy(1,0);
play(show_9,13);
gotoxy(2,0);
state1=keycheck(psd);
for(i=0;i<8;i++)
{
pswd1[i]=pswd[i];
}
notsame: clear();
gotoxy(1,0);
play(show_8,15);
gotoxy(2,0);
state1=keycheck(pswd1);
if(state1==1)
{
clear();
gotoxy(1,0);
play(show_10,13);
gotoxy(2,0);
play(show_10+14,16);
for(i=0;i<8;i++)
{
psd[i]=pswd1[i];
}
delay_ms(1000);
goto again;
}
else if(state1==0)
{
clear();
gotoxy(1,0);
play(show_12,15);
delay_ms(1000);
goto notsame;
}
}
else if(state==0)
{
clear();
gotoxy(1,0);
play(show_3,12);
gotoxy(2,0);
play(show_3+13,9);
delay_ms(1000);
goto notright;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -