void EXTI9_5_IRQHandler(void) { u8 lcd_id[12]; //存放LCD ID字符串 delay_init(); //延时函数初始化 uart_init(9600); //串口初始化为9600 delay_init(); //延时函数初始化 LED_Init(); //初始化与LED连接的硬件接口 LCD_Init(); TIM1_PWM_Init(899,0);//不分频。PWM频率=72000/(899+1)=80Khz sprintf((char*)lcd_id,"LCD ID:%04X",lcddev.id);//将LCD ID打印到lcd_id数组。 delay_ms(10); //消抖 if(KEY0==0) { while(1) { switch(x) { case 0 ![]() case 1 ![]() case 2 ![]() case 3 ![]() case 4 ![]() case 5 ![]() case 6 ![]() case 7 ![]() case 8 ![]() case 9 ![]() case 10:LCD_Clear(LGRAY);break; case 11:LCD_Clear(BROWN);break; } POINT_COLOR=RED; LCD_ShowString(30,40,200,24,24,"mode:1"); x++; if(x==12)x=0; delay_ms(30); if(dir)led0pwmval++; else led0pwmval--; if(led0pwmval>300)dir=0; if(led0pwmval==0)dir=1; TIM_SetCompare1(TIM1,led0pwmval); if(KEY1==0)break; if(KEY1==0) break; } } EXTI_ClearITPendingBit(EXTI_Line5); //清除LINE5上的中断标志位 } |
这个问题有点奇怪,什么叫呼吸灯不起作用啊? 还有,你中断程序里写这么多东西还配有循环? 天啦,你这样写会不会导致很多事情做不了或低优先级中断也没法响应。 建议琢磨下你的代码逻辑。
还有,你代码里的delay()是靠什么实现的?如果是利用到TIMER中断的话,若它的优先级比现在的EXTI外部中断优先级还低,就会发生死等。 总之,你的代码需要好好理理,尽量不要这样组织代码。