#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
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;這里是函數(shù)區(qū);;;;;;;;;;;;;;;;;
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;檢測(cè)是否翻頁(yè)
ADDLW 1;翻頁(yè)則在TABLE的高5位加一
MOVWF PCLATH;將TABLE的高5位寫入PCLATH
MOVF OFFSET,W;將需要調(diào)用的信號(hào)的地址寫入W
CALL TABLE;
XORWF B'00000000',W
MOVWF PORTA
RETURN
TABLE:
MOVWF PCL;轉(zhuǎn)到偏移的地址
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
;;;;;;;;;;函數(shù)區(qū)到此為止;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
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 ;;;;;;;;;;;;;;;;;;;;;;振蕩器設(shè)置為310KHz,內(nèi)部振蕩器
;BANKSEL NUM
;CLRF NUM
BANKSEL COFFSET
MOVLW D'10'
MOVWF COFFSET
BANKSEL CNUM
MOVLW D'4'
MOVWF CNUM
PAGESEL MAIN
GOTO MAIN
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;這里是函數(shù)區(qū);;;;;;;;;;;;;;;;;
SELECT:
BANKSEL PORTC
MOVLW LOW STABLE ;獲得TABLE的低8位
ADDWF NUM,F;TABLE值加上偏移量
MOVLW HIGH STABLE;獲得TABLE的高5位
BTFSC STATUS,C;檢測(cè)是否翻頁(yè)
ADDLW 1;翻頁(yè)則在TABLE的高5位加一
MOVWF PCLATH;將TABLE的高5位寫入PCLATH
MOVF NUM,W;將需要調(diào)用的信號(hào)的地址寫入W
CALL STABLE;
MOVWF PORTC
RETURN
;ORG 0x9FD
STABLE:
MOVWF PCL;轉(zhuǎn)到偏移的地址
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;檢測(cè)是否翻頁(yè)
ADDLW 1;翻頁(yè)則在TABLE的高5位加一
MOVWF PCLATH;將TABLE的高5位寫入PCLATH
MOVF OFFSET,W;將需要調(diào)用的信號(hào)的地址寫入W
CALL TABLE;
MOVWF PORTA
RETURN
;ORG 0x9FD
TABLE:
MOVWF PCL;轉(zhuǎn)到偏移的地址
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
;;;;;;;;;;函數(shù)區(qū)到此為止;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
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單數(shù)字滾動(dòng)顯示
#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中斷標(biāo)志位
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設(shè)置為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 ;;;;;;;;;;;;;;;;;;;;;;振蕩器設(shè)置為125KHz,內(nèi)部振蕩器
BANKSEL COFFSET
MOVLW D'10'
MOVWF COFFSET;;;;;;;;;;;;;;;;;;;;10個(gè)數(shù)字
BANKSEL CNUM
MOVLW D'1'
MOVWF CNUM;;;;;;;;;;;;;;;;;;;;;;;;;4個(gè)數(shù)碼管
MOVF COFFSET,W
MOVWF PA;;;;;;;;;;;;;;;;;;;;;;;;;;;PA暫時(shí)存儲(chǔ)COFFSET
MOVLW D'4'
MOVWF CNT;;;;;;;;;;;;;;;;;;;;;;;;;;計(jì)數(shù)四次
CLRF ISBLACK
PAGESEL MAIN
GOTO MAIN
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;這里是函數(shù)區(qū);;;;;;;;;;;;;;;;;
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;檢測(cè)是否翻頁(yè)
ADDLW 1;翻頁(yè)則在TABLE的高5位加一
MOVWF PCLATH;將TABLE的高5位寫入PCLATH
MOVF NUM,W;將需要調(diào)用的信號(hào)的地址寫入W
CALL STABLE;
MOVWF PORTC
RETURN
STABLE:
MOVWF PCL;轉(zhuǎn)到偏移的地址
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;檢測(cè)是否翻頁(yè)
ADDLW 1;翻頁(yè)則在TABLE的高5位加一
MOVWF PCLATH;將TABLE的高5位寫入PCLATH
MOVF OFFSET,W;將需要調(diào)用的信號(hào)的地址寫入W
CALL TABLE;
MOVWF PORTA
RETURN
TABLE:
MOVWF PCL;轉(zhuǎn)到偏移的地址
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
;;;;;;;;;;函數(shù)區(qū)到此為止;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
MAIN
LOOP
MOVF CNUM,W
MOVWF NUM;數(shù)碼管
MOVF PA,W
MOVWF OFFSET;圖案
CALL SELECT;;;;;;;;;;;;;;;;;;;;;;;;;數(shù)碼管
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
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;以上保存現(xiàn)場(chǎng)
PB_INT
BTFSC INTCON,RBIF
CALL PORTB_INT
TM0_INT
BTFSC INTCON,T0IF
CALL TMR0_INT
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;以下恢復(fù)現(xiàn)場(chǎng)
SWAPF S_TMP,W
MOVWF STATUS
SWAPF W_TMP,F
SWAPF W_TMP,W
RETFIE
CODE
INIT
;;;;;;;;;;;;;;;;;;;;;;中斷設(shè)置;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
BANKSEL INTCON
BSF INTCON,GIE
BSF INTCON,T0IE ;;;;;;;;;;;;;;;;;;;;;總中斷使能,TMR0中斷使能
BSF INTCON,RBIE;;;;;;;;;;;;;;;;;;;;;;PORTB電平變化中斷使能
BANKSEL TMR0
CLRF TMR0
BANKSEL INTCON
BCF INTCON,2 ;;;;;;;;;;;;;清除TMR0中斷標(biāo)志位
BANKSEL OPTION_REG
MOVLW B'00000111'
MOVWF OPTION_REG ;;;;;;;;;;;;;;;;;;;;;TMR0設(shè)置為256分頻
BANKSEL PORTB
BCF PORTB,4
BANKSEL INTCON
BCF INTCON,RBIF;;;;;;;;;;;;;;;;;;;;;;;;;;PORTB中斷標(biāo)志清除
;;;;;;;;;;;;;;;;;;;;振蕩器設(shè)置;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
BANKSEL OSCCON
MOVLW B'00010011'
MOVWF OSCCON ;;;;;;;;;;;;;;;;;;;;;;振蕩器設(shè)置為125KHz,內(nèi)部振蕩器
;;;;;;;;;;;;;;;;;;;;;;;;;;輸入輸出設(shè)置;;;;;;;;;;;;;;;;;;;;;;;;;;;
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個(gè)數(shù)字
BANKSEL CNUM
MOVLW D'1'
MOVWF CNUM;;;;;;;;;;;;;;;;;;;;;;;;;4個(gè)數(shù)碼管
MOVF COFFSET,W
MOVWF PA;;;;;;;;;;;;;;;;;;;;;;;;;;;PA暫時(shí)存儲(chǔ)COFFSET
MOVLW D'4'
MOVWF CNT;;;;;;;;;;;;;;;;;;;;;;;;;;計(jì)數(shù)四次
PAGESEL MAIN
GOTO MAIN
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;這里是函數(shù)區(qū);;;;;;;;;;;;;;;;;
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;檢測(cè)是否翻頁(yè)
ADDLW 1;翻頁(yè)則在TABLE的高5位加一
MOVWF PCLATH;將TABLE的高5位寫入PCLATH
MOVF NUM,W;將需要調(diào)用的信號(hào)的地址寫入W
CALL STABLE;
MOVWF PORTC
RETURN
STABLE:
MOVWF PCL;轉(zhuǎn)到偏移的地址
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;檢測(cè)是否翻頁(yè)
ADDLW 1;翻頁(yè)則在TABLE的高5位加一
MOVWF PCLATH;將TABLE的高5位寫入PCLATH
MOVF OFFSET,W;將需要調(diào)用的信號(hào)的地址寫入W
CALL TABLE;
MOVWF PORTA
RETURN
TABLE:
MOVWF PCL;轉(zhuǎn)到偏移的地址
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中斷標(biāo)志位
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中斷標(biāo)志清除
MOVLW D'10'
MOVWF COFFSET
BANKSEL INTCON
BCF INTCON,2 ;;;;;;;;;;;;;清除TMR0中斷標(biāo)志位
BANKSEL TMR0
CLRF TMR0
RETURN
;;;;;;;;;;函數(shù)區(qū)到此為止;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
MAIN
LOOP
MOVF CNUM,W
MOVWF NUM;數(shù)碼管
MOVF PA,W
MOVWF OFFSET;圖案
CALL SELECT;;;;;;;;;;;;;;;;;;;;;;;;;數(shù)碼管
CALL WRITE;;;;;;;;;;;;;;;;;;;;;;;;;;圖案
DECF PA
BTFSC STATUS,Z;;;;;;;;;;;;;;;;;;;;;;
CALL SETPA;;;;;;;;;;;;;;;;;;;;;;;;;;
INCF CNUM
DECF CNT
BTFSC STATUS,Z
CALL SETORIGIN
GOTO LOOP
END
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;含電平觸發(fā)中斷的數(shù)碼管滾動(dòng)顯示-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中斷標(biāo)志位
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設(shè)置為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 ;;;;;;;;;;;;;;;;;;;;;;振蕩器設(shè)置為125KHz,內(nèi)部振蕩器
BANKSEL COFFSET
MOVLW D'10'
MOVWF COFFSET;;;;;;;;;;;;;;;;;;;;10個(gè)數(shù)字
BANKSEL CNUM
MOVLW D'1'
MOVWF CNUM;;;;;;;;;;;;;;;;;;;;;;;;;4個(gè)數(shù)碼管
MOVF COFFSET,W
MOVWF PA;;;;;;;;;;;;;;;;;;;;;;;;;;;PA暫時(shí)存儲(chǔ)COFFSET
MOVLW D'4'
MOVWF CNT;;;;;;;;;;;;;;;;;;;;;;;;;;計(jì)數(shù)四次
PAGESEL MAIN
GOTO MAIN
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;這里是函數(shù)區(qū);;;;;;;;;;;;;;;;;
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;檢測(cè)是否翻頁(yè)
ADDLW 1;翻頁(yè)則在TABLE的高5位加一
MOVWF PCLATH;將TABLE的高5位寫入PCLATH
MOVF NUM,W;將需要調(diào)用的信號(hào)的地址寫入W
CALL STABLE;
MOVWF PORTC
RETURN
STABLE:
MOVWF PCL;轉(zhuǎn)到偏移的地址
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;檢測(cè)是否翻頁(yè)
ADDLW 1;翻頁(yè)則在TABLE的高5位加一
MOVWF PCLATH;將TABLE的高5位寫入PCLATH
MOVF OFFSET,W;將需要調(diào)用的信號(hào)的地址寫入W
CALL TABLE;
MOVWF PORTA
RETURN
TABLE:
MOVWF PCL;轉(zhuǎn)到偏移的地址
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
;;;;;;;;;;函數(shù)區(qū)到此為止;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
MAIN
LOOP
MOVF CNUM,W
MOVWF NUM;數(shù)碼管
MOVF PA,W
MOVWF OFFSET;圖案
CALL SELECT;;;;;;;;;;;;;;;;;;;;;;;;;數(shù)碼管
CALL WRITE;;;;;;;;;;;;;;;;;;;;;;;;;;圖案
DECF PA
BTFSC STATUS,Z;;;;;;;;;;;;;;;;;;;;;;
CALL SETPA;;;;;;;;;;;;;;;;;;;;;;;;;;
INCF CNUM
DECF CNT
BTFSC STATUS,Z
CALL SETORIGIN
GOTO LOOP
END
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;滾動(dòng)顯示0-9,一秒滾一次每次顯示四個(gè)數(shù)字
#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中斷標(biāo)志位
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設(shè)置為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 ;;;;;;;;;;;;;;;;;;;;;;振蕩器設(shè)置為125KHz,內(nèi)部振蕩器
BANKSEL COFFSET
MOVLW D'22'
MOVWF COFFSET;;;;;;;;;;;;;;;;;;;;10個(gè)數(shù)字
BANKSEL CNUM
MOVLW D'1'
MOVWF CNUM;;;;;;;;;;;;;;;;;;;;;;;;;4個(gè)數(shù)碼管
MOVF COFFSET,W
MOVWF PA;;;;;;;;;;;;;;;;;;;;;;;;;;;PA暫時(shí)存儲(chǔ)COFFSET
MOVLW D'4'
MOVWF CNT;;;;;;;;;;;;;;;;;;;;;;;;;;計(jì)數(shù)四次
CLRF ISBLACK
PAGESEL MAIN
GOTO MAIN
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;這里是函數(shù)區(qū);;;;;;;;;;;;;;;;;
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;檢測(cè)是否翻頁(yè)
ADDLW 1;翻頁(yè)則在TABLE的高5位加一
MOVWF PCLATH;將TABLE的高5位寫入PCLATH
MOVF NUM,W;將需要調(diào)用的信號(hào)的地址寫入W
CALL STABLE;
MOVWF PORTC
RETURN
STABLE:
MOVWF PCL;轉(zhuǎn)到偏移的地址
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;檢測(cè)是否翻頁(yè)
ADDLW 1;翻頁(yè)則在TABLE的高5位加一
MOVWF PCLATH;將TABLE的高5位寫入PCLATH
MOVF OFFSET,W;將需要調(diào)用的信號(hào)的地址寫入W
CALL TABLE;
MOVWF PORTA
RETURN
TABLE:
MOVWF PCL;轉(zhuǎn)到偏移的地址
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
;;;;;;;;;;函數(shù)區(qū)到此為止;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
MAIN
LOOP
MOVF CNUM,W
MOVWF NUM;數(shù)碼管
MOVF PA,W
MOVWF OFFSET;圖案
CALL SELECT;;;;;;;;;;;;;;;;;;;;;;;;;數(shù)碼管
CALL WRITE;;;;;;;;;;;;;;;;;;;;;;;;;;圖案
DECF PA
BTFSC STATUS,Z;;;;;;;;;;;;;;;;;;;;;;
CALL SETPA;;;;;;;;;;;;;;;;;;;;;;;;;;
INCF CNUM
DECF CNT
BTFSC STATUS,Z
CALL SETORIGIN
GOTO LOOP
END
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;加開機(jī)畫面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中斷標(biāo)志位
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設(shè)置為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 ;;;;;;;;;;;;;;;;;;;;;;振蕩器設(shè)置為125KHz,內(nèi)部振蕩器
BANKSEL COFFSET
MOVLW D'22'
MOVWF COFFSET;;;;;;;;;;;;;;;;;;;;10個(gè)數(shù)字
BANKSEL CNUM
MOVLW D'1'
MOVWF CNUM;;;;;;;;;;;;;;;;;;;;;;;;;4個(gè)數(shù)碼管
MOVF COFFSET,W
MOVWF PA;;;;;;;;;;;;;;;;;;;;;;;;;;;PA暫時(shí)存儲(chǔ)COFFSET
MOVLW D'4'
MOVWF CNT;;;;;;;;;;;;;;;;;;;;;;;;;;計(jì)數(shù)四次
CLRF ISBLACK
PAGESEL MAIN
GOTO MAIN
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;這里是函數(shù)區(qū);;;;;;;;;;;;;;;;;
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;檢測(cè)是否翻頁(yè)
ADDLW 1;翻頁(yè)則在TABLE的高5位加一
MOVWF PCLATH;將TABLE的高5位寫入PCLATH
MOVF NUM,W;將需要調(diào)用的信號(hào)的地址寫入W
CALL STABLE;
MOVWF PORTC
RETURN
STABLE:
MOVWF PCL;轉(zhuǎn)到偏移的地址
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;檢測(cè)是否翻頁(yè)
ADDLW 1;翻頁(yè)則在TABLE的高5位加一
MOVWF PCLATH;將TABLE的高5位寫入PCLATH
MOVF OFFSET,W;將需要調(diào)用的信號(hào)的地址寫入W
CALL TABLE;
MOVWF PORTA
RETURN
TABLE:
MOVWF PCL;轉(zhuǎn)到偏移的地址
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中斷標(biāo)志清除
MOVLW D'10'
MOVWF COFFSET
RETURN
;;;;;;;;;;函數(shù)區(qū)到此為止;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
MAIN
LOOP
MOVF CNUM,W
MOVWF NUM;數(shù)碼管
MOVF PA,W
MOVWF OFFSET;圖案
CALL SELECT;;;;;;;;;;;;;;;;;;;;;;;;;數(shù)碼管
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中斷標(biāo)志位
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設(shè)置為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 ;;;;;;;;;;;;;;;;;;;;;;振蕩器設(shè)置為125KHz,內(nèi)部振蕩器
BANKSEL COFFSET
MOVLW D'22'
MOVWF COFFSET;;;;;;;;;;;;;;;;;;;;10個(gè)數(shù)字
BANKSEL CNUM
MOVLW D'1'
MOVWF CNUM;;;;;;;;;;;;;;;;;;;;;;;;;4個(gè)數(shù)碼管
MOVF COFFSET,W
MOVWF PA;;;;;;;;;;;;;;;;;;;;;;;;;;;PA暫時(shí)存儲(chǔ)COFFSET
MOVLW D'4'
MOVWF CNT;;;;;;;;;;;;;;;;;;;;;;;;;;計(jì)數(shù)四次
CLRF ISBLACK
PAGESEL MAIN
GOTO MAIN
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;這里是函數(shù)區(qū);;;;;;;;;;;;;;;;;
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;檢測(cè)是否翻頁(yè)
ADDLW 1;翻頁(yè)則在TABLE的高5位加一
MOVWF PCLATH;將TABLE的高5位寫入PCLATH
MOVF NUM,W;將需要調(diào)用的信號(hào)的地址寫入W
CALL STABLE;
MOVWF PORTC
RETURN
STABLE:
MOVWF PCL;轉(zhuǎn)到偏移的地址
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;檢測(cè)是否翻頁(yè)
ADDLW 1;翻頁(yè)則在TABLE的高5位加一
MOVWF PCLATH;將TABLE的高5位寫入PCLATH
MOVF OFFSET,W;將需要調(diào)用的信號(hào)的地址寫入W
CALL TABLE;
MOVWF PORTA
RETURN
TABLE:
MOVWF PCL;轉(zhuǎn)到偏移的地址
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中斷標(biāo)志清除
MOVLW D'10'
MOVWF COFFSET
RETURN
;;;;;;;;;;函數(shù)區(qū)到此為止;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
MAIN
LOOP
MOVF CNUM,W
MOVWF NUM;數(shù)碼管
MOVF PA,W
MOVWF OFFSET;圖案
CALL SELECT;;;;;;;;;;;;;;;;;;;;;;;;;數(shù)碼管
CALL WRITE;;;;;;;;;;;;;;;;;;;;;;;;;;圖案
DECF PA
BTFSC STATUS,Z;;;;;;;;;;;;;;;;;;;;;;
CALL SETPA;;;;;;;;;;;;;;;;;;;;;;;;;;
INCF CNUM
DECF CNT
BTFSC STATUS,Z
CALL SETORIGIN
GOTO LOOP
END
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;最終版