欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2215|回復: 3
收起左側

單片機匯編語言實現4中方式流水燈不能隨著開關的變化而變化

[復制鏈接]
ID:777603 發表于 2020-12-6 23:49 | 顯示全部樓層 |閱讀模式
我的流水方式不能隨著開關的變化而變化,剛剛學。以下是我寫的代碼:怎么修改我的代碼讓它能隨開關的變化而變化。
ORG        0000H
LJMP        MAIN
ORG     0030H
        MAIN:        SETB         P1.2
                        SETB         P1.1
                        JB        P1.1 ,NEXT
                        JB        P1.2,NEXT1
                        AJMP        LOOP4
                NEXT1:AJMP        LOOP2
                NEXT:JB        P1.2,NEXT2
                AJMP        LOOP3
                NEXT2:AJMP        LOOP1                //開關的狀態對應流水彩燈的方式

                DL1:MOV R3,#20
                L1:        MOV        R1,#20
                L2:        MOV        R2,#250
                        DJNZ   R2,$
                       DJNZ   R1,L2
                       DJNZ   R3,L1               
                        RET                                        //延時0.2s

        DL2:MOV R4,#30
                L3:        MOV        R5,#20
                L4:        MOV        R6,#250
                        DJNZ   R6,$
                DJNZ   R5,L4
                DJNZ   R4,L3              
                        RET                                        //延時0.3s

        DL3:MOV R3,#40
                L5:        MOV        R1,#20
                L6:        MOV        R2,#250
                        DJNZ   R2,$
                DJNZ   R1,L6
                DJNZ   R3,L5               
                        RET                                        //延時0.4s

                LOOP1:MOV A,#10000000B
                          MOV R7,#08H
           START1:MOV P3,A
                          LCALL DL1
                          DJNZ R7,N1
                          AJMP LOOP1
                   N1:RR A
                          AJMP START1                //方式1

                LOOP2:MOV R0,#07H
                          MOV R7,#10000000B
                          MOV A,#10000000B
           START2:MOV P3,A
                          LCALL DL2
                          DJNZ R0,N2
                          MOV P3,#00H
                          AJMP LOOP2
                   N2:RR A
                          ORL A,R7
                          MOV R7,A
                          AJMP START2                //方式2

                LOOP3:MOV P3,#0FFH
                          LCALL DL3
                          MOV P3,#01111110B
                          LCALL DL3
                          MOV P3,#00111100B
                          LCALL DL3
                          MOV P3,#00011000B
                          LCALL DL3
                          MOV P3,#00H
              LCALL DL3
                          AJMP LOOP3                //方式3

                LOOP4:MOV P3,#00H
LCALL DL3
                          MOV A,#01H
                          MOV R7,#08H
        START3:          MOV P3,A
                          LCALL DL3
                          DJNZ R7,N3
                          MOV R7,#07H
          N4:          RR A
                          MOV P3,A
                          LCALL DL3
                          DJNZ R7,N4
              AJMP   LOOP4
          N3:          RL A
                          AJMP START3
                           END                                //方式4

l流水燈要求.PNG
回復

使用道具 舉報

ID:401564 發表于 2020-12-8 08:23 | 顯示全部樓層
第一:電路呢?
第二:單片機型號呢?
第三:這是仿真還是開發板的結果?
建議:在KEIL環境下,不用區分"JMP"和"AJMP",全部用JMP,CALL就可以了,編譯器會自動識別的
每個子程序之間用;==============================隔開,這樣就更能清楚的顯示你的程序走向,不然別人看不明白的,匯編用的人少

評分

參與人數 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

ID:777603 發表于 2020-12-8 11:11 | 顯示全部樓層
Y_G_G 發表于 2020-12-8 08:23
第一:電路呢?
第二:單片機型號呢?
第三:這是仿真還是開發板的結果?

學校里的實驗,開發板,可以仿真,也可以去實驗室下到硬件里驗證。好,謝謝
回復

