;**************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




    Source: geocities.com/ece23314/prog

               ( geocities.com/ece23314)