本帖最后由 皮小千 于 2014-9-21 17:03 编辑
【新手请教,勿喷】
51单片机,矩阵键盘静态数码管显示,一直停在0上,按键不变化,不知道哪里错了啊,求指导
#include
#define KEY P1
#define LED P0
unsigned char code CODE[17]={
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
unsigned char temp,mid,i,a,b,c,d,x,num;
void display(unsigned char x);
void delay();
void key(unsigned char a,unsigned char b,unsigned char c,unsigned char d);
void main()
{
LED=~CODE[0];
while(1)
{
KEY=0x0f;
while(KEY!=0x0f)
{
delay();
while(KEY!=0x0f)
{
switch(KEY)
{
case 0x0e:key(1,2,3,4);break;
case 0x0d:key(5,6,7,8);break;
case 0x0b:key(9,10,11,12);break;
case 0x07:key(13,14,15,16);break;
}
}
}
}
}
void key(unsigned char a,unsigned char b,unsigned char c,unsigned char d)
{
while(KEY!=0xf0)
{
switch(mid)
{
case 0xe0:display(a);break;
case 0xd0:display(b);break;
case 0xb0:display(c);break;
case 0x70:display(d);break;
}
}
}
void display(unsigned char x)
{
num=x;
LED=~CODE[num];
while(KEY!=0xff);
delay();
while(KEY!=0xff);
}
void delay()
{
TMOD=0x01;
TH0=(65536-10000)/256;
TL0=(65536-10000)%256;
EA=1;
ET0=1;
TR0=1;
}
void zhongduan() interrupt 1
{
TH0=(65536-10000)/256;
TL0=(65536-10000)%256;
}
|