shift register question
I am using a 74hc595 shift register to drive a few·7 seg displays.· My question is, how do I blank out the displays without using the reset on the 595.· I put all zeros into the data field on my program but this seems to confuse the register.· Is there something I can do in the code to turn off all the segments without using the reset?
Thanks in advance,
Zach
Thanks in advance,
Zach
Comments
' =========================================================================
'
'·· File...... tick tock
'·· Purpose... control 7 seg leds
'·· Author....· Zachary Coxe
'·· E-mail....· zcoxe@hotmail.com
'·· Started...· Sept 11, 2008
'·· Updated...· Ongoing
'
' =========================================================================
'
' Program Description
'
'
' Device Settings
'
DEVICE········· SX28, OSCHS2, TURBO, STACKX, OPTIONX, PROTECT
FREQ··········· 50_000_000
'
' IO Pins
'
DISPLAY_REGISTER_DATA ··VAR RC.3
DISPLAY_REGISTER_CLOCK ··VAR RC.4
DISPLAY_REGISTER_LATCH ··VAR RC.5
'
' Constants
'
BAUD CON "T9600"
'
' Variables
X ··VAR BYTE
'Y··VAR BYTE
COIN_ENTERED ·VAR BYTE
COIN_OVERFLOW ·VAR BYTE
MAX_SHOTS ·VAR BYTE
SHOTS_REMAINING VAR BYTE
SCORE··VAR BYTE
INTERRUPT_STAGE VAR BYTE
WKPENDING VAR BYTE
TICKET_MULTIPLIER VAR BYTE
FREEBIE· VAR BYTE
TICKETS_COUNTED VAR BYTE
VENDOR_COIN_MAX ·VAR BYTE
VENDOR_SHOT_PER_COIN ·VAR BYTE
VENDOR_SHOT_PER_COIN_1 ·VAR BYTE
VENDOR_SHOT_PER_COIN_2 ·VAR BYTE
SCORE_1 ··VAR BYTE
SCORE_2 ··VAR BYTE
SHOTS_REMAINING_1 ·VAR BYTE
SHOTS_REMAINING_2 ·VAR BYTE
'VARIABLES FOR LED DISPLAY
LED_DISPLAY VAR BYTE(7)
·'BYTE 0 = VENDOR_SHOT_PER_COIN_1
·'BYTE 1 = VENDOR_SHOT_PER_COIN_2
·'BYTE 2 = VENDOR_COIN_MAX
·'BYTE 3 = SCORE_1
·'BYTE 4 = SCORE_2
·'BYTE_5 = SHOTS_REMAINING_1
·'BYTE_6 = SHOTS_REMAINING_2
·'BYTE_7 = COINS_INSERTED
'
· INTERRUPT
'
' =========================================================================
· PROGRAM Start
' =========================================================================
Pgm_ID:
· DATA· "SX/B Template", 0
'
' Subroutines / Jump Table
'
OUTPUT_LEDS SUB
'
' Program Code
START:
'
SCORE_1 = 1
SCORE_2 = 1
GOSUB OUTPUT_LEDS
PAUSE 100
SCORE_1 = 2
SCORE_2 = 2
GOSUB OUTPUT_LEDS
PAUSE 100
SCORE_1 = 3
SCORE_2 = 3
GOSUB OUTPUT_LEDS
PAUSE 100
SCORE_1 = 4
SCORE_2 = 4
GOSUB OUTPUT_LEDS
PAUSE 100
SCORE_1 = 5
SCORE_2 = 5
GOSUB OUTPUT_LEDS
PAUSE 100
SCORE_1 = 7
SCORE_2 = 7
GOSUB OUTPUT_LEDS
PAUSE 100
SCORE_1 = 0
SCORE_2 = 0
GOSUB OUTPUT_LEDS
PAUSE 100
GOTO START
END
'#######################################################################
'######### SUB ROUTINES············································· ###
'#######################################################################
OUTPUT_LEDS:
'CONVERT VARIABLES TO LED MAPS
·READ VARIABLE_TO_LED_CONVERSION + SCORE_1, LED_DISPLAY(3)
·READ VARIABLE_TO_LED_CONVERSION + SCORE_2, LED_DISPLAY(4)
·READ VARIABLE_TO_LED_CONVERSION + SHOTS_REMAINING_1, LED_DISPLAY(5)
·READ VARIABLE_TO_LED_CONVERSION + SHOTS_REMAINING_2, LED_DISPLAY(6)
·READ VARIABLE_TO_LED_CONVERSION + COIN_ENTERED, LED_DISPLAY(7)
· 'UPDATE DISPLAY TO REFLECT VALUES
·SHIFTOUT DISPLAY_REGISTER_DATA, DISPLAY_REGISTER_CLOCK, MSBFIRST, LED_DISPLAY(7)
·SHIFTOUT DISPLAY_REGISTER_DATA, DISPLAY_REGISTER_CLOCK, MSBFIRST, LED_DISPLAY(6)
·SHIFTOUT DISPLAY_REGISTER_DATA, DISPLAY_REGISTER_CLOCK, MSBFIRST, LED_DISPLAY(5)
·SHIFTOUT DISPLAY_REGISTER_DATA, DISPLAY_REGISTER_CLOCK, MSBFIRST, LED_DISPLAY(4)
·SHIFTOUT DISPLAY_REGISTER_DATA, DISPLAY_REGISTER_CLOCK, MSBFIRST, LED_DISPLAY(3)
·PULSOUT DISPLAY_REGISTER_LATCH,1
RETURN
VARIABLE_TO_LED_CONVERSION:
·'······· .gfedcba
·· ·DATA· %00000000········· ' 0
··· ·DATA· %00000001······························ ' 1
· ·DATA· %00000011······························ ' 2
· ·DATA· %00000111······························ ' 3
· ·DATA· %00001111······························ ' 4
· ·DATA· %00011111······························ ' 5
· ·DATA· %00111111······························ ' 6
· ·DATA· %01111111······························ ' 7
·
··············
Also, by wrapping SHIFTOUT in a subroutine you will save a lot of code space. You might end up with a section of code that looks like this:
That did it. Thanks for your help
zach