You are on page 1of 2

#include <p16f877a.

inc> clear DEFINE OSC 4 ;OSCILLATOR SPEED ;THE FOLLOWING ARE THE IMAGES OF THE NUMBERS AND ARE STORED IN MEMORY ;BEFORE WE DO ANYTHING ELSE. THESE WILL BE PLACED IN PORTB TO DISPLAY THE NUMBER FOR EACH DIGIT WRITE 1999,%11111111 WRITE WRITE WRITE WRITE WRITE WRITE WRITE WRITE WRITE WRITE 2000,%00000110 2001,%10111110 2002,%01001100 2003,%00011100 2004,%10110100 2005,%00010101 2006,%00000101 2007,%10011110 2008,%00000100 2009,%00010100 ;BLANK NO LED IS LIT ;THE ;THE ;THE ;THE ;THE ;THE ;THE ;THE ;THE ;THE NUMBER NUMBER NUMBER NUMBER NUMBER NUMBER NUMBER NUMBER NUMBER NUMBER 0 1 2 3 4 5 6 7 8 9

TRISA=%00010000 TRISB=%00000000 P VAR BYTE X VAR BYTE Y VAR BYTE Z VAR BYTE Q VAR BYTE PULSE_LEN VAR WORD VALUE VAR WORD TOTAL VAR WORD DIGIT1 VAR BYTE DIGIT2 VAR BYTE DIGIT3 VAR BYTE DIGIT4 VAR BYTE X=0 P=400 TOTAL=0 Q=0 MAIN: DIGIT1=-1 DIGIT2=-1 DIGIT3=-1 DIGIT4=-1

;SETUP PORTA ;SETUP PORTB ;PAUSE VARIABLE ;COUNTER VARIABLE ;COUNTER VARIABLE ;COUNTER VARIABLE ;COUNTER VARIABLE ;PULSE LENGTH ;VALUE OF METRONOME COUNTS ;VALUE OF METRONOME COUNTS ;EACH DIGIT IN DISPLAY ;EACH DIGIT IN DISPLAY ;EACH DIGIT IN DISPLAY ;EACH DIGIT IN DISPLAY ;SETS THE INITIAL VALUE FOR X ;SET PAUSE WILL BE IN MICROSECONDS ;INITIALIZE ;INITIALIZE ; ;MAIN LOOP OF PROGRAM ;SET ALL 4 DIGITS TO A BLANK ;SET ALL 4 DIGITS TO A BLANK ;SET ALL 4 DIGITS TO A BLANK ;SET ALL 4 DIGITS TO A BLANK

Q=Q+1 IF Q<15 THEN

; COUNTER TO TAKE JITTER OUT OF DISPLAY ;DONT DO ANYTHING

ELSE ; COUNT PORTA.4,250,PULSES ;READ THE PULSE LENGTH ON RISE Q=0 ;RESET COUNTER ENDIF ; VALUE=48500/PULSE_LEN ;READ THE PULSE LENGTH ON RISE IF VALUE>1000 THEN DIGIT1=2000 + VALUE/1000 ;SEPARATE IF VALUE>100 THEN DIGIT2=2000 + (VALUE//1000)/100 ; OUT THE IF VALUE>10 THEN DIGIT3=2000 + (VALUE//1000)/10 ; FOUR IF VALUE>0 THEN DIGIT4=2000 + (VALUE//1000)/10 ; DIGITS GOSUB DISPLAY ;SHOW VALUE ON THE 4 SEVEN SEGMENT DISPLAY GOTO MAIN ;DO IT OVER

DISPLAY: READ DIGIT1,VALUE PORTA=%00000001 GOSUB SHOW PORTA=%00000010 READ DIGIT2,VALUE GOSUB SHOW PORTA=%00001000 READ DIGIT3,VALUE GOSUB SHOW PORTA=%00100000 READ DIGIT4,VALUE GOSUB SHOW RETURN SHOW: Z=%11111110 FOR X=1 TO 8 Y=VALUE Y.2-1 PORTB=VALUE | Z Z=(Z<<1)+1 PAUSEUS P NEXT X PORTA=0 PORTB=0 PAUSEUS P RETURN END

;READS EACH DIGITS AND THEN ;DISPLAY IT ; ; ; ; ; ; ; ; ; ; ; ; ; ;SHOW EACH SEGMENT ONE AT TIME ;DO THE 8 SEGMENT INCLUDE DEC POINT ; GET VALUE TO SHOW ;INHIBITS THE DECIMAL POINT ;MAKE VALUE AND Z SELECT ONE SEGMENT ;GO TO NEXT SEGMENT ;PAUSE TO SHOW SEGMENT ;NEXT SEGMENT ;CLEAR PORTA ;CLEAR PORTB TO PREVENT GHOSTING ;PAUSE TO SHOW CLEAR ; ;END ALL PROGRAM WITH END

You might also like