標(biāo)題: 關(guān)于單片機(jī)按鍵控制多種流水該如何實(shí)現(xiàn)? [打印本頁(yè)]

作者: gaogev5    時(shí)間: 2018-12-4 20:16
標(biāo)題: 關(guān)于單片機(jī)按鍵控制多種流水該如何實(shí)現(xiàn)?
有沒(méi)有哪位大佬知道如何實(shí)現(xiàn)一個(gè)按鍵控制多種流水要怎樣實(shí)現(xiàn)我現(xiàn)在是一個(gè)初學(xué)者,中斷這些都沒(méi)有學(xué),具體要求就是按一下,它會(huì)開(kāi)始第一種流水,在按一下,開(kāi)始第二種,在按一下,開(kāi)始第三種,跪求!
作者: 劉備    時(shí)間: 2018-12-4 22:22
慢慢學(xué),等你懂了才是真正的理解了
作者: superduck    時(shí)間: 2018-12-4 22:48
流水的本質(zhì)是按照一定的次序點(diǎn)亮一顆顆燈,如順著來(lái)  反著來(lái) 跳著來(lái),即模式,通過(guò)按鍵計(jì)數(shù),切換模式
作者: cuijie    時(shí)間: 2018-12-4 23:41
看樣子是個(gè)小的課程設(shè)計(jì)吧。我做完發(fā)給你。我們正在做。
作者: gh001    時(shí)間: 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, 下載次數(shù): 34)

新建位圖圖像.jpg

4keyflash.gif (129.91 KB, 下載次數(shù): 38)

4keyflash.gif

作者: qwe1997521    時(shí)間: 2018-12-5 08:36
用IF語(yǔ)句來(lái)寫(xiě),設(shè)定三個(gè)按鍵,然后if(SW1==1){流水燈第一種順序}if(SW2==1){流水燈第二種順序}if(SW3==1){流水燈第三種順序}
作者: mosqu    時(shí)間: 2018-12-5 08:39
就說(shuō)一下簡(jiǎn)單的思路吧
  1. if(k1 == 0)   //按鍵按下
  2. {
  3.     if(key == 0)
  4.     {
  5.         .......    //功能
  6.         key++;     //設(shè)置一個(gè)標(biāo)志位,記錄按下次數(shù)(做好軟件消抖,不然會(huì)跳著來(lái))
  7.     }
  8.     if(key == 1)
  9.     {...........;   key++;}
  10.   
  11.     ...

  12. }
復(fù)制代碼

作者: 謝小康4    時(shí)間: 2018-12-5 08:53
既然你要用按鍵,那么按鍵應(yīng)該學(xué)了吧,給你個(gè)大致思路,把你自己想的流水燈,第一種花樣和第二個(gè)花樣以至于N個(gè)寫(xiě)為多個(gè)子函數(shù),這樣當(dāng)按鍵按下時(shí)直接調(diào)用,某個(gè)函數(shù)就行了。至于在哪里調(diào)用的話,這個(gè)就很隨意了,你可以在按鍵按下后立即調(diào)用,也可以是按鍵按下后賦予鍵值,然后在主函數(shù)里用if或者switch()case,進(jìn)行選擇判斷。至于程序嘛,這個(gè)比較基礎(chǔ),自己看書(shū)后模仿書(shū)上例程就可以寫(xiě)出來(lái)了,這比別人直接給你程序要有意義的多。






歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1