中级会员
 
- 积分
- 242
- 金钱
- 242
- 注册时间
- 2013-1-5
- 在线时间
- 4 小时
|
我程序里面加入TIM2TIM2_IRQHandler(void)
普通定时器中断(大约20ms中断一次检查按键),现在LCD1602液晶显示错误!! 取消中断就正常啦!请问能不能暂停中断在液晶显示的时候!!如果能 怎么做? 谢谢 新人帖
void TIM2_IRQHandler(void)
{
TIM_ClearFlag(TIM2, TIM_FLAG_Update);
Key_num=read_key();
}
u8 read_key(void)
{
static u8 KeyNum=0;
static u8 key_state1=0;
static u8 key_state2=0;
static u8 key_state3=0;
u8 key_press,key_return=0;
key_press=key_input;
GetADCSConvertedValues();
switch(key_state1)
{
case key_state_0:
if(!key_press) key_state1=key_state_1;
break;
case key_state_1:
if(!key_press)
{
key_state1=key_state_2;
}
else
key_state1=key_state_0;
break;
case key_state_2:
KeyNum++;
if (key_press) //key_state1=key_state_0;
if (KeyNum>20) {key_return=12;KeyNum=0;key_state1=key_state_0;}
else {key_return=11;KeyNum=0;key_state1=key_state_0;}
break;
}
switch(key_state2)
{
case key_state_0:
if(((float)ADCConvertedValue[2]/4096*3.3) > 1.5) key_state2=key_state_1;
break;
case key_state_1:
if(((float)ADCConvertedValue[2]/4096*3.3) > 1.5)
{
key_return=2;
key_state2=key_state_2;
}
else
key_state2=key_state_0;
break;
case key_state_2:
if (((float)ADCConvertedValue[2]/4096*3.3) < 1.5) key_state2=key_state_0;
break;
}
switch(key_state3)
{
case key_state_0:
if(((float)ADCConvertedValue[2]/4096*3.3) > 3) key_state3=key_state_1;
break;
case key_state_1:
if(((float)ADCConvertedValue[2]/4096*3.3) > 3)
{
key_return=3;
key_state3=key_state_2;
}
else
key_state3=key_state_0;
break;
case key_state_2:
if (((float)ADCConvertedValue[2]/4096*3.3) < 3) key_state3=key_state_0;
break;
}
return key_return;
|
|