使用道具 舉報

ID:517466 發表于 2020-12-8 12:27 | 顯示全部樓層
你的程序邏輯,有風格,哈哈哈。一把的邏輯,不是在主程序里建立循環,在循環里,根據開關的狀態值,來決定調用哪個顯示處理嗎?假設P1采樣開關值,P2口顯示流水燈, "0"亮, “1”滅

MAIN:              MOV   A, P1
                      JNZ     MODE1               ;開關狀態是0嗎?
                      LCALL  DISP_MODE0      ;是0,  按照方式0顯示
                      LJMP   MAIN

MODE1:        XRL    A, #1                 ;開關狀態是1嗎?
                     JNZ    MODE2               
                     LCALL  DISP_MODE1      ;是1,  按照方式1顯示
                     LJMP   MAIN

MODE2:       MOV   A, P1  
                     XRL    A, #2                 ;開關狀態是2嗎?
                     JNZ    MODE3               
                     LCALL  DISP_MODE3      ;是2,  按照方式2顯示
                     LJMP   MAIN

MODE3:       MOV   A, P1
                     XRL    A, #3                 ;開關狀態是3嗎?
                     JNZ    MAIN               
                     LCALL  DISP_MODE3      ;是3,  按照方式3顯示

                     LJMP   MAIN

DIMSP_MODE0: 按照方式0顯示流水燈,每次只亮一個,從Bit0->Bit7
                   MOV  A, #0FEH
                   MOV  P2, A                         ;點亮P20對應的燈
                   LCALL  DELAY500MS

                  MOV  R7, 7
MODE0_LOOP:
                   SETB   C
                   RLC   A                     ;帶進位1做循環,使0依次從Bit0->Bit7
                  MOV  P2, A                ;輸出到P2口,點亮“0”對應的Bit口位
                  LCALL  DELAY500MS  ;延遲顯示一段時間
                  DJNZ   R7, MODE0_LOOP    ;是否已經完成所有循環
                    RET

DIMSP_MODE1: 按照方式1顯示流水燈,逐個點亮所有LED
                  ;0FFH + 進位標志C=0, RLC A,保證P2從0FEH,0FCH,0F8H, ... 到00H
                 ;一次是P2的Bit0到Bit7全部輸出0,從而逐個點亮所有LED
                  ...
                    RET
DIMSP_MODE2: 按照方式2顯示流水燈
                   ...
                    RET

DIMSP_MODE3: 按照方式3顯示流水燈
                   ...
                    RET

DELAY500MS:
               ;循環R6,R5,R4等,保證實現接近500ms
               ...
               RET

具體顯示,我只寫了處理邏輯,具體代碼,需要你自己發揮了。
還有一個比較簡單的處理方式,你預先把要顯示的模式中,對應P2的變化值,寫到一個數組中,然后在
顯示處理中,循環取得這些值并輸出到P2口。

;利用MOVC A,@A+DPTR指令,從預設的顯示數據區取得輸出數據
;方式0顯示流水燈,每次只亮一個,從Bit0->Bit7
TAB_MODE0:  DB 11111110B, 11111101B, 11111011B,  11110111B,
                          11101111B, 11011111B, 10111111B, 01111111B
;依次全部點亮
TAB_MODE1:  DB 11111110B, 11111100B, 11111000B, 11110000B,
                           11100000B, 11000000B, 10000000B,00000000B
;先全亮,從外向中間轉移滅燈
TAB_MODE2: DB  00000000B,  10000001B , 11000011B, 11100111B,  11111111B

為了更直觀,數據區的定義,我都是用2進制表示的數據。0對應亮,1對應滅
自定義顯示流水燈,你可以在內存開辟一段區域,運行時動態指定這些區域的數據,然后利用循環,把這數據依次輸出到P2口,就完成了自定義顯示模式。
   

評分

參與人數 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表