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

3.3 左右來回循環(huán)的流水燈

本例運行時,8只LED左右來回循環(huán)滾動點亮,產(chǎn)生來回走馬燈效果。

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

圖3-3 左右來回循環(huán)的流水燈電路

程序設(shè)計調(diào)試與實訓(xùn):

本例中的8只LED連接在P2端口,LED陽極連接P2,陰極通過限流電阻接地,對于P0端口,這樣連接時任何LED都不會點亮,即使P0端口輸出的是0xFF。

由于本例所有LED共陰連接,P2端口相應(yīng)引腳輸出1時,才會使相應(yīng)LED點亮,為產(chǎn)生單個LED循環(huán)滾動效果,P2端口初值設(shè)為0x01(00000001),這會使第1只LED點亮,主程序中第1個for循環(huán)使其循環(huán)左移,依次為00000010,00000100,00001000,……直到變?yōu)?0000000。第2個for循環(huán)使其循環(huán)右移,依次為01000000,00100000,00010000,……直到變?yōu)?0000001如此重復(fù)。

另外,讀者還要注意兩個并列的for循環(huán)都只需要執(zhí)行7次而不是8次。

調(diào)試本例后,讀者可將LED改為共陽連接,重新修改程序,看能否實現(xiàn)同樣的效果,同時,還可以在每次來回滾動顯示后再添加全亮和全滅的閃爍效果。

源程序代碼:

        //-----------------------------------------------------------------
        //  名稱: 8只LED左右來回點亮
        //-----------------------------------------------------------------
        //  說明:程序利用循環(huán)移位函數(shù)_crol_和_cror_形成來回滾動效果。
        //-----------------------------------------------------------------
        #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()
        {
            uchar i;
            P2 = 0x01;
            while(1)
            {
              for (i = 0; i < 7; i++)
              {
                P2 = _crol_(P2,1); //P2端口向左循環(huán)移動1位
                DelayMS(150);
              }
              for (i = 0; i < 7; i++)
              {
                P2 = _cror_(P2,1); //P2端口向右循環(huán)移動1位
                DelayMS(150);
              }
            }
        }
主站蜘蛛池模板: 鹤庆县| 拉萨市| 宣城市| 中西区| 冀州市| 黔西| 丹东市| 冀州市| 五台县| 太仓市| 龙口市| 依兰县| 茶陵县| 招远市| 十堰市| 内丘县| 三台县| 冀州市| 怀化市| 昔阳县| 江川县| 澎湖县| 德化县| 宝鸡市| 天津市| 安多县| 丹东市| 彭山县| 禄丰县| 福鼎市| 都江堰市| 黄山市| 麻城市| 云南省| 临城县| 四平市| 南京市| 大理市| 银川市| 米泉市| 临猗县|