mega16按键去抖
为什么进入去抖检测的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={
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--);
}
voiddisplay(uint temp)
{
qian=temp/1000;
bai=temp/100%10;
shi=temp/10%10;
ge=temp%10;
PORTD=0x10;
PORTB=table;
delay(1);
PORTD=0x20;
PORTB=table;
delay(1);
PORTD=0x40;
PORTB=table;
delay(1);
PORTD=0x80;
PORTB=table;
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);
}
}
} 去看看马老师,状态机按键的帖子吧... key_press是变量还是函数? ztrx 发表于 2013-3-29 08:31 static/image/common/back.gif
key_press是变量还是函数?
好像是函数 ztrx 发表于 2013-3-29 08:31 static/image/common/back.gif
key_press是变量还是函数?
带返回值的函数,返回的是0或者1,之前用跟51一样的去抖方式也是死循环 ztrx 发表于 2013-3-29 08:31 static/image/common/back.gif
key_press是变量还是函数?
在哪里啊 你怎么当变量用 本帖最后由 lovepig200 于 2013-3-29 20:19 编辑
while(key_press); //去抖key_press()括弧丢了。
也不用这么麻烦 先把引脚设置为输入模式,类似这样定义一下#define key PIND & (1 << PD6) //读电平
这样就可以直接读D6脚了,不知道你用的哪个脚。
页:
[1]