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

供稿:hz-xin.com     日期:2025-01-14
单片机怎么用一个按钮控制步进电机启动和停止?

单片机用一个按钮控制步进电机启动和停止,这很容易的,识别按键按下的程序会写吧,那定义一个位变量,即标志位,如flag,上电后flag=0,为电机停止状态。每按一次按键,flag=!flag,即取反一次,然后再判断标志位,flag=1,则启动电机。flag=0,则停止电机。

首先,要知道控制led的电路,知道控制电平的管脚,同理也要搞清楚开关的电路。
其次,设置开关的状态控制电平的高低,从而控制led灯的亮灭。
最后,具体的执行办法,要看你是什么型号的51单片机,要查书本,或者网上查。

1、创建项目文件。

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

3、创建C语言主函数。

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

5、选择输出的效果。

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



你这段程序,如果按下按键,则程序会进入 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;
}
}
}

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

#include <REG51.h> //通用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);
}
}
}
}

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

很简单

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

51单片机如何用一个按键控制一段程序的运行与停止
在51单片机编程中,通过一个按键实现程序的运行与停止功能,操作步骤如下:首先,你需要为你的项目创建一个新的文件,这是基础步骤,它将承载你的代码逻辑(1、在51单片机项目中,新建一个文件用于存放程序代码。)。接着,配置你的按键和LED。假设你选择的按键S1连接到P3的第2引脚,当按键按下时,可...

51单片机如何用一个按键控制一段程序的运行与停止
1、创建项目文件。2、按键:S1=P3^2,点亮: led=P1^5。3、创建C语言主函数。4、创建循环效果,检测效果。while(1) {}。5、选择输出的效果。6、当按下一个按键时,关闭灯,整个程序运行,再按一次,程序停止。

需要一个单片机汇编语言程序:1个按键控制1个灯,此键每快速地按2下,灯...
程序的入口在0000H地址,程序开始时跳转到START标签处。在START标签处,程序首先检测KEY引脚的状态,如果检测到按键按下,则跳转到DELAY10MS子程序,通过延时10毫秒确认按键的释放状态。如果按键没有释放,程序将继续在START标签处等待。如果检测到按键释放,程序将跳转至DAN_JI标签,进行一次延时10毫秒的处理...

51单片机如何用一个按键控制一段程序的运行与停止
{ 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=...

你好,我想用单片机一个按键控制三种模式,第一种是半小时定时开关,第二...
需要注意的是,在按键处理阶段,需要确保按键操作被正确识别,并根据不同的key值调整状态变量ON_OFF_T,从而实现所需的不同定时模式。这种设计方法简单有效,适用于需要通过单片机控制不同定时模式的应用场景。通过合理设置定时器中断频率和计数次数,可以轻松实现半小时、一小时或两小时的定时功能。

在单片机汇编语言里,我用一个按键控制蜂鸣器控制播放音乐,请问,我该如 ...
控制音乐播放与关断确实可以通过按键来实现,通常情况下,音乐播放的控制是通过定时器来完成的,这样可以精确地控制旋律或节奏。当按键按下时,可以改变TR0或TR1的值,从而实现音乐播放的开启或关断。具体来说,当按键被按下时,你需要检查按键的状态。如果按键的状态为低电平,那么可以将TR0或TR1置位,...

单片机用一个按键随意切换控制三种模式
while(1){ switch(keyval){ case 0:TR0=1;sec=0;if(sec<30){D1=0;D2=1;} else {D1=1;D2=1;} break;case 1:TR0=1;sec=0;if(sec<30){D1=1;D2=0;} else {D1=1;D2=1;} break;case 2:TR0=1;sec=0;if(sec<30){D1=0;D2=1;} if(sec>=30 && sec<60){D...

请问51单片机如何用一个独立按键控制程序的暂停和继续
1.你的程序并不能实现显0~9,1357,0246,亮灯和响铃是可以。2.用P1.1按键是可以实现暂停和继续的,并不需要中断。不是什么事都需要中断,好像离开中断就什么也不能做了?3.你想暂停,是随时暂停,还是什么时候暂停?

单片机控制数码管1 按键控制开始、数码管循环显示0-F.时间间隔为1s的程...
P1口外接共阳极的8段数码显示器。P3.2外接一个按键,按下后,接地,用来起动.ORG 0000H JB P3.2,MOV R2, #0 LOOP:INC R2 MOV A, R2 ANL A, #0FH MOV DPTR, #TAB MOVC A, @A+DPTR MOV P1, A LCALL DL500MS LCALL DL500MS SJMP LOOP TAB:D...

单片机用一个按键随意切换控制三种状态
按键程序你会吧 判断你说的要用定时器 刚按下时启动定时器 定时1秒 同时记住按键次数松开加一次 一秒后检测如果次数为1 那么是状态1 如果次数为3 那么是状态3 如果按键仍然是按下的 那么再启动一次定时器 定时一秒 一秒后自动切换到状态2 ...