找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3690|回复: 14
打印 上一主题 下一主题
收起左侧

怎么让单片机开发板一直按住K1键然后LED就亮着,松开后LED就灭

  [复制链接]
跳转到指定楼层
楼主
ID:454178 发表于 2018-12-28 00:50 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

#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();
        }               
}
这代码是按一次就亮 再按一次就灭了,我想知道在哪个地方可以改,就达到我想要的那个长按就亮松开就灭

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶1 踩
回复

使用道具 举报

沙发
ID:448843 发表于 2018-12-28 07:10 | 只看该作者
#include "reg52.h"               

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

void main()
{        
              led=k1;     
}
你试试这个
回复

使用道具 举报

板凳
ID:448843 发表于 2018-12-28 07:14 | 只看该作者
#include "reg52.h"

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

void main()
{        
         led=k1;              
}

你试试这个
回复

使用道具 举报

地板
ID:164602 发表于 2018-12-28 07:55 | 只看该作者
很简单的。
       if(k1==0)        
        {        
                delay(1000);
                if(k1==0)
                {

                        led=0;
                }
                else
                {
                        led=1;
                 }
                while(!k1)
        }   
回复

使用道具 举报

5#
ID:164602 发表于 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();
        }               
}
回复

使用道具 举报

6#
ID:410399 发表于 2018-12-28 08:04 | 只看该作者
led=~led;这里改一下
改为 led = 0;
然后在while里面加一句
led = 1;
回复

使用道具 举报

7#
ID:357520 发表于 2018-12-28 08:21 | 只看该作者
led直接赋值0/1就行了
回复

使用道具 举报

8#
ID:426861 发表于 2018-12-28 09:15 | 只看该作者
按键检测函数,判断条件当K1==0时,LED=0(假设低电平亮),当K1!=0时LED=1。
回复

使用道具 举报

9#
ID:424598 发表于 2018-12-28 09:37 来自手机 | 只看该作者
一定要开发板?面包板要实现这个功能,都不需要代码,就vcc接按键,按键接1k阻再接led正极,led负极接end就能实现
回复

使用道具 举报

10#
ID:449525 发表于 2018-12-28 10:42 | 只看该作者
HC6800-ES-V2.0 发表于 2018-12-28 07:55
很简单的。
       if(k1==0)        
        {        

就是你这个,按键代码。网上还有个好的案件代码,不用延时的,还可以判断单击还是连击的。
whiel(1)那个判断延时要放在代码处理最后,不能放在前面,会有问题,昨晚就是抄别人代码,没注意,反而出问题更浪费时间
回复

使用道具 举报

11#
ID:457088 发表于 2018-12-28 10:46 | 只看该作者
void keypros()
{
   
if(k1==0)        
        {        
                delay(1000);
                if(k1==0)
                {

                        led=0;
                }
                else
                {
                        led=1;
                 }
        
        }
}   
回复

使用道具 举报

12#
ID:454178 发表于 2018-12-28 11:18 | 只看该作者
HC6800-ES-V2.0 发表于 2018-12-28 07:59
你的程序还有两个错误。
修改后就是你要的样子:
#include "reg52.h"               

谢谢 我做出来了,就是再删掉那个void delay那部分,就可以实现出来我想要的结果了。
回复

使用道具 举报

13#
ID:454178 发表于 2018-12-28 11:20 | 只看该作者
谢谢各位大家 ,我买来开发板,由于好奇心,想改一下那种长按,结果不行,我才知道是缺少了那个if和else,,结果就弄了2天最后找不出来。
回复

使用道具 举报

14#
ID:446674 发表于 2018-12-28 11:30 | 只看该作者
其实就是一个检测按键的程序
回复

使用道具 举报

15#
ID:123289 发表于 2018-12-28 12:34 | 只看该作者
改学CEO吧
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表