新聞中心

        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程序

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 商洛市| 靖宇县| 中阳县| 东阿县| 吴忠市| 平和县| 温泉县| 海南省| 无锡市| 浏阳市| 深泽县| 翁牛特旗| 子长县| 大关县| 天津市| 叶城县| 乌兰县| 竹北市| 万山特区| 和政县| 射洪县| 郧西县| 祁东县| 岳阳市| 金山区| 宜宾市| 永顺县| 若羌县| 四会市| 昭平县| 景谷| 辰溪县| 达日县| 西峡县| 自治县| 崇文区| 保亭| SHOW| 彰化县| 彰武县| 瓦房店市|