📄 showled1.asm
字号:
subwf MINUTE_1,W
btfss STATUS,Z
goto M1_6
movlw 0x17
movwf COLUM_7
movlw 0x15
movwf COLUM_6
movlw 0x1d
movwf COLUM_5
RETURN
M1_6:
clrf MINUTE_1
incf HOUR,F
RETURN
;; *********************************************************
;; CHECK_CHAR2
;; This subrouting will check the MINUTES value, then adjust the
;; display data in matrix LED.
;; There are two digits in Minutes. This subrouting will fix
;; the digit from 0 to 9.
;; *********************************************************
CHECK_CHAR2:
movlw 0x00
subwf MINUTE_0,W
btfss STATUS,Z
goto M_1
movlw 0x00
movwf COLUM_4
movlw 0x11
movwf COLUM_2
movlw 0x1f
movwf COLUM_1
movwf COLUM_3
RETURN
M_1:
movlw 0x01
subwf MINUTE_0,W
btfss STATUS,Z
goto M_2
movlw 0x00
movwf COLUM_4
movlw 0x1f
movwf COLUM_1
movlw 0x00
movwf COLUM_2
movwf COLUM_3
RETURN
M_2:
movlw 0x02
subwf MINUTE_0,W
btfss STATUS,Z
goto M_3
movlw 0x00
movwf COLUM_4
movlw 0x1d
movwf COLUM_3
movlw 0x15
movwf COLUM_2
movlw 0x17
movwf COLUM_1
RETURN
M_3:
movlw 0x03
subwf MINUTE_0,W
btfss STATUS,Z
goto M_4
movlw 0x00
movwf COLUM_4
movlw 0x15
movwf COLUM_3
movwf COLUM_2
movlw 0x1f
movwf COLUM_1
RETURN
M_4:
movlw 0x04
subwf MINUTE_0,W
btfss STATUS,Z
goto M_5
movlw 0x00
movwf COLUM_4
movlw 0x07
movwf COLUM_3
movlw 0x04
movwf COLUM_2
movlw 0x1f
movwf COLUM_1
RETURN
M_5:
movlw 0x05
subwf MINUTE_0,W
btfss STATUS,Z
goto M_6
movlw 0x00
movwf COLUM_4
movlw 0x17
movwf COLUM_3
movlw 0x15
movwf COLUM_2
movlw 0x1d
movwf COLUM_1
RETURN
M_6:
movlw 0x06
subwf MINUTE_0,W
btfss STATUS,Z
goto M_7
movlw 0x00
movwf COLUM_4
movlw 0x1f
movwf COLUM_3
movlw 0x14
movwf COLUM_2
movlw 0x1c
movwf COLUM_1
RETURN
M_7:
movlw 0x07
subwf MINUTE_0,W
btfss STATUS,Z
goto M_8
movlw 0x00
movwf COLUM_4
movlw 0x01
movwf COLUM_3
movwf COLUM_2
movlw 0x1f
movwf COLUM_1
RETURN
M_8:
movlw 0x08
subwf MINUTE_0,W
btfss STATUS,Z
goto M_9
movlw 0x00
movwf COLUM_4
movlw 0x1f
movwf COLUM_3
movwf COLUM_1
movlw 0x15
movwf COLUM_2
RETURN
M_9:
movlw 0x09
subwf MINUTE_0,W
btfss STATUS,Z
goto M_10
movlw 0x00
movwf COLUM_4
movlw 0x17
movwf COLUM_3
movlw 0x15
movwf COLUM_2
movlw 0x1f
movwf COLUM_1
RETURN
M_10:
clrf MINUTE_0
incf MINUTE_1,F
RETURN
;; *********************************************************
;; SHOW_TIME
;; The all display information is stored in COLUM_1 to COLUM_16
;; This subrouting will read all display data in registers, then
;; output to matrix LEDs from COLUM_1 to COLUM_16.
;; *********************************************************
SHOW_TIME:
movlw 0xfe
movwf PORTB
MOV_PORTC
bcf PORTC,0
movlw 0x01
movwf TX_BUFFER
ROTATE_1:
movf COLUM_1,W
andwf TX_BUFFER,W
movwf PORTB
MOV_PORTA
movf COLUM_9,W
andwf TX_BUFFER,W
movwf PORTB
MOV_PORTB
call DELAY
bcf STATUS,C
rlf TX_BUFFER,F
movlw 0x00
subwf TX_BUFFER,W
btfss STATUS,Z
goto ROTATE_1
bsf PORTC,0
movlw 0xfd
movwf PORTB
MOV_PORTC
bcf PORTC,1
movlw 0x01
movwf TX_BUFFER
ROTATE_2:
movf COLUM_2,W
andwf TX_BUFFER,W
movwf PORTB
MOV_PORTA
movf COLUM_10,W
andwf TX_BUFFER,W
movwf PORTB
MOV_PORTB
call DELAY
bcf STATUS,C
rlf TX_BUFFER,F
movlw 0x00
subwf TX_BUFFER,W
btfss STATUS,Z
goto ROTATE_2
bsf PORTC,1
;;Turn_off LED
movlw 0xfb
movwf PORTB
MOV_PORTC
bcf PORTC,2
movlw 0x01
movwf TX_BUFFER
ROTATE_3:
movf COLUM_3,W
andwf TX_BUFFER,W
movwf PORTB
MOV_PORTA
movf COLUM_11,W
andwf TX_BUFFER,W
movwf PORTB
MOV_PORTB
call DELAY
bcf STATUS,C
rlf TX_BUFFER,F
movlw 0x00
subwf TX_BUFFER,W
btfss STATUS,Z
goto ROTATE_3
bsf PORTC,2
movlw 0xf7
movwf PORTB
MOV_PORTC
bcf PORTC,3
movlw 0x01
movwf TX_BUFFER
ROTATE_4:
movf COLUM_4,W
andwf TX_BUFFER,W
movwf PORTB
MOV_PORTA
movf COLUM_12,W
andwf TX_BUFFER,W
movwf PORTB
MOV_PORTB
call DELAY
bcf STATUS,C
rlf TX_BUFFER,F
movlw 0x00
subwf TX_BUFFER,W
btfss STATUS,Z
goto ROTATE_4
bsf PORTC,3
movlw 0xef
movwf PORTB
MOV_PORTC
bcf PORTC,4
movlw 0x01
movwf TX_BUFFER
ROTATE_5:
movf COLUM_5,W
andwf TX_BUFFER,W
movwf PORTB
MOV_PORTA
movf COLUM_13,W
andwf TX_BUFFER,W
movwf PORTB
MOV_PORTB
call DELAY
bcf STATUS,C
rlf TX_BUFFER,F
movlw 0x00
subwf TX_BUFFER,W
btfss STATUS,Z
goto ROTATE_5
bsf PORTC,4
movlw 0xdf
movwf PORTB
MOV_PORTC
bcf PORTC,5
movlw 0x01
movwf TX_BUFFER
ROTATE_6:
movf COLUM_6,W
andwf TX_BUFFER,W
movwf PORTB
MOV_PORTA
movf COLUM_14,W
andwf TX_BUFFER,W
movwf PORTB
MOV_PORTB
call DELAY
bcf STATUS,C
rlf TX_BUFFER,F
movlw 0x00
subwf TX_BUFFER,W
btfss STATUS,Z
goto ROTATE_6
bsf PORTC,5
movlw 0xbf
movwf PORTB
MOV_PORTC
bcf PORTC,6
movlw 0x01
movwf TX_BUFFER
ROTATE_7:
movf COLUM_7,W
andwf TX_BUFFER,W
movwf PORTB
MOV_PORTA
movf COLUM_15,W
andwf TX_BUFFER,W
movwf PORTB
MOV_PORTB
call DELAY
bcf STATUS,C
rlf TX_BUFFER,F
movlw 0x00
subwf TX_BUFFER,W
btfss STATUS,Z
goto ROTATE_7
bsf PORTC,6
movlw 0x7f
movwf PORTB
MOV_PORTC
bcf PORTC,7
movlw 0x01
movwf TX_BUFFER
ROTATE_8:
movf COLUM_8,W
andwf TX_BUFFER,W
movwf PORTB
MOV_PORTA
movf COLUM_16,W
andwf TX_BUFFER,W
movwf PORTB
MOV_PORTB
call DELAY
bcf STATUS,C
rlf TX_BUFFER,F
movlw 0x00
subwf TX_BUFFER,W
btfss STATUS,Z
goto ROTATE_8
bsf PORTC,7
RETURN
;; *********************************************************
;; Configure I/O ports
;; *********************************************************
SET_PORT:
BANK_0
clrf PORTA
bcf ADCON0,ADON
clrf PORTB
clrf PORTC
;; Select Bank 1 becuase TRISA,B stay in Bank 1
BANK_1
;; Set all pins as digital input
movlw 0x06
movwf ADCON1
;; Set Port A for output
movlw B'00010100'
movwf TRISA
;; Set Port B for output
movlw B'00000000'
movwf TRISB
;; Set Port C for output
movlw B'00000000'
movwf TRISC
;; Switch back to Bank 0
BANK_0
RETURN
;; ************************************************************************
;; There are delay subrouting for different subrouting.
;; This is a short delay subrouting for LED display.
;; ************************************************************************
DELAY:
movlw 0x02
movwf Delay_counter1
DELAY_LOOP2:
movlw 0x05
movwf Delay_counter2
DELAY_LOOP1:
decfsz Delay_counter2,F
goto DELAY_LOOP1
decfsz Delay_counter1,F
goto DELAY_LOOP2
RETURN
;; ************************************************************************
;; This delay subrouting is for PUSH_BUTTON de_bounce function.
;; ************************************************************************
DELAYL:
movlw 0xff
movwf Delay_counter1
DELAYL_LOOP2:
movlw 0xff
movwf Delay_counter2
DELAYL_LOOP1:
decfsz Delay_counter2,F
goto DELAYL_LOOP1
decfsz Delay_counter1,F
goto DELAYL_LOOP2
RETURN
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -