这个有什么思绪吗?单片机的一个小问题

主程序执行 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的方法延时,真正做产品不能这样写,程序会卡死的。