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

📄 sy.c

📁 用C语言实现的单片机密码锁程序
💻 C
字号:
#include <reg51.H>
unsigned char ps[]={1,2,3,4,5};//密码
unsigned char code dispbit[]={0x04,0x08,0x10,0x20, 
                             0x40,0x80};//数码管片选
unsigned char code dispcode[]={0x3f,0x06,0x5b,0x4f,0x66,
                               0x6d,0x7d,0x07,0x7f,0x6f,
                               0x00,0x73,0xff};//数码驱动
unsigned char dispbuf[6]={11,10,10,10,10,10};//数码管初始化
unsigned char dispcount;//变量
unsigned char flashcount;//变量
unsigned char temp;//数据暂存
unsigned char key;//按键
unsigned char keycount;//输入数据数目
unsigned char pslen=5;//输入数据位数
unsigned char getps[6];//输入数据
bit keyoverflag;//数据溢出标志
bit rightflag;//正确标志
bit errorflag;//错误标志
unsigned int second3;//三秒计时
bit alarmflag;//警报标志
unsigned int js=2;
unsigned int aa=1;//变量
unsigned int bb;//变量
unsigned int cc;//变量
unsigned int dd;//变量
unsigned int ee;//变量
sbit K4=P2^4;
sbit K5=P2^5;
sbit K6=P2^6;
sbit K7=P2^7; 
sbit L=P3^1;
void main(void)
{
unsigned char i,j;
TMOD=0x01;
TH0=(65536-500)/256;
TL0=(65536-500)%256;
TR0=1;
ET0=1;
EA=1;
while(1)
{
P2=0xff;
K4=0;
temp=P2;
temp=temp & 0x0f;
if (temp!=0x0f)
{
for(i=10;i>0;i--)
for(j=248;j>0;j--);
temp=P2;
temp=temp & 0x0f;
if (temp!=0x0f)
{
temp=P2;
temp=temp & 0x0f;
switch(temp)
{
case 0x0e:
key=4;
break;
case 0x0d:
key=3;
break;
case 0x0b:
key=2;
break;
case 0x07:
key=1;
break;
}
temp=P2;
if((key>=0) && (key<10))
{ keycount++;
if(keycount<6)
{
getps[keycount]=key;
dispbuf[keycount]=12;
}
if(keycount==5)
{
keycount=5;
}
else if(keycount>5)
{
keycount=5;
keyoverflag=1;//key overflow
}
}
else if(key==11)//delete key
{
if(keycount>0)
{
getps[keycount]=0;
dispbuf[keycount]=10;
keycount--;
}
else
{
keyoverflag=1;
}
}
else if(key==10)//enter key
{
if(keycount!=pslen)//输入数据不是六位
{
keyoverflag=1;
second3=0;
}
else
{
for(i=0;i<keycount;i++)
{
if(getps[i+1]!=ps[i])
{
i=keycount;
errorflag=1;
rightflag=0;
second3=0;
goto a;
}
}
errorflag=0;
rightflag=1;
a: i=keycount;
}
}
temp=temp & 0x0f;
while(temp!=0x0f)
{
temp=P2;
temp=temp & 0x0f;
}
}
}


P2=0xff;
K5=0;
temp=P2;
temp=temp & 0x0f;
if (temp!=0x0f)
{
for(i=10;i>0;i--)
for(j=248;j>0;j--);
temp=P2;
temp=temp & 0x0f;
if (temp!=0x0f)
{
temp=P2;
temp=temp & 0x0f;
switch(temp)
{
case 0x0e:
key=8;
break;
case 0x0d:
key=7;
break;
case 0x0b:
key=6;
break;
case 0x07:
key=5;
break;
}
temp=P2;
if((key>=0) && (key<10))
{keycount++;
if(keycount<6)
{
getps[keycount]=key;
dispbuf[keycount]=12;
}
if(keycount==5)
{
keycount=5;
}
else if(keycount>5)
{
keycount=5;
keyoverflag=1;//key overflow
}
}
else if(key==11)//delete key
{
if(keycount>0)
{
getps[keycount]=0;
dispbuf[keycount]=10;
keycount--;
}
else
{
keyoverflag=1;
}
}
else if(key==10)//enter key
{
if(keycount!=pslen)
{
keyoverflag=1;
second3=0;
}
else
{
for(i=0;i<keycount;i++)
{
if(getps[i+1]!=ps[i])
{
i=keycount;
errorflag=1;
rightflag=0;
second3=0;
goto a4;
}
}
errorflag=0;
rightflag=1;
a4: i=keycount;
}
}
temp=temp & 0x0f;
while(temp!=0x0f)
{
temp=P2;
temp=temp & 0x0f;
}
}
}

P2=0xff;
K6=0;
temp=P2;
temp=temp & 0x0f;
if (temp!=0x0f)
{
for(i=10;i>0;i--)
for(j=248;j>0;j--);
temp=P2;
temp=temp & 0x0f;
if(temp!=0x0f)
{
temp=P2;
temp=temp & 0x0f;
switch(temp)
{
case 0x0e:
keyoverflag=1;
break;
case 0x0d:
key=11;
break;
case 0x0b:
key=10;
break;
case 0x07:
key=9;
break;
}
temp=P2;
if((key>=0) && (key<10))
{keycount++;
if(keycount<6)
{
getps[keycount]=key;
dispbuf[keycount]=12;
}
if(keycount==5)
{
keycount=5;
}
else if(keycount>5)
{
keycount=5;
keyoverflag=1;//key overflow
}
}
else if(key==11)//delete key
{
if(keycount>0)
{
getps[keycount]=0;
dispbuf[keycount]=10;
keycount--;
}
else
{
keyoverflag=1;
}
}
else if(key==10)//enter key
{
if(keycount!=pslen)
{
keyoverflag=1;
second3=0;
}
else
{
for(i=0;i<keycount;i++)
{
if(getps[i+1]!=ps[i])
{
i=keycount;
errorflag=1;
rightflag=0;
second3=0;
goto a3;
}
}
errorflag=0;
rightflag=1;
a3: i=keycount;
}
}
temp=temp & 0x0f;
while(temp!=0x0f)
{
temp=P2;
temp=temp & 0x0f;
}
}
}

P2=0xff;
K7=0;
temp=P2;
temp=temp & 0x0f;
if (temp!=0x0f)
{
for(i=10;i>0;i--)
for(j=248;j>0;j--);
temp=P2;
temp=temp & 0x0f;
if (temp!=0x0f)
{
temp=P2;
temp=temp & 0x0f;
switch(temp)
{
case 0x0e:
keyoverflag=1;
break;
case 0x0d:
keyoverflag=1;
break;
case 0x0b:
keyoverflag=1;
break;
case 0x07:
keyoverflag=1;
break;
}
temp=P2;
if((key>=0) && (key<10))
{ keycount++;
if(keycount<6)
{
getps[keycount]=key;
dispbuf[keycount]=12;
}
if(keycount==5)
{
keycount=5;
}
else if(keycount>5)
{
keycount=5;
keyoverflag=1;//key overflow
}
}
else if(key==11)//delete key
{
if(keycount>0)
{
getps[keycount]=0;
dispbuf[keycount]=10; 
keycount--;
}
else
{
keyoverflag=1;
}
}
else if(key==10)//enter key
{
if(keycount!=pslen)
{
keyoverflag=1;
second3=0;
}
else
{
for(i=0;i<keycount;i++)
{
if(getps[i+1]!=ps[i])
{
i=keycount;
errorflag=1;
rightflag=0;
second3=0;
goto a2;
}
}
errorflag=0;
rightflag=1;
a2: i=keycount;
}
}
temp=temp & 0x0f;
while(temp!=0x0f)
{
temp=P2;
temp=temp & 0x0f;
}
}
}
}
}


