|
仿真图如图
调试方法:在虚拟终端输入大写A,led屏显示“0”等待输入密码,输入密码按下ok键后虚拟终端显示输入密码
虚拟终端输入大写A后led屏显示“0”等待输入密码,但按按钮输密码没反应 晶振已调为11.0592MHz 麻烦大佬们了
代码如下
#include<reg51.h>
#include<absacc.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define OK 0x0f
#define DEL 0x0e
uchar code segtab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,
0xc6,0xa1,0x86,0x8e,0x89,0x8c,0xff,0xbf,0x8d};
uchar dbuf[4]={0x12,0x12,0x12,0x11};
uchar kbuf[4]={0,0,0,0};
sbit SPK=P3^6;
void delay(void)
{ uchar i;
for(i=0;i<250;i++);
}
void init_serial(void)
{ SCON=0x50;
TMOD=0x20;
PCON=PCON&0x7f;
TH1=-3;
TL1=-3;
TR1=1;
}
void sound(uint time)
{ while(time--)
{ delay();
SPK=~SPK;
}
}
void late(uint time)
{ while(time--)
delay();
}
void disp(void)
{ uchar n,bsel;
bsel=0x08;
for(n=0;n<4;n++)
{ P2=bsel|0xf0;
P0=segtab[dbuf[n]];
bsel=bsel>>1;
delay();
P0=0xff;
}
}
uchar getkey()
{ uchar i;
uchar key=0;
uchar scode,recode;
P2=0xf0;
if((P2&0xf0)!=0xf0)
{ for(i=1;i<20;i++)disp();
P2=0xf0;
if((P2&0xf0)!=0xf0)
{scode=0xfe;
while((scode&0x10)!=0)
{ P2=scode;
if((P2&0xf0)!=0xf0)
{recode=P2&0xf0;
scode=0x10;
while(scode!=0)
if(recode&scode==0)
{ while((P2&0xf0)!=0xf0)
{disp();
P2=0xf0;
}
return(key);
}
else
{scode=scode<<1;
key++;
}
}
else
{ scode=_crol_(scode,1);
key=key+4;
}
}
}
}
return(0xff);
}
void password(void)
{ uchar key;
uchar klen;
uchar i;
klen=0;
while(1)
{ disp();
key=getkey();
if(key==OK)return;
if(key<=0x09)
{ for(i=3;i>0;i--)
kbuf[i]=kbuf[i-1];
kbuf[0]=key;
if(klen<4) klen++;
}
else if(key==DEL)
{ for(i=0;i<3;i++)
kbuf[i]=kbuf[i+1];
kbuf[3]=0;
if(klen>0) klen--;
}
for(i=0;i<4;i++)
{ if(i<klen)
dbuf[i]=0x13;
else
dbuf[i]=0x12;
}
if (klen==0)
dbuf[0]=0;
}
}
void main(void)
{ uchar i;
uchar dat;
P0=0xff;
init_serial();
dbuf[3]=0x11;
while(1)
{
while(RI==0)disp();
RI=0;
dat=SBUF;
if(dat==0x41)
{ dbuf[0]=0;
password();
for(i=4;i>0;i--)
{SBUF=kbuf[i-1]+0x30;
while(TI==0);
TI=0;
}
while(RI==0)disp();
RI=0;
dat=SBUF;
for(i=0;i<4;i++)dbuf[i]=0x12;
if(dat==0x42)
{dbuf[3]=0x11;
sound(0x500);
}
else
{dbuf[3]=0x14;
for(i=0;i<3;i++)
{sound(100);
late(100);
}
}
}
}
} |
-
1.jpg
(96.47 KB, 下载次数: 44)
|