【嵌入式系统实验】4 外部中断实验

1 开发环境

  • STM32F407ZGT6
  • Keil uVision 5

2 实验内容

  • 依次按下 KEY_UP → KEY2 → KEY2 → KEY2 → KEY1 → KEY1 → KEY0 后,LED0的状态改。
  • 如果没有按这个顺序,则LED0的状态不发生改变。
    比如按下的状态是:
    1、KEY_UP → KEY1 → KEY2 → KEY0 → KEY1
    2、KEY_UP → KEY2 → KEY2 → KEY1 → KEY0
    则LED0不切换

3 实验代码

[exti.c]

int isBling=0;//用于判断LED0是否到了需要改变状态的时候

//外部中断0服务程序
void EXTI0_IRQHandler(void)
{
    
    
	delay_ms(10);	//消抖
	if(WK_UP==1)	 
	{
    
    
		if(isBling==0)
			isBling++;
		else
			isBling=0;
	}		 
	 EXTI_ClearITPendingBit(EXTI_Line0); //清除LINE0上的中断标志位 
}	
//外部中断2服务程序
void EXTI2_IRQHandler(void)
{
    
    
	delay_ms(10);	//消抖
	if(KEY2==0)	  
	{
    
    				 
		if(isBling<5)
			isBling++;
		else
			isBling=0;
	}		 
	 EXTI_ClearITPendingBit(EXTI_Line2);//清除LINE2上的中断标志位 
}
//外部中断3服务程序
void EXTI3_IRQHandler(void)
{
    
    
	delay_ms(10);	//消抖
	if(KEY1==0)	 
	{
    
    
		if(isBling<7)
			isBling++;
		else
			isBling=0;
	}		 
	 EXTI_ClearITPendingBit(EXTI_Line3);  //清除LINE3上的中断标志位  
}
//外部中断4服务程序
void EXTI4_IRQHandler(void)
{
    
    
	delay_ms(10);	//消抖
	if(KEY0==0)	 
	{
    
    				 
		if(isBling==6)
			LED0=!LED0;
		else
			isBling=0;
	}		 
	 EXTI_ClearITPendingBit(EXTI_Line4);//清除LINE4上的中断标志位  
}

4 注意事项

  • 此次实验设计比较讨巧,所以普适性差
  • 可以考虑利用数组进行实验

猜你喜欢

转载自blog.csdn.net/qq_44714521/article/details/108704493