锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

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

时间:2024-04-17 11:07:10

#INCLUDE p16f886.inc

__config _CONFIG1, _I OSCIO & _WDT_OFF CO XT_SAVING UDATA_S OFFSET RES 1 RESET CODE 0x0 PAGESEL INIT GOTO INIT CODE INIT BANKSEL SC 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 ,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 O ON 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 01 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 ION_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 ;;;;
锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章