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

3.4 花樣流水燈

在上一案例中,LED只能按某種單調的規律顯示,無法實現復雜多變的花樣顯示。本例中兩組LED連接在P0和P2端口,它們按預先設定的花樣變換顯示。

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

程序設計調試與實訓:

本例將設計的花樣預設在兩個數組中,它們分別與兩組LED對應,各數組中的每個字節對應一種顯示組合,程序循環讀取數組中的顯示組合并送往端口,實現自定義花樣的自由顯示。

本例P0、P2端口對應的花樣數組所占空間較大,且預設后相對固定,因此Pattern_P0,Pattern_P2的存儲類型均設為code,由于電路中LED共陽連接,初始時將P0、P2均設為0xFF,在開始時將它們全部關閉。

讀者可以自行調整數組內容,改變數組大小,實現自定義的花樣顯示。

圖3-4 花樣流水燈電路

源程序代碼:

        //-----------------------------------------------------------------
        //  名稱: 花樣流水燈
        //-----------------------------------------------------------------
        //  說明: 16只LED分兩組按預設的多種花樣變換顯示。
        //-----------------------------------------------------------------
        #include <reg51.h>
        #define uchar unsigned char
        #define uint  unsigned int
        uchar code Pattern_P0[] =
        {
          0xFC,0xF9,0xF3,0xE7,0xCF,0x9F,0x3F,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
          0xE7,0xDB,0xBD,0x7E,0xBD,0xDB,0xE7,0xFF,0xE7,0xC3,0x81,0x00,0x81,0xC3,0xE7,0xFF,
          0xAA,0x55,0x18,0xFF,0xF0,0x0F,0x00,0xFF,0xF8,0xF1,0xE3,0xC7,0x8F,0x1F,0x3F,0x7F,
          0x7F,0x3F,0x1F,0x8F,0xC7,0xE3,0xF1,0xF8,0xFF,0x00,0x00,0xFF,0xFF,0x0F,0xF0,0xFF,
          0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
          0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x7F,0xBF,0xDF,0xEF,0xF7,0xFB,0xFD,0xFE,
          0xFE,0xFC,0xF8,0xF0,0xE0,0xC0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
          0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0xE0,0xF0,0xF8,0xFC,0xFE,
          0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF
        };
        uchar code Pattern_P2[] =
        {
          0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0xFC,0xF9,0xF3,0xE7,0xCF,0x9F,0x3F,0xFF,
          0xE7,0xDB,0xBD,0x7E,0xBD,0xDB,0xE7,0xFF,0xE7,0xC3,0x81,0x00,0x81,0xC3,0xE7,0xFF,
          0xAA,0x55,0x18,0xFF,0xF0,0x0F,0x00,0xFF,0xF8,0xF1,0xE3,0xC7,0x8F,0x1F,0x3F,0x7F,
          0x7F,0x3F,0x1F,0x8F,0xC7,0xE3,0xF1,0xF8,0xFF,0x00,0x00,0xFF,0xFF,0x0F,0xF0,0xFF,
          0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F,
          0x7F,0xBF,0xDF,0xEF,0xF7,0xFB,0xFD,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
          0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0xFC,0xF8,0xF0,0xE0,0xC0,0x80,0x00,
          0x00,0x80,0xC0,0xE0,0xF0,0xF8,0xFC,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
          0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF
        };
        //-----------------------------------------------------------------
        // 延時
        //-----------------------------------------------------------------
        void DelayMS(uint x)
        {
          uchar t;
          while(x--) for(t = 0; t < 120; t++);
        }
        //-----------------------------------------------------------------
        // 主程序
        //-----------------------------------------------------------------
        void main()
        {
          uchar i;
          while(1)
          {
            //從數組中讀取數據送至P0端口和P2端口顯示
            for(i = 0; i < 136; i++)
            {
                P0 = Pattern_P0[i];
                P2 = Pattern_P2[i];
                DelayMS(100);
            }
          }
        }
主站蜘蛛池模板: 馆陶县| 张北县| 泸州市| 博湖县| 潍坊市| 武鸣县| 靖边县| 嘉荫县| 修水县| 巫溪县| 阳曲县| 佛学| 紫云| 兴海县| 锡林郭勒盟| 衡阳县| 岑溪市| 河池市| 甘孜县| 武川县| 中西区| 榆社县| 阜城县| 同仁县| 大理市| 镇安县| 云龙县| 枝江市| 朔州市| 化隆| 华坪县| 江北区| 石狮市| 罗甸县| 桂平市| 双辽市| 深圳市| 万荣县| 沙洋县| 太仆寺旗| 合山市|