⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mima__.c

📁 基于MEGA16的密码锁
💻 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 + -