OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5680|回复: 2

定时器中断判断按键状态问题

[复制链接]

3

主题

5

帖子

0

精华

新手上路

积分
39
金钱
39
注册时间
2014-11-2
在线时间
0 小时
发表于 2015-12-20 12:57:23 | 显示全部楼层 |阅读模式
5金钱
新手求教(中断用的是延时,高手勿喷)
在学习定时器中断的时候想写按键扫描,WK_UP按下控制BEEP响,按下KEY0,LED1状态翻转,按下LED0状态翻转
中断服务函数如下,现在问题是KEY0和KEY1按下正常,当按下WK_UP时候蜂鸣器间断响,松开WK_UP之后KEY0和KEY1
都不起作用了,主函数写的是串口不间发送t++,j接上串口之后,发现按下WK_UP之后,串口停止发送了,
只有在WKW_UP按下期间才能发送数据,新手不懂的太多
求教大家,多谢了
void TIM1_UP_TIM10_IRQHandler(void)
{          
if(TIM1->SR&0X0001)//溢出中断
{

if(WK_UP==1)
{
delay_ms(30);
{
if(WK_UP==1) 
BEEP=!BEEP; 
while(!WK_UP); 

}
}

else if(KEY0==0)
{
delay_ms(30);
{
if(KEY0==0) 
LED1=!LED1
while(!KEY0);
}
}
else if(KEY1==0)
{
delay_ms(30);
{
if(KEY1==0)
LED0=!LED0; 
while(!KEY1);
}
}


TIM1->SR&=~(1<<0);//清除中断标志位    
}

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

13

主题

611

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1929
金钱
1929
注册时间
2014-10-6
在线时间
625 小时
发表于 2015-12-20 13:25:15 | 显示全部楼层
中断中做的事尽量少点,当你WK_UP按下不松程序死在while(!WK_UP);这里,所以串口没有输出了,松开WK_UP时,程序只执行
if(WK_UP==1)
    {
       delay_ms(30);
       {
       if(WK_UP==1) 
       BEEP=!BEEP; 
       while(!WK_UP); 
       }
    }
else if 后的KEY0和KEY1的扫描没有执行,所以松开后KEY0,KEY1就不起作用了,


多说一句,要加强C的学习,你delay_ms(30);下面的为什么加{}?
回复

使用道具 举报

3

主题

5

帖子

0

精华

新手上路

积分
39
金钱
39
注册时间
2014-11-2
在线时间
0 小时
 楼主| 发表于 2015-12-20 14:03:52 | 显示全部楼层
嗯多谢,{}是之前改代码改得不成样了,现在代码成了这样void TIM1_UP_TIM10_IRQHandler(void)
{              
if(TIM1->SR&0X0001)//溢出中断
{

if(WK_UP==1)
{
delay_ms(30);
if(WK_UP==1)
{
BEEP=!BEEP;
while(!WK_UP);
}

}

else if(KEY0==0)
{
delay_ms(30);
if(KEY0==0)
{
LED1=!LED1;
while(!KEY0);
}
}
 else if(KEY1==0)
{
delay_ms(30);
if(KEY1==0)
{
LED0=!LED0;
while(!KEY1);
}
}


}

TIM1->SR&=~(1<<0);//清除中断标志位      
}
问题是蜂鸣器是间断响,其他按键按下led不闪烁,把原来控制led的按键用来控制蜂鸣器,蜂鸣器不间断响了,原先用来控制蜂鸣器的WK_UP控制LED则会闪烁beep接的是PA1
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-25 21:26

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表