OpenEdv-开源电子网

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

新人求助按键和定时器

[复制链接]

16

主题

51

帖子

0

精华

初级会员

Rank: 2

积分
129
金钱
129
注册时间
2017-2-13
在线时间
23 小时
发表于 2017-3-9 21:13:50 | 显示全部楼层 |阅读模式
#include "sys.h"
#include "led.h"
#include "timer.h"
#include "key.h"
#include "delay.h"

//extern u8 flag2;

int main(void)
{
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置中断优先级分组为第二组
        KEY_Init();
  TIM_Init(7199,9999);
        led_Init();
        delay_init();//函数的声明
        while(1)
        {               
                D0=!D0;
                delay_ms(500);
                D1=!D1;//D0.D1翻转,依次点亮
                delay_ms(500);
                 if(flag==1)         //按键按下的标志位
                        TIM_Cmd(TIM3,ENABLE);//由按键控制定时器中断使能               
                        if(a>3)
                        {
                                flag=0;
                                TIM_Cmd(TIM3,DISABLE);
                        }
        }
       
       
}

void TIM3_IRQHandler(void)//按键中断服务函数
        {
                if(TIM_GetITStatus(TIM3,TIM_IT_Update))
                {
                           a++;
                          D0=1;
                                D1=1;
                                if(a==2)
                                {
                                D0=0;
                                D1=0;
                                }
                               
                        }
                       
                               
                       
       
                        TIM_ClearITPendingBit(TIM3,TIM_IT_Update);//清除中断标志位
                }

       
        void EXTI9_5_IRQHandler(void)    //按键中断服务函数
         {
                if(EXTI_GetITStatus(EXTI_Line5))
       
                        delay_ms(5);//消抖
                        if(KEY0==0)
            flag=1;
                       
                        EXTI_ClearITPendingBit(EXTI_Line5);        //清除中断标志位
                }
       



我想用这个程序完成开始两个灯依次点亮,当按键按下的时候灯灭两分钟,然后灯变亮1分钟,之后恢复正常的状态,有个大腿给抱抱吗?





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

使用道具 举报

16

主题

51

帖子

0

精华

初级会员

Rank: 2

积分
129
金钱
129
注册时间
2017-2-13
在线时间
23 小时
 楼主| 发表于 2017-3-9 21:15:19 | 显示全部楼层
调了3天了,就是出不来,是个新人,不太会写程序,分析了一下知道程序会在while里持续循环,可是不知道该怎么办?
回复 支持 反对

使用道具 举报

9

主题

209

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1358
金钱
1358
注册时间
2015-12-19
在线时间
108 小时
发表于 2017-3-9 21:42:21 | 显示全部楼层
萌萌哒的爱学者 发表于 2017-3-9 21:15
调了3天了,就是出不来,是个新人,不太会写程序,分析了一下知道程序会在while里持续循环,可是不知道该怎 ...

妹子吗
求指导!!!兄弟
回复 支持 反对

使用道具 举报

9

主题

209

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1358
金钱
1358
注册时间
2015-12-19
在线时间
108 小时
发表于 2017-3-9 21:52:57 | 显示全部楼层

本帖最后由 yangkefeng 于 2017-3-9 21:54 编辑

给你个思路:看你按键用了外部中断 先不要管定时器,先调通按键按一下,D0 D1闪一下,调通之后先不要管按键了,开始调定时器,先试着把定时器调成1分钟D0 D1闪一下,这样子基本上你的外部中断和定时器中断调完了,接着合起来一起调试也很简单了,最好不要用延时函数
回复 支持 反对

使用道具 举报

5

主题

47

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
227
金钱
227
注册时间
2016-7-14
在线时间
30 小时
发表于 2017-3-10 13:43:29 | 显示全部楼层
你的while循环里面为什么没有检测按键,没有检测按键那样能进入外部中断嘛
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-13 17:35

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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