📄 st.c
字号:
///////////////密码锁程序//////////////////////
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
//////////////////////////////////////////////////////////
#define a 0x80
#define b 0x40
#define c 0x20
#define d 0x10
#define e 0x08
#define f 0x04
#define g 0x02
#define dp 0x01
uchar n;
///////////////////延时子程序/////////////////////////
void delay(uint i){uint j;
for(j=0;j<i;j++)
{;}}
//////////////////数据显示字模(共阳)/////////////////////
uchar const disp_code[16]={a+b+c+d+e+f,
b+c,
a+b+d+e+g,
a+b+c+d+g,
b+c+f+g,
a+c+d+f+g,
a+c+d+e+f+g,
a+b+c,
a+b+c+d+e+f+g,
a+b+c+d+f+g,
a+b+c+e+f+g,
c+d+e+f+g,
a+d+e+f,
b+c+d+e+g,
a+d+e+f+g,
a+e+f+g};
uchar disp_busf[4];
///////////////////动态显示子程序/////////////////////
void display(void){P0&=~0x08;
P2=~disp_code[disp_busf[0]];
delay(100);
P0|=0x0f;
P0&=~0x04;
P2=~disp_code[disp_busf[1]];
delay(100);
P0|=0x0f;
P0&=~0x02;
P2=~disp_code[disp_busf[2]];
delay(100);
P0|=0x0f;
P0&=~0x01;
P2=~disp_code[disp_busf[3]];
delay(100);
P0|=0x0f;}
///////////////////键盘扫描子程序(反转法)///////////////////////
uchar key_scan(void){uchar i,j;
P1=0x0f;
i=P1;
i&=0x0f;
if(i==0x0f) return(0xff);
delay(1000);
P1|=0x0f;
i=P1;
i&=0x0f;
if(i==0x0f) return(0xff);
P1=0xf0;
j=P1;
j&=0xf0;
return(i+j);}
////////////////////键盘键值//////////////////////
uchar const key_code[16]={0x77,0x7b,0x7d,0x7e,0xb7,0xbb,0xbd,0xbe,
/*k1 k2 k3 k4 k5 k6 k7 k8*/
0xd7,0xdb,0xdd,0xde,0xe7,0xeb,0xed,0xee};
/*k9 k10 k11 k12 k13 k14 k15 k16*/
///////////////////键盘扫描与键值译码子程序//////////////////////////
uchar key(void){uchar i,j;
i=key_scan();
if(i==0xff) return(0xff);
loop:j=key_scan();
if(j!=0xff) goto loop;
for(j=0;j<16;j++)
{if(i==key_code[j]) break;}
return(j);}
//////////////////////定时器0的中断服务程序//////////////////////////
void xianshi(void) interrupt 1 using 1///中断方式显示数据////////////
{TH0=50000/256;
TL0=50000%256;
display();}
uchar key_busf;
//////////////////////清除后从新输入////////////////////////////////////
void qingchu(void)
{ disp_busf[3]=0;
disp_busf[2]=0;
disp_busf[1]=0;
disp_busf[0]=0;P0&=0xff;
return; }
/////////////////////初始密码数据/////////////////////////////////////
uchar mima[4]={1,1,2,2};
uchar xiu_gai[4];
///////////////////////输入数据子程序////////////////////////////////
void shuru(void){uchar i,j,k,n;
j=0;k=0;
loop:i=key();
if(i==0xff) goto loop;
else if(i<10)
{P0|=0xf0;
disp_busf[3]=disp_busf[2];
disp_busf[2]=disp_busf[1];
disp_busf[1]=disp_busf[0];
disp_busf[0]=i;}
else if(i==0x0d)
qingchu();
else if(i==0x0f)
{for(i=0;i<4;i++)
{if(disp_busf[i]!=mima[i]) break;}
if(i!=4)
{P0|=0xf0;delay(5000);P0&=0x0f;delay(5000);
P0|=0xf0;delay(5000);P0&=0x0f;delay(5000);
P0|=0xf0;delay(5000);P0&=0x0f;delay(5000);
P0|=0xf0;delay(5000);P0&=0x0f;delay(5000);
P0|=0xf0;delay(5000);P0&=0x0f;delay(5000);
P0|=0xf0;delay(5000);P0&=0x0f;delay(5000);
P0|=0xf0;delay(5000);P0&=0x0f;delay(5000);
P0|=0xf0;delay(5000);P0&=0x0f;delay(5000);
P0|=0xf0;delay(5000);P0&=0x0f;delay(5000);
P0&=0x7f;delay(240000);
disp_busf[3]=0;
disp_busf[2]=0;
disp_busf[1]=0;
disp_busf[0]=0;}
else
{P3|=0x40;
delay(240000);
disp_busf[3]=0;
disp_busf[2]=0;
disp_busf[1]=0;
disp_busf[0]=0;}}
else if(i==0x0e)
{
P0=0x60;
for(i=0;i<4;i++)
{if(disp_busf[i]!=mima[i]) break;}
if(i!=4)
{P0|=0xf0;delay(5000);P0&=0x0f;delay(5000);
P0|=0xf0;delay(5000);P0&=0x0f;delay(5000);
P0|=0xf0;delay(5000);P0&=0x0f;delay(5000);
P0|=0xf0;delay(5000);P0&=0x0f;delay(5000);
P0|=0xf0;delay(5000);P0&=0x0f;delay(5000);
P0|=0xf0;delay(5000);P0&=0x0f;delay(5000);
P0|=0xf0;delay(5000);P0&=0x0f;delay(5000);
P0|=0xf0;delay(5000);P0&=0x0f;delay(5000);
P0|=0xf0;delay(5000);P0&=0x0f;delay(5000);
disp_busf[3]=0;
disp_busf[2]=0;
disp_busf[1]=0;
disp_busf[0]=0; return; }
else {
disp_busf[3]=0;
disp_busf[2]=0;
disp_busf[1]=0;
disp_busf[0]=0;
loop1: i=key();
if(i==0xff) goto loop1;
else if(i<10)
{ disp_busf[3]=disp_busf[2];
disp_busf[2]=disp_busf[1];
disp_busf[1]=disp_busf[0];
disp_busf[0]=i;
}
else if(i==0x0d)
qingchu();
else if(i==0x0f)
{
xiu_gai[0]=disp_busf[0];
xiu_gai[1]=disp_busf[1];
xiu_gai[2]=disp_busf[2];
xiu_gai[3]=disp_busf[3];
disp_busf[3]=0;
disp_busf[2]=0;
disp_busf[1]=0;
disp_busf[0]=0;
goto loop3;}
goto loop1;
loop3: i=key();
if(i==0xff) goto loop3;
else if(i<10)
{
disp_busf[3]=disp_busf[2];
disp_busf[2]=disp_busf[1];
disp_busf[1]=disp_busf[0];
disp_busf[0]=i;}
else if(i==0x0d)
{
disp_busf[3]=0;
disp_busf[2]=0;
disp_busf[1]=0;
disp_busf[0]=0;
goto loop3;}
else if(i==0x0f)
{for(i=0;i<4;i++)
{if(xiu_gai[i]!=disp_busf[i]) break;}
if(i!=4)
{P0|=0xf0;return;}
else
{
for(n=0;n<4;n++)
mima[n]=xiu_gai[n];
disp_busf[3]=0;
disp_busf[2]=0;
disp_busf[1]=0;
disp_busf[0]=0;}
P0|=0xf0;
return;} goto loop3;
}
}
goto loop;}
void main(void){TMOD=0x01;
TH0=50000/256;
TL0=50000%256;
ET0=1;
TR0=1;
EA=1;
loop:shuru();
goto loop;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -