Proteus进行电子密码锁设计仿真

本文描述了一个基于8051单片机的程序,涉及密码验证、按键输入处理和LED显示。通过quansaomiao()和hangsaomiao()函数实现按键识别,当正确输入密码时执行相应操作,否则触发声音提示或重新开始。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

代码中有一个此处改密码,更改那个密码数字就可以了。

 #include  <reg52.h>
 sbit lowlight=P1^0;
 sbit highsounder=P1^7;
 void delay(unsigned int x,unsigned int y)
 {
 	unsigned int i,j;
	for(i=0;i<x;i++)
		for(j=0;j<y;j++);
}

unsigned char quansaomiao()
{
	unsigned char x;
	P3=0xf0;
	delay(1,10);
	x=P3;
	x=0xf0 & ~x;
	return x;
	
}

unsigned int hangsaomiao()
{
	unsigned char x,y=0xfe;
	unsigned int i,j=0,k=0;
	for(i=0;i<4;i++)
	{
		P3=y;
		x=P3;
		x=y & ~x;
		if(x==0)
			y=y<<1 | 0x01;
		else
		{
			if(x==0x10)
				k=0;
			else if(x==0x20)
				k=1;
			else k=2;
			while(1)
			{
				P3=0xf0;
		        delay(1,50);
				x=P3;
				x=0xf0 & ~x;
				if(x==0)
				{
					x=1;
					break;
				}	
			} 
			break;
		}
		j++;	
	}
	j=3*j+k;
	return j;			
}

void display(unsigned int j)
{
	unsigned char x,a[16]={0x3F, 0x06, 0x5B, 0x4F, 
	0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F, 0x77, 0x7C, 0x39, 0x5E, 0x3F, 0x71};
	unsigned int i=0;
	P2=0xfe;
	P0=0x73;
	delay(1,50);
	P2=0xfd;;
	P0=0x79;
	delay(1,50);
	x=0xfd;
	for(i=0;i<j;i++)
	{
		x=x<<1 | 0x01;
		P2=x;
		P0=0x40;
		delay(1,50);

	}
}	
void main()
{
	unsigned char k;
	unsigned int j=0,i=0,n=0,m=0,b=0,a[6]={0,0,0,0,0,0};
	highsounder=0;
	lowlight=1;
	while(1)
	{
		display(m);
		k=quansaomiao();
		if(k)
		{
			j=hangsaomiao();
			if(j!=11)
			{
			 	if(j!=10)
				{
					if(m!=6)
					{
						a[m]=j;
						m++;
					}
					else
					{
						a[m]=j;
					}
				}
				else
				{
					if(m!=0)
						m--;
				}
			}
			else
			{
				P2=0xff;
				if(a[0]==4&&a[1]==1&&a[2]==0&&a[3]==2&&a[4]==1&&a[5]==8)//此处改密码,原密码是410218.
				{
					lowlight=0;
					delay(1000,125);
					lowlight=1;
					m=0;
						a[0]=0;
						a[1]=0;
						a[2]=0;
						a[3]=0;
						a[4]=0;
						a[5]=0;
				}
				else
				{
					for(i=0;i<3;i++)
					{
						highsounder=1;
						delay(500,100);
						highsounder=0;
						delay(500,100);
						m=0;
						a[0]=0;
						a[1]=0;
						a[2]=0;
						a[3]=0;
						a[4]=0;
						a[5]=0;
					}
				}
			}
		}

				 
	}
		
}	

	
	

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值