;**************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
               (
geocities.com/ece23314)