小白求助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条回答
jswd0810
1楼-- · 2020-01-28 11:24
你可以把程序分成很小的模块
  1. void step0()
  2. {

  3. }

  4. void step1()
  5. {

  6. }
  7. .......

  8. void main()
  9. {
  10.    while(1)
  11.      {
  12.        if(!k0) while(1);
  13.       else
  14.      {
  15.         step0();
  16.         step1();
  17.        ...............
  18.       }
  19.     }

  20. }
复制代码
axe1
2楼-- · 2020-01-28 14:21
jswd0810 发表于 2013-9-25 21:55
你可以把程序分成很小的模块

谢谢,我试试看。
jiangkexiaozhen
3楼-- · 2020-01-28 15:49
delay身材不好,该大不大该小不小,走样了
axe1
4楼-- · 2020-01-28 21:29
jiangkexiaozhen 发表于 2013-9-25 23:16
delay身材不好,该大不大该小不小,走样了

有请给解释下,刚接触这块什么都不懂。谢谢!
qymcs
5楼-- · 2020-01-29 01:33
 精彩回答 2  元偷偷看……
qymcs
6楼-- · 2020-01-29 05:39
用按键来启动和删除一个任务

一周热门 更多>