专注电子技术学习与研究
当前位置:单片机教程网 >> MCU设计实例 >> 浏览文章

单片机闪烁灯流水灯汇编代码大全

作者:佚名   来源:本站原创   点击数:  更新时间:2012年11月21日   【字体:
1、单片机AT89C51的P2口接8个发光二极管,让这8个发光二极管显示闪烁功能,即八灯亮2S,熄灭3S,如此循环。

参考程序:

       ORG 0000H

start:       MOV P1,#0H

       CALL delay

       MOV P1,#0FFH

       CALL delay

       CALL delay

       LJMP start

delay:

       MOV R7,#200

d2:   MOV R6,#250

d1:   DJNZ R6,d1

       DJNZ R7,d2

       RET

       END     

      ;200*250次*2*1us=1000ms=1s

2、单片机AT89C51的P1口接8个发光二极管,让这8个发光二极管能够双灯左移之后再双灯右移,
形成霹雳灯的效果,如此循环5次后全灭,延时0.5S。灯右移,形成霹雳灯的效果,
如此循环5次后全灭。延时0.5S。

参考程序1:

       ORG 0000H

       MOV A,#11111100B

start:

       MOV P1,A

       CALL delay

       RL A

       RL A

INC R0

       CJNE R0,#4,start

       MOV R0,#00H

s:    

       RR A

       RR A

       MOV P1,A

       CALL delay

       INC R0

       CJNE R0,#4,s

       MOV R0,#00H

       LJMP start

     

delay:     MOV R5,#100

k1: MOV R6,#250

k2: MOV R7,#250

k3:   DJNZ R7,k3

          DJNZ R6,k2

          DJNZ R5,k1

       RET

       END

参考程序2:

ORG 0000H

 MOV R0,#5

 start:

 MOV P2,#11111100B

 CALL delay0_5s

 MOV P2,#11110011B

 CALL delay0_5s

 MOV P2,#11001111B

 CALL delay0_5s

 MOV P2,#00111111B

 CALL delay0_5s

 MOV P2,#11001111B

 CALL delay0_5s

 MOV P2,#11110011B

 CALL delay0_5s

 MOV P2,#11111100B

 CALL delay0_5s

 DJNZ R0,start

 MOV P2,#0FFH

 SJMP $

 

 delay0_5s:

    MOV R7,#20

d3: MOV R6,#200

d2: MOV R5,#250

d1: NOP

    NOP

    DJNZ R5,d1

    DJNZ R6,d2

    DJNZ R7,d3

 RET

 END

3、单片机AT89C51的P2口接8个发光二极管,让这8个发光二极管先交互闪烁5次,
然后双灯左移之后再双灯右移,如此循环,形成流水灯的效果,延时0.5S。

       ORG 0000H

       MOV R0,#5

start:

       MOV P1,#10101010B

       CALL delay

       MOV P1,#01010101B

       CALL delay

       DJNZ R0,start

       MOV R0,#5

       MOV A,#11111100B

s1:   MOV P1,A   

       CALL delay   

       RL A

       RL A

       CJNE A,#11111100B,s1

s2:     RR A

       RR A

       MOV P1,A

       CALL delay

       CJNE A,#11111100B,s2

       JMP start

             

delay:     MOV R5,#100

k1: MOV R6,#250

k2: MOV R7,#250

k3:   DJNZ R7,k3

          DJNZ R6,k2

          DJNZ R5,k1

       RET

       END

4、单片机AT89C51的P1口和P2口分别接八个发光二极管,P2口八灯实现左移,延时0.5S,
要求左移第一次,P1.0对应灯点亮,P2口灯左移第二次,P1.1对应灯亮,如此延续下去,
直至左移八次后,所有灯全灭。

       ORG 0000H

       MOV R0,#11111110B

start:       MOV A,#11111110B

       MOV P2,A

s:     CALL delay

       RL A

       MOV P2,A

        CALL delay

       CJNE A,#01111111B,s

       MOV A,R0

       MOV P1,A

       RL A

       MOV R0,A

       JMP start

             

delay:     MOV R5,#100

k1: MOV R6,#250

k2: MOV R7,#250

k3:   DJNZ R7,k3

          DJNZ R6,k2

          DJNZ R5,k1

       RET

       END

5、单片机AT89C51的P2.0、P2.1和P2.2分别接按钮开关PB1、PB2和PB3;P1.0接一个LED。按下PB1,
则LED亮;按下PB2则LED灭;按下PB3则LED闪烁。延时为0.1S。

原理图:

  

参考程序:

       ORG 0000H

       MOV P2,#0FFH

s1:   JNB P2.0,s3

       JNB P2.1,s2

       JNB P2.2,s4

       JMP s1

s2:   SETB P1.0

       JMP s1

s3:   CLR P1.0

       JMP s1

s4:     SETB P1.0

       CALL delay

        CLR P1.0    

       CALL delay

       JNB P2.0,s3

       JNB P2.1,s2

       JMP s4

             

delay:     MOV R5,#100

