| SX/B Example: Digital Dice | Examples Index |
' =========================================================================
'
' File...... DICE.SXB
' Purpose... A Pair of Digital Dice
' Author.... (c) Parallax, Inc. -- All Rights Reserved
' E-mail.... support@parallax.com
' Started...
' Updated... 05 JUL 2006
'
' =========================================================================
' -------------------------------------------------------------------------
' Program Description
' -------------------------------------------------------------------------
'
' Simple digital dice program. Uses outputs from RB and RC to dice pattern
' on seven LEDs (for each port) as shown below:
'
' (0) (1)
' (5) (6) (2)
' (4) (3)
'
' A button input on RA.0 is used to "roll" the dice. When rolling is
' stopped, display will stay solid for at least one second, then the
' program will wait for the Roll button to be pressed again.
' -------------------------------------------------------------------------
' Device Settings
' -------------------------------------------------------------------------
DEVICE SX28, OSC4MHZ, TURBO, STACKX, OPTIONX
FREQ 4_000_000
ID "DICE"
' -------------------------------------------------------------------------
' IO Pins
' -------------------------------------------------------------------------
Roll VAR RA.3 ' roll button
Die0 VAR RB ' LEDs out for die #1
Die1 VAR RC ' LEDs out for die #2
' -------------------------------------------------------------------------
' Constants
' -------------------------------------------------------------------------
No CON 1 ' button not pressed
Yes CON 0
' -------------------------------------------------------------------------
' Variables
' -------------------------------------------------------------------------
d1Val VAR Byte ' value of die #1
d2Val VAR Byte ' value of die #2
pattern VAR Byte ' dice pattern
tmpB1 VAR Byte ' work variables
tmpB2 VAR Byte
tmpB3 VAR Byte
tmpW1 VAR Word
' =========================================================================
PROGRAM Start
' =========================================================================
' -------------------------------------------------------------------------
' Subroutine Declarations
' -------------------------------------------------------------------------
GET_DIE SUB 1 ' pass seed and index addr
DELAY SUB 1, 2 ' delay in milliseconds
' -------------------------------------------------------------------------
' Program Code
' -------------------------------------------------------------------------
Start:
TRIS_B = %10000000 ' make LED ports outputs
TRIS_C = %10000000
PLP_A = %1000 ' pull-up unused pins
PLP_B = %01111111
PLP_C = %01111111
d1Val = $12 ' initialize seeds
d2Val = $34
Main:
DO
Die0 = GET_DIE @d1Val ' randomize die values
Die1 = GET_DIE @d2Val
DELAY 75 ' delay between rolls
LOOP WHILE Roll = No ' wait for button
DELAY 1000 ' show dice (1 sec min)
Wait_For_Press:
DO
DELAY 10
LOOP UNTIL Roll = Yes
Wait_For_Release:
DO WHILE Roll = Yes
DELAY 10
LOOP
DELAY 100
GOTO Main
' -------------------------------------------------------------------------
' Subroutine Code
' -------------------------------------------------------------------------
' Use: pattern = GETDIE @seed
' -- randomizes 'seed' (must pass address as 'seed' is updated)
' -- returns die display in 'pattern'
GET_DIE:
tmpB1 = __PARAM1 ' get seed address
tmpB2 = __RAM(tmpB1) ' get seed value
RANDOM tmpB2 ' randomize seed
__RAM(tmpB1) = tmpB2 ' update seed
tmpB2 = tmpB2 / 43 ' make = 0 to 5
READ Pips + tmpB2, tmpB1 ' get LED pattern
RETURN tmpB1 ' return pattern
' -------------------------------------------------------------------------
' Use: DELAY ms
' -- 'ms' is delay in milliseconds, 1 - 65535
DELAY:
IF __PARAMCNT = 1 THEN
tmpW1 = __PARAM1 ' save byte value
ELSE
tmpW1 = __WPARAM12 ' save word value
ENDIF
PAUSE tmpW1
RETURN
' =========================================================================
' User Data
' =========================================================================
Pips:
DATA %01000000 ' 1
DATA %00010010 ' 2
DATA %01010010 ' 3
DATA %00011011 ' 4
DATA %01011011 ' 5
DATA %00111111 ' 6