<acronym id="xonnx"></acronym>
      <td id="xonnx"></td>
    1. <pre id="xonnx"></pre>

      1. 專注電子技術學習與研究
        當前位置:單片機教程網 >> MCU設計實例 >> 瀏覽文章

        PIC單片機數碼管(流水燈)代碼

        作者:未知   來源:互聯網   點擊數:  更新時間:2014年08月17日   【字體:

         #INCLUDE p16f886.inc  

        __config _CONFIG1, _INTOSCIO & _WDT_OFF
         
         
        CONTEXT_SAVING UDATA_SHR
        OFFSET RES 1
         
        RESET CODE 0x0
        PAGESEL INIT
        GOTO INIT
         
        CODE
         
        INIT
        BANKSEL TRISC
        CLRF TRISC
        BANKSEL PORTC
        MOVLW B'11111111'
        MOVWF PORTC
        BANKSEL TRISA
        CLRF TRISA
        BANKSEL PORTA
        CLRF PORTA
        BANKSEL ANSEL
        CLRF ANSEL
         
        PAGESEL MAIN
        GOTO MAIN
         
        ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
        ;;;;;;;;;;;;;;這里是函數區;;;;;;;;;;;;;;;;;
        SELECT1:
        BANKSEL PORTC
        MOVLW B'11111111'
        MOVWF PORTC
        BCF PORTC,0
        RETURN
         
        SELECT2:
        BANKSEL PORTC
        MOVLW B'11111111'
        MOVWF PORTC
        BCF PORTC,1
        RETURN
         
        SELECT3:
        BANKSEL PORTC
        MOVLW B'11111111'
        MOVWF PORTC
        BCF PORTC,2
        RETURN
         
        SELECT4:
        BANKSEL PORTC
        MOVLW B'11111111'
        MOVWF PORTC
        BCF PORTC,3
        RETURN
         
        WRITE:
        BANKSEL PORTA
        CLRF PORTA
        MOVLW LOW TABLE ;獲得TABLE的低8位
        ADDWF OFFSET,F;TABLE值加上偏移量
        MOVLW HIGH TABLE;獲得TABLE的高5位
        BTFSC STATUS,C;檢測是否翻頁
        ADDLW 1;翻頁則在TABLE的高5位加一
        MOVWF PCLATH;將TABLE的高5位寫入PCLATH
        MOVF OFFSET,W;將需要調用的信號的地址寫入W
        CALL TABLE;
        XORWF B'00000000',W
        MOVWF PORTA
        RETURN
         
        TABLE:
        MOVWF PCL;轉到偏移的地址
        RETLW B'00111111';0;;;;;;;;;;;;3F
        RETLW B'00000110';1
        RETLW B'01011011';2;;;;;;;;;;;;5B
        RETLW B'01001111';3
        RETLW B'01100110';4
        RETLW B'01101101';5
        RETLW B'01111101';6
        RETLW B'00000111';7
        RETLW B'01111111';8
        RETLW B'01101111';9
         
         
        ;;;;;;;;;;函數區到此為止;;;;;;;;;;;;;;;;;;;
        ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
         
         
        MAIN
         
        LOOP
         
        CALL SELECT1
         
        BANKSEL OFFSET
        MOVLW D'3'
        MOVWF OFFSET
         
        CALL WRITE
         
        ;;;;;;;;;;;;;;;;;;;;;;;;;;
         
        CALL SELECT2
         
        BANKSEL OFFSET
        MOVLW D'1'
        MOVWF OFFSET
         
        CALL WRITE
         
        ;;;;;;;;;;;;;;;;;;;;;;;;;;;;
         
        CALL SELECT3
         
        BANKSEL OFFSET
        MOVLW D'1'
        MOVWF OFFSET
         
        CALL WRITE
        ;;;;;;;;;;;;;;;;;;;;;;;;;;;;
         
        CALL SELECT4
         
        BANKSEL OFFSET
        MOVLW D'4'
        MOVWF OFFSET
         
        CALL WRITE
         
         
        GOTO LOOP
        END
        ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;顯示2003
         
        #INCLUDE p16f886.inc  
        __config _CONFIG1, _INTOSCIO & _WDT_OFF
         
         
        CONTEXT_SAVING UDATA_SHR
        W_TMP RES 1
        S_TMP RES 1
        OFFSET RES 1
        NUM RES 1
        CNUM RES 1
        COFFSET RES 1
        LP0 RES 1
        LP1 RES 1
         
         
        RESET CODE 0x0
        PAGESEL INIT
        GOTO INIT
         
         
        ;ISR CODE 0x04
        ;MOVWF W_TMP
        ;SWAPF STATUS,W
        ;MOVWF S_TMP
        ; NOP
        ;SWAPF S_TMP,W
        ;MOVWF STATUS
        ;SWAPF W_TMP,F
        ;SWAPF W_TMP,W
        ;RETFIE
         
        CODE
         
        INIT
         
        BANKSEL TRISC
        CLRF TRISC
        BANKSEL PORTC
        MOVLW B'11111111'
        MOVWF PORTC
        BANKSEL TRISA
        CLRF TRISA
        BANKSEL PORTA
        CLRF PORTA
        BANKSEL OFFSET
        CLRF OFFSET
         
        BANKSEL OSCCON
        MOVLW B'00000011'
        MOVWF OSCCON ;;;;;;;;;;;;;;;;;;;;;;振蕩器設置為310KHz,內部振蕩器
         
         
        ;BANKSEL NUM
        ;CLRF NUM
        BANKSEL COFFSET
        MOVLW D'10'
        MOVWF COFFSET
         
        BANKSEL CNUM
        MOVLW D'4'
        MOVWF CNUM
         
        PAGESEL MAIN
        GOTO MAIN
         
         
         
        ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
        ;;;;;;;;;;;;;;這里是函數區;;;;;;;;;;;;;;;;;
         
        SELECT:
        BANKSEL PORTC
        MOVLW LOW STABLE ;獲得TABLE的低8位
        ADDWF NUM,F;TABLE值加上偏移量
        MOVLW HIGH STABLE;獲得TABLE的高5位
        BTFSC STATUS,C;檢測是否翻頁
        ADDLW 1;翻頁則在TABLE的高5位加一
        MOVWF PCLATH;將TABLE的高5位寫入PCLATH
        MOVF NUM,W;將需要調用的信號的地址寫入W
        CALL STABLE;
        MOVWF PORTC
        RETURN
         
        ;ORG 0x9FD
        STABLE:
        MOVWF PCL;轉到偏移的地址
        RETLW B'11111110';1
        RETLW B'11111101';2
        RETLW B'11111011';3
        RETLW B'11110111';4
         
        WRITE:
        MOVLW LOW TABLE ;獲得TABLE的低8位
        ADDWF OFFSET,F;TABLE值加上偏移量
        MOVLW HIGH TABLE;獲得TABLE的高5位
        BTFSC STATUS,C;檢測是否翻頁
        ADDLW 1;翻頁則在TABLE的高5位加一
        MOVWF PCLATH;將TABLE的高5位寫入PCLATH
        MOVF OFFSET,W;將需要調用的信號的地址寫入W
        CALL TABLE;
        MOVWF PORTA
        RETURN
         
        ;ORG 0x9FD
        TABLE:
        MOVWF PCL;轉到偏移的地址
        RETLW B'00000110';1
        RETLW B'01011011';2
        RETLW B'01001111';3
        RETLW B'01100110';4
        RETLW B'01101101';5
        RETLW B'01111101';6
        RETLW B'00000111';7
        RETLW B'01111111';8
        RETLW B'01101111';9
        RETLW B'00111111';0
         
        DELAY: 
        MOVLW 01FH
        MOVWF LP0
        L0 MOVLW 01FH
        MOVWF LP1
        L1 DECFSZ LP1,F
        GOTO L1
        DECFSZ LP0,F
        GOTO L0
        RETURN
         
        SETCNUM:
        MOVLW D'4'
        MOVWF CNUM
        RETURN
         
        SETCOFFSET:
        MOVLW D'10'
        MOVWF COFFSET
        RETURN
         
         
        ;;;;;;;;;;函數區到此為止;;;;;;;;;;;;;;;;;;;
        ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
         
         
        MAIN
        ;ORG 0x80
        BANKSEL ANSEL
        CLRF ANSEL
         
        LOOP
         
        MOVF COFFSET,W
        MOVWF OFFSET
        MOVF CNUM,W
        MOVWF NUM
         
        CALL SELECT
        CALL WRITE
         
         
        DECF COFFSET
        BTFSC STATUS,Z
        CALL SETCOFFSET
        DECF CNUM
        BTFSC STATUS,Z
        CALL SETCNUM
         
        CALL DELAY
         
        GOTO LOOP
        END
         
        ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9876543210單數字滾動顯示
         
        #INCLUDE p16f886.inc  
        __config _CONFIG1, _INTOSCIO & _WDT_OFF
         
        CONTEXT_SAVING UDATA_SHR
        W_TMP RES 1
        S_TMP RES 1
        OFFSET RES 1
        COFFSET RES 1
        NUM RES 1
        CNUM RES 1
        PA RES 1
        CNT RES 1
        LP0 RES 1
        LP1 RES 1
        ISBLACK RES 1
         
        RESET CODE 0x0
        PAGESEL INIT
        GOTO INIT
         
        ISR CODE 0x04;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
        MOVWF W_TMP
        SWAPF STATUS,W
        MOVWF S_TMP
        ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
        BANKSEL INTCON
        BCF INTCON,2 ;;;;;;;;;;;;;清除TMR0中斷標志位
        COMF ISBLACK
        BTFSS ISBLACK,0
        CALL DECRESE_COFFSET
        BTFSC ISBLACK,0
        CALL BLACK
        BANKSEL TMR0
        CLRF TMR0
        ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
        SWAPF S_TMP,W
        MOVWF STATUS
        SWAPF W_TMP,F
        SWAPF W_TMP,W
        RETFIE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
         
        CODE
        INIT
        BANKSEL TMR0
        CLRF TMR0
         
        BANKSEL OPTION_REG
        MOVLW B'00000111'
        MOVWF OPTION_REG ;;;;;;;;;;;;;;;;;;;;;TMR0設置為256分頻
         
        BANKSEL INTCON
        BSF INTCON,GIE
        BSF INTCON,T0IE ;;;;;;;;;;;;;;;;;;;;;總中斷使能,TMR0中斷使能
         
        BANKSEL TRISC
        CLRF TRISC
        BANKSEL PORTC
        MOVLW B'11111111'
        MOVWF PORTC
        BANKSEL TRISA
        CLRF TRISA
        BANKSEL PORTA
        CLRF PORTA
        BANKSEL ANSEL
        CLRF ANSEL
         
        BANKSEL OSCCON
        MOVLW B'00010011'
        MOVWF OSCCON ;;;;;;;;;;;;;;;;;;;;;;振蕩器設置為125KHz,內部振蕩器
         
        BANKSEL COFFSET
        MOVLW D'10'
        MOVWF COFFSET;;;;;;;;;;;;;;;;;;;;10個數字
         
        BANKSEL CNUM
        MOVLW D'1'
        MOVWF CNUM;;;;;;;;;;;;;;;;;;;;;;;;;4個數碼管
         
        MOVF COFFSET,W
        MOVWF PA;;;;;;;;;;;;;;;;;;;;;;;;;;;PA暫時存儲COFFSET
         
        MOVLW D'4'
        MOVWF CNT;;;;;;;;;;;;;;;;;;;;;;;;;;計數四次
         
        CLRF ISBLACK
         
        PAGESEL MAIN
        GOTO MAIN
         
        ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
        ;;;;;;;;;;;;;;這里是函數區;;;;;;;;;;;;;;;;;
        SELECT:
        BANKSEL PORTA
        CLRF PORTA
        BANKSEL PORTC
        MOVLW B'11111111'
        MOVWF PORTC
        MOVLW LOW STABLE ;獲得TABLE的低8位
        ADDWF NUM,F;TABLE值加上偏移量
        MOVLW HIGH STABLE;獲得TABLE的高5位
        BTFSC STATUS,C;檢測是否翻頁
        ADDLW 1;翻頁則在TABLE的高5位加一
        MOVWF PCLATH;將TABLE的高5位寫入PCLATH
        MOVF NUM,W;將需要調用的信號的地址寫入W
        CALL STABLE;
        MOVWF PORTC
        RETURN
         
        STABLE:
        MOVWF PCL;轉到偏移的地址
        RETLW B'11111110';1
        RETLW B'11111101';2
        RETLW B'11111011';3
        RETLW B'11110111';4
         
        WRITE:
        MOVLW LOW TABLE ;獲得TABLE的低8位
        ADDWF OFFSET,F;TABLE值加上偏移量
        MOVLW HIGH TABLE;獲得TABLE的高5位
        BTFSC STATUS,C;檢測是否翻頁
        ADDLW 1;翻頁則在TABLE的高5位加一
        MOVWF PCLATH;將TABLE的高5位寫入PCLATH
        MOVF OFFSET,W;將需要調用的信號的地址寫入W
        CALL TABLE;
        MOVWF PORTA
        RETURN
         
        TABLE:
        MOVWF PCL;轉到偏移的地址
        RETLW B'01101111';9
        RETLW B'01111111';8
        RETLW B'00000111';7
        RETLW B'01111101';6
        RETLW B'01101101';5
        RETLW B'01100110';4
        RETLW B'01001111';3
        RETLW B'01011011';2
        RETLW B'00000110';1
        RETLW B'00111111';0
         
        SETORIGIN:
        MOVLW D'1'
        MOVWF CNUM
        MOVLW D'4'
        MOVWF CNT
        MOVF COFFSET,W
        MOVWF PA
        RETURN
         
        SETPA:
        MOVLW D'10'
        MOVWF PA
        RETURN
         
        SETCOFFSET:
        MOVLW D'10'
        MOVWF COFFSET
        RETURN
         
        DELAY: 
        MOVLW 03FH
        MOVWF LP0
        L0 MOVLW 03FH
        MOVWF LP1
        L1 DECFSZ LP1,F
        GOTO L1
        DECFSZ LP0,F
        GOTO L0
        RETURN
         
        DECRESE_COFFSET:
        DECF COFFSET
        BTFSC STATUS,Z
        CALL SETCOFFSET
        RETURN
         
        BLACK:
        BANKSEL PORTA
        CLRF PORTA
        CALL DELAY
        RETURN
         
        ;;;;;;;;;;函數區到此為止;;;;;;;;;;;;;;;;;;;
        ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
        MAIN
        LOOP
        MOVF CNUM,W
        MOVWF NUM;數碼管
        MOVF PA,W
        MOVWF OFFSET;圖案
         
        CALL SELECT;;;;;;;;;;;;;;;;;;;;;;;;;數碼管
        CALL WRITE;;;;;;;;;;;;;;;;;;;;;;;;;;圖案
         
        DECF PA
        BTFSC STATUS,Z;;;;;;;;;;;;;;;;;;;;;;
        CALL SETPA;;;;;;;;;;;;;;;;;;;;;;;;;;
         
        INCF CNUM
         
        DECF CNT
        BTFSC STATUS,Z
        CALL SETORIGIN
         
        GOTO LOOP
        END
        ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;顯示0-9,閃爍一次
         
        #INCLUDE p16f886.inc  
        __config _CONFIG1, _INTOSCIO & _WDT_OFF
         
        CONTEXT_SAVING UDATA_SHR
        W_TMP RES 1
        S_TMP RES 1
        OFFSET RES 1
        COFFSET RES 1
        NUM RES 1
        CNUM RES 1
        PA RES 1
        CNT RES 1
         
         
        RESET CODE 0x0
        PAGESEL INIT
        GOTO INIT
         
        ISR CODE 0x04
        MOVWF W_TMP
        SWAPF STATUS,W
        MOVWF S_TMP
        ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;以上保存現場
        PB_INT
        BTFSC INTCON,RBIF
        CALL PORTB_INT
        TM0_INT
        BTFSC INTCON,T0IF
        CALL TMR0_INT
        ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;以下恢復現場
        SWAPF S_TMP,W
        MOVWF STATUS
        SWAPF W_TMP,F
        SWAPF W_TMP,W
        RETFIE
         
        CODE
        INIT
        ;;;;;;;;;;;;;;;;;;;;;;中斷設置;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
        BANKSEL INTCON
        BSF INTCON,GIE
        BSF INTCON,T0IE ;;;;;;;;;;;;;;;;;;;;;總中斷使能,TMR0中斷使能
        BSF INTCON,RBIE;;;;;;;;;;;;;;;;;;;;;;PORTB電平變化中斷使能
         
        BANKSEL TMR0
        CLRF TMR0
        BANKSEL INTCON
        BCF INTCON,2 ;;;;;;;;;;;;;清除TMR0中斷標志位
        BANKSEL OPTION_REG
        MOVLW B'00000111'
        MOVWF OPTION_REG ;;;;;;;;;;;;;;;;;;;;;TMR0設置為256分頻
         
        BANKSEL PORTB
        BCF PORTB,4
        BANKSEL INTCON
        BCF INTCON,RBIF;;;;;;;;;;;;;;;;;;;;;;;;;;PORTB中斷標志清除
         
        ;;;;;;;;;;;;;;;;;;;;振蕩器設置;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
        BANKSEL OSCCON
        MOVLW B'00010011'
        MOVWF OSCCON ;;;;;;;;;;;;;;;;;;;;;;振蕩器設置為125KHz,內部振蕩器
         
        ;;;;;;;;;;;;;;;;;;;;;;;;;;輸入輸出設置;;;;;;;;;;;;;;;;;;;;;;;;;;;
        BANKSEL TRISC
        CLRF TRISC
        BANKSEL PORTC
        MOVLW B'11111111'
        MOVWF PORTC
        BANKSEL TRISA
        CLRF TRISA
        BANKSEL PORTA
        CLRF PORTA
        BANKSEL ANSEL
        CLRF ANSEL
        BANKSEL TRISB
        MOVLW B'00100000'
        MOVWF TRISB
        BANKSEL IOCB
        MOVLW B'00100000'
        MOVWF IOCB
        BANKSEL PORTB
        CLRF PORTB
        BANKSEL WPUB
        MOVLW B'00100000'
        MOVWF WPUB
         
        ;;;;;;;;;;;;;;;;;;其他初始化;;;;;;;;;;;;;;;;;;;;;;;;;
        BANKSEL COFFSET
        MOVLW D'10'
        MOVWF COFFSET;;;;;;;;;;;;;;;;;;;;10個數字
         
        BANKSEL CNUM
        MOVLW D'1'
        MOVWF CNUM;;;;;;;;;;;;;;;;;;;;;;;;;4個數碼管
         
        MOVF COFFSET,W
        MOVWF PA;;;;;;;;;;;;;;;;;;;;;;;;;;;PA暫時存儲COFFSET
         
        MOVLW D'4'
        MOVWF CNT;;;;;;;;;;;;;;;;;;;;;;;;;;計數四次
         
        PAGESEL MAIN
        GOTO MAIN
         
        ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
        ;;;;;;;;;;;;;;這里是函數區;;;;;;;;;;;;;;;;;
        SELECT:
        BANKSEL PORTA
        CLRF PORTA
        BANKSEL PORTC
        MOVLW B'11111111'
        MOVWF PORTC
        MOVLW LOW STABLE ;獲得TABLE的低8位
        ADDWF NUM,F;TABLE值加上偏移量
        MOVLW HIGH STABLE;獲得TABLE的高5位
        BTFSC STATUS,C;檢測是否翻頁
        ADDLW 1;翻頁則在TABLE的高5位加一
        MOVWF PCLATH;將TABLE的高5位寫入PCLATH
        MOVF NUM,W;將需要調用的信號的地址寫入W
        CALL STABLE;
        MOVWF PORTC
        RETURN
         
        STABLE:
        MOVWF PCL;轉到偏移的地址
        RETLW B'11111110';1
        RETLW B'11111101';2
        RETLW B'11111011';3
        RETLW B'11110111';4
         
        WRITE:
        MOVLW LOW TABLE ;獲得TABLE的低8位
        ADDWF OFFSET,F;TABLE值加上偏移量
        MOVLW HIGH TABLE;獲得TABLE的高5位
        BTFSC STATUS,C;檢測是否翻頁
        ADDLW 1;翻頁則在TABLE的高5位加一
        MOVWF PCLATH;將TABLE的高5位寫入PCLATH
        MOVF OFFSET,W;將需要調用的信號的地址寫入W
        CALL TABLE;
        MOVWF PORTA
        RETURN
         
        TABLE:
        MOVWF PCL;轉到偏移的地址
        RETLW B'01101111';9
        RETLW B'01111111';8
        RETLW B'00000111';7
        RETLW B'01111101';6
        RETLW B'01101101';5
        RETLW B'01100110';4
        RETLW B'01001111';3
        RETLW B'01011011';2
        RETLW B'00000110';1
        RETLW B'00111111';0
         
        SETORIGIN:
        MOVLW D'1'
        MOVWF CNUM
        MOVLW D'4'
        MOVWF CNT
        MOVF COFFSET,W
        MOVWF PA
        RETURN
         
        SETPA:
        MOVLW D'10'
        MOVWF PA
        RETURN
         
        SETCOFFSET:
        MOVLW D'10'
        MOVWF COFFSET
        RETURN
         
        TMR0_INT:
        BANKSEL INTCON
        BCF INTCON,2 ;;;;;;;;;;;;;清除TMR0中斷標志位
        DECF COFFSET
        BTFSC STATUS,Z
        CALL SETCOFFSET
        ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;COFFSET減一
        BANKSEL TMR0
        CLRF TMR0
        RETURN
         
        PORTB_INT:
        BANKSEL PORTB
        BCF PORTB,4
        BANKSEL INTCON
        BCF INTCON,RBIF;;;;;;;;;;;;;;;;;;;;;;;;;;PORTB中斷標志清除
        MOVLW D'10'
        MOVWF COFFSET
        BANKSEL INTCON
        BCF INTCON,2 ;;;;;;;;;;;;;清除TMR0中斷標志位
        BANKSEL TMR0
        CLRF TMR0
        RETURN
         
        ;;;;;;;;;;函數區到此為止;;;;;;;;;;;;;;;;;;;
        ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
        MAIN
        LOOP
        MOVF CNUM,W
        MOVWF NUM;數碼管
        MOVF PA,W
        MOVWF OFFSET;圖案
         
        CALL SELECT;;;;;;;;;;;;;;;;;;;;;;;;;數碼管
        CALL WRITE;;;;;;;;;;;;;;;;;;;;;;;;;;圖案
         
        DECF PA
        BTFSC STATUS,Z;;;;;;;;;;;;;;;;;;;;;;
        CALL SETPA;;;;;;;;;;;;;;;;;;;;;;;;;;
         
        INCF CNUM
         
        DECF CNT
        BTFSC STATUS,Z
        CALL SETORIGIN
         
        GOTO LOOP
        END
        ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;含電平觸發中斷的數碼管滾動顯示-0-9
         
        #INCLUDE p16f886.inc  
        __config _CONFIG1, _INTOSCIO & _WDT_OFF
         
        CONTEXT_SAVING UDATA_SHR
        W_TMP RES 1
        S_TMP RES 1
        OFFSET RES 1
        COFFSET RES 1
        NUM RES 1
        CNUM RES 1
        PA RES 1
        CNT RES 1
         
         
        RESET CODE 0x0
        PAGESEL INIT
        GOTO INIT
         
        ISR CODE 0x04
        MOVWF W_TMP
        SWAPF STATUS,W
        MOVWF S_TMP
        ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
        BANKSEL INTCON
        BCF INTCON,2 ;;;;;;;;;;;;;清除TMR0中斷標志位
        DECF COFFSET
        BTFSC STATUS,Z
        CALL SETCOFFSET
        ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;COFFSET減一
        BANKSEL TMR0
        CLRF TMR0
        ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
        SWAPF S_TMP,W
        MOVWF STATUS
        SWAPF W_TMP,F
        SWAPF W_TMP,W
        RETFIE
         
        CODE
        INIT
        BANKSEL TMR0
        CLRF TMR0
         
        BANKSEL OPTION_REG
        MOVLW B'00000111'
        MOVWF OPTION_REG ;;;;;;;;;;;;;;;;;;;;;TMR0設置為256分頻
         
        BANKSEL INTCON
        BSF INTCON,GIE
        BSF INTCON,T0IE ;;;;;;;;;;;;;;;;;;;;;總中斷使能,TMR0中斷使能
         
        BANKSEL TRISC
        CLRF TRISC
        BANKSEL PORTC
        MOVLW B'11111111'
        MOVWF PORTC
        BANKSEL TRISA
        CLRF TRISA
        BANKSEL PORTA
        CLRF PORTA
        BANKSEL ANSEL
        CLRF ANSEL
         
        BANKSEL OSCCON
        MOVLW B'00010011'
        MOVWF OSCCON ;;;;;;;;;;;;;;;;;;;;;;振蕩器設置為125KHz,內部振蕩器
         
        BANKSEL COFFSET
        MOVLW D'10'
        MOVWF COFFSET;;;;;;;;;;;;;;;;;;;;10個數字
         
        BANKSEL CNUM
        MOVLW D'1'
        MOVWF CNUM;;;;;;;;;;;;;;;;;;;;;;;;;4個數碼管
         
        MOVF COFFSET,W
        MOVWF PA;;;;;;;;;;;;;;;;;;;;;;;;;;;PA暫時存儲COFFSET
         
        MOVLW D'4'
        MOVWF CNT;;;;;;;;;;;;;;;;;;;;;;;;;;計數四次
         
        PAGESEL MAIN
        GOTO MAIN
         
        ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
        ;;;;;;;;;;;;;;這里是函數區;;;;;;;;;;;;;;;;;
        SELECT:
        BANKSEL PORTA
        CLRF PORTA
        BANKSEL PORTC
        MOVLW B'11111111'
        MOVWF PORTC
        MOVLW LOW STABLE ;獲得TABLE的低8位
        ADDWF NUM,F;TABLE值加上偏移量
        MOVLW HIGH STABLE;獲得TABLE的高5位
        BTFSC STATUS,C;檢測是否翻頁
        ADDLW 1;翻頁則在TABLE的高5位加一
        MOVWF PCLATH;將TABLE的高5位寫入PCLATH
        MOVF NUM,W;將需要調用的信號的地址寫入W
        CALL STABLE;
        MOVWF PORTC
        RETURN
         
        STABLE:
        MOVWF PCL;轉到偏移的地址
        RETLW B'11111110';1
        RETLW B'11111101';2
        RETLW B'11111011';3
        RETLW B'11110111';4
         
        WRITE:
        MOVLW LOW TABLE ;獲得TABLE的低8位
        ADDWF OFFSET,F;TABLE值加上偏移量
        MOVLW HIGH TABLE;獲得TABLE的高5位
        BTFSC STATUS,C;檢測是否翻頁
        ADDLW 1;翻頁則在TABLE的高5位加一
        MOVWF PCLATH;將TABLE的高5位寫入PCLATH
        MOVF OFFSET,W;將需要調用的信號的地址寫入W
        CALL TABLE;
        MOVWF PORTA
        RETURN
         
        TABLE:
        MOVWF PCL;轉到偏移的地址
        RETLW B'01101111';9
        RETLW B'01111111';8
        RETLW B'00000111';7
        RETLW B'01111101';6
        RETLW B'01101101';5
        RETLW B'01100110';4
        RETLW B'01001111';3
        RETLW B'01011011';2
        RETLW B'00000110';1
        RETLW B'00111111';0
         
        SETORIGIN:
        MOVLW D'1'
        MOVWF CNUM
        MOVLW D'4'
        MOVWF CNT
        MOVF COFFSET,W
        MOVWF PA
        RETURN
         
        SETPA:
        MOVLW D'10'
        MOVWF PA
        RETURN
         
        SETCOFFSET:
        MOVLW D'10'
        MOVWF COFFSET
        RETURN
        ;;;;;;;;;;函數區到此為止;;;;;;;;;;;;;;;;;;;
        ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
        MAIN
        LOOP
        MOVF CNUM,W
        MOVWF NUM;數碼管
        MOVF PA,W
        MOVWF OFFSET;圖案
         
        CALL SELECT;;;;;;;;;;;;;;;;;;;;;;;;;數碼管
        CALL WRITE;;;;;;;;;;;;;;;;;;;;;;;;;;圖案
         
        DECF PA
        BTFSC STATUS,Z;;;;;;;;;;;;;;;;;;;;;;
        CALL SETPA;;;;;;;;;;;;;;;;;;;;;;;;;;
         
        INCF CNUM
         
        DECF CNT
        BTFSC STATUS,Z
        CALL SETORIGIN
         
        GOTO LOOP
        END
        ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;滾動顯示0-9,一秒滾一次每次顯示四個數字
         
        #INCLUDE p16f886.inc  
        __config _CONFIG1, _INTOSCIO & _WDT_OFF
         
        CONTEXT_SAVING UDATA_SHR
        W_TMP RES 1
        S_TMP RES 1
        OFFSET RES 1
        COFFSET RES 1
        NUM RES 1
        CNUM RES 1
        PA RES 1
        CNT RES 1
        LP0 RES 1
        LP1 RES 1
        ISBLACK RES 1
         
        RESET CODE 0x0
        PAGESEL INIT
        GOTO INIT
         
        ISR CODE 0x04;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
        MOVWF W_TMP
        SWAPF STATUS,W
        MOVWF S_TMP
        ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
        BANKSEL INTCON
        BCF INTCON,2 ;;;;;;;;;;;;;清除TMR0中斷標志位
        COMF ISBLACK
        BTFSS ISBLACK,0
        CALL DECRESE_COFFSET
        BTFSC ISBLACK,0
        CALL BLACK
        BANKSEL TMR0
        MOVLW B'11000000'
        MOVWF TMR0
        ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
        SWAPF S_TMP,W
        MOVWF STATUS
        SWAPF W_TMP,F
        SWAPF W_TMP,W
        RETFIE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
         
        CODE
        INIT
        BANKSEL TMR0
        CLRF TMR0
         
        BANKSEL OPTION_REG
        MOVLW B'00000111'
        MOVWF OPTION_REG ;;;;;;;;;;;;;;;;;;;;;TMR0設置為256分頻
         
        BANKSEL INTCON
        BSF INTCON,GIE
        BSF INTCON,T0IE ;;;;;;;;;;;;;;;;;;;;;總中斷使能,TMR0中斷使能
         
        BANKSEL TRISC
        CLRF TRISC
        BANKSEL PORTC
        MOVLW B'11111111'
        MOVWF PORTC
        BANKSEL TRISA
        CLRF TRISA
        BANKSEL PORTA
        CLRF PORTA
        BANKSEL ANSEL
        CLRF ANSEL
         
        BANKSEL OSCCON
        MOVLW B'00010011'
        MOVWF OSCCON ;;;;;;;;;;;;;;;;;;;;;;振蕩器設置為125KHz,內部振蕩器
         
        BANKSEL COFFSET
        MOVLW D'22'
        MOVWF COFFSET;;;;;;;;;;;;;;;;;;;;10個數字
         
        BANKSEL CNUM
        MOVLW D'1'
        MOVWF CNUM;;;;;;;;;;;;;;;;;;;;;;;;;4個數碼管
         
        MOVF COFFSET,W
        MOVWF PA;;;;;;;;;;;;;;;;;;;;;;;;;;;PA暫時存儲COFFSET
         
        MOVLW D'4'
        MOVWF CNT;;;;;;;;;;;;;;;;;;;;;;;;;;計數四次
         
        CLRF ISBLACK
         
        PAGESEL MAIN
        GOTO MAIN
         
        ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
        ;;;;;;;;;;;;;;這里是函數區;;;;;;;;;;;;;;;;;
        SELECT:
        BANKSEL PORTA
        CLRF PORTA
        BANKSEL PORTC
        MOVLW B'11111111'
        MOVWF PORTC
        MOVLW LOW STABLE ;獲得TABLE的低8位
        ADDWF NUM,F;TABLE值加上偏移量
        MOVLW HIGH STABLE;獲得TABLE的高5位
        BTFSC STATUS,C;檢測是否翻頁
        ADDLW 1;翻頁則在TABLE的高5位加一
        MOVWF PCLATH;將TABLE的高5位寫入PCLATH
        MOVF NUM,W;將需要調用的信號的地址寫入W
        CALL STABLE;
        MOVWF PORTC
        RETURN
         
        STABLE:
        MOVWF PCL;轉到偏移的地址
        RETLW B'11111110';1
        RETLW B'11111101';2
        RETLW B'11111011';3
        RETLW B'11110111';4
         
        WRITE:
        MOVLW LOW TABLE ;獲得TABLE的低8位
        ADDWF OFFSET,F;TABLE值加上偏移量
        MOVLW HIGH TABLE;獲得TABLE的高5位
        BTFSC STATUS,C;檢測是否翻頁
        ADDLW 1;翻頁則在TABLE的高5位加一
        MOVWF PCLATH;將TABLE的高5位寫入PCLATH
        MOVF OFFSET,W;將需要調用的信號的地址寫入W
        CALL TABLE;
        MOVWF PORTA
        RETURN
         
        TABLE:
        MOVWF PCL;轉到偏移的地址
        RETLW B'01101111';9
        RETLW B'01111111';8
        RETLW B'00000111';7
        RETLW B'01111101';6
        RETLW B'01101101';5
        RETLW B'01100110';4
        RETLW B'01001111';3
        RETLW B'01011011';2
        RETLW B'00000110';1
        RETLW B'00111111';0
        RETLW B'00000000';NULL——11
        RETLW B'00000000';NULL——12
        RETLW B'00000000';NULL——13
        RETLW B'00000000';NULL——14
        RETLW B'01011110';d——15
        RETLW B'01111001';E——16
        RETLW B'01111001';E————17
        RETLW B'01101101';S——18
        RETLW B'00000000';NULL——19
        RETLW B'00000000';NULL——20
        RETLW B'00000000';NULL——21
        RETLW B'00000000';NULL——22
         
        SETORIGIN:
        MOVLW D'1'
        MOVWF CNUM
        MOVLW D'4'
        MOVWF CNT
        MOVF COFFSET,W
        MOVWF PA
        RETURN
         
        SETPA:
        MOVLW D'10'
        MOVWF PA
        RETURN
         
        SETCOFFSET:
        MOVLW D'10'
        MOVWF COFFSET
        RETURN
         
        DELAY: 
        MOVLW 00FH
        MOVWF LP0
        L0 MOVLW 00FH
        MOVWF LP1
        L1 DECFSZ LP1,F
        GOTO L1
        DECFSZ LP0,F
        GOTO L0
        RETURN
         
        DECRESE_COFFSET:
        DECF COFFSET
        BTFSC STATUS,Z
        CALL SETCOFFSET
        RETURN
         
        BLACK:
        BANKSEL PORTA
        CLRF PORTA
        CALL DELAY
        RETURN
         
        ;;;;;;;;;;函數區到此為止;;;;;;;;;;;;;;;;;;;
        ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
        MAIN
        LOOP
        MOVF CNUM,W
        MOVWF NUM;數碼管
        MOVF PA,W
        MOVWF OFFSET;圖案
         
        CALL SELECT;;;;;;;;;;;;;;;;;;;;;;;;;數碼管
        CALL WRITE;;;;;;;;;;;;;;;;;;;;;;;;;;圖案
         
        DECF PA
        BTFSC STATUS,Z;;;;;;;;;;;;;;;;;;;;;;
        CALL SETPA;;;;;;;;;;;;;;;;;;;;;;;;;;
         
        INCF CNUM
         
        DECF CNT
        BTFSC STATUS,Z
        CALL SETORIGIN
         
        GOTO LOOP
        END
        ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;加開機畫面SEEd
         
        #INCLUDE p16f886.inc  
        __config _CONFIG1, _INTOSCIO & _WDT_OFF
         
        CONTEXT_SAVING UDATA_SHR
        W_TMP RES 1
        S_TMP RES 1
        OFFSET RES 1
        COFFSET RES 1
        NUM RES 1
        CNUM RES 1
        PA RES 1
        CNT RES 1
        LP0 RES 1
        LP1 RES 1
        ISBLACK RES 1
         
        RESET CODE 0x0
        PAGESEL INIT
        GOTO INIT
         
        ISR CODE 0x04;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
        MOVWF W_TMP
        SWAPF STATUS,W
        MOVWF S_TMP
        ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
        PB_INT
        BTFSC INTCON,RBIF
        CALL PORTB_INT
        TM0_INT
        BTFSC INTCON,T0IF
        CALL TMR0_INT;;;;;;;;;;;;;;;;;;;;;
        COMF ISBLACK
        BTFSS ISBLACK,0
        CALL DECRESE_COFFSET
        BTFSC ISBLACK,0
        CALL BLACK
        BANKSEL INTCON
        BCF INTCON,2 ;;;;;;;;;;;;;清除TMR0中斷標志位
        BANKSEL TMR0
        MOVLW B'01111111'
        MOVWF TMR0
        ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
        SWAPF S_TMP,W
        MOVWF STATUS
        SWAPF W_TMP,F
        SWAPF W_TMP,W
        RETFIE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
         
        CODE
        INIT
        BANKSEL TMR0
        MOVLW B'01111111'
        MOVWF TMR0
         
        BANKSEL OPTION_REG
        MOVLW B'00000111'
        MOVWF OPTION_REG ;;;;;;;;;;;;;;;;;;;;;TMR0設置為256分頻
         
        BANKSEL INTCON
        BSF INTCON,GIE
        BSF INTCON,T0IE ;;;;;;;;;;;;;;;;;;;;;總中斷使能,TMR0中斷使能
        BSF INTCON,RBIE;;;;;;;;;;;;;;;;;;;;;;PORTB電平變化中斷使能
         
        BANKSEL TRISC
        CLRF TRISC
        BANKSEL PORTC
        MOVLW B'11111111'
        MOVWF PORTC
        BANKSEL TRISA
        CLRF TRISA
        BANKSEL PORTA
        CLRF PORTA
        BANKSEL ANSEL
        CLRF ANSEL
        BANKSEL TRISB
        MOVLW B'00100000'
        MOVWF TRISB
        BANKSEL IOCB
        MOVLW B'00100000'
        MOVWF IOCB
        BANKSEL PORTB
        CLRF PORTB
        BANKSEL WPUB
        MOVLW B'00100000'
        MOVWF WPUB
         
        BANKSEL OSCCON
        MOVLW B'00010011'
        MOVWF OSCCON ;;;;;;;;;;;;;;;;;;;;;;振蕩器設置為125KHz,內部振蕩器
         
        BANKSEL COFFSET
        MOVLW D'22'
        MOVWF COFFSET;;;;;;;;;;;;;;;;;;;;10個數字
         
        BANKSEL CNUM
        MOVLW D'1'
        MOVWF CNUM;;;;;;;;;;;;;;;;;;;;;;;;;4個數碼管
         
        MOVF COFFSET,W
        MOVWF PA;;;;;;;;;;;;;;;;;;;;;;;;;;;PA暫時存儲COFFSET
         
        MOVLW D'4'
        MOVWF CNT;;;;;;;;;;;;;;;;;;;;;;;;;;計數四次
         
        CLRF ISBLACK
         
        PAGESEL MAIN
        GOTO MAIN
         
        ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
        ;;;;;;;;;;;;;;這里是函數區;;;;;;;;;;;;;;;;;
        SELECT:
        BANKSEL PORTA
        CLRF PORTA
        BANKSEL PORTC
        MOVLW B'11111111'
        MOVWF PORTC
        MOVLW LOW STABLE ;獲得TABLE的低8位
        ADDWF NUM,F;TABLE值加上偏移量
        MOVLW HIGH STABLE;獲得TABLE的高5位
        BTFSC STATUS,C;檢測是否翻頁
        ADDLW 1;翻頁則在TABLE的高5位加一
        MOVWF PCLATH;將TABLE的高5位寫入PCLATH
        MOVF NUM,W;將需要調用的信號的地址寫入W
        CALL STABLE;
        MOVWF PORTC
        RETURN
         
        STABLE:
        MOVWF PCL;轉到偏移的地址
        RETLW B'11111110';1
        RETLW B'11111101';2
        RETLW B'11111011';3
        RETLW B'11110111';4
         
        WRITE:
        MOVLW LOW TABLE ;獲得TABLE的低8位
        ADDWF OFFSET,F;TABLE值加上偏移量
        MOVLW HIGH TABLE;獲得TABLE的高5位
        BTFSC STATUS,C;檢測是否翻頁
        ADDLW 1;翻頁則在TABLE的高5位加一
        MOVWF PCLATH;將TABLE的高5位寫入PCLATH
        MOVF OFFSET,W;將需要調用的信號的地址寫入W
        CALL TABLE;
        MOVWF PORTA
        RETURN
         
        TABLE:
        MOVWF PCL;轉到偏移的地址
        RETLW B'01101111';9
        RETLW B'01111111';8
        RETLW B'00000111';7
        RETLW B'01111101';6
        RETLW B'01101101';5
        RETLW B'01100110';4
        RETLW B'01001111';3
        RETLW B'01011011';2
        RETLW B'00000110';1
        RETLW B'00111111';0
        RETLW B'00000000';NULL——11
        RETLW B'00000000';NULL——12
        RETLW B'00000000';NULL——13
        RETLW B'00000000';NULL——14
        RETLW B'01011110';d——15
        RETLW B'01111001';E——16
        RETLW B'01111001';E————17
        RETLW B'01101101';S——18
        RETLW B'00000000';NULL——19
        RETLW B'00000000';NULL——20
        RETLW B'00000000';NULL——21
        RETLW B'00000000';NULL——22
         
        SETORIGIN:
        MOVLW D'1'
        MOVWF CNUM
        MOVLW D'4'
        MOVWF CNT
        MOVF COFFSET,W
        MOVWF PA
        RETURN
         
        SETPA:
        MOVLW D'10'
        MOVWF PA
        RETURN
         
        SETCOFFSET:
        MOVLW D'10'
        MOVWF COFFSET
        RETURN
         
        DELAY: 
        MOVLW 01FH
        MOVWF LP0
        L0 MOVLW 01FH
        MOVWF LP1
        L1 DECFSZ LP1,F
        GOTO L1
        DECFSZ LP0,F
        GOTO L0
        RETURN
         
        DECRESE_COFFSET:
        DECF COFFSET
        BTFSC STATUS,Z
        CALL SETCOFFSET
        RETURN
         
        BLACK:
        BANKSEL PORTA
        CLRF PORTA
        CALL DELAY
        RETURN
         
        TMR0_INT:
        DECF COFFSET
        BTFSC STATUS,Z
        CALL SETCOFFSET
        ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;COFFSET減一
        RETURN
         
        PORTB_INT:
        BANKSEL PORTB
        BCF PORTB,4
        BANKSEL INTCON
        BCF INTCON,RBIF;;;;;;;;;;;;;;;;;;;;;;;;;;PORTB中斷標志清除
        MOVLW D'10'
        MOVWF COFFSET
         
        RETURN
         
        ;;;;;;;;;;函數區到此為止;;;;;;;;;;;;;;;;;;;
        ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
        MAIN
        LOOP
        MOVF CNUM,W
        MOVWF NUM;數碼管
        MOVF PA,W
        MOVWF OFFSET;圖案
         
        CALL SELECT;;;;;;;;;;;;;;;;;;;;;;;;;數碼管
        CALL WRITE;;;;;;;;;;;;;;;;;;;;;;;;;;圖案
         
        DECF PA
        BTFSC STATUS,Z;;;;;;;;;;;;;;;;;;;;;;
        CALL SETPA;;;;;;;;;;;;;;;;;;;;;;;;;;
         
        INCF CNUM
         
        DECF CNT
        BTFSC STATUS,Z
        CALL SETORIGIN
         
        GOTO LOOP
        END
        胡巧平 16:47:17
         
        惡心
        曹航 17:55:01
         
        #INCLUDE p16f886.inc  
        __config _CONFIG1, _INTOSCIO & _WDT_OFF
         
        CONTEXT_SAVING UDATA_SHR
        W_TMP RES 1
        S_TMP RES 1
        OFFSET RES 1
        COFFSET RES 1
        NUM RES 1
        CNUM RES 1
        PA RES 1
        CNT RES 1
        LP0 RES 1
        LP1 RES 1
        ISBLACK RES 1
         
        RESET CODE 0x0
        PAGESEL INIT
        GOTO INIT
         
        ISR CODE 0x04;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
        MOVWF W_TMP
        SWAPF STATUS,W
        MOVWF S_TMP
        ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
        PB_INT
        BTFSC INTCON,RBIF
        CALL PORTB_INT
        TM0_INT
        BTFSC INTCON,T0IF
        CALL TMR0_INT;;;;;;;;;;;;;;;;;;;;;
        ;COMF ISBLACK
        ;BTFSS ISBLACK,0
        ;CALL DECRESE_COFFSET
        ;NOP
        ;BTFSC ISBLACK,0
        CALL BLACK
        BANKSEL INTCON
        BCF INTCON,2 ;;;;;;;;;;;;;清除TMR0中斷標志位
        BANKSEL TMR0
        MOVLW B'01111111'
        MOVWF TMR0
        ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
        SWAPF S_TMP,W
        MOVWF STATUS
        SWAPF W_TMP,F
        SWAPF W_TMP,W
        RETFIE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
         
        CODE
        INIT
        BANKSEL TMR0
        MOVLW B'01111111'
        MOVWF TMR0
         
        BANKSEL OPTION_REG
        MOVLW B'00000111'
        MOVWF OPTION_REG ;;;;;;;;;;;;;;;;;;;;;TMR0設置為256分頻
         
        BANKSEL INTCON
        BSF INTCON,GIE
        BSF INTCON,T0IE ;;;;;;;;;;;;;;;;;;;;;總中斷使能,TMR0中斷使能
        BSF INTCON,RBIE;;;;;;;;;;;;;;;;;;;;;;PORTB電平變化中斷使能
         
        BANKSEL TRISC
        CLRF TRISC
        BANKSEL PORTC
        MOVLW B'11111111'
        MOVWF PORTC
        BANKSEL TRISA
        CLRF TRISA
        BANKSEL PORTA
        CLRF PORTA
        BANKSEL ANSEL
        CLRF ANSEL
        BANKSEL TRISB
        MOVLW B'00100000'
        MOVWF TRISB
        BANKSEL IOCB
        MOVLW B'00100000'
        MOVWF IOCB
        BANKSEL PORTB
        CLRF PORTB
        BANKSEL WPUB
        MOVLW B'00100000'
        MOVWF WPUB
         
        BANKSEL OSCCON
        MOVLW B'00010011'
        MOVWF OSCCON ;;;;;;;;;;;;;;;;;;;;;;振蕩器設置為125KHz,內部振蕩器
         
        BANKSEL COFFSET
        MOVLW D'22'
        MOVWF COFFSET;;;;;;;;;;;;;;;;;;;;10個數字
         
        BANKSEL CNUM
        MOVLW D'1'
        MOVWF CNUM;;;;;;;;;;;;;;;;;;;;;;;;;4個數碼管
         
        MOVF COFFSET,W
        MOVWF PA;;;;;;;;;;;;;;;;;;;;;;;;;;;PA暫時存儲COFFSET
         
        MOVLW D'4'
        MOVWF CNT;;;;;;;;;;;;;;;;;;;;;;;;;;計數四次
         
        CLRF ISBLACK
         
        PAGESEL MAIN
        GOTO MAIN
         
        ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
        ;;;;;;;;;;;;;;這里是函數區;;;;;;;;;;;;;;;;;
        SELECT:
        BANKSEL PORTA
        CLRF PORTA
        BANKSEL PORTC
        MOVLW B'11111111'
        MOVWF PORTC
        MOVLW LOW STABLE ;獲得TABLE的低8位
        ADDWF NUM,F;TABLE值加上偏移量
        MOVLW HIGH STABLE;獲得TABLE的高5位
        BTFSC STATUS,C;檢測是否翻頁
        ADDLW 1;翻頁則在TABLE的高5位加一
        MOVWF PCLATH;將TABLE的高5位寫入PCLATH
        MOVF NUM,W;將需要調用的信號的地址寫入W
        CALL STABLE;
        MOVWF PORTC
        RETURN
         
        STABLE:
        MOVWF PCL;轉到偏移的地址
        RETLW B'11111110';1
        RETLW B'11111101';2
        RETLW B'11111011';3
        RETLW B'11110111';4
         
        WRITE:
        MOVLW LOW TABLE ;獲得TABLE的低8位
        ADDWF OFFSET,F;TABLE值加上偏移量
        MOVLW HIGH TABLE;獲得TABLE的高5位
        BTFSC STATUS,C;檢測是否翻頁
        ADDLW 1;翻頁則在TABLE的高5位加一
        MOVWF PCLATH;將TABLE的高5位寫入PCLATH
        MOVF OFFSET,W;將需要調用的信號的地址寫入W
        CALL TABLE;
        MOVWF PORTA
        RETURN
         
        TABLE:
        MOVWF PCL;轉到偏移的地址
        RETLW B'01101111';9
        RETLW B'01111111';8
        RETLW B'00000111';7
        RETLW B'01111101';6
        RETLW B'01101101';5
        RETLW B'01100110';4
        RETLW B'01001111';3
        RETLW B'01011011';2
        RETLW B'00000110';1
        RETLW B'00111111';0
        RETLW B'00000000';NULL——11
        RETLW B'00000000';NULL——12
        RETLW B'00000000';NULL——13
        RETLW B'00000000';NULL——14
        RETLW B'01011110';d——15
        RETLW B'01111001';E——16
        RETLW B'01111001';E————17
        RETLW B'01101101';S——18
        RETLW B'00000000';NULL——19
        RETLW B'00000000';NULL——20
        RETLW B'00000000';NULL——21
        RETLW B'00000000';NULL——22
         
        SETORIGIN:
        MOVLW D'1'
        MOVWF CNUM
        MOVLW D'4'
        MOVWF CNT
        MOVF COFFSET,W
        MOVWF PA
        RETURN
         
        SETPA:
        MOVLW D'10'
        MOVWF PA
        RETURN
         
        SETCOFFSET:
        MOVLW D'10'
        MOVWF COFFSET
        RETURN
         
        DELAY: 
        MOVLW 01FH
        MOVWF LP0
        L0 MOVLW 01FH
        MOVWF LP1
        L1 DECFSZ LP1,F
        GOTO L1
        DECFSZ LP0,F
        GOTO L0
        RETURN
         
        DECRESE_COFFSET:
        DECF COFFSET
        BTFSC STATUS,Z
        CALL SETCOFFSET
        RETURN
         
        BLACK:
        BANKSEL PORTA
        CLRF PORTA
        CALL DELAY
        RETURN
         
        TMR0_INT:
        DECF COFFSET
        BTFSC STATUS,Z
        CALL SETCOFFSET
        ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;COFFSET減一
        RETURN
         
        PORTB_INT:
        BANKSEL PORTB
        BCF PORTB,4
        BANKSEL INTCON
        BCF INTCON,RBIF;;;;;;;;;;;;;;;;;;;;;;;;;;PORTB中斷標志清除
        MOVLW D'10'
        MOVWF COFFSET
         
        RETURN
         
        ;;;;;;;;;;函數區到此為止;;;;;;;;;;;;;;;;;;;
        ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
        MAIN
        LOOP
        MOVF CNUM,W
        MOVWF NUM;數碼管
        MOVF PA,W
        MOVWF OFFSET;圖案
         
        CALL SELECT;;;;;;;;;;;;;;;;;;;;;;;;;數碼管
        CALL WRITE;;;;;;;;;;;;;;;;;;;;;;;;;;圖案
         
        DECF PA
        BTFSC STATUS,Z;;;;;;;;;;;;;;;;;;;;;;
        CALL SETPA;;;;;;;;;;;;;;;;;;;;;;;;;;
         
        INCF CNUM
         
        DECF CNT
        BTFSC STATUS,Z
        CALL SETORIGIN
         
        GOTO LOOP
        END
         
        ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;最終版
        關閉窗口
        欧美性色欧美精品视频,99热这里只有精品mp4,日韩高清亚洲日韩精品一区二区,2020国自产拍精品高潮