专注电子技术学习与研究
当前位置:单片机教程网 >> 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
 
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;最终版
关闭窗口