#include <REGX51.H>
#include <intrins.H>
#define uchar unsigned char
#define uint unsigned int
uchar code disp_DK[] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf,0xff};
uchar find[] = {11,11,11,11};
void dl(uint xms)
{
uchar i;
while(xms--)
for(i = 0; i < 255; i++);
}
void dir()
{
uchar i, k, aa = 0x01;
for(i = 0;i < 4; i++)
{
P2 = aa;
k = find[ i];
P0 = disp_DK[k];
aa = _crol_(aa,1);
dl(1);
P0 = 0xff;
}
}
uchar keychuli()
{
uchar key;
P1 = 0xff;
key = P1
key = ~key;
key = key&0xff;
return key;
}
uchar keyscan()
{
uchar keys,keyzhi;
keys = keychuli();
if (keys!=0
{ dir();
dir();
keys = keychuli();
if(keys!=0
{
keyzhi = keys;
while(keys!=0
{
dir();
keys = keychuli();
}
}
}
else keyzhi=0;
return keyzhi;
}
void keyaa()
{
find[0]=1;
}
void keybb()
{
find[0]=2;
}
void keycc()
{
find[0]=3;
}
void keydd()
{
find[0]=4;
}
void keyee()
{
find[0]=5;
}
void keyff()
{
find[0]=6;
}
void keygg()
{
find[0]=7;
}
void keyhh()
{
find[0]=8;
}
void dischuli()
{
find[3]=find[2];
find[2]=find[1];
find[1]=find[0];
}
void main(void)
{ uchar keys;
while(1)
{ dir();
keys = keyscan()
if(keys!=0){dischuli();}
switch(keys)
{
case 0x00:break;
case 0x01:keyaa();break;
case 0x02:keybb();break;
case 0x04:keycc();break;
case 0x08:keydd();break;
case 0x10:keyee();break;
case 0x20:keyff();break;
case 0x40:keygg();break;
case 0x80:keyhh();break;
default:break;
}
}
}
|