找回密码
 立即注册

QQ登录

只需一步,快速开始

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

关于单片机按键控制小灯,一个按键如何控制多个程序?

  [复制链接]
跳转到指定楼层
楼主
ID:421426 发表于 2019-1-1 15:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
想实现一个按键控制多个程序应该怎么办   每按下一次  更换一个程序   但是用的同一个按键
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:451904 发表于 2019-1-1 16:09 来自手机 | 只看该作者
可以定义一个变量,按键按下去后变量加一,然后后面写if语句,当变量为0时执行什么程序,当变量为1时执行什么程序,以此类推,这样就可以用一个按键更换程序了
回复

使用道具 举报

板凳
ID:459120 发表于 2019-1-1 16:19 | 只看该作者
可以使用中断嵌套
回复

使用道具 举报

地板
ID:164602 发表于 2019-1-1 16:25 | 只看该作者
可以嘛——用switch语句。
按键只计数,再通过switch语句选择不同的函数,就可以了。
例如:
                if(k1==0)//扫描键盘k1
                {
                        Delay10ms(1);
                        if(k1==0)
                        {
                            j++;
                            if (j>5)
                            {
                                 j=0;
                            }
                            while((i<50)&&(k1==0))
                            {
                                    Delay10ms(1);
                                    i++;
                            }
                            i=0;
                        }

                switch(j)         //位选,选择点亮的数码管,
                {
                        case(0):
                                ONE(); break;
                        case(1):
                                TWO(); break;
                        case(2):
                                ......; break;
                        case(3):
                                ......; break;
                        case(4):
                                ......; break;
                        case(5):
                                ......; break;
                        }
回复

使用道具 举报

5#
ID:357520 发表于 2019-1-1 16:40 | 只看该作者
创建标志位,一个值对应一个程序
回复

使用道具 举报

6#
ID:459397 发表于 2019-1-1 16:59 | 只看该作者
#include <reg51.h>
#define uchar unsigned char
sbit key = P1^0;
sbit led0 = P1^1;
sbit led1 = P1^2;
uchar count = 0;
void delayms (uchar time)//延时
{
for(time; time>0; time--)
{
TMOD |= 0x01;
TH0 = 0xfc;
TL0 = 0x18;
TR0 = 1; //启动计数器0
while(TF0!=1);//计数溢出
TF0 = 0;
TR0 = 0;
}
}
void scan_key (void)
{
if (!key)
{
delayms (5);
if (!key)
{
delayms (1);
while (!key);
count++;
if (count==3)
{
count = 0;
}
}
}
}
void main (void)
{
P1 = 0xff;
while (1)
{
scan_key ();
if (count==0)
{
led0 = 1;
led1 = 1;
}
if (count==1)
{
led0 = 0;
led1 = 1;
}
if (count==2)
{
led0 = 1;
led1 = 0;
}
}
}
回复

使用道具 举报

7#
ID:459381 发表于 2019-1-1 17:05 | 只看该作者
控制多个程序  首先程序是你自己写的   执行完一个动作倒是可以进行下一个  但是按钮就是个开关而已   所以按键切换不了程序   程序简单或复杂自己写入
回复

使用道具 举报

8#
ID:94031 发表于 2019-1-1 17:25 | 只看该作者
可以设个标记,按一下标记+1,标记数不变后,执行标记数对应的程序。
回复

使用道具 举报

9#
ID:356526 发表于 2019-1-1 17:50 | 只看该作者
定义一个变量,每按一次按键变量自加1,然后判断变量的值,根据变量的值跳转程序,当变量自增到一定的值就重新给变量赋值1,希望能帮到你
回复

使用道具 举报

10#
ID:421426 发表于 2019-1-3 14:41 | 只看该作者
sadwdawdasd 发表于 2019-1-1 16:59
#include
#define uchar unsigned char
sbit key = P1^0;

但是怎样才可以将程序快速的跳出延时函数呢    我想用break  但是应该怎么加呢
回复

使用道具 举报

11#
ID:460873 发表于 2019-1-3 15:36 来自手机 | 只看该作者
#include<reg52.h> #define uint unsigned int #define uchar unsigned char #define LED P0 sbit S1=P1^0; 按键1 void delay(uint i) { uchar x,j; for(j=0;j<i;j++) for(x=0;x<=148;x++); } void main() { if(s1==0) { delay(2); if(s1==0) { LED=0; } } }
回复

使用道具 举报

12#
ID:259017 发表于 2019-1-3 19:10 | 只看该作者
可以使用状态机
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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