标题: 请看一下这个延时程序,帮忙改一下。 [打印本页]

作者: w3158    时间: 2016-7-25 17:19
标题: 请看一下这个延时程序,帮忙改一下。
要求是这样的,当按键按下灯1延时一会后点亮。按键弹起后灯1马上灭掉,同时灯2马上点亮延时一会灯灭掉。

#include <reg52.h>

sbit k1 = P3^4;        //按键

sbit led1 = P3^1;        //灯1
sbit led2 = P3^2;        //灯2

void delay(unsigned int t);         //延时子程序

//主程序
void main(void)
{
        while(1){                //扫描按键
                if(k1==0)        //按键按下
                delay(60000); //延时一会灯1才亮
                led1 = 0;        //灯亮
               
                if(k1==1)        //按键弹起
                 {
                 led1 = 1;        //灯1马上灭掉
                led2 = 0; //同时灯2马上点亮
                        }

                delay(60000);                //延时时间               
                led2 = 1;        //灯2亮一会后灭掉
                       
        }
}
  //延时子程序
void delay(unsigned int t)   
{
        while(t--);               
}


作者: w3158    时间: 2016-7-25 23:31
现在的问提是灯2一直亮,要等到按下键灯2才会灭掉,不过松开键灯2又一直亮了。我是想要松开键后灯2亮一会后自己灭掉。请帮改一下,谢谢了。
作者: hantp    时间: 2016-7-26 11:01
这个程序 led2 会一直接亮着,只有键按下才会灭。
作者: w3158    时间: 2016-7-26 13:51
hantp 发表于 2016-7-26 11:01
这个程序 led2 会一直接亮着,只有键按下才会灭。

是的,怎么样松开键LED2亮一会灭掉啊?
作者: PK250    时间: 2016-7-26 14:31
本帖最后由 PK250 于 2016-7-26 15:53 编辑

#include <reg52.h>

sbit k1 = P3^4;        //按键

sbit led1 = P3^1;        //灯1
sbit led2 = P3^2;        //灯2
unsigned char n=0;
void delay(unsigned int t);         //延时子程序

//主程序
void main(void)
{
        while(1){                //扫描按键
                if(k1==0)        //按键按下
                {                if(n==0){                        delay(60000); //延时一会灯1才亮
                led1 = 0;
                n=1;}
}        //灯亮
               
                if(k1==1)        //按键弹起
                 {                 if(n==1)
                 
                {led1 = 1;        //灯1马上灭掉
                led2 = 0; //同时灯2马上点亮               
               delay(60000);                //延时时间               
                led2 = 1;        //灯2亮一会后灭掉
                n=0;}
                        }

               
                     
        }
}
  //延时子程序
void delay(unsigned int t)   
{
        while(t--);               
}



这样led2就不会一直亮了






作者: w3158    时间: 2016-7-26 22:13
PK250 发表于 2016-7-26 14:31
#include

sbit k1 = P3^4;        //按键

谢谢!这个程序很好。
作者: 谢幕芳华    时间: 2016-7-27 10:11
精确点的话,加上消抖




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1