;**************SEVEN SEGMENT************* ; by: Eng'r Roland Michael A. dela Peņa * ;**************************************** LIST P=16F84 ERRORLEVEL -302 #INCLUDE P16F84.INC ;************************************************************ ; REGISTER DEFINITIONS ;************************************************************ CBLOCK 0CH BLANK ; 7 SEGMENT SEPARATOR ROLAND ; VARIABLE REGISTER COUNT ; BIT COUNTER LOOP ; DELAY LOOP COUNTER LOOPS ; DELAY LOOP COUNTER LOOPS2 ; DELAY LOOP COUNTER ENDC ;************************************************************ ; BIT DEFINITIONS ;************************************************************ CLK EQU 1 ; DISPLAY'S CLOCK DAT EQU 2 ; DISPLAY'S DATA STR EQU 3 ; DISPLAY'S STROBE ;************************************************************************ ;THIS PART INITIALIZES THE PORTS AND OTHER PHERIPERALS IN MICROCONTROLLER ;************************************************************************ ORG 0000h ; SET POWER ON RESET VECTOR. CLRF PORTB CLRF PORTA GOTO INIT INIT BSF STATUS,RP0 ; SET BANK = 1. BCF OPTION_REG,7 ; ENABLE BUILT-IN PULL-UP RESISTORS. MOVLW b'00110001' ; SET RB1,RB2,RB3,RB6,RB7 TO OUTPUT MOVWF TRISB ; AND RB0,RB4,RB5 TO INPUT. MOVLW b'00011111' ; SET RA0,RA1,RA2,RA3,RA4 TO INPUT. MOVWF TRISA BCF STATUS,RP0 ; SET BANK = 0. ;************************************************************** ; THIS PART CLEARS ALL THE 11 7-SEGMENTS ;************************************************************** CLEAR MOVLW b'11111111' MOVWF ROLAND MOVLW d'88' MOVWF COUNT BSF STATUS,0 CALL DISPLAY CALL STROBE ; ALL 11 7-SEGMENTS WERE CLEARED. MAIN GOTO MAIN ; *REFERENCE* ; ; Q5Q1Q3Q4Q7Q6Q2-- ;N a b c d e f g dp DTMF PC _a N Q1 Q2 Q3 Q4 Q5 Q6 Q7 Q8 ;0 1 1 1 1 1 1 0 0 1010 160 f|_g|b 0 0 1 0 0 0 0 0 1 ;1 0 1 1 0 0 0 0 0 0001 16 e|__|c .dp 1 0 1 0 1 1 1 1 1 ;2 1 1 0 1 1 0 1 0 0010 32 d 2 0 0 1 0 0 1 0 1 ;3 1 1 1 1 0 0 1 0 0011 48 3 0 0 0 0 0 1 1 1 ;4 0 1 1 0 0 1 1 0 0100 64 4 0 0 0 1 1 0 1 1 ;5 1 0 1 1 0 1 1 0 0101 80 5 1 0 0 0 0 0 1 1 ;6 1 0 1 1 1 1 1 0 0110 96 6 1 0 0 0 0 0 0 1 ;7 1 1 1 0 0 0 0 0 0111 112 7 0 1 0 1 0 1 1 1 ;8 1 1 1 1 1 1 1 0 1000 128 8 0 0 0 0 0 0 0 1 ;9 1 1 1 1 0 1 1 0 1001 144 9 0 0 0 0 0 0 1 1 ;* 1011 176 * 0 0 0 0 0 1 0 1 ;# 1100 192 # 1 0 0 1 1 1 0 1 ; clear 1 1 1 1 1 1 1 1 ;**************************************************************** ; THIS PART CONVERTS HEX CODES TO 7 SEG CODES ;**************************************************************** SEGTABLE MOVLW d'0' MOVWF PCLATH ; LATCH HIGH PROGRAM COUNTER TO 1ST PAGE. ADDWF PCL RETLW b'01000001' ; 0 RETLW b'01011111' ; 1 RETLW b'00100101' ; 2 RETLW b'00000111' ; 3 RETLW b'00011011' ; 4 RETLW b'10000011' ; 5 RETLW b'10000001' ; 6 RETLW b'01010111' ; 7 RETLW b'00000001' ; 8 RETLW b'00000011' ; 9 RETLW b'11111111' ; BLANK ;**************************************************************** ; THIS PART INITIATE THE DATA TO BE DISPLAYED ON 7 SEGMENT ;**************************************************************** TRANS MOVWF ROLAND MOVLW d'8' MOVWF COUNT ; SET # OF BITS TO 8. DISPLAY RRF ROLAND ; ROTATE RIGHT TXBUF THROUGH CARRY OF STATUS FLAG. BTFSC STATUS,0 ; IS LEAST SIGNIFICANT BIT OF ROLAND = 0? BSF PORTB,DAT ; NO, SET DATA HIGH. BTFSS STATUS,0 ; IS LEAST SIGNIFICANT BIT OF ROLAND = 0? BCF PORTB,DAT ; YES, SET DATA LOW. BSF PORTB,CLK ; FOR CLOCK PULSE. BCF PORTB,CLK DECFSZ COUNT ; DECREMENT BIT COUNT. GOTO DISPLAY RETLW d'0' ;**************************************************************** ; THIS SUB ROUTINE STROBE THE DATA ON 7 SEGMENT ;**************************************************************** STROBE BSF PORTB,STR ; DISPLAY THE DATA NOW (STROBE). BCF PORTB,STR BCF PORTB,DAT ; LEAVE DATA LOW. RETLW d'0' END