void format(void)
{keycount=0;
for(ee=0;ee<=pslen;ee++)
getps[ee]=0;
dispbuf[0]=11;
for(ee=1;ee<=pslen;ee++)
dispbuf[ee]=10;
errorflag=0;
rightflag=0;
keyoverflag=0;
P0=0xff;
js=2;
}


void t0(void) interrupt 1 using 0
{unsigned char m;
TH0=(65536-500)/256;
TL0=(65536-500)%256;
flashcount++;
if(flashcount==8)
{
flashcount=0;
P1=dispcode[dispbuf[dispcount]];
P3=dispbit[dispcount];
dispcount++;
if(dispcount==6)
{
dispcount=0;
}
}
if((errorflag==1) && (rightflag==0))
{for(m=0;m<=4;m++)
dispbuf[m]=10;
bb++;
if(bb==400)
{aa=aa*2;
if(aa==0)
{aa=1;} 
bb=0;
L=~L;
} 
P0=~aa;
second3++;
if(second3==3200)
{dispbuf[5]=js;
second3=0;
js--;
}
if(dispbuf[5]==0)
{dispbuf[5]=js;
format();
}
}
else if((errorflag==0) && (rightflag==1))
{
P0=0x00;
cc++;
if(cc==10000)
{
P0=0xff;
format();
cc=0;
}
}
if(keyoverflag==1)
{for(m=0;m<=4;m++)
dispbuf[m]=10;
P0=0x7e;
second3++;
if(second3==3200)
{dispbuf[5]=js;
second3=0;
js--;
}
if(dispbuf[5]==0)
{dispbuf[5]=js;
format();
}
}
} 

⌨️ 快捷键说明

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