同一个按键控制液晶显示不同内容
我用定时器写的扫描,每个10ms扫描一次按键,我在以下里面计数,发现计数自动增加,不知该怎么处理?求高手教以下如何实现按键计数,
void TIM2_IRQHandler(void)
{
u8 temp;
if ( TIM_GetITStatus(TIM2 , TIM_IT_Update) != RESET )
{
if(GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_13) == Bit_RESET){
temp = 0;
}
else{
temp = 1;
}
KeyPrev = KeyCurrent;
KeyCurrent = temp;
if((KeyPrev == 0) && (KeyCurrent == 0)){
KeyStatus = 1;
KeyCount++;
}
else{
KeyStatus = 0;
}
TIM_ClearITPendingBit(TIM2 , TIM_FLAG_Update);
}
}
在main文件这样写
while(1)
{
if ( KeyStatus == 0 )
{ switch(KeyCount)
{ case 0:function1();
break;
case 1:function2();
break;
default: function3();
break;
}
}
M3的arm?
KeyPrev = KeyCurrent;
KeyCurrent = temp;
if((KeyPrev == 0) && (KeyCurrent == 0)){
KeyStatus = 1;
KeyCount++;
}
else{
KeyStatus = 0;
}
本意做防抖吧。
但你忽略一个问题啊,按键释放!
按键防抖,按键释放;之后N进制计数,根据计数情况,显示N个不同内容
路过。
谢谢,F103ze,帮忙看看我该怎么写按键弹起,进而进行判断?给个思路,新手求指导!
呵呵,我也是新手。你这个程序,细看好像很多地方有点没看懂。我试试吧。
Bit_RESET这里按字面理解,是没有按键发生。就是说。temp = 1为按键发生。
void TIM2_IRQHandler(void)
{
u8 temp;
if ( TIM_GetITStatus(TIM2 , TIM_IT_Update) != RESET )
{
if(GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_13) == Bit_RESET){
temp = 0;
}
else{
temp = 1;
}
KeyPrev = KeyCurrent;
KeyCurrent = temp;
if((KeyPrev == 1) && (KeyCurrent == 1)){ if(KeyStatus == 0)
{
KeyStatus = 1;
KeyCount++; 按键计数
}
}
else{
KeyStatus = 0;
}
TIM_ClearITPendingBit(TIM2 , TIM_FLAG_Update);
}
}
在main文件这样写
while(1)
{
if ( KeyStatus == 1)
{ switch(KeyCount)
{ case 0:function1();
break;
case 1:function2();
break;
default: function3();
break;
}while(GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_13) == Bit_RESET);
KeyStatus = 0;
}
}
哦,补充一句,也不完全是按键等待哈。还有中断中的逻辑也有问题。
哦,谢谢, 我编进程序试一下
[size=14.2857151031494px] if((KeyPrev == 1) && (KeyCurrent == 1)){ if(KeyStatus == 0)
[size=14.2857151031494px]
[size=14.2857151031494px] 这个地方怎么写[size=14.2857151031494px] if(KeyStatus == 0),在这之前[size=14.2857151031494px]KeyStatus状态没读?
按键防抖,按键释放;之后N进制计数,根据计数情况,显示N个不同内容
按键防抖,按键释放;之后N进制计数,根据计数情况,显示N个不同内容
按键防抖,按键释放;之后N进制计数,根据计数情况,显示N个不同内容