#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分钟,之后恢复正常的状态,有个大腿给抱抱吗?
给你个思路:看你按键用了外部中断 先不要管定时器,先调通按键按一下,D0 D1闪一下,调通之后先不要管按键了,开始调定时器,先试着把定时器调成1分钟D0 D1闪一下,这样子基本上你的外部中断和定时器中断调完了,接着合起来一起调试也很简单了,最好不要用延时函数
一周热门 更多>