小白求助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条回答
axe1
1楼-- · 2020-01-27 12:22
 精彩回答 2  元偷偷看……
jswd0810
2楼-- · 2020-01-27 15:26
按照你的意思出个馊主意,将按键作为中断口,在中断里加判断
if(!K0)while(1);
jswd0810
3楼-- · 2020-01-27 20:10
你的那个程序里的delay函数不能保证实时性
axe1
4楼-- · 2020-01-28 00:47
jswd0810 发表于 2013-9-25 20:59
你的那个程序里的delay函数不能保证实时性

delay函数不就是一个延时吗?能帮忙优化一下程序吗?后面还有一段。帮帮忙,谢谢!
jswd0810
5楼-- · 2020-01-28 06:03
本帖最后由 jswd0810 于 2013-9-25 21:41 编辑
axe1 发表于 2013-9-25 21:30
delay函数不就是一个延时吗?能帮忙优化一下程序吗?后面还有一段。帮帮忙,谢谢! ...


你按键的时候可能还在延时函数里,不能及时响应的
jswd0810
6楼-- · 2020-01-28 10:10
 精彩回答 2  元偷偷看……

一周热门 更多>