#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit wale=P1^4;
uchar code b[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x1e};
uint num,temp;
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void main()
{
while(1)
{
P0=b[num];
wale=0;
delay(2);
wale=1;
P3=0xf7;
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
delay(5);
P3=0xf7;
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{ temp=P3;
switch(temp)
{
case 0xe7:num=0;
break;
case 0xd7:num=1;
break;
case 0xb7:num=2;
break;
case 0x77:num=3;
break;
}
while(temp!=0xf0)
{ temp=P3;
temp=temp&0xf0;}
}
}
P3=0xfb;
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
delay(5);
P3=0xfb;
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{ temp=P3;
switch(temp)
{
case 0xeb:num=4;
break;
case 0xdb:num=5;
break;
case 0xbb:num=6;
break;
case 0x7b:num=7;
break;
}
while(temp!=0xf0)
{
temp=P3;
temp=temp&0xf0;
}
}
}
P3=0xfd;
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
delay(5);
P3=0xfd;
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{ temp=P3;
switch(temp)
{
case 0xed:num=8;
break;
case 0xdd:num=9;
break;
case 0xbd:num=10;
break;
case 0x7d:num=11;
break;
}
while(temp!=0xf0)
{
temp=P3;
temp=temp&0xf0;
}
}
}
P3=0xfe;
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
delay(5);
P3=0xfe;
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{ temp=P3;
switch(temp)
{
case 0xee:num=12;
break;
case 0xde:num=13;
break;
case 0xbe:num=14;
break;
case 0x7e:num=15;
break;
}
while(temp!=0xf0)
{
temp=P3;
temp=temp&0xf0;
}
}
}
}
}
#include<reg51.h> // 试试这个
#define uchar unsigned char
uchar temp;
int key1,key,disbuf;// 此表为 LED 的字模 0 1 2 3 4 5 6 7 8 9 a b c d e f
unsigned char code LED7Code[] = {~0x3F,~0x06,~0x9B,~0x8F,~0xA6,~0xAD,~0xBD,~0x07,~0xBF,~0xAF,~0xB7,~0xBC,~0x39,~0x9E,~0xB9,~0xB1};
void delay(uchar z)
{
uchar i,j;
for(i=0;i<120;i++)
for(j=0;j<z;j++);
}
void scan() // 要是按键了,扫描键盘编码值
{
P1=0xF0; // P1 4X4 键盘
delay(1);
temp=P1;
switch(temp)
{
case 0xe0: key1=0;
break;
case 0xd0: key1=1;
break;
case 0xb0: key1=2;
break;
case 0x70: key1=3;
break;
}
P1=0x0f;
delay(1);
temp=P1;
switch(temp)
{
case 0x0E: key=key1+0;
break;
case 0x0D: key=key1+4;
break;
case 0x0B: key=key1+8;
break;
case 0x07: key=key1+12;
break;
default : key=-1;
}
if((key1+1)&&(key+1)) disbuf=key;
}
void ejjc() //判断是否按键
{
P1=0xF0;
if(P1!=0xF0)scan();
}
void main()
{
while(1)
{
ejjc();
P3=LED7Code[disbuf]; // P3 显示 89c2051 仿真
delay(200);
}
}