热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

PIC单片机数码管(流水灯)代码

 #INCLUDEp16f886.inc __config_CONFIG1,_INTOSCIO&_

 #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

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;最终版




推荐阅读
author-avatar
悉尼新鲜事儿
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有