×
单片机 > 单片机程序设计 > 详情

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

发布时间:2020-05-26 发布时间:
|
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灭,以此类推。
 
 
[page]
 
 
    源代码:
 
        
 
 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
关键字:单片机  闪烁灯  流水灯 

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
实验八 交通灯控制(80C51单片机汇编语言编程)