标题: 怎么让单片机开发板一直按住K1键然后LED就亮着,松开后LED就灭 [打印本页]

作者: 汪岩    时间: 2018-12-28 00:50
标题: 怎么让单片机开发板一直按住K1键然后LED就亮着,松开后LED就灭

#include "reg52.h"               

typedef unsigned int u16;
typedef unsigned char u8;

sbit k1=P3^1;
sbit led=P2^0;
void delay(u16 i)
{
        while(i--);       
void keypros()
{
        if(k1==0)       
        {       
                delay(1000);
                if(k1==0)
                {

                        led=~led;
                }
                while(!k1)
        }               
}
void main()
{       
        while(1)
        {       
                keypros();
        }               
}
这代码是按一次就亮 再按一次就灭了,我想知道在哪个地方可以改,就达到我想要的那个长按就亮松开就灭


作者: fang880413    时间: 2018-12-28 07:10
#include "reg52.h"               

sbit k1=P3^1;
sbit led=P2^0;

void main()
{        
              led=k1;     
}
你试试这个
作者: fang880413    时间: 2018-12-28 07:14
#include "reg52.h"

sbit k1=P3^1;
sbit led=P2^0;

void main()
{        
         led=k1;              
}

你试试这个

作者: HC6800-ES-V2.0    时间: 2018-12-28 07:55
很简单的。
       if(k1==0)        
        {        
                delay(1000);
                if(k1==0)
                {

                        led=0;
                }
                else
                {
                        led=1;
                 }
                while(!k1)
        }   
作者: HC6800-ES-V2.0    时间: 2018-12-28 07:59
你的程序还有两个错误。
修改后就是你要的样子:
#include "reg52.h"               

typedef unsigned int u16;
typedef unsigned char u8;

sbit k1=P3^1;
sbit led=P2^0;
void delay(u16 i)
{
        while(i--);
}
        
void keypros()
{
                if(k1==0)
                {

                        led=0;
                }
                                else
                                {
                                        led=1;
                                }
}
void main()
{        
        while(1)
        {        
                keypros();
        }               
}
作者: mosqu    时间: 2018-12-28 08:04
led=~led;这里改一下
改为 led = 0;
然后在while里面加一句
led = 1;
作者: jll586    时间: 2018-12-28 08:21
led直接赋值0/1就行了
作者: 天风情    时间: 2018-12-28 09:15
按键检测函数,判断条件当K1==0时,LED=0(假设低电平亮),当K1!=0时LED=1。
作者: ssk7793    时间: 2018-12-28 09:37
一定要开发板?面包板要实现这个功能,都不需要代码,就vcc接按键,按键接1k阻再接led正极,led负极接end就能实现
作者: 周超然    时间: 2018-12-28 10:42
HC6800-ES-V2.0 发表于 2018-12-28 07:55
很简单的。
       if(k1==0)        
        {        

就是你这个,按键代码。网上还有个好的案件代码,不用延时的,还可以判断单击还是连击的。
whiel(1)那个判断延时要放在代码处理最后,不能放在前面,会有问题,昨晚就是抄别人代码,没注意,反而出问题更浪费时间
作者: justloong    时间: 2018-12-28 10:46
void keypros()
{
   
if(k1==0)        
        {        
                delay(1000);
                if(k1==0)
                {

                        led=0;
                }
                else
                {
                        led=1;
                 }
        
        }
}   
作者: 汪岩    时间: 2018-12-28 11:18
HC6800-ES-V2.0 发表于 2018-12-28 07:59
你的程序还有两个错误。
修改后就是你要的样子:
#include "reg52.h"               

谢谢 我做出来了,就是再删掉那个void delay那部分,就可以实现出来我想要的结果了。
作者: 汪岩    时间: 2018-12-28 11:20
谢谢各位大家 ,我买来开发板,由于好奇心,想改一下那种长按,结果不行,我才知道是缺少了那个if和else,,结果就弄了2天最后找不出来。
作者: Arvin0011    时间: 2018-12-28 11:30
其实就是一个检测按键的程序
作者: yzwzfyz    时间: 2018-12-28 12:34
改学CEO吧




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