📄 dianzisuo.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 + -