官术网_书友最值得收藏!

3.2 從左到右的流水燈

本例連接P0端口的8只LED從左到右循環滾動點亮,產生走馬燈效果。

本例電路如圖3-2所示。

圖3-2 從左到右的流水燈電路

程序設計調試與實訓:

本例中的8只LED連接在P0端口,LED陰極指向P0,陽極通過限流電阻接+5V,由于LED接在P0端口,而P0內部無上拉電阻,因此LED只能按圖3-2所示來連接,8只電阻同時起限流和上拉作用。如果將它們全部接在P1、P2或P3端口,讀者還可以將所有LED反接,陽極指向端口,陰極通過限流電阻后共同接地,這樣連接后再相應修改程序,仍可以出現相同的運行效果。

程序將P0端口初值設為0xFE(11111110),由于電路中LED是共陽連接的,該初值會使第0只LED被點亮,當11111110向左循環移位時,即可使8只LED從左向右形成循環走馬燈效果。循環左移由函數_crol_完成,注意添加頭文件intrins.h。

讀者可修改本例代碼,實現LED循環右移顯示的效果(循環右移函數為_cror_)。

源程序代碼:

        //-----------------------------------------------------------------
        //  名稱: 從左到右的流水燈
        //-----------------------------------------------------------------
        //  說明: 接在P0端口的8只LED從左到右循環依次點亮,產生走馬燈效果。
        //-----------------------------------------------------------------
        #include <reg51.h>
        #include <intrins.h>
        #define uchar unsigned char
        #define uint  unsigned int
        //-----------------------------------------------------------------
        // 延時
        //-----------------------------------------------------------------
        void DelayMS(uint x)
        {
          uchar t;
          while(x--)
          {
            for(t = 0; t < 120; t++);
          }
        }
        //-----------------------------------------------------------------
        // 主程序
        //-----------------------------------------------------------------
        void main()
        {
            P0 = 0xFE;
            while(1)
            {
              P0 = _crol_(P0,1); //P0端口的值向左循環移動1位
              DelayMS(150);
            }
        }
主站蜘蛛池模板: 湖南省| 普格县| 双江| 泸定县| 图木舒克市| 当涂县| 平舆县| 宜宾县| 大同市| 杭锦旗| 长治县| 五原县| 大兴区| 股票| 靖宇县| 镇江市| 濉溪县| 定结县| 柘城县| 盐边县| 吉水县| 贡觉县| 天等县| 九江市| 阿瓦提县| 榕江县| 鲁山县| 榆树市| 康乐县| 上虞市| 边坝县| 赤峰市| 广水市| 大兴区| 土默特左旗| 白水县| 安塞县| 海原县| 新巴尔虎左旗| 遵义县| 克拉玛依市|