k1: MOV R6,#250

k2: MOV R7,#250

k3:   DJNZ R7,k3

          DJNZ R6,k2

          DJNZ R5,k1

       RET

       END

 

6、单片机AT89C51的P2.0、P2.1和P2.2分别接按钮开关PB1、PB2和PB3;P1口接8个LED。
按下PB1,则8个LED闪烁;按下PB2则8个LED单灯右移;按下PB3则8个LED单灯左移。延时为0.1S。

 

源代码:

        

          ORG          0

          MOV          P2,#0FFH

LOOP:     JNB          P2.0,LOOP_1

          JNB          P2.1,LOOP_2

          JNB          P2.2,LOOP_3

          JMP          LOOP

 

LOOP_1:   MOV          R0,#2

LOOP_1_1: MOV          A,#10101010B

          MOV          P0,A

          CALL         D100MS

          MOV          A,#01010101B

          MOV          P0,A

          CALL         D100MS

      MOV          P0,#11111111B

          DJNZ         R0,LOOP_1_1

LOOP_1_2: JB           P2.0,LOOP

          JMP          LOOP_1_2

 

LOOP_2:   MOV          A,#11111110B

          MOV          R0,#8

LOOP_2_1: MOV          P0,A

      RL           A

      CALL         D100MS

          DJNZ         R0,LOOP_2_1

      MOV          P0,#11111111B

LOOP_2_2: JB           P2.1,LOOP

          JMP          LOOP_2_2

 

LOOP_3:   MOV          A,#01111111B

          MOV          R0,#8

LOOP_3_1: MOV          P0,A

          RR           A

          CALL         D100MS

          DJNZ         R0,LOOP_3_1

          MOV          P0,#11111111B

LOOP_3_2: JB           P2.2,LOOP

          JMP          LOOP_3_2

 

D100MS:   MOV          R7,#250

D1:       MOV          R6,#200

          DJNZ         R6,$

          DJNZ         R7,D1

          RET

          END

7、单片机AT89C51的P2口分别接8个指拨开关;P0口接8个LED。指拨开关闭合之前8个LED全亮,
闭合指拨开关P2.0,则P0.0所对应的LED灭,以此类推。



 

    源代码:

        

 ORG          0

          MOV          A,#00000000B

          MOV          P0,A

 

          MOV          P2,#0FFH

LOOP:    MOV          A,P2

          CPL           A

          MOV          P0,A

          JMP            LOOP

          END

8、单片机AT89C51的P2口分别接8个指拨开关;P0口接8个LED。
指拨开关闭合之前8个LED单灯左移3次后,全亮,闭合指拨开关P2.0,
则P0.0所对应的LED灭,以此类推。延时为0.2S。

原理图:

  源代码:

       

           ORG          0

           MOV          R1,#3

LOOP1:     MOV          R0,#8

           MOV          A,#11111110B

LOOP2:    MOV          P0,A

           RL           A

           CALL         D200MS

           DJNZ         R0,LOOP2

           DJNZ         R1,LOOP1

           MOV          A,#00000000B

           MOV          P0,A

           MOV          P2,#0FFH

LOOP:     MOV          A,P2

           CPL          A

           MOV          P0,A

           JMP          LOOP

D200MS:

           MOV          R7,#250

D1:        MOV          R6,#200

D2:        MOV          R5,#2

           DJNZ         R5,$

           DJNZ         R6,D2

           DJNZ         R7,D1

           RET

           END

9、单片机AT89C51的P2.0、P2.1和P2.2口分别接一个按钮开关,
P1口低4位接译码器7447,7447输出部分接共阳极LED数码管。要求按一下P2.0口对应按钮,数码管显示数字“0”;
按一下P2.1口对应按钮,数码管显示数字“8”;按一下P2.2口对应按钮,数码管所显示的数字被关闭。

原理图:

      源代码:

                ORG 0000H 

        START:  MOV P2,#0FFH

        LOOP:   JNB P2.0,ON

                JNB P2.1,ON8

                JNB P2.2,OFF

 

                JMP LOOP  

     ON:        MOV P1,#00H

    ON_1:       JB      P2.0,LOOP

                JMP     ON_1    

 

    ON8:        MOV P1,#08H

    ON_8:       JB      P2.1,LOOP

                JMP     ON_8  

 

    OFF:        MOV P1,#0FFH

    OFF_1:      JB      P2.2,LOOP

                JMP OFF_1 

                END

10、单片机AT89C51的P2口接7447驱动一个共阳极七段数码管。让该数码管循环显示数字“9~0”,延时为1S。

       ORG 0000H

       MOV R0,#10

start:     

       DJNZ R0,s

       MOV P2,R0

       CALL delay

       MOV R0,#10

       JMP start

s:     MOV P2,R0

       CALL delay

       JMP start

             

delay:     MOV R5,#100

k1: MOV R6,#250

k2: MOV R7,#250

k3:   DJNZ R7,k3

          DJNZ R6,k2

          DJNZ R5,k1

       RET

       END

