⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 showled1.asm

📁 Using 16f876 & matrix led to show time.
💻 ASM
📖 第 1 页 / 共 4 页
字号:
                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 + -