HOUR_H MOVF BUF2, W ;
XORLW 24H ;
BTFSC STATUS,Z ;
CLRF BUF2 ;
WAITREL CALL DISP2 ;
MOVF PORTB,W ;
ANDLW B'00110111' ;
XORLW B'00110111' ;
BTFSC STATUS,Z ;
GOTO KEYLOOP1 ;
GOTO WAITREL ;
KEYLOOP1 CALL delay10ms ;
GOTO KEYLOOP ;
;*********************************
INTSERV
MOVWF W_TEMP ;
SWAPF STATUS,W ;
CLRF STATUS ;
MOVWF STATUS_TEMP ;
BCF INTCON,T0IF ;
DECFSZ CNT2,1 ;
GOTO KEYOUT ;
MOVLW .16 ;
MOVWF CNT2 ;
INCF BUF,1 ;
MOVF BUF,W ;
ANDLW 0FH ;
XORLW 0AH ;
BTFSS STATUS,Z ;
GOTO KEYOUT ;
MOVF BUF,W ;
ANDLW 0F0H ;
MOVWF BUF ;
MOVLW 10H ;
ADDWF BUF,1 ;
MOVF BUF,W ;
ANDLW 0F0H ;
XORLW 60H ;
BTFSS STATUS,Z ;
GOTO KEYOUT ;
CLRF BUF ;
INCF BUF1,1 ;
MOVF BUF1,W ;
ANDLW 0FH ;
XORLW 0AH ;
BTFSS STATUS,Z ;
GOTO KEYOUT ;
MOVF BUF1,W ;
ANDLW 0F0H ;
MOVWF BUF1 ;
MOVLW 10H ;
ADDWF BUF1,1 ;
MOVF BUF1,W ;
ANDLW 0F0H ;
XORLW 60H ;
BTFSS STATUS,Z ;
GOTO KEYOUT ;
CLRF BUF1 ;
INCF BUF2,1 ;
MOVF BUF2,W ;
ANDLW 0FH ;
XORLW 0AH ;
BTFSS STATUS,Z ;
GOTO HOUR_OUT ;
MOVF BUF2,W ;
ANDLW 0F0H ;
MOVWF BUF2 ;
MOVLW 10H ;
ADDWF BUF2,1 ;
MOVF BUF2,W ;
ANDLW 0F0H ;
XORLW 20H ;
BTFSS STATUS,Z ;
GOTO HOUR_OUT ;
HOUR_OUT MOVF BUF2, W ;
XORLW 24H ;
BTFSC STATUS,Z ;
CLRF BUF2 ;
KEYOUT MOVLW .12 ;
MOVWF TMR0 ;
SWAPF STATUS_TEMP,W ;
MOVWF STATUS ;
SWAPF W_TEMP,F ;
SWAPF W_TEMP,W ;
RETFIE ;
;*********************************
; 顯示子程序 ;
;*********************************
DISP2 MOVF BUF, W ;
ANDLW 0FH ;
CALL convert ;
MOVWF PORTC ;
BCF PORTD,0 ;
CALL DELAY ;
BSF PORTD,0 ;
MOVF BUF, W ;
MOVWF BUF_TEMP ;
SWAPF BUF_TEMP,W ;
ANDLW 0FH ;
CALL convert ;
MOVWF PORTC ;
BCF PORTD,1 ;
CALL DELAY ;
BSF PORTD,1 ;
MOVF BUF1, W ;
ANDLW 0FH ;
CALL convert ;
MOVWF PORTC ;
BCF PORTD,2 ;
CALL DELAY ;
BSF PORTD,2 ;
MOVF BUF1, W ;
MOVWF BUF1_TEMP ;
SWAPF BUF1_TEMP,W ;
ANDLW 0FH ;
CALL convert ;
MOVWF PORTC ;
BCF PORTD,3 ;
CALL DELAY ;
BSF PORTD,3 ;
MOVF BUF2, W ;
ANDLW 0FH ;
CALL convert ;
MOVWF PORTC ;
BCF PORTD,4 ;
CALL DELAY ;
BSF PORTD,4 ;
MOVF BUF2, W ;
MOVWF BUF2_TEMP ;
SWAPF BUF2_TEMP,W ;
ANDLW 0FH ;
CALL convert ;
MOVWF PORTC ;
BCF PORTD,5 ;
CALL DELAY ;
BSF PORTD,5 ;
RETURN ;
;*********************************
DELAY ;{2+[2+(1+2)*(DATA2-1)+2+1+2]*(DATA1-1)+2+2}=0.382MS
MOVLW N1 ;(1)
MOVWF DATA1 ;(1)
DEL1 MOVLW N2 ;(1)
MOVWF DATA2 ;(1)
DEL2 DECFSZ DATA2,1 ;(1\2)DATA2-1=0?
GOTO DEL2 ;(2)
DECFSZ DATA1,1 ;(1\2)DATA1-1=0?
GOTO DEL1 ;(2)
RETURN ;(2)
;;********************************
delay10ms
MOVLW .4 ;將外層循環(huán)參數(shù)值送到DATA3
MOVWF DATA3 ;
LP0
MOVLW .3 ;將內(nèi)層循環(huán)參數(shù)值送到DATA4
MOVWF DATA4 ;
LP1 CALL DISP2 ;(382*4+44)uS=1.572MS
DECFSZ DATA4,1 ;變量DATA4內(nèi)容遞減,若為0則跳躍
GOTO LP1 ;跳轉(zhuǎn)到LP1
DECFSZ DATA3,1 ;變量DATA3內(nèi)容遞減,若為0則跳躍
GOTO LP0 ;跳轉(zhuǎn)到LP0
RETURN ;返回主程序
;**********************************
convert
ADDWF PCL,1 ;
TABLE RETLW 0C0H ; 0
RETLW 0F9H ; 1
RETLW 0A4H ; 2
RETLW 0B0H ; 3
RETLW 99H ; 4
RETLW 92H ; 5
RETLW 82H ; 6
RETLW 0F8H ; 7
RETLW 80H ; 8
RETLW 90H ; 9
END
參考鏈接:http://www.picavr.com/news/2008-06/6755.htm





