📄 multi-display.asm
字号:
LIST P=16F877
INCLUDE "P16F877.INC"
PINTER EQU 20H
COUNT EQU 21H
DEL1 EQU 22H
DEL2 EQU 23H
DEL3 EQU 24H
DEL4 EQU 25H
DEL5 EQU 26H
ORG 0X0000
NOP
;*************************************************************************
;My Main Program
;*************************************************************************
MAIN
BSF STATUS, RP0
BCF STATUS, RP1
CLRF TRISC
;SIDERODE RED_ON
BCF STATUS, RP0
BCF PORTC, 1
BCF PORTC, 2
BSF PORTC, 3
;MAINROAD GREEN_ON
BSF STATUS, RP0
CLRF TRISB
CLRF TRISD
BCF STATUS, RP0
MOVLW 00H
MOVWF PORTB
MOVLW 00H
MOVWF PINTER
LOOPA MOVF PINTER, W
CALL TABLE
MOVWF PORTD
GOTO GREEN_3S
CHANGE1 INCF PINTER
MOVLW 07H
SUBWF PINTER, W
BTFSS STATUS, Z
GOTO LOOPA
;SIDERODE YELLOW_ON
BCF STATUS, RP0
CLRF PORTC
BCF PORTC, 1
BSF PORTC, 2
BCF PORTC, 3
;MAINROAD YELLOW_ON
BSF STATUS, RP0
CLRF TRISB
CLRF TRISD
BCF STATUS, RP0
MOVLW 0FFH
MOVWF PORTB
MOVLW 0FFH
MOVWF PORTD
GOTO YELLOW_1S
;SIDEROAD YELLOW_OFF
OFF BCF STATUS, RP0
BCF PORTC, 1
BCF PORTC, 2
BCF PORTC, 3
;MAINROAD YELLOW_OFF
MOVLW 00H
MOVWF PORTB
MOVLW 00H
MOVWF PORTD
CALL DELAY_1S
;SIDEROAD YELLOW_ON
BCF PORTC, 1
BSF PORTC, 2
BCF PORTC, 3
;MAINROAD YELLOW_ON
MOVLW 0FFH
MOVWF PORTB
MOVLW 0FFH
MOVWF PORTD
GOTO YELLOW_1SS
;SIDEROAD GREEN_ON
NEXT BSF PORTC, 1
BCF PORTC, 2
BCF PORTC, 3
;MAINROAD RED_ON
CLRF PORTD
CLRF PINTER
MOVLW 00H
MOVWF PORTD
MOVLW 00H
MOVWF PINTER
LOOPB MOVF PINTER, W
CALL TABLE
MOVWF PORTB
GOTO RED_3S
CHANGE2 INCF PINTER
MOVLW 07H
SUBWF PINTER, W
BTFSS STATUS, Z
GOTO LOOPB
GOTO MAIN
;*************************************
;TABLE
;*************************************
TABLE ADDWF PCL, F
RETLW 0FFH
RETLW 0FEH
RETLW 0FCH
RETLW 0F8H
RETLW 0F0H
RETLW 0E0H
RETLW 0C0H
RETLW 080H
;********************************************
;GREEN_3S
;********************************************
GREEN_3S
MOVLW 00H
MOVWF COUNT
CHECK_3S
BSF STATUS, RP0
CLRF TRISC
BCF STATUS, RP0
BCF PORTC, 6
BCF PORTC, 5
BCF PORTC, 4 ; 000
CALL DELAY_5MS
INCF COUNT, 1
MOVLW 96H ; 150 in decimal
SUBWF COUNT, W
BTFSC STATUS, Z
GOTO CHANGE1
BCF PORTC, 6
BCF PORTC, 5
BSF PORTC, 4 ; 001
CALL DELAY_5MS
INCF COUNT, 1
MOVLW 96H ; 150 in decimal
SUBWF COUNT, W
BTFSC STATUS, Z
GOTO CHANGE1
BCF PORTC, 6
BSF PORTC, 5
BCF PORTC, 4 ; 010
CALL DELAY_5MS
INCF COUNT, 1
MOVLW 96H ; 150 in decimal
SUBWF COUNT, W
BTFSC STATUS, Z
GOTO CHANGE1
BCF PORTC, 6
BSF PORTC, 5
BSF PORTC, 4 ; 011
CALL DELAY_5MS
INCF COUNT, 1
MOVLW 96H ; 150 in decimal
SUBWF COUNT, W
BTFSC STATUS, Z
GOTO CHANGE1
BSF PORTC, 6
BCF PORTC, 5
BCF PORTC, 4 ; 100
CALL DELAY_5MS
INCF COUNT, 1
MOVLW 96H ; 150 in decimal
SUBWF COUNT, W
BTFSC STATUS, Z
GOTO CHANGE1
BSF PORTC, 6
BCF PORTC, 5
BSF PORTC, 4 ; 101
CALL DELAY_5MS
INCF COUNT, 1
MOVLW 96H ; 150 in decimal
SUBWF COUNT, W
BTFSC STATUS, Z
GOTO CHANGE1
BSF PORTC, 6
BSF PORTC, 5
BCF PORTC, 4 ; 110
CALL DELAY_5MS
INCF COUNT, 1
MOVLW 96H ; 150 in decimal
SUBWF COUNT, W
BTFSC STATUS, Z
GOTO CHANGE1
BSF PORTC, 6
BSF PORTC, 5
BSF PORTC, 4 ; 111
CALL DELAY_5MS
INCF COUNT, 1
MOVLW 96H ; 150 in decimal
SUBWF COUNT, W
BTFSC STATUS, Z
GOTO CHANGE1
GOTO CHECK_3S
;********************************************
;YELLOW_1S
;********************************************
YELLOW_1S
MOVLW 00H
MOVWF COUNT
CHECK_1S
BSF STATUS, RP0
CLRF TRISC
BCF STATUS, RP0
BCF PORTC, 6
BCF PORTC, 5
BCF PORTC, 4 ; 000
CALL DELAY_5MS
INCF COUNT, 1
MOVLW 32H ; 50 in decimal
SUBWF COUNT, W
BTFSC STATUS, Z
GOTO OFF
BCF PORTC, 6
BCF PORTC, 5
BSF PORTC, 4 ; 001
CALL DELAY_5MS
INCF COUNT, 1
MOVLW 32H ; 50 in decimal
SUBWF COUNT, W
BTFSC STATUS, Z
GOTO OFF
BCF PORTC, 6
BSF PORTC, 5
BCF PORTC, 4 ; 010
CALL DELAY_5MS
INCF COUNT, 1
MOVLW 32H ; 50 in decimal
SUBWF COUNT, W
BTFSC STATUS, Z
GOTO OFF
BCF PORTC, 6
BSF PORTC, 5
BSF PORTC, 4 ; 011
CALL DELAY_5MS
INCF COUNT, 1
MOVLW 32H ; 50 in decimal
SUBWF COUNT, W
BTFSC STATUS, Z
GOTO OFF
BSF PORTC, 6
BCF PORTC, 5
BCF PORTC, 4 ; 100
CALL DELAY_5MS
INCF COUNT, 1
MOVLW 32H ; 50 in decimal
SUBWF COUNT, W
BTFSC STATUS, Z
GOTO OFF
BSF PORTC, 6
BCF PORTC, 5
BSF PORTC, 4 ; 101
CALL DELAY_5MS
INCF COUNT, 1
MOVLW 32H ; 50 in decimal
SUBWF COUNT, W
BTFSC STATUS, Z
GOTO OFF
BSF PORTC, 6
BSF PORTC, 5
BCF PORTC, 4 ; 110
CALL DELAY_5MS
INCF COUNT, 1
MOVLW 32H ; 50 in decimal
SUBWF COUNT, W
BTFSC STATUS, Z
GOTO OFF
BSF PORTC, 6
BSF PORTC, 5
BSF PORTC, 4 ; 111
CALL DELAY_5MS
INCF COUNT, 1
MOVLW 32H ; 50 in decimal
SUBWF COUNT, W
BTFSC STATUS, Z
GOTO OFF
GOTO CHECK_1S
;********************************************
;YELLOW_1SS
;********************************************
YELLOW_1SS
MOVLW 00H
MOVWF COUNT
CHECK_1SS
BSF STATUS, RP0
CLRF TRISC
BCF STATUS, RP0
BCF PORTC, 6
BCF PORTC, 5
BCF PORTC, 4 ; 000
CALL DELAY_5MS
INCF COUNT, 1
MOVLW 32H ; 50 in decimal
SUBWF COUNT, W
BTFSC STATUS, Z
GOTO NEXT
BCF PORTC, 6
BCF PORTC, 5
BSF PORTC, 4 ; 001
CALL DELAY_5MS
INCF COUNT, 1
MOVLW 32H ; 50 in decimal
SUBWF COUNT, W
BTFSC STATUS, Z
GOTO NEXT
BCF PORTC, 6
BSF PORTC, 5
BCF PORTC, 4 ; 010
CALL DELAY_5MS
INCF COUNT, 1
MOVLW 32H ; 50 in decimal
SUBWF COUNT, W
BTFSC STATUS, Z
GOTO NEXT
BCF PORTC, 6
BSF PORTC, 5
BSF PORTC, 4 ; 011
CALL DELAY_5MS
INCF COUNT, 1
MOVLW 32H ; 50 in decimal
SUBWF COUNT, W
BTFSC STATUS, Z
GOTO NEXT
BSF PORTC, 6
BCF PORTC, 5
BCF PORTC, 4 ; 100
CALL DELAY_5MS
INCF COUNT, 1
MOVLW 32H ; 50 in decimal
SUBWF COUNT, W
BTFSC STATUS, Z
GOTO NEXT
BSF PORTC, 6
BCF PORTC, 5
BSF PORTC, 4 ; 101
CALL DELAY_5MS
INCF COUNT, 1
MOVLW 32H ; 50 in decimal
SUBWF COUNT, W
BTFSC STATUS, Z
GOTO NEXT
BSF PORTC, 6
BSF PORTC, 5
BCF PORTC, 4 ; 110
CALL DELAY_5MS
INCF COUNT, 1
MOVLW 32H ; 50 in decimal
SUBWF COUNT, W
BTFSC STATUS, Z
GOTO NEXT
BSF PORTC, 6
BSF PORTC, 5
BSF PORTC, 4 ; 111
CALL DELAY_5MS
INCF COUNT, 1
MOVLW 32H ; 50 in decimal
SUBWF COUNT, W
BTFSC STATUS, Z
GOTO NEXT
GOTO CHECK_1SS
;********************************************
;RED_3S
;********************************************
RED_3S
MOVLW 00H
MOVWF COUNT
CHECK_3SEC
BSF STATUS, RP0
CLRF TRISC
BCF STATUS, RP0
BCF PORTC, 6
BCF PORTC, 5
BCF PORTC, 4 ; 000
CALL DELAY_5MS
INCF COUNT, 1
MOVLW 96H ; 150 in decimal
SUBWF COUNT, W
BTFSC STATUS, Z
GOTO CHANGE2
BCF PORTC, 6
BCF PORTC, 5
BSF PORTC, 4 ; 001
CALL DELAY_5MS
INCF COUNT, 1
MOVLW 96H ; 150 in decimal
SUBWF COUNT, W
BTFSC STATUS, Z
GOTO CHANGE2
BCF PORTC, 6
BSF PORTC, 5
BCF PORTC, 4 ; 010
CALL DELAY_5MS
INCF COUNT, 1
MOVLW 96H ; 150 in decimal
SUBWF COUNT, W
BTFSC STATUS, Z
GOTO CHANGE2
BCF PORTC, 6
BSF PORTC, 5
BSF PORTC, 4 ; 011
CALL DELAY_5MS
INCF COUNT, 1
MOVLW 96H ; 150 in decimal
SUBWF COUNT, W
BTFSC STATUS, Z
GOTO CHANGE2
BSF PORTC, 6
BCF PORTC, 5
BCF PORTC, 4 ; 100
CALL DELAY_5MS
INCF COUNT, 1
MOVLW 96H ; 150 in decimal
SUBWF COUNT, W
BTFSC STATUS, Z
GOTO CHANGE2
BSF PORTC, 6
BCF PORTC, 5
BSF PORTC, 4 ; 101
CALL DELAY_5MS
INCF COUNT, 1
MOVLW 96H ; 150 in decimal
SUBWF COUNT, W
BTFSC STATUS, Z
GOTO CHANGE2
BSF PORTC, 6
BSF PORTC, 5
BCF PORTC, 4 ; 110
CALL DELAY_5MS
INCF COUNT, 1
MOVLW 96H ; 150 in decimal
SUBWF COUNT, W
BTFSC STATUS, Z
GOTO CHANGE2
BSF PORTC, 6
BSF PORTC, 5
BSF PORTC, 4 ; 111
CALL DELAY_5MS
INCF COUNT, 1
MOVLW 96H ; 150 in decimal
SUBWF COUNT, W
BTFSC STATUS, Z
GOTO CHANGE2
GOTO CHECK_3SEC
;*********************************************************************
;DELAY_5MS
;*********************************************************************
DELAY_5MS
MOVLW 07H
MOVWF DEL1
LOOP1 MOVLW 0FFH
MOVWF DEL2
LOOP2 DECFSZ DEL2
GOTO LOOP2
DECFSZ DEL1
GOTO LOOP1
RETURN
;*****************************************************************
;DELAY_1S
;*****************************************************************
DELAY_1S
MOVLW 06H
MOVWF DEL3
LOOP4 MOVLW 0EBH
MOVWF DEL4
LOOP5 MOVLW 0ECH
MOVWF DEL5
LOOP6 DECFSZ DEL5
GOTO LOOP6
DECFSZ DEL4
GOTO LOOP5
DECFSZ DEL3
GOTO LOOP4
RETURN
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -