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

2024-11-27 14:34:35
推荐回答(5个)
回答1:

1、创建项目文件。

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

3、创建C语言主函数。

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

5、选择输出的效果。

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

回答2:

你这段程序,如果按下按键,则程序会进入 while(1) 里面一直运行,不会跳出,所以除非断电,无论按什么按键都不会影响灯闪程序。

如果要求K1=0时灯闪烁,K1=1时灯灭掉,可以在DELAY_MS程序之后改为以下内容:

#define light 1
#define black 2
void main (void)
{ //主程序

unsigned char key=0;
while(1)
{
if(K1==0)//假设按键低电平有效
{
DELAY_MS(5);
if(K1==0) key=lignt;
}
else key=black;

if(key==light)
{
LED1=1;
LED3=1;
DELAY_MS(10);

LED1=0;
LED3=0;
DELAY_MS(20);

LED1=1;
LED3=1;
DELAY_MS(10);

LED1=0;
LED3=0;
DELAY_MS(20);

LED1=1;
LED3=1;
DELAY_MS(10);

LED1=0;
LED3=0;
DELAY_MS(20);

LED1=1;
LED3=1;
DELAY_MS(10);

LED1=0;
LED3=0;
DELAY_MS(100);
}
else
{
/* 不知你灯是怎么接的,此处假设LED1=0时灯灭 */
LED1=0;
LED3=0;
}
}
}

回答3:

你的程序有问题,当按下K1后程序就进入死循环了。所以无法停止。
你需要把判断条件放入while循环里面。
以下是修改过的程序。希望能帮到你,望采纳

#include //通用89C51头文件
sbit LED1 = P1^0; //定义闪烁LED
sbit LED2 = P1^1; //定义闪烁LED
sbit LED3 = P1^2; //定义闪烁LED
sbit LED4 = P1^3; //定义闪烁LED
sbit K1 = P3^2;
void DELAY_MS (unsigned int a)
{
unsigned int i;
while( --a != 0){
for(i = 0; i < 600; i++);
}
}

void main ()
{ while(1)
{
if(K1==0)//假设按键低电平有效
{DELAY_MS(5);
if(K1==0);
{
LED1=1;
LED3=1;
DELAY_MS(10);
LED1=0;
LED3=0;
DELAY_MS(20);
LED1=1;
LED3=1;
DELAY_MS(10);
LED1=0;
LED3=0;
DELAY_MS(20);
LED1=1;
LED3=1;
DELAY_MS(10);
LED1=0;
LED3=0;
DELAY_MS(20);
LED1=1;
LED3=1;
DELAY_MS(10);
LED1=0;
LED3=0;
DELAY_MS(100);
}
}
}
}

回答4:

楼上方法有误,假如程序段含有较长延时的 程序
比如延时 一小时 那岂不是 按住一小时测能检测得到?
应该利用 外部中断 按下开关 进入中断给予 停止条件状态
使其复位 然后判断状态 是否运行 这样才能保证实时性。。,,

回答5:

很简单

if(key==1)
{
//程序段1
}
else
{
//程序段2
}