#include"reg51.h"
unsigned char Led[8]={1,2,3,4,5,6,7,8};
unsigned char KeyV=0;
unsigned char code Key[16]=
{ 0xeb,0x77,0x7b,0x7d,0xb7,0xbb,0xbd,0xd7,0xdb,0xdd,0x7e,0xbe,0xde,0xee,0xed,0xe7};
void delay()
{
unsigned char t;
t=200;
while(t--);
}
void dly()
{
unsigned int q;
q=2000;
while(q--);
}
void display()
{
unsigned char i,P1Buf;
for(i=0;i<=7;i++)
{
P1Buf=i*2;
P1Buf=P1Buf<<4;
P1Buf=P1Buf+Led[i];
P1=P1Buf;
delay();
}
}
/*0为放开,1为未放开*/
unsigned char up()
{
unsigned char P0Buf;
P0=0xf0;
delay();
P0Buf=P0;
return(P0Buf-0xf0);
}
void scan()
{
unsigned char P0Buf,P0Buf2,i;
P0=0xf0;
P0Buf=P0;
if(P0Buf!=0xf0)
{
dly();
P0=0xf0;
P0Buf=P0;
if(P0Buf!=0xf0)
{
P0=0x0f;
P0Buf2=P0;
P0Buf=P0Buf+P0Buf2;
KeyV=P0Buf;
while(up())
{display();}; /*判断按键放开*/
for(i=0;i<=15;i++)
{
if(KeyV==Key[i])
{
KeyV=i;
break;
}
}
for(i=7;i>0;i--)
{
Led[i]=Led[i-1];
}
Led[0]=KeyV;
}
}
}
void main()
{
dly();
while(1)
{
scan();
display();
}
}
展开阅读全文