?? mimasuo.c
字號:
/**********************************************************************************************
**********************************************************************************************
密碼鎖 4位 可重復定義
*************************************************************************************************
*******************************************************************************************/
#include<reg52.h>
#define uchar unsigned char
sbit rs=P3^2;
sbit en=P3^3;
sbit fm=P2^4;
sbit k=P2^7;
uchar i,j,num,temp,s;
uchar code table[]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39};
uchar code table1[]="Enter:";
uchar code table2[]="Error!";
uchar code table3[]="Right!";
void delay(int z) //延時函數
{
uchar x,y;
for(x=110;x>0;x--)
for(y=z;y>0;y--);
}
void writebyte(byte) //寫字節函數
{
rs=1;
P0=byte;
delay(1);
en=0;
en=1;
en=0;
}
void writecommened(commened) //寫指令函數
{
rs=0;
P0=commened;
delay(1);
en=0;
en=1;
en=0;
}
void wrong() //輸入錯誤函數
{
uchar m;
writecommened(0x01);
writecommened(0x0c);
writecommened(0x80+0x04);
for(m=0;m<6;m++)
{
writebyte(table2[m]);
delay(2);
}
fm=0;
delay(500);
fm=1;
delay(500);
fm=0;
delay(500);
fm=1;
}
void right() //輸入正確函數
{
uchar n;
writecommened(0x01);
writecommened(0x0c);
writecommened(0x80+4);
for(n=0;n<6;n++)
{
writebyte(table3[n]);
delay(2);
}
fm=0;
delay(500);
fm=1;
delay(3000);
}
void init() //初始化函數
{
uchar i;
writecommened(0x38);
writecommened(0x01);
writecommened(0x0f);
writecommened(0x06);
writecommened(0x80+3);
for(i=0;i<6;i++)
{
writebyte(table1[i]);
delay(2);
}
}
void keyscan() //鍵盤檢測函數
{
uchar number=0x0b;
int t;
static int t1;
static int t2;
static int t3;
static int t4;
uchar flag;
P3=0xfe;
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
delay(5);
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
switch(temp)
{
case 0x70: number=1;
break;
case 0xb0: number=2;
break;
case 0xd0: number=3;
break;
case 0xe0: number=0;
break;
}
while(temp!=0xf0)
{
temp=P3;
temp=temp&0xf0;
}
}
}
P3=0xfd;
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
delay(5);
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
switch(temp)
{
case 0x70: number=4;
break;
case 0xb0: number=5;
break;
case 0xd0: number=6;
break;
case 0xe0: number=0x0a;
}
while(temp!=0xf0)
{
temp=P3;
temp=temp&0xf0;
}
}
}
P3=0xfb;
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
delay(5);
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
switch(temp)
{
case 0x70: number=7;
break;
case 0xb0: number=8;
break;
case 0xd0: number=9;
break;
}
while(temp!=0xf0)
{
temp=P3;
temp=temp&0xf0;
}
}
}
/* P3=0xf7;
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
delay(5);
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
switch(temp)
{
case 0x70: number=0;
break;
case 0xb0: number=0x0a;
break;
}
while(temp!=0xf0)
{
temp=P3;
temp=temp&0xf0;
}
}
} */
if(number!=0x0b)
{
flag++;
if(flag==4)
flag=0;
if(number!=0x0a)
{
writebyte(table[number]);
writecommened(0x80+9+flag);
if(flag==1)
{
t1=number*1000;
}
if(flag==2)
{
t2=number*100;
}
if(flag==3)
{
t3=number*10;
}
if(flag==0)
{
t4=number*1;
}
}
if(number==0x0a)
{
t=t1+t2+t3+t4;
if(t==5234)
{
right();
t=0;
flag=0;
init();
}
else wrong();
t=0;
flag=0;
delay(1000);
init();
}
number=0x0b;
delay(5);
}
}
void main() //主函數
{
k=1;
P1=0;
k=0;
init();
while(1)
{
keyscan();
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -