|
为什么进入去抖检测的while时会死循环在里面,去掉那个去抖while就没事了,求大神指导
#include<iom16v.h>
#include<macros.h>
#define uint unsigned int
#define uchar unsigned char
uint qian,bai,shi,ge;
uchar temp;
#pragma data:code
const uchar table[10]={
0xc0,0xf9,0xa4,0xb0,0x99,
0x92,0x82,0xf8,0x80,0x90};
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=1141;y>0;y--);
}
void display(uint temp)
{
qian=temp/1000;
bai=temp/100%10;
shi=temp/10%10;
ge=temp%10;
PORTD=0x10;
PORTB=table[qian];
delay(1);
PORTD=0x20;
PORTB=table[bai];
delay(1);
PORTD=0x40;
PORTB=table[shi];
delay(1);
PORTD=0x80;
PORTB=table[ge];
delay(1);
}
uchar key_press()
{
uchar j;
DDRD=0X0F;
PORTD=0X0F;
DDRD=0XF0;
j=PIND;
j=j&0x0f;
if(j==0x0f)
{
return 0;
}
else
{
return 1;
}
}
uchar key_scan()
{
uchar key;
delay(10);
if(key_press())
{
key=PIND;
key&=0x0f;
switch(key)
{
case 0x0e:key=1;
break;
case 0x0d:key=2;
break;
case 0x0b:key=3;
break;
case 0x07:key=4;
break;
default:
key=0;
}
while(key_press); //去抖
}
else
{
key=0;
}
return key;
}
void main()
{
uchar i,l;
DDRD=0X0F;
DDRB=0XFF;
while(1)
{
i=key_press();
if(i)
{
temp= key_scan();
display(temp);
}
}
} |
阿莫论坛20周年了!感谢大家的支持与爱护!!
知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)
|