#include<reg52.h>
typedef unsigned char u8
;
typedef unsigned int u16
;
sbit KZA
=P2
^2;
sbit KZB
=P2
^3;
sbit KZC
=P2
^4;
#define GPIO_key P1
#define GPIO_DIG P0
u8 KeyValue
;
u8 code shumag
[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,
0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
void delay(u16 i
)
{
while(i
--);
}
void KeyDown()
{
char a
=0;
GPIO_key
=0x0f;
if(GPIO_key
!=0x0f)
{
delay(1000);
if(GPIO_key
!=0x0f)
{
GPIO_key
=0x0f;
switch(GPIO_key
)
{
case 0x07:KeyValue
=0;break;
case 0x0b:KeyValue
=1;break;
case 0x0d:KeyValue
=2;break;
case 0x0e:KeyValue
=3;break;
}
GPIO_key
=0xf0;
switch(GPIO_key
)
{
case 0x70:KeyValue
=KeyValue
;break;
case 0xb0:KeyValue
+=4;break;
case 0xd0:KeyValue
+=8;break;
case 0xe0:KeyValue
+=12;break;
}
}
}
while((a
<50)&&(GPIO_key
!=0xf0))
{
delay(100);
a
++;
}
}
void xianshi()
{
u8 i
;
for(i
=0;i
<8;i
++)
{
switch(i
)
{
case 0:
KZA
=0;KZB
=0;KZC
=0;break;
case 1:
KZA
=1;KZB
=0;KZC
=0;break;
case 2:
KZA
=0;KZB
=1;KZC
=0;break;
case 3:
KZA
=1;KZB
=1;KZC
=0;break;
case 4:
KZA
=0;KZB
=0;KZC
=1;break;
case 5:
KZA
=1;KZB
=0;KZC
=1;break;
case 6:
KZA
=0;KZB
=1;KZC
=1;break;
case 7:
KZA
=1;KZB
=1;KZC
=1;break;
}
GPIO_DIG
=~shumag
[KeyValue
];
delay(1000);
P0
=0x00;
}
}
void main()
{
while(1)
{
KeyDown();
xianshi();
}
}
整体实现还行,数码管闪烁严重,不能一直显示静态画面
转载请注明原文地址: https://mac.8miu.com/read-493487.html