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

📄 dianzisuo.txt

📁 可以自行设置密码,然后只能通过该密码开锁,只不过还没有防真,不知行不
💻 TXT
字号:
//电子号码锁
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar tablec[]={1,5,8,6};//置密码初值用,
uchar temp,num,t,tables[4];//tables[]用来存放输入的四个数
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71
};//用来显示0至F 16个数
sbit wela=P2^7;
sbit dula=P2^6;
sbit P2_0=P2^0;
void delay(uint z)
{	
	uint x,y;
	for(x=z;x>0;x--)
		for(y=110;y>0;y--);	
}
void keyscan(void) reentrant;
void pmm() reentrant;
void pmm() reentrant//判断密码
{
	while(1)
	{
		uchar i;
		P1=0xf7;
		temp=P1;
		temp=temp&0xf0;
		if(temp!=0xf0)//判断是否按下#键或*键按下按键
		{
			delay(5);
			while(P1==0xfe);//确认按下按键
			switch(temp)
				{
					case 0xe0:num=10;//*号
					break;						
					case 0xb0:num=11;//#号
					break;	
				}
			if(num==10)//按*
			{	
				while(tablec[i]==tables[i])
				{
					if(i==3)
						{
							P2_0=0;//开锁
							pmm();//重新判是否按*,#;按*则依然开锁,按#则清空,重新输入
						}
					i++;
				}
			}
		    if(num==11)//按#,数码管清零
			{
				wela=1;//打开四个数码管
				P0=0x00;
				wela=0;
				dula=1;//四个数码管都显0
				P0=0x3f;
				dula=0;
				keyscan();
			}
		}
	}	
}
/*void inist()
{
	
}*/

void keyscan(void) reentrant////键盘扫描
{
	P1=0xfe;
	temp=P1;
	temp=temp&0xf0;
	if(temp!=0xf0)//按下按键
	{
		delay(5);
		while(P1==0xfe);//再次确认按下按键
		switch(temp)
			{
				case 0xe0:num=1;
				break;
				case 0xd0:num=2;
				break;
				case 0xb0:num=3;
				break;
				//case 0x70;num=3;
				/ ;
			}
		
		t++;
	}
	P1=0xfd;
	temp=P1;
	temp=temp&0xf0;
	if(temp!=0xf0)//按下按键
	{
		delay(5);
		while(P1==0xfe);//确认按下按键
		switch(temp)
			{
				case 0xe0:num=4;
				break;
				case 0xd0:num=5;
				break;
				case 0xb0:num=6;
				break;
			}
		t++;	
	}
	P1=0xfb;
	temp=P1;
	temp=temp&0xf0;
	if(temp!=0xf0)//按下按键
	{
		delay(5);
		while(P1==0xfe);//确认按下按键
		switch(temp)
			{
				case 0xe0:num=7;
				break;
				case 0xd0:num=8;
				break;
				case 0xb0:num=9;
				break;
			}
		t++;	
	}
	P1=0xf7;
	temp=P1;
	temp=temp&0xf0;
	if(temp!=0xf0)//按下按键
	{
		delay(5);
		while(P1==0xfe);//确认按下按键
		switch(temp)
			{
				case 0xe0:num=10;//*号
				break;
				case 0xd0:num=0;//0
				break;
				case 0xb0:num=11;//#号
				break;	
			}
		t++;
		if(num==10)//按*时,无效,t不变化
			t--;
		if(num==11)//按#,数码管清零
		{
			wela=1;//打开四个数码管
			P0=0x00;
			wela=0;
			dula=1;//四个数码管都显0
			P0=0x3f;
			dula=0;
			t=0;//t清零,并重新输入
		}
	}
	if(num!=10&num!=11)//排除显示按*或#时显示的数
	{
		tables[t-1]=num;
		if(t==1)
			{
				wela=1;//打开左边第一个数码管
				P0=0xfe;
				wela=0;
				dula=1;//显示输入的数
				P0=table[num];
				dula=0;
				delay(5);//
			}
		if(t==2)
			{
				wela=1;//打开第二个数码管
				P0=0xfd;
				wela=0;
				dula=1;//显示输入的数
				P0=table[num];
				dula=0;
				delay(5);//
			}
		if(t==3)
			{
				wela=1;//打开第三个数码管
				P0=0xfb;
				wela=0;
				dula=1;//显示输入的数
				P0=table[num];
				dula=0;
				delay(5);//
			}
		if(t==4)
			{
				wela=1;//打开第四个数码管
				P0=0xf7;
				wela=0;
				dula=1;//显示输入的数
				P0=table[num];
				dula=0;
				delay(5);//
			}
	}
	if(t==4)//按四次键
	{
		t=0;
		pmm();//进入该程序判断密码是否正确
	}
}
void main(void)
{
	//inist();
	while(1)
	{
		keyscan();	
	}
}	

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -