'**************************************************************** '* Name : Rocketlaunch.BAS * '* Author : Chuck Hellebuyck * '* Notice : Copyright (c) 2006 * '* : All Rights Reserved * '* Date : 6/2/2006 * '* Version : 1.0 * '* Notes : Multiplex Dual LED Display. * '* : Initially proves out LED displays. Then displays * '* : "A" for armed and lights LED on B1. * '* : When switch on B0 pin is pressed B2 LED is turned * '* : on, B1 LED turned off to indicate fire mode. * '* : Then it starts a countdown from 29 to 0. * '* : At "00" the relay is closed to send power to * '* : to fire the rocket and displays "F" on the * '* : diplay. Relay is closed for 5 seconds then resets * '* : to armed mode. * '**************************************************************** ' '************** Hardware Layout *********************** 'LED Layout ' A ' F B ' G ' E C ' D ' ' C7 - B ' C6 - F ' C5 - A ' C4 - G ' C3 - E ' C2 - D ' C1 - C ' ' Launch Button on B0 ' Armed LED on B1 ' Fire LED on B2 ' Relay control on B3 ' 10's LED Display Anode Transistor on B4 ' 1' LED Display Anode Transistor on B5 '**************************************************** DEFINE LOADER_USED 1 ' uses a bootloader define OSC 20 ' 20 mhz resonator CHAR10 VAR BYTE ' 10's digit storage byte CHAR01 VAR byte ' 1's digit storage byte X VAR BYTE ' 1's digit index Y var byte ' 10's digit index TIME var word ' Multiplex timer loop counter byte TRISC = %00000000 'SET PORTC TO ALL OUTPUTS PORTB = %00111000 'SET PORTB OUTPUTS LOW TRISB = %00000001 'SET PORTB B1-B7 TO OUTPUT, B0 INPUT ' *** PROVEOUT THE DISPLAY **** Init low 5 'ENABLE LEFT LED high 4 portc = %00000000 'ALL SEGMENTS ON left pause 1000 'DELAY 1 SECOND low 4 'ENABLE RIGHT LED high 5 portc = %00000000 'ALL SEGMENTS ON right pause 1000 'DELAY 1 SECOND high 5 '10's LED OFF high 4 '1's LED OFF portc = %11111111 'ALL SEGMENTS OFF pause 1000 'DELAY 1 SECOND MAIN '*** MAIN LOOP START **** ' *** SET DISPLAY TO "A" FOR ARMED AND PORTB LED ON FOR READY *** low 4 '10's LED ON high 5 '1's LED OFF PORTC = $04 'DISPLAY "A" for Armed PORTB.1 = 1 'READY LED ON '*** TEST LAUNCH BUTTON **** HOLD iF PORTB.0 = 1 THEN HOLD 'IF NOT PRESSED WAIT, OTHERWISE MOVE TO LAUNCH LAUNCH PORTB.1 = 0 'READY LED OFF '*** LAUNCH MODE **** For Y = 2 to 0 step -1 '10's COUNTDOWN LOOP Lookup y,[$10,$7C,$42],CHAR10 ' 10's DIGIT SETUP for x = 9 to 0 step -1 '1's COUNTDOWN LOOP lookup x,[$10,$7C,$42,$48,$2C,$88,$80,$5C,$00,$08],CHAR01 '1's DIGIT SETUP For time = 1 to 500 'Delay loop for 1 second low 5 'Enable 10's LED HIGH 4 PORTC = CHAR10 'SEND 10's DIGIT NUMBER VALUE TO DISPLAY pause 1 'Delay to see 10's LED High 5 'Enable right LED Low 4 PORTC = CHAR01 'SEND 1's DIGIT TO DISPLAY pause 1 'Delay to see 1's LED next NEXT 'GET NEXT 1's DIGIT NUMBER NEXT 'GET NEXT 10's DIGIT number low 4 '1's LED ON HIGH 5 '10's LED OFF PORTC = $86 'DISPLAY "F" for FIRE HIGH 2 'Fire LED ON HIGH 3 'TURN ON RELAY PAUSE 5000 'DELAY 5 SECONDS LOW 3 'TURN RELAY OFF LOW 2 'FIRE LED OFF goto main