注册 登录
编程论坛 C语言论坛

求助:怎么实现在循环的时候按下按钮跳出或者复位

jkl510158235 发布于 2019-03-17 21:28, 1055 次点击
#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned char
uchar num;
sbit K1=P3^2;
sbit K2=P3^3;
bit states=1,auto_run=1;
void my_delay(uchar set_second);
void Delay1000ms();
void Delay100ms();
void scan_key();
void out_put();
void Auto_watering();


void main()
{
    while(1)
    {
    scan_key();
    out_put();

    }
}

void scan_key()
 {     
     if(K1==0)
     {     
     P0=0xff;
     P1=0xff;
        states=~states;
        Delay100ms();
        while(K1==0);
        Delay100ms();
     }
     if(K2==0)
     {
     
     auto_run=~auto_run    ;
     Delay100ms();
     while(K2==0);
     Delay100ms();
     
     }
     
}
     
 void out_put()
 {
      if(states==0)
      {
       if(auto_run==0)
         {
             P0=0xff;
         my_delay(100);“这里延时设定很久,我想通过按下K2来跳出这个if的循环”
         P0=0x00;
            my_delay(100);
            }
       else
         
         P0=0x0f;
      }
       else if(states==1)
       {
           if(auto_run==0)
         P1=0x55;
        else
         P1=0xf0;
       }
 }



void my_delay(uchar set_second)
    {
    uchar j;
    for(j=0;j<set_second;j++)
    {
    Delay1000ms();
    }
    }


void Delay1000ms()        //@11.0592MHz
{
    unsigned char i, j, k;

    _nop_();
    i = 8;
    j = 1;
    k = 243;
    do
    {
        do
        {
            while (--k);
        } while (--j);
    } while (--i);
}
 void Auto_watering()
 {
     P0=0xff;
    my_delay(2);
    P0=0x00;
    my_delay(2);

 }
 void Delay100ms()        //@11.0592MHz
{
    unsigned char i, j;

    i = 180;
    j = 73;
    do
    {
        while (--j);
    } while (--i);
}
2 回复
#2
wp2319572019-03-18 08:07
这里几乎没人懂单片机,如果程序在循环的过程中  能够接收按键信息的话  那就直接跳出去好了
怕就是 在循环过程中 无法接受外界信息
#3
forever742019-03-18 15:21
如果要维持你的程序框架,那么就不要让延时函数傻乎乎地消耗时间,要让延时函数忙着读键盘就好了。
1