• <li id="00i08"><input id="00i08"></input></li>
  • <sup id="00i08"><tbody id="00i08"></tbody></sup>
    <abbr id="00i08"></abbr>
  • 新聞中心

    EEPW首頁 > 嵌入式系統 > 設計應用 > 各種花樣的流水燈c51程序

    各種花樣的流水燈c51程序

    作者: 時間:2012-09-08 來源:網絡 收藏
    /*-----------------------------------------------
    功能:對稱移動閃爍(雙閃爍)

    作者:fei yu

    日期:2010-6-14

    ------------------------------------------------*/

    #includeREG52.H>
    #define uint unsigned int
    void delay(uint);
    main()
    {
    uint comp1=0xfe;
    uint comp2=0x80;
    P1=0x7e;
    delay(30000);
    while(1)
    {
    P1=0xff;
    comp1=1;
    comp1|=0x01;
    comp2>>=1;
    P1=comp1;
    P1^=comp2;
    delay(30000);
    if(P1==0xe7)
    {
    comp1=1;
    comp1|=0x01;
    comp2>>=1;
    }

    if(comp1==0x7f)
    {
    comp1=0xfe;
    comp2=0x80;
    }
    }
    }
    void delay(uint cnt)
    {
    while(cnt--);
    }


    /*-----------------------------------------------------------------

    只循環一次,而沒有一直循環下去,出錯地方在:

    通過添加一條測試語句:

    if(comp1==0x7f)
    {
    comp1=0xfe; comp2=0x80;
    P1=0x00; delay(30000);

    }

    發現if語句沒有被執行,自然繼續左右移動:

    1111 11111111 1111^0000 0000==11111 1111

    所以看起來是執行了一次while中的代碼。



    具體為什么不行,還不清楚……

    更正下列代碼后,能夠實現功能。

    if(P1==0x7e)
    {
    comp1=0xfe;
    comp2=0x80;
    }

    或者:

    if(comp2==0x01)
    {
    comp1=0xfe;
    comp2=0x80;
    }

    --------------------------------------------------------------*/



    *********************************************

    /*-----------------------------------------------
    功能:(單向單閃爍)

    作者:fei yu

    日期:2010-6-14

    ------------------------------------------------*/

    #includereg52.h>
    #define uint unsigned int
    void delay(uint);
    main()
    {
    //uint fre=0x03;
    //uint comp1=0xfe,comp2=0x80;
    P1=0xfe;
    while(1)
    {
    /*------------------------------------------------------------------

    模塊1:循環單向閃爍,只有一個燈亮滅
    執行3次,轉入下一種閃爍

    --------------------------------------------------------------------*/
    while(1)
    {
    delay(30000);
    P1=1;
    P1|=0x01;
    if(P1=0x7f)
    {
    delay(30000);
    P1=0xfe;

    }
    }

    }
    }
    void delay(uint cnt){while(cnt--);}



    /*-----------------------------------------

    程序運行結果左右兩端跳動,原因是:

    if(P1=0x7f);中的等號也成了賦值號,更正為if(P1==0x7f);

    特別注意,不要把判斷語句種的等號誤寫為賦值號。

    -----------------------------------------*/



    **************************************



    /*-----------------------------------------------
    功能:花樣燈(單向單閃爍+單向雙閃爍)

    作者:fei yu

    日期:2010-6-14

    ------------------------------------------------*/

    #includereg52.h>
    #define uint unsigned int
    void delay(uint);
    main()
    {
    uint fre=0x04;
    uint comp1=0xfe,comp2=0x80;
    while(1)
    {
    /*-------------------------------------------------------------------

    模塊1:循環單向閃爍,只有一個燈亮滅
    執行3次,轉入下一種閃爍

    --------------------------------------------------------------------*/
    P1=0xfe;
    while(1!=fre--)
    {
    delay(30000);
    P1=1;
    P1|=0x01;
    if(P1==0x7f)
    {
    delay(30000);
    P1=0xfe;

    }
    }
    /*-------------------------------------------------------------------

    模塊2:循環單向閃爍,只有兩個燈亮或者滅
    執行3次,轉入下一種閃爍

    --------------------------------------------------------------------*/
    P1=0xfc;
    while(3!=fre++)
    {
    delay(30000);
    P1=2;
    P1|=0x03;
    if(P1==0x3f)
    {
    delay(30000);
    P1=0xfc;
    }
    }
    }
    }
    void delay(uint cnt)
    {
    while(cnt--);
    }



    /*----------------------------------------------------

    兩個模塊均沒有問題,但是放在一起,并沒有得到想要的結果,

    第一個循環沒有進行完全,且兩個循環的循環的次數與要求的不符。

    錯誤地方在于:模塊1和模塊2的循環控制的只是一次亮滅,更正為:



    #includereg52.h>
    #define uint unsigned int
    void delay(uint);
    main()
    {
    uint fre=0x04;
    uint fre1,fre2;
    uint comp1=0xfe,comp2=0x80;
    while(1)
    {
    /*--------------------------------------------------------------------

    模塊1:循環單向閃爍,只有一個燈亮滅
    執行3次,轉入下一種閃爍

    --------------------------------------------------------------------------*/
    P1=0xfe;
    while(1!=fre--)
    {
    fre1=0x08;
    while(1!=fre1--)
    {
    delay(3000000);
    P1=1;
    P1|=0x01;
    if(P1==0x7f)
    {
    delay(3000000);
    P1=0xfe;
    }
    }
    }
    /*-------------------------------------------------------------------

    模塊2:循環單向閃爍,只有兩個燈亮或者滅
    執行3次,轉入下一種閃爍

    --------------------------------------------------------------------*/
    P1=0xfc;
    while(3!=fre++)
    {
    fre2=0x04;
    while(1!=fre2--)
    {
    delay(3000000);
    P1=2;
    P1|=0x03;
    if(P1==0x3f)
    {
    delay(3000000);
    P1=0xfc;
    }
    }
    }
    }
    }
    void delay(uint cnt)
    {
    while(cnt--);
    }

    注意控制語句中fre++和fre--;并且fre1和fre2的初始化不能出錯,

    由于if()語句的出現,fre1和fre2的取值要比預想的減一。

    ----------------------------------------------------------*/


    關鍵詞: 流水燈 c51程序

    評論


    相關推薦

    技術專區

    關閉
    主站蜘蛛池模板: 平定县| 孝义市| 桐柏县| 惠安县| 蒙城县| 明光市| 涞源县| 任丘市| 石阡县| 静宁县| 乳山市| 凤阳县| 古丈县| 德清县| 中江县| 日照市| 沾益县| 东辽县| 当阳市| 武功县| 宝坻区| 军事| 平邑县| 谷城县| 隆安县| 林州市| 沛县| 太保市| 凤山县| 嫩江县| 前郭尔| 宁波市| 南澳县| 贡山| 海盐县| 永修县| 靖安县| 安福县| 伊金霍洛旗| 葫芦岛市| 育儿|