51单片机如何用一个按键控制一段程序的运行与停止

2026年09月28日 06:18
有2个网友回答
网友(1):

1、创建项目文件。

2、按键:S1=P3^2,点亮: led=P1^5。

3、创建C语言主函数。

4、创建循环效果,检测效果。while(1)    {}。

5、选择输出的效果。

6、当按下一个按键时,关闭灯,整个程序运行,再按一次,程序停止。

网友(2):

如果你需要这颗按键启动/停止一段程序,则按键配置外部中断且拥有最高优先级并打开中断嵌套,其每次按下会对布尔量a取反,然后做判断,如果a为0则令布尔量b为0,否则令b为1的同时启动定时器,定时器中断打开后一旦触发,关闭定时器计数,然后陷入while(b)循环,循环内容就是任务程序,即按钮令a=1的按下行为会触发定时器中断任务的while(b)内循环,再次按下则while(b)为假,则退出循环后退出定时器中断。再按下按钮后再次打开……
扫描模式的话,main函数有个while(1),while(1)内有个while(b),按键启动外部中断函数,函数内容是对b取反,实现在while(1)内部,是否进入while(b)实现启停。则无需定时器任务参与。
如果你需要这颗按键启动程序后的按下行为只是暂停/继续程序,则按键配置外部中断且拥有最高优先级并打开中断嵌套,初始布尔量a=0,按键按下触发中断后,如果a为0则取反,并打开定时器中断,再令b=0,否则(即a为1时)令b取反,定时器中断打开后一旦触发,关闭定时器计数,然后陷入while(1)死循环,并在while(1)内增加多处while(b)空循环,则只有第一次按下会启动定时器中断任务并陷入中断任务的while(1)内,后续按钮只改变b的值,让任务向下就近寻找while(b)进入空循环(表象是程序被暂停)或从当前循环退出(表象是程序继续运行)。
扫描模式则main函数有个while(1),while(1)内有个while(a),while(a)内为任务和多个while(b),a初值为0,b初值为1,按钮触发外部中断令a=1且令b取反(此时上电则陷入white(1)内的while(a)外,一旦按下则永远进入while(a),此后按钮只会决定是否陷入内部的while(b)空循环而暂停)。此时无需定时器参与。