11、单片机AT89C51的P2口接7447驱动一个共阳极七段数码管。
让该数码管显示数字“2~6”,之后显示“9~0”,如此循环,延时为1S。

ORG       0

START:     MOV       R0,#5

             MOV       A,#2

LOOP_1:  MOV       P2,A

             INC       A

             CALL      D1000MS

             DJNZ      R0,LOOP_1

             MOV       R0,#10

          MOV       A,#9

LOOP_2:   MOV       P2,A

             DEC       A

             CALL      D1000MS

             DJNZ      R0,LOOP_2

             JMP       START

D1000MS:

          MOV       R7,#250

D1:        MOV       R6,#200

D2:        MOV       R5,#250

             DJNZ      R5,$

             DJNZ      R6,D2

             DJNZ      R7,D1

             RET

             END

12、四个集成共阳极七段数码管的公共端以PNP三极管做开关分别连接到单片机AT89C51的P1低四位,
数码管的各显示引脚a~dP分别连接到P2.0~2.7。让4个数码管稳定显示“2012”。

ORG          0

LOOP:  

          MOV          P1,#11111110B

          MOV          P2,#10100100B

          CALL         D4MS

 

          MOV          P1,#11111101B

          MOV          P2,#11000000B

          CALL         D4MS

 

         MOV          P1,#11111011B

          MOV          P2,#11111001B

          CALL         D4MS

 

         MOV          P1,#11110111B

          MOV          P2,#11111001B

          CALL         D4MS

        JMP          LOOP

D4MS:

          MOV          R7,#10

D1:       MOV          R6,#200

          DJNZ         R6,$

          DJNZ         R7,D1

          RET

          END

13、四个集成共阳极七段数码管的公共端以PNP三极管做开关分别连接到单片机AT89C51的P1低四位,
数码管的各显示引脚a~dP分别连接到P2.0~2.7。让LED先稳定显示“2012”,
约1秒之后再稳定显示“12.21”,如此循环。

ORG          0

LOOP:     MOV          R0,#65

LOOP_1:  MOV          P1,#11111110B

          MOV          P2,#10100100B

          CALL         D4MS

             MOV          P1,#11111101B

          MOV          P2,#11000000B

          CALL         D4MS

             MOV          P1,#11111011B

          MOV          P2,#11111001B

          CALL         D4MS

             MOV          P1,#11110111B

          MOV          P2,#11111001B

          CALL         D4MS

            DJNZ         R0,LOOP_1

          MOV          R1,#65

LOOP_2:

          MOV          P1,#11111110B

          MOV          P2,#11111001B

          CALL         D4MS

             MOV          P1,#11111101B

          MOV          P2,#00100100B

          CALL         D4MS

             MOV          P1,#11111011B

          MOV          P2,#10110000B

          CALL         D4MS

             MOV          P1,#11110111B

          MOV          P2,#11000000B

          CALL         D4MS

            DJNZ         R1,LOOP_2

          JMP          LOOP

D4MS:    MOV          R7,#10

D1:       MOV          R6,#200

          DJNZ         R6,$

          DJNZ         R7,D1

          RET

          END

14、单片机AT89C51的P0口接8个LED,用INT0产生中断。主程序正常执行时,P0口的8个LED单灯左移。
当进入中断状态时,P0口的8个LED将变成单灯右移,3个循环后,恢复中断前的状态,
即继续执行8个LED单灯左移。延时为0.5S。

       ORG 0000H

       JMP main

       ORG 0003H

       JMP int_0

main:

       SETB IT0

       SETB EX0

       SETB EA

       MOV A,#11111110B

s:     RL A

       MOV P2,A

       CALL delay

       JMP s

delay:

       MOV R7,#100

d3:   MOV R6,#200

d2:   MOV R5,#250

d1:   DJNZ R5,d1

       DJNZ R6,d2

       DJNZ R7,d3

       RET

int_0:

       MOV P2,A

       MOV R0,#24

k:     RR A

       MOV P2,A

       CALL delay

       DJNZ R0,k

        MOV R0,#24

       RETI

       END

15、功能要求:用 产生中断,主程序正常执行时,数码管循环显示“0~9”,
每0.5S增加1。当进入中断状态时,数码管循环显示“9~0”,
每0.5S减少1,一圈之后恢复中断前的状态。

       ORG 0000H

       JMP main

       ORG 0003H

       JMP int_0

main:

       SETB IT0

       SETB EX0

       SETB EA

s:     MOV P2,A

       CALL delay

       INC A

       CJNE A,#10,s

       MOV A,#0

       JMP s

 

delay:

       MOV R7,#100

d3:   MOV R6,#200

d2:   MOV R5,#250

d1:   DJNZ R5,d1

       DJNZ R6,d2

       DJNZ R7,d3

       RET

int_0:

       MOV A,#10

k:        DEC A

        MOV P2,A

        CALL delay

       CJNE A,#0H,k     

       RETI

       END
关闭窗口

相关文章