请选择 进入手机版 | 继续访问电脑版

普中开源电子分享网

 找回密码
 立即注册
搜索
查看: 3434|回复: 3

单个独立按键的循环问题

[复制链接]

1

主题

1

帖子

3

积分

新手上路

Rank: 1

积分
3
发表于 2021-1-23 11:23:22 | 显示全部楼层 |阅读模式
1金钱
按键K2第一次按下LED D1 3 5 亮,下一次按下LED D2 4 6亮循环,怎么写啊
[size=14.6667px]#include "reg52.h"
[size=14.6667px]typedef unsigned char u8;
[size=14.6667px]typedef unsigned int u16;
[size=14.6667px]
[size=14.6667px]sbit led2=P2^1;
[size=14.6667px]sbit led3=P2^2;
[size=14.6667px]sbit led4=P2^3;
[size=14.6667px]sbit led5=P2^4;
[size=14.6667px]sbit led6=P2^5;
[size=14.6667px]sbit led7=P2^6;
[size=14.6667px]sbit led8=P2^7;
[size=14.6667px]sbit led1=P2^0;
[size=14.6667px]sbit k2=P3^0;
[size=14.6667px]
[size=14.6667px]void delay(u16 i)
[size=14.6667px]{
[size=14.6667px]        while(i--);
[size=14.6667px]}
[size=14.6667px]void keypros()
[size=14.6667px]{
[size=14.6667px]        if(k2==0)
[size=14.6667px]        {
[size=14.6667px]           delay(1000);
[size=14.6667px]           if(k2==0)
[size=14.6667px]           {
[size=14.6667px]                 led1=~led1;
[size=14.6667px]                 led3=~led3;
[size=14.6667px]                 led5=~led5;
[size=14.6667px]           }
[size=14.6667px]           while(!k2);
[size=14.6667px]    }
[size=14.6667px]}
[size=14.6667px]void keypros2()
[size=14.6667px]{
[size=14.6667px]        if(k2==0)
[size=14.6667px]        {
[size=14.6667px]           delay(1000);
[size=14.6667px]           if(k2==0)
[size=14.6667px]           {
[size=14.6667px]                 led2=~led2;
[size=14.6667px]                 led4=~led4;
[size=14.6667px]                 led6=~led6;
[size=14.6667px]           }
[size=14.6667px]           while(!k2);
[size=14.6667px]    }
[size=14.6667px]}
[size=14.6667px]void keypros3()
[size=14.6667px]{
[size=14.6667px]        if(k2==0)
[size=14.6667px]        {
[size=14.6667px]           delay(1000);
[size=14.6667px]           if(k2==0)
[size=14.6667px]           {
[size=14.6667px]                 led7=~led7;
[size=14.6667px]                 led8=~led8;
[size=14.6667px]           }
[size=14.6667px]           while(!k2);
[size=14.6667px]    }
[size=14.6667px]}
[size=14.6667px]void main()
[size=14.6667px]{
[size=14.6667px]    while(1)
[size=14.6667px]        {
[size=14.6667px]           keypros();
[size=14.6667px]           keypros2();
[size=14.6667px]           keypros3();
[size=14.6667px]
[size=14.6667px]        }

[size=14.6667px]}

我知道答案 本帖寻求最佳答案回答被采纳后将获得系统奖励10 金钱 , 目前已有2人回答

回复

使用道具 举报

20

主题

1343

帖子

8345

积分

论坛元老

Rank: 8Rank: 8

积分
8345
发表于 2021-1-23 20:43:43 | 显示全部楼层
本帖最后由 HC6800-ES-V2.0 于 2021-1-23 20:44 编辑

这个作业太简单,先不帮你做。给你一个提示吧:
灯的两种亮法,可以理解为两个任务,并且两个任务是交替进行的,非此即彼。
按一下键,得到此,下一次按,就非此,就是彼了;再按键,就是非彼,就回到此。
就是一键多功能嘛,不要说两个功能,再几个也是可以的。
回复

使用道具 举报

1

主题

2

帖子

9

积分

新手上路

Rank: 1

积分
9
发表于 2021-1-28 17:05:30 | 显示全部楼层
#include<reg52.h>
#include<intrins.h>
typedef unsigned char u8;                 //重定义
typedef unsigned int u16;

#define led P2
sbit k1=P3^1;

void delay(u16 i)           //延时函数
{
        while(i--);
}

void keypros()
{
        if(k1==0)                  //检测按键K1是否按下,按键按下进入
        {       
                delay(1000);   //消除抖动 一般大约10ms            以下至while是具体执行语句
                if(k1==0&&led==0xff)         //再次判断按键是否按下
                {       
                        led=0xaa;
                }
                else if(k1==0&&led==0xaa)
                {
                        led=_crol_(led,1);
                }
                else
                        led=0xff;
                while(!k1);         //检测按键是否松开,while之类是套用语句
        }               
}
void main()
{       
        led=0xff;
        while(1)
        {       
                keypros();  //按键处理函数,不需要加void       
        }               
}
这是四个led的,第一次按1357,第二次按2468,你如果要实现只显示135、246的,改一改16进制数据就行

回复

使用道具 举报

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

本版积分规则

关闭

站长推荐上一条 /1 下一条

Archiver|手机版|小黑屋|普中开源电子分享网 粤ICP备16123577号-2

GMT+8, 2024-3-29 19:43 , Processed in 0.089759 second(s), 34 queries .

Powered by 论坛搭建 X3.4

Copyright © 2001-2021, Tencent Cloud.

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