主程序执行 LED0()每 1S 闪烁一次,当有按键 KEY 按下时,BEEP 响起,同时 LED0 以 0.1S 闪烁,请编写主程序与中断服务子程序。
int main(void)
{
}
//外部中断服务程序
void EXTI0_IRQHandler(void)
{
}
定义一个全局标志,表示当前是以1s的频率还是0.1s的频率闪烁,默认状态是以1s的频率闪烁。主程序里的主循环,就以这个标志作为控制参数进行闪烁显示。通过中断或查询的方式检查KEY是否按下,如果按下,就改变这个全局标记的值。这样,主循环就会改变闪烁频率。需要注意的是,如果以中断方式来确定标志,这个全局标志定义的时候一定要加上volatile的标记。
u16 Key_Flag;
int main(void)
{
........
while(1)
{
//因为调用中断,按键一直按下,才能保证Key_Flag ==1
if(Key_Flag ==1)
{
Key_Flag =0;
BEEP();
LED =!LED;
delay_ms(100);
}
else
{
LED =!LED;
delay_s(1);
}
}
}
//外部中断服务程序
void EXTI0_IRQHandler(void)
{
Key_Flag =1;
}
你可以参考我的博客,有LED灯和蜂鸣器的程序,都是量产产品的代码。初学者写程序都是用delay的方法延时,真正做产品不能这样写,程序会卡死的。