#include<reg51.h>
unsigned char code LED[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
sbit H1=P1^0;
sbit H2=P1^1;
sbit H3=P1^2;
sbit H4=P1^3;
sbit L1=P1^4;
sbit L2=P1^5;
sbit L3=P1^6;
sbit L4=P1^7;
void Delay (int c)
{
int a,b;
for (; c>0; c--)
{
for (b=199;b>0;b--)
{
for(a=1;a>0;a--);
}
}
}
void main(void)
{
unsigned char tmp_1,tmp_2,key;
while(1)
{ P1=0xff;
if(P1!=0xff)
{Delay(7);
if(P1!=0xff)
{
tmp_1=P1&0x0f;//检测行
tmp_2=P1&0xf0;//检测列
key=tmp_1|tmp_2;//检测到按键位置
}
Delay(5);
switch(key)
{
case(0xee):P0=~LED[0];Delay(10);break;//数码管共阳极
case(0xde):P0=~LED[1];Delay(10);break;
case(0xbe):P0=~LED[2];Delay(10);break;
case(0x7e):P0=~LED[3];Delay(10);break;
case(0xed):P0=~LED[4];Delay(10);break;
case(0xdd):P0=~LED[5];Delay(10);break;
case(0xbd):P0=~LED[6];Delay(10);break;
case(0x7d):P0=~LED[7];Delay(10);break;
case(0xeb):P0=~LED[8];Delay(10);break;
case(0xdb):P0=~LED[9];Delay(10);break;
case(0xbb):P0=~LED[10];Delay(10);break;
case(0x7b):P0=~LED[11];Delay(10);break;
case(0xe7):P0=~LED[12];Delay(10);break;
case(0xd7):P0=~LED[13];Delay(10);break;
case(0xb7):P0=~LED[14];Delay(10);break;
case(0x77):P0=~LED[15];Delay(10);break;
}
}
}
}
只有第四列有显示('3' '7' 'b' 'f')新手...想好久不知道为什么
|