小白求助51单片机如何用一个按键控制一段程序的运行与停...

2020-01-26 13:01发布

如题!我想用一个按键控制一段程序的运行与停止 ,k按下程序运行,k放开程序继续运行;k再次按下程序暂停或者停止或者复位。请高手们看看这段代码需要如何修改,请高手不吝赐教,谢谢!
#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;
/*********************************************************************************************
函数名:毫秒级CPU延时函数
调  用:DELAY_MS (?);
参  数:1~65535(参数不可为0)
返回值:无
结  果:占用CPU方式延时与参数数值相同的毫秒时间
备  注:应用于1T单片机时i<600,应用于12T单片机时i<125
/*********************************************************************************************/
#define light 1
#define black 0

void DELAY_MS (unsigned int a){
        unsigned int i;
        while( --a != 0){
                for(i = 0; i < 600; i++);
        }
}
/*********************************************************************************************/

/*********************************************************************************************/

void main (void){ //主程序
         
bit key=0;        
  
while(1)      
  {               
  if(K1==0)//假设按键低电平有效            
  {               
  DELAY_MS(5);                  
if(K1==0) key=~key;      
    }      
  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);
}
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
18条回答
hyghyg1234
1楼-- · 2020-01-26 15:54
弄个按键的标志位,想怎么控制就怎么写
axe1
2楼-- · 2020-01-26 19:12
 精彩回答 2  元偷偷看……
hyghyg1234
3楼-- · 2020-01-26 20:53
按键按下后flag取反,
  1. if(flag==1)
  2. {
  3.     代码。。。
  4. }
  5. else if(flag==0)
  6. {
  7.    代码。。。
  8. }
复制代码
axe1
4楼-- · 2020-01-27 02:15
hyghyg1234 发表于 2013-9-25 20:26
按键按下后flag取反,

试过不能循环,程序只走一遍!
hyghyg1234
5楼-- · 2020-01-27 04:54
弄个循环,按键用中断来做
axe1
6楼-- · 2020-01-27 06:23
hyghyg1234 发表于 2013-9-25 20:35
弄个循环,按键用中断来做


外部中断? if(INT0==0)a++;

一周热门 更多>