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

2.2 跑馬燈實例

在上一節(jié)點亮1只LED的基礎上,讓我們來看看如何控制多只LED實現(xiàn)跑馬燈效果。

2.2.1 硬件電路圖

本實例中,硬件電路和上一節(jié)的硬件電路相似,為了實現(xiàn)跑馬燈,本實例電路連接了8只LED,原理電路圖如圖2-2所示。

圖2-2 跑馬燈原理電路圖

2.2.2 軟件程序設計

控制多只LED實現(xiàn)跑馬燈效果可以有多種實現(xiàn)方式,下面給出其中兩種,請對比這兩種實現(xiàn)方式的優(yōu)劣。

1.程序全貌

首先,使用上節(jié)學習的直接尋址位置1指令SETB bit和直接尋址位清0指令CLR bit控制P1口實現(xiàn)跑馬燈效果,以下為程序實例。

    ;-----------------------------------
    ;                   跑馬燈實例
    ;功能:循環(huán)輪流點亮8只發(fā)光管LED
    ;-----------------------------------
    LED1_PIN EQU        P1.0
    LED2_PIN EQU        P1.1
    LED3_PIN EQU        P1.2
    LED4_PIN EQU        P1.3
    LED5_PIN EQU        P1.4
    LED6_PIN EQU        P1.5
    LED7_PIN EQU        P1.6
    LED8_PIN EQU        P1.7

    ORG 0000H                     ;偽指令,指定程序從0000H開始存放
    LJMP  MAIN                    ;跳轉指令,程序跳轉到MAIN處

    ORG 0100H                     ;偽指令,指定以下程序從0100H開始存放
    MAIN:
        MOV  SP,#60H              ;給堆棧指針賦初值
        MOV  P1,#0FFH             ;給P1賦初值,LED全滅                                (1)
    LIGHT:
        CLR       LED1_PIN        ;清零P1.0,LED1亮                                   (2)
        LCALL     DELAY           ;調延時子程序                                       (3)
        SETB LED1_PIN             ;置一P1.0,LED1滅                                   (4)
        CLR       LED2_PIN        ;清零P1.1,LED2亮                                   (5)
        LCALL     DELAY           ;調延時子程序                                       (6)
        SETB LED2_PIN             ;置一P1.1,LED2滅                                   (7)
        CLR       LED3_PIN        ;清零P1.2,LED3亮                                   (8)
        LCALL     DELAY           ;調延時子程序                                       (9)
        SETB LED3_PIN             ;置一P1.2,LED3滅                                   (10)
        CLR       LED4_PIN        ;清零P1.3,LED4亮                                   (11)
        LCALL     DELAY           ;調延時子程序                                       (12)
        SETB LED4_PIN             ;置一P1.3,LED4滅                                   (13)
        CLR       LED5_PIN        ;清零P1.4,LED5亮                                   (14)
        LCALL     DELAY           ;調延時子程序                                       (15)
        SETB LED5_PIN             ;置一P1.4,LED5滅                                   (16)
        CLR       LED6_PIN        ;清零P1.5,LED6亮                                   (17)
        LCALL     DELAY           ;調延時子程序                                       (18)
        SETB LED6_PIN             ;置一P1.5,LED6滅                                   (19)
        CLR       LED7_PIN        ;清零P1.6,LED7亮                                   (20)
        LCALL     DELAY           ;調延時子程序                                       (21)
        SETB LED7_PIN             ;置一P1.6,LED7滅                                   (22)
        CLR       LED8_PIN        ;清零P1.7,LED8亮                                   (23)
        LCALL     DELAY           ;調延時子程序                                       (24)
        SETB LED8_PIN             ;置一P1.7,LED8滅                                   (25)
        AJMP LIGHT                ;跳轉,程序繼續(xù)                                     (26)
    ;延時子程序
    DELAY:
        MOV  R7,#10H
    DELAY0:
        MOV  R6,#7FH
    DELAY1:
        MOV  R5,#7FH
        DJNZ R5,$
        DJNZ R6,DELAY1
        DJNZ R7,DELAY0
        RET
    END

本實例也可使用循環(huán)左移指令和循環(huán)右移指令來實現(xiàn)跑馬燈效果,循環(huán)左移指令和循環(huán)右移指令的功能見表2-6。

表2-6 循環(huán)左移指令和循環(huán)右移指令

(1)~(26)程序替換為如下程序,運行結果不變。

    LIGHT:
        MOV  R0,#08H         ;給R0賦初值08H,循環(huán)右移8次
        MOV  A,#0FEH         ;給A賦初值0FEH,即11111110
    LOOP:
        RR        A          ;右移1位
        MOV  P1,A            ;輸出顯示
        LCALL     DELAY      ;調延時子程序
        DJNZ R0,LOOP         ;循環(huán)右移8次
        SJMP LIGHT           ;跳轉,程序繼續(xù)

2.運行結果

該實例的運行結果為8只LED循環(huán)輪流點亮。

2.2.3 技巧總結

本實例技巧總結如下:

● 同樣的運行結果,使用合適的指令可以大大減少代碼量,節(jié)省程序空間。

● 循環(huán)移位指令的應用——乘除法運算:左移1 次 = 無符號數(shù)乘2 運算,右移1次 = 有符號數(shù)除2運算。

主站蜘蛛池模板: 五家渠市| 监利县| 哈巴河县| 南乐县| 阿拉善左旗| 陈巴尔虎旗| 额济纳旗| 华阴市| 宜昌市| 原平市| 临湘市| 清徐县| 五家渠市| 兴业县| 晋江市| 嘉峪关市| 三穗县| 铅山县| 甘泉县| 娱乐| 广东省| 温宿县| 军事| 乳山市| 昌邑市| 宝鸡市| 新竹县| 八宿县| 贵溪市| 望城县| 涟源市| 合川市| 元谋县| 礼泉县| 柞水县| 许昌县| 巴林左旗| 南平市| 定兴县| 武清区| 乌苏市|