|
本帖最后由 ZhangFei1990//. 于 2015-8-25 20:29 编辑
uchar read_key(void)
{
static uchar key_state=0;
uchar key_press,key_return=0;
key_press = key_input;
switch (key_state)
{
case key_state0:
if(key_press!=0x13)
{
key_state = key_state1;
}
break;
case key_state1:
if(key_press!=0x13)
{
key_state = key_state2;
switch(key_press) //确定按键已经按下的信号
{
case 0x03:
key_return=3; break;//key3
case 0x11:
key_return=2; break;//key2
case 0x12:
key_return=1; break;//key1
}
}
else key_state = key_state0;
break;
case key_state2:
if(key_press=0x13)
{
key_state = key_state0;
}
else key_state=key_state2;
break;
}
return key_return;
}
void key_control(uchar key_num)
{
uchar camera_flag=0;
switch(key_num)
{
case 1: camera_flag=1;PORTB.1=~PORTB.1;PORTB.2=~PORTB.2;break; //LED取反
case 2:PORTB.1=~PORTB.1;break;
case 3:PORTB.2=~PORTB.2;break;
}
}
void main(void)
{
DDRB=0xff;
PORTB=0xff;
Init();
while (1);
{
if(timer_10ms_ok)
{
timer_10ms_ok=0;
key_control(read_key());
}
}
}
程序的本意是按键按一次LED反转一次,,但是实际情况为什么是按键按一次LED连续在闪烁呢? |
阿莫论坛20周年了!感谢大家的支持与爱护!!
知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)
|