我把跑马灯放在主函数里 如下:while(1){ key=KEY_Scan(0);
if(key)
{
switch(key)
{
case 2:
while(1){
LED2=1;
delay_ms(500);
LED2=0;
delay_ms(500);
LED3=1;
delay_ms(500);
LED3=0;
delay_ms(500);
LED7=1;
delay_ms(500);
LED7=0;
delay_ms(500);
LED13=1;
delay_ms(500);
LED13=0;}
然后把一盏单独亮的灯放在中断程序里:如下:
void EXTI2_IRQHandler(void)
{
delay_ms(10);
if(KEY2==0)
{
LED13=0;
LED2=1;
LED3=0;
LED7=0;
}
EXTI_ClearITPendingBit(EXTI_Line2);} 我想当我按下键2的时候 跑马灯立刻停止 然后执行LED2亮着 (而我现在的程序是跑马灯在运行的时候按下键2并没有停止,一直在运行)这该怎么办
求大神回复!!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
这效果不是我想要的哎
主函数:u8 flag;
int main(void)
{
u8 Tx_Buf[8];
u8 t;
u8 len;
u16 times=0;
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//éèÖÃÏμí3ÖD¶ÏóÅÏ輶·Ö×é2
delay_init(168); //3õê¼»ˉÑóê±oˉêy
uart_init(115200); //′®¿ú3õê¼»ˉ
LED_Init(); //3õê¼»ˉLED¶Ë¿ú
BEEP_Init(); //3õê¼»ˉ·äÃùÆ÷¶Ë¿ú
EXTIX_Init(); //3õê¼»ˉía2¿ÖD¶Ïêäèë
KEY_Init();
while(1)
{
if(flag ==1)
while(1){
LED2=1;delay_ms(500);
LED2=0;delay_ms(500);
LED3=1;delay_ms(500);
LED3=0;delay_ms(500);
LED7=1;delay_ms(500);
LED7=0; delay_ms(500);
LED13=1; delay_ms(500);
LED13=0;
}
else if(flag==2)
{
LED3=1;
LED7=0;
LED13=0;
LED2=0;}}}
串口中断函数:
extern u8 flag;
void USART1_IRQHandler(void)
{
u8 Res;
#if SYSTEM_SUPPORT_OS
OSIntEnter();
#endif
if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)
{
Res =USART_ReceiveData(USART1);//(USART1->DR);
if((USART_RX_STA&0x8000)==0)
{if(Res==1) flag =1;
else if (Res==2) flag =2;
else flag =0;
return ;
}
}
#if SYSTEM_SUPPORT_OS
OSIntExit();
#endif
}
#endif
您好 ,我问一下 ,我这是想用串口中断 发送字符1 然后跑马灯 之后就不能发送字符2了 一直在跑马灯while死循环里了 这起不到我中断的效果呀
一周热门 更多>