找回密码
 立即注册

QQ登录

只需一步,快速开始

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

关于单片机按键控制多种流水该如何实现?

[复制链接]
跳转到指定楼层
楼主
ID:438648 发表于 2018-12-4 20:16 来自手机 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
有没有哪位大佬知道如何实现一个按键控制多种流水要怎样实现我现在是一个初学者,中断这些都没有学,具体要求就是按一下,它会开始第一种流水,在按一下,开始第二种,在按一下,开始第三种,跪求!
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:292571 发表于 2018-12-4 22:22 | 只看该作者
慢慢学,等你懂了才是真正的理解了
回复

使用道具 举报

板凳
ID:282256 发表于 2018-12-4 22:48 | 只看该作者
流水的本质是按照一定的次序点亮一颗颗灯,如顺着来  反着来 跳着来,即模式,通过按键计数,切换模式
回复

使用道具 举报

地板
ID:439695 发表于 2018-12-4 23:41 | 只看该作者
看样子是个小的课程设计吧。我做完发给你。我们正在做。
回复

使用道具 举报

5#
ID:317383 发表于 2018-12-5 07:57 | 只看该作者



#include <reg51.h>
#define uchar unsigned char
#define uint  unsigned int
sbit P20=P2^0;
sbit P21=P2^1;
sbit P22=P2^2;
sbit P23=P2^3;
//**************************
void delay();
void liushui();
void jiou();
void doubleLiushui();
void gaodi4();
//**************************
void main()
{
uchar flag=0;
while(1)
{
        //if(P1^0xff)
        {
          if(!P20){flag=0;}
                if(!P21){flag=1;}
                if(!P22){flag=2;}
                if(!P23){flag=3;}
        }
        switch(flag)
        {
                case 0: liushui();break;                        //á÷Ë®
                case 1: jiou();        break;                                //Ææż
                case 2:        gaodi4();break;                                //¸ßμí4λ
                case 3: doubleLiushui();break;//Ææż
                default : break;
        }
}
}
//*************************************
void liushui()//***á÷Ë®***
{       
        uchar a;
        a=0x01;
        P1=~a;
        while(1)
        {        
                delay();   
          a=a<<1;
          if(a==0x00) a=0x01;       
          P1=~a;
                if(P2^0xff)return;
         }
}
void jiou()//***Ææżλ***
{
        uchar a;
        a=0x55;
        P1=a;
        while(1)
        {        
          delay();   
          a=~a;                       
          P1=a;
                if(P2^0xff)return;               
         }
}
void doubleLiushui()//***Ë«á÷Ë®***
{
        uchar a;
        a=0x03;
        P1=~a;
        while(1)
        {        
                delay();   
          a=a<<1;
          if(a==0x00) a=0x03;       
          P1=~a;
                if(P2^0xff)return;               
         }
}
void gaodi4()//***¸ßμí4λ***
{
        uchar a;
        a=0x0F;
        P1=a;
        while(1)
        {        
          delay();   
          a=~a;                       
          P1=a;
                if(P2^0xff)return;               
         }
}
void delay()//***Ñóê±***
{
        unsigned int i,k;
        for(k=1;k<100;k++)
                for(i=1;i<255;i++);
}

新建位图图像.jpg (147.86 KB, 下载次数: 10)

新建位图图像.jpg

4keyflash.gif (129.91 KB, 下载次数: 12)

4keyflash.gif
回复

使用道具 举报

6#
ID:438322 发表于 2018-12-5 08:36 | 只看该作者
用IF语句来写,设定三个按键,然后if(SW1==1){流水灯第一种顺序}if(SW2==1){流水灯第二种顺序}if(SW3==1){流水灯第三种顺序}
回复

使用道具 举报

7#
ID:410399 发表于 2018-12-5 08:39 | 只看该作者
就说一下简单的思路吧
  1. if(k1 == 0)   //按键按下
  2. {
  3.     if(key == 0)
  4.     {
  5.         .......    //功能
  6.         key++;     //设置一个标志位,记录按下次数(做好软件消抖,不然会跳着来)
  7.     }
  8.     if(key == 1)
  9.     {...........;   key++;}
  10.   
  11.     ...

  12. }
复制代码
回复

使用道具 举报

8#
ID:434807 发表于 2018-12-5 08:53 | 只看该作者
既然你要用按键,那么按键应该学了吧,给你个大致思路,把你自己想的流水灯,第一种花样和第二个花样以至于N个写为多个子函数,这样当按键按下时直接调用,某个函数就行了。至于在哪里调用的话,这个就很随意了,你可以在按键按下后立即调用,也可以是按键按下后赋予键值,然后在主函数里用if或者switch()case,进行选择判断。至于程序嘛,这个比较基础,自己看书后模仿书上例程就可以写出来了,这比别人直接给你程序要有意义的多。

回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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