24x24 led matrix

Post here to let others know of a project you're working on.

Moderators: Chuckt, Garth, bitfogav

User avatar
bitfogav
Moderator
Moderator
Posts: 915
Joined: Sun Mar 28, 2010 9:03 pm
Location: United Kingdom
Contact:

Post by bitfogav » Wed Aug 25, 2010 10:22 am

After many hours I have almost finished building the 24x24 matrix.

Heres a video of its first test, sorry for the poor quality.

http://www.youtube.com/watch?v=IJGwNGdy8MM

User avatar
bitfogav
Moderator
Moderator
Posts: 915
Joined: Sun Mar 28, 2010 9:03 pm
Location: United Kingdom
Contact:

Post by bitfogav » Thu Aug 26, 2010 12:31 am

Carrying out further tests today on the matrix, had one GREEN led not working, found the fault to a small bit of solder touching the circuits, dont think thats bad for 280 solder joints just on the Matrix board itself hehe! :)

My first power board had 24 transistors BC-635 (1amp), but I found these
didnt work correctly, they would not display the colour Orange (this is done by turning green and red leds on at the same time, so I used some 2N2222 (800ma) this made the matrix dimmer, obviously as they are lower amperage output.

So I have now gone for some MPSA14 (1.2amp) transistors :)

User avatar
bitfogav
Moderator
Moderator
Posts: 915
Joined: Sun Mar 28, 2010 9:03 pm
Location: United Kingdom
Contact:

Post by bitfogav » Thu Aug 26, 2010 3:27 am

Heres another test video with the new transistors.

http://www.youtube.com/watch?v=YcCZicRXxl0

And Heres the swordfish code - it is just something ive put together to test the matrix. :)

Code: Select all

// Name of Program
Program Led_Grid_Matrix  // useful for documentation purposes

// Device and Clock 
Device = 18F4685         // Tell the compiler what chip we are using 
Clock = 20               // Tell the compiler what we will be setting the clock to (Mhz)            

    Config MCLRE = ON
    
    // default fuses...
Config
   OSC = HS,
   FCMEN = OFF,
   IESO = OFF,
   PWRT = ON,
   BOREN = BOACTIVE,
   WDT = OFF,
   WDTPS = 128,
   PBADEN = OFF,
   DEBUG = OFF,
   XINST = OFF,
   LVP = OFF,
   STVREN = ON

// Modules 
Include "Utils.bas"      // Include this file when we compile so that we can use keywords like "SetAllDigital"

// Const Arrays 

// Anodes if we are using ULN2803 Chips (common-cathode Darlington transistor array.)  
Const Anode_data(8) As Byte = (%10000000,%01000000,%00100000,%00010000,%00001000,%00000100,%00000010,%00000001)
// use this line to invert the Anodes
'Const Anode_data(8) As Byte = (%00000001,%00000010,%00000100,%00001000,%00010000,%00100000,%01000000,%10000000)



// Setup ALL our PORTS
Dim E_ALL_74573 As PORTC.6               ' setup ALL 74573 enable pins

Dim L_RedB0_74573 As PORTC.4              ' setup our RED CATHODE 74573 latch pin
Dim L_RedB1_74573 As PORTC.0              ' setup our RED CATHODE 74573 latch pin
Dim L_RedB2_74573 As PORTC.1              ' setup our RED CATHODE 74573 latch pin

Dim L_GreenB0_74573 As PORTC.2            ' setup our GREEN CATHODE 74573 latch pin
Dim L_GreenB1_74573 As PORTC.3            ' setup our GREEN CATHODE 74573 latch pin
Dim L_GreenB2_74573 As PORTC.5            ' setup our GREEN CATHODE 74573 latch pin

Dim L_AnodeR0_74573 As PORTE.0            ' setup our ANODE 74573 latch pin
Dim L_AnodeR1_74573 As PORTE.1            ' setup our ANODE 74573 latch pin
Dim L_AnodeR2_74573 As PORTE.2            ' setup our ANODE 74573 latch pin

Dim Anode_port As PORTB                   ' Anode DATA PORT
Dim Graphic_port As PORTD                 ' Graphic DATA PORT (green and red)

' when latch pin = high then data can be latched, when latch pin = low data cannot be stored
' when enable pin = high outputs OFF, when enable pin = low outputs ON


// Variable Declarations
     
Dim x As Byte
Dim t As Byte                
Dim counter As Word 
Dim start_counter As Word         
                
                                                                                                   
Dim block_0_green(8) As Byte
Dim block_0_red(8) As Byte
Dim display_step As Word

// Subroutines ==== 

Sub update_ram_data()

    Select display_step
    
        Case 0     ' RED screen
            block_0_red(0) = $ff
            block_0_red(1) = $ff
            block_0_red(2) = $ff
            block_0_red(3) = $ff
            block_0_red(4) = $ff
            block_0_red(5) = $ff
            block_0_red(6) = $ff
            block_0_red(7) = $ff
            
            block_0_green(0) = $00
            block_0_green(1) = $00
            block_0_green(2) = $00
            block_0_green(3) = $00
            block_0_green(4) = $00
            block_0_green(5) = $00
            block_0_green(6) = $00
            block_0_green(7) = $00
    
       Case 1       ' ORANGE screen
            
            block_0_red(0) = $ff
            block_0_red(1) = $ff
            block_0_red(2) = $ff
            block_0_red(3) = $ff
            block_0_red(4) = $ff
            block_0_red(5) = $ff
            block_0_red(6) = $ff
            block_0_red(7) = $ff
            
            block_0_green(0) = $ff
            block_0_green(1) = $ff
            block_0_green(2) = $ff
            block_0_green(3) = $ff
            block_0_green(4) = $ff
            block_0_green(5) = $ff
            block_0_green(6) = $ff
            block_0_green(7) = $ff
            
       Case 2         ' GREEN screen
            
            block_0_red(0) = $00
            block_0_red(1) = $00
            block_0_red(2) = $00
            block_0_red(3) = $00
            block_0_red(4) = $00
            block_0_red(5) = $00
            block_0_red(6) = $00
            block_0_red(7) = $00
            
            block_0_green(0) = $ff
            block_0_green(1) = $ff
            block_0_green(2) = $ff
            block_0_green(3) = $ff
            block_0_green(4) = $ff
            block_0_green(5) = $ff
            block_0_green(6) = $ff
            block_0_green(7) = $ff
            
        Case 3    ' BLACK screen
            
            block_0_red(0) = $00
            block_0_red(1) = $00
            block_0_red(2) = $00
            block_0_red(3) = $00
            block_0_red(4) = $00
            block_0_red(5) = $00
            block_0_red(6) = $00
            block_0_red(7) = $00
            
            block_0_green(0) = $00
            block_0_green(1) = $00
            block_0_green(2) = $00
            block_0_green(3) = $00
            block_0_green(4) = $00
            block_0_green(5) = $00
            block_0_green(6) = $00
            block_0_green(7) = $00
            
    EndSelect
    
            // this is our count of frames
            // increment by 1
        display_step = display_step + 1
    
            // if we get to end, reset to 0
    If display_step = 4 Then    ' change the number of steps
        display_step = 0
    EndIf
    
    
    High (E_ALL_74573)  ' makes enable pin high (all outputs OFF)

     
        For t = 0 To 250  // 250 = time delay
            For x = 0 To 7 
  
            ' make sure all our data latches are closed
             Low    (L_RedB0_74573)               ' setup our RED CATHODE 74573 latch pin
             Low    (L_RedB1_74573)               ' setup our RED CATHODE 74573 latch pin
             Low    (L_RedB2_74573)               ' setup our RED CATHODE 74573 latch pin

             Low    (L_GreenB0_74573)             ' setup our GREEN CATHODE 74573 latch pin
             Low    (L_GreenB1_74573)             ' setup our GREEN CATHODE 74573 latch pin
             Low    (L_GreenB2_74573)             ' setup our GREEN CATHODE 74573 latch pin

             Low    (L_AnodeR0_74573)             ' setup our ANODE 74573 latch pin
             Low    (L_AnodeR1_74573)             ' setup our ANODE 74573 latch pin
             Low    (L_AnodeR2_74573)             ' setup our ANODE 74573 latch pin

       //===================================================================================
       
            ' green data
             High   (L_GreenB0_74573)             ' setup our GREEN CATHODE 74573 latch pin
             High   (L_GreenB1_74573)             ' setup our GREEN CATHODE 74573 latch pin
             High   (L_GreenB2_74573)             ' setup our GREEN CATHODE 74573 latch pin
                
                Graphic_port = block_0_green(x)
               
             Low    (L_GreenB0_74573)             ' setup our GREEN CATHODE 74573 latch pin
             Low    (L_GreenB1_74573)             ' setup our GREEN CATHODE 74573 latch pin
             Low    (L_GreenB2_74573)             ' setup our GREEN CATHODE 74573 latch pin

       //===================================================================================                
                
             ' red data
             High   (L_RedB0_74573)               ' setup our RED CATHODE 74573 latch pin
             High   (L_RedB1_74573)               ' setup our RED CATHODE 74573 latch pin
             High   (L_RedB2_74573)               ' setup our RED CATHODE 74573 latch pin
                                          
                Graphic_port = block_0_red(x) 
              
             Low    (L_RedB0_74573)              ' setup our RED CATHODE 74573 latch pin
             Low    (L_RedB1_74573)              ' setup our RED CATHODE 74573 latch pin
             Low    (L_RedB2_74573)              ' setup our RED CATHODE 74573 latch pin                             
                
       //===================================================================================                
             ' anodes data
             High   (L_AnodeR0_74573)           ' setup our ANODE 74573 latch pin
             High   (L_AnodeR1_74573)           ' setup our ANODE 74573 latch pin
             High   (L_AnodeR2_74573)           ' setup our ANODE 74573 latch pin
                
                Anode_port = Anode_data (x) 
  
             Low    (L_AnodeR0_74573)            ' setup our ANODE 74573 latch pin
             Low    (L_AnodeR1_74573)            ' setup our ANODE 74573 latch pin                
             Low    (L_AnodeR2_74573)            ' setup our ANODE 74573 latch pin             
          

        //===================================================================================                 
             
             ' Enable our Matrix
             Low    (E_ALL_74573)  ' makes enable pin low (all outputs ON)
  
                DelayMS(2)
                
             High   (E_ALL_74573)  ' makes enable pin high (all outputs OFF)
             
            Next
            Inc(t)
        Next
End Sub
   


// Set Ports 
SetAllDigital       // Make all Pins digital I/O's 
TRISA = %11111111   // Make PORTA all inputs 
TRISB = %00000000   // Make PORTB all outputs 
TRISC = %00000000   // Make PORTC all outputs          
TRISD = %00000000   // Make PORTD all outputs 
TRISE = %00000000   // Make PORTE all outputs

    PORTB = $00      ' clear all ports
    PORTC = $00
    PORTD = $00
    PORTE = $00

    // this clears all data in all 74573 data latches
             High    (L_RedB0_74573)               ' setup our RED CATHODE 74573 latch pin
             High    (L_RedB1_74573)               ' setup our RED CATHODE 74573 latch pin
             High    (L_RedB2_74573)               ' setup our RED CATHODE 74573 latch pin

             High    (L_GreenB0_74573)             ' setup our GREEN CATHODE 74573 latch pin
             High    (L_GreenB1_74573)             ' setup our GREEN CATHODE 74573 latch pin
             High    (L_GreenB2_74573)             ' setup our GREEN CATHODE 74573 latch pin

             High    (L_AnodeR0_74573)             ' setup our ANODE 74573 latch pin
             High    (L_AnodeR1_74573)             ' setup our ANODE 74573 latch pin
             High    (L_AnodeR2_74573)             ' setup our ANODE 74573 latch pin
        
        // and this makes all outputs off     
        High (E_ALL_74573)  ' makes enable pin high (all outputs OFF)
        

// Initialize Variables  
counter = 0 
start_counter = 0
display_step = 0
 

// Main Program 

While True()
      
          update_ram_data
          
Wend    

// end of program.
End

User avatar
brad
Site Admin
Site Admin
Posts: 2578
Joined: Fri Mar 26, 2010 10:30 pm
[phpBB Debug] PHP Warning: in file [ROOT]/vendor/twig/twig/lib/Twig/Extension/Core.php on line 1266: count(): Parameter must be an array or an object that implements Countable

Post by brad » Thu Aug 26, 2010 10:39 pm

Nice videos bitfogav, Isn't it great to see something happen for the first time after spending hours on a circuit :)

Am keen to see where this one goes - and would like to contribute code where I can also.

User avatar
bitfogav
Moderator
Moderator
Posts: 915
Joined: Sun Mar 28, 2010 9:03 pm
Location: United Kingdom
Contact:

Post by bitfogav » Thu Aug 26, 2010 10:45 pm

brad wrote:Nice videos bitfogav, Isn't it great to see something happen for the first time after spending hours on a circuit :)

Am keen to see where this one goes - and would like to contribute code where I can also.
Yeah its great seeing it working :) I was up late last night just seeing what I could with it, I will post more videos etc and make some animations but Im going away for a few days :(

Ill defo need some contribution with some code when I get to possible transfer your pac-mac game to it or something? :)

User avatar
brad
Site Admin
Site Admin
Posts: 2578
Joined: Fri Mar 26, 2010 10:30 pm
[phpBB Debug] PHP Warning: in file [ROOT]/vendor/twig/twig/lib/Twig/Extension/Core.php on line 1266: count(): Parameter must be an array or an object that implements Countable

Post by brad » Thu Aug 26, 2010 10:51 pm

That's a great idea about pacman!

you could play it all on the one screen without the screen having to scroll.

Will certainly have to port the code over to the new screen :)

User avatar
bitfogav
Moderator
Moderator
Posts: 915
Joined: Sun Mar 28, 2010 9:03 pm
Location: United Kingdom
Contact:

Post by bitfogav » Sat Sep 04, 2010 7:07 pm

brad wrote:That's a great idea about pacman!

you could play it all on the one screen without the screen having to scroll.

Will certainly have to port the code over to the new screen :)
Well thanks to you Brad and seeing your NES control pad on one of the other forum threads I have now fitted a Control Pad Port to my 24x24 microchip board, this will easily give me 8 buttons from just 3 data lines, Ive actually connected all six I/O PORTA pins to the Control Pad Port for future hardware applications and also have a 5+volt and GND supply.

I have also looked into using a Playstation Control Pad, some of them have a Dual Shock control, which vibrates the control pad when it is powered up by a 9volt supply only on one of the connector lines, so imagine a racing car game where you hit another car or a wall and it vibrates your Control Pad :)

Image
Attachments
microchip board edited.jpg
microchip board edited.jpg (80.52 KiB) Viewed 23010 times

User avatar
brad
Site Admin
Site Admin
Posts: 2578
Joined: Fri Mar 26, 2010 10:30 pm
[phpBB Debug] PHP Warning: in file [ROOT]/vendor/twig/twig/lib/Twig/Extension/Core.php on line 1266: count(): Parameter must be an array or an object that implements Countable

Post by brad » Sat Sep 04, 2010 7:51 pm

Man that is a cool looking board, nice and neat :)

The NES controller works perfectly, there's never any hiccups - just a few lines of code and it's all good to go!

User avatar
bitfogav
Moderator
Moderator
Posts: 915
Joined: Sun Mar 28, 2010 9:03 pm
Location: United Kingdom
Contact:

Post by bitfogav » Sat Sep 04, 2010 8:13 pm

brad wrote:Man that is a cool looking board, nice and neat :)

The NES controller works perfectly, there's never any hiccups - just a few lines of code and it's all good to go!
Thanks Buddy :) im almost ready to give my NES controller a go..

heres a pic of the NES controller connected and my microchip board made up, oh and with my PicKit2 connected.


Image
Attachments
micro board with nes.jpg
micro board with nes.jpg (47.03 KiB) Viewed 23003 times

User avatar
bitfogav
Moderator
Moderator
Posts: 915
Joined: Sun Mar 28, 2010 9:03 pm
Location: United Kingdom
Contact:

Post by bitfogav » Sun Sep 05, 2010 5:12 am

Heres a NEW video of the matrix

http://www.youtube.com/watch?v=VNQIBaPECC0

Thanks to Brad ive have been able to connect a NES control pad to this project quite easily and I have made a Race Car game which you could also say is based on one of Brads games. the game is still in the early stages so its pretty basic. but I am very impressed with the NES control pad!..

You might also see the fully working contol boards that Ive also made up to control the matrix in the video.

Heres the Full Code

Code: Select all

// Name of Program
Program Rolling_Road  // useful for documentation purposes

// Device and Clock 
Device = 18F4685         // Tell the compiler what chip we are using 
Clock = 20               // Tell the compiler what we will be setting the clock to (Mhz)            

Config MCLRE = ON
    
    // default fuses...
Config
   OSC = HS,
   FCMEN = OFF,
   IESO = OFF,
   PWRT = ON,
   BOREN = BOACTIVE,
   WDT = OFF,
   WDTPS = 128,
   PBADEN = OFF,
   DEBUG = OFF,
   XINST = OFF,
   LVP = OFF,
   STVREN = ON

// Modules 
Include "Utils.bas"      // Include this file when we compile so that we can use keywords like "SetAllDigital"


// Const Arrays 

// Anodes if we are using ULN2803 Chips (common-cathode Darlington transistor array.)  
Const Anode_data(8) As Byte = (%10000000,%01000000,%00100000,%00010000,%00001000,%00000100,%00000010,%00000001)


// Setup ALL our PORTS
Dim E_ALL_74573 As PORTC.6               ' setup ALL 74573 enable pins

Dim L_RedB0_74573 As PORTC.4              ' setup our RED CATHODE 74573 latch pin
Dim L_RedB1_74573 As PORTC.0              ' setup our RED CATHODE 74573 latch pin
Dim L_RedB2_74573 As PORTC.1              ' setup our RED CATHODE 74573 latch pin

Dim L_GreenB0_74573 As PORTC.2            ' setup our GREEN CATHODE 74573 latch pin
Dim L_GreenB1_74573 As PORTC.3            ' setup our GREEN CATHODE 74573 latch pin
Dim L_GreenB2_74573 As PORTC.5            ' setup our GREEN CATHODE 74573 latch pin

Dim L_AnodeR0_74573 As PORTE.0            ' setup our ANODE 74573 latch pin
Dim L_AnodeR1_74573 As PORTE.1            ' setup our ANODE 74573 latch pin
Dim L_AnodeR2_74573 As PORTE.2            ' setup our ANODE 74573 latch pin

Dim Anode_port As PORTB                   ' Anode DATA PORT
Dim Graphic_port As PORTD                 ' Graphic DATA PORT (green and red)

// Control Pad Port Setup and Flag bits
Dim nes_data As PORTA.0 
Dim nes_latch As PORTA.1 
Dim nes_clock As PORTA.2 

Dim nes_flags As Byte 
Dim nes_a As nes_flags.0 
Dim nes_b As nes_flags.1 
Dim nes_select As nes_flags.2 
Dim nes_start As nes_flags.3 
Dim nes_up As nes_flags.4 
Dim nes_down As nes_flags.5 
Dim nes_left As nes_flags.6 
Dim nes_right As nes_flags.7 


// Variable Declarations
Dim x As Byte
Dim t As Word                
Dim counter As Word 
        
Dim block_0_green(8) As Byte
Dim block_0_red(8) As Byte
Dim block_1_green(8) As Byte
Dim block_1_red(8) As Byte
Dim block_2_green(8) As Byte
Dim block_2_red(8) As Byte
Dim block_3_green(8) As Byte
Dim block_3_red(8) As Byte
Dim block_4_green(8) As Byte
Dim block_4_red(8) As Byte
Dim block_5_green(8) As Byte
Dim block_5_red(8) As Byte
Dim block_6_green(8) As Byte
Dim block_6_red(8) As Byte
Dim block_7_green(8) As Byte
Dim block_7_red(8) As Byte
Dim block_8_green(8) As Byte
Dim block_8_red(8) As Byte

Dim display_step As Word

Dim button_debounce As Byte 
Dim car_position As Byte 
Dim hit_data As Byte

// Subroutines ==== 

Sub road_data()
         
    Select display_step
    
        Case 0
                    ' we need to initialize RED even though we are only using block7 row 6-7
                    block_0_red(0) = $00
                    block_0_red(1) = $00
                    block_0_red(2) = $00
                    block_0_red(3) = $00
                    block_0_red(4) = $00
                    block_0_red(5) = $00
                    block_0_red(6) = $00
                    block_0_red(7) = $00
                    
                    block_1_red(0) = $00
                    block_1_red(1) = $00
                    block_1_red(2) = $00
                    block_1_red(3) = $00
                    block_1_red(4) = $00
                    block_1_red(5) = $00
                    block_1_red(6) = $00
                    block_1_red(7) = $00
                    
                    block_2_red(0) = $00
                    block_2_red(1) = $00
                    block_2_red(2) = $00
                    block_2_red(3) = $00
                    block_2_red(4) = $00
                    block_2_red(5) = $00
                    block_2_red(6) = $00
                    block_2_red(7) = $00
                    
                    block_3_red(0) = $00
                    block_3_red(1) = $00
                    block_3_red(2) = $00
                    block_3_red(3) = $00
                    block_3_red(4) = $00
                    block_3_red(5) = $00
                    block_3_red(6) = $00
                    block_3_red(7) = $00
                    
                    block_4_red(0) = $00
                    block_4_red(1) = $00
                    block_4_red(2) = $00
                    block_4_red(3) = $00
                    block_4_red(4) = $00
                    block_4_red(5) = $00
                    block_4_red(6) = $00
                    block_4_red(7) = $00
                    
                    block_5_red(0) = $00
                    block_5_red(1) = $00
                    block_5_red(2) = $00
                    block_5_red(3) = $00
                    block_5_red(4) = $00
                    block_5_red(5) = $00
                    block_5_red(6) = $00
                    block_5_red(7) = $00
                    
                    block_6_red(0) = $00
                    block_6_red(1) = $00
                    block_6_red(2) = $00
                    block_6_red(3) = $00
                    block_6_red(4) = $00
                    block_6_red(5) = $00
                    block_6_red(6) = $00
                    block_6_red(7) = $00
                    
                    block_7_red(0) = $00
                    block_7_red(1) = $00
                    block_7_red(2) = $00
                    block_7_red(3) = $00
                    block_7_red(4) = $00
                    block_7_red(5) = $00
'                   block_7_red(6) = %00001000     ' check car position
                    block_7_red(7) = $00
                    
                    block_8_red(0) = $00
                    block_8_red(1) = $00
                    block_8_red(2) = $00
                    block_8_red(3) = $00
                    block_8_red(4) = $00
                    block_8_red(5) = $00
                    block_8_red(6) = $00
                    block_8_red(7) = $00
                      
           
            block_0_green(0) = %11111111
            block_0_green(1) = %11111111
            block_0_green(2) = %11111111
            block_0_green(3) = %11111111
            block_0_green(4) = %11111111
            block_0_green(5) = %11111111
            block_0_green(6) = %11111111
            block_0_green(7) = %11111111
            
            
            block_1_green(0) = %11110000
            block_1_green(1) = %11110000
            block_1_green(2) = %11000000
            block_1_green(3) = %11000000
            block_1_green(4) = %10000001
            block_1_green(5) = %00000001
            block_1_green(6) = %00000011
            block_1_green(7) = %00000011
            
            
            block_2_green(0) = %01111111
            block_2_green(1) = %01111111
            block_2_green(2) = %01111111
            block_2_green(3) = %11111111
            block_2_green(4) = %11111111
            block_2_green(5) = %11111111
            block_2_green(6) = %11111111
            block_2_green(7) = %11111111
            
            
            block_3_green(0) = %11111111
            block_3_green(1) = %11111111
            block_3_green(2) = %11111111
            block_3_green(3) = %11111111
            block_3_green(4) = %11111111
            block_3_green(5) = %11111111
            block_3_green(6) = %11111111
            block_3_green(7) = %11111111
            
            
            block_4_green(0) = %00000011
            block_4_green(1) = %10000011
            block_4_green(2) = %10000011
            block_4_green(3) = %10000001
            block_4_green(4) = %11000001
            block_4_green(5) = %11000001
            block_4_green(6) = %11000001
            block_4_green(7) = %10000001
            
            
            block_5_green(0) = %11111111
            block_5_green(1) = %11111111
            block_5_green(2) = %11111111
            block_5_green(3) = %11111111
            block_5_green(4) = %11111111
            block_5_green(5) = %11111111
            block_5_green(6) = %11111111
            block_5_green(7) = %11111111
            
            
            block_6_green(0) = %11111111
            block_6_green(1) = %11111111
            block_6_green(2) = %11111111
            block_6_green(3) = %11111111
            block_6_green(4) = %11111111
            block_6_green(5) = %11111111
            block_6_green(6) = %11111111
            block_6_green(7) = %11111111
            
            
            block_7_green(0) = %10000001
            block_7_green(1) = %00000011
            block_7_green(2) = %00000011
            block_7_green(3) = %00000011
            block_7_green(4) = %00000011
            block_7_green(5) = %10000011
            block_7_green(6) = %10000001
            block_7_green(7) = %11000000
            
            
            block_8_green(0) = %11111111
            block_8_green(1) = %11111111
            block_8_green(2) = %11111111
            block_8_green(3) = %11111111
            block_8_green(4) = %11111111
            block_8_green(5) = %11111111
            block_8_green(6) = %11111111
            block_8_green(7) = %11111111
                
        Case 1
        
            block_1_green(0) = %11000000
            block_1_green(2) = %11110000
            block_1_green(4) = %11000000
            block_1_green(5) = %10000001
            block_1_green(6) = %00000001
            
            block_2_green(0) = %11111111
            block_2_green(3) = %01111111
            
            block_4_green(1) = %00000011
            block_4_green(3) = %10000011
            block_4_green(4) = %10000001
            block_4_green(7) = %11000001
            
            block_7_green(1) = %10000001
            block_7_green(5) = %00000011
            block_7_green(6) = %10000011
            block_7_green(7) = %10000001

        Case 2
        
            block_1_green(0) = %10000001
            block_1_green(1) = %11000000
            block_1_green(3) = %11110000
            block_1_green(5) = %11000000
            block_1_green(6) = %10000001
            block_1_green(7) = %00000001
            
            block_2_green(1) = %11111111
            block_2_green(4) = %01111111
            
            block_4_green(2) = %00000011
            block_4_green(4) = %10000011
            block_4_green(5) = %10000001
            
            block_7_green(0) = %11000001
            block_7_green(2) = %10000001
            block_7_green(6) = %00000011
            block_7_green(7) = %10000011
                
        Case 3
        
            block_1_green(0) = %10000011
            block_1_green(1) = %10000001
            block_1_green(2) = %11000000
            block_1_green(4) = %11110000
            block_1_green(6) = %11000000
            block_1_green(7) = %10000001
            
            block_2_green(2) = %11111111
            block_2_green(5) = %01111111
            
            block_4_green(0) = %00000001
            block_4_green(3) = %00000011
            block_4_green(5) = %10000011
            block_4_green(6) = %10000001
            
            block_7_green(1) = %11000001
            block_7_green(3) = %10000001
            block_7_green(7) = %00000011 
            
        Case 4
        
        block_1_green(0) = %00000011
        block_1_green(1) = %10000011
        block_1_green(2) = %10000001
        block_1_green(3) = %11000000
        block_1_green(5) = %11110000
        block_1_green(7) = %11000000
        
        block_2_green(3) = %11111111
        block_2_green(6) = %01111111
        
        block_4_green(0) = %10000001
        block_4_green(1) = %00000001
        block_4_green(4) = %00000011
        block_4_green(6) = %10000011
        block_4_green(7) = %10000001
        
        block_7_green(2) = %11000001
        block_7_green(4) = %10000001
        
        Case 5
        
        block_1_green(1) = %00000011
        block_1_green(2) = %10000011
        block_1_green(3) = %10000001
        block_1_green(4) = %11000000
        block_1_green(6) = %11110000
        
        block_2_green(4) = %11111111
        block_2_green(7) = %01111111
        
        block_4_green(0) = %11000000
        block_4_green(1) = %10000001
        block_4_green(2) = %00000001
        block_4_green(5) = %00000011
        block_4_green(7) = %10000011
        
        block_7_green(0) = %10000001
        block_7_green(3) = %11000001
        block_7_green(5) = %10000001
        
        Case 6
        
        block_1_green(2) = %00000011
        block_1_green(3) = %10000011
        block_1_green(4) = %10000001
        block_1_green(5) = %11000000
        block_1_green(7) = %11110000
        
        block_2_green(5) = %11111111
        
        block_4_green(1) = %11000000
        block_4_green(2) = %10000001
        block_4_green(3) = %00000001
        block_4_green(6) = %00000011
        
        block_5_green(0) = %01111111
        
        block_7_green(0) = %10000011
        block_7_green(1) = %10000001
        block_7_green(4) = %11000001
        block_7_green(6) = %10000001
        
        Case 7

        block_1_green(3) = %00000011
        block_1_green(4) = %10000011
        block_1_green(5) = %10000001
        block_1_green(6) = %11000000
        
        block_2_green(6) = %11111111
        
        block_4_green(0) = %11110000
        block_4_green(2) = %11000000
        block_4_green(3) = %10000001
        block_4_green(4) = %00000001
        block_4_green(7) = %00000011
        
        block_5_green(1) = %01111111
        
        block_7_green(1) = %10000011
        block_7_green(2) = %10000001
        block_7_green(5) = %11000001
        block_7_green(7) = %10000001        
        
        
        Case 8
                
        block_1_green(0) = %10000001
        block_1_green(4) = %00000011
        block_1_green(5) = %10000011
        block_1_green(6) = %10000001
        block_1_green(7) = %11000000
        
        block_2_green(7) = %11111111
        
        block_4_green(1) = %11110000
        block_4_green(3) = %11000000
        block_4_green(4) = %10000001
        block_4_green(5) = %00000001
        
        block_5_green(2) = %01111111
        
        block_7_green(0) = %00000011
        block_7_green(2) = %10000011
        block_7_green(3) = %10000001
        block_7_green(6) = %11000001        
        
        Case 9
        
        block_1_green(1) = %10000001
        block_1_green(5) = %00000011
        block_1_green(6) = %10000011
        block_1_green(7) = %10000001
        
        block_4_green(0) = %11000000
        block_4_green(2) = %11110000
        block_4_green(4) = %11000000
        block_4_green(5) = %10000001
        block_4_green(6) = %00000001
        
        block_5_green(0) = %11111111
        block_5_green(3) = %01111111
        
        block_7_green(1) = %00000011
        block_7_green(3) = %10000011
        block_7_green(4) = %10000001
        block_7_green(7) = %11000001        
        
        Case 10
        
        block_1_green(0) = %11000001
        block_1_green(2) = %10000001
        block_1_green(6) = %00000011
        block_1_green(7) = %10000011
        
        block_4_green(0) = %10000001
        block_4_green(1) = %11000000
        block_4_green(3) = %11110000
        block_4_green(5) = %11000000
        block_4_green(6) = %10000001
        block_4_green(7) = %00000001
        
        block_5_green(1) = %11111111
        block_5_green(4) = %01111111
        
        block_7_green(2) = %00000011
        block_7_green(4) = %10000011
        block_7_green(5) = %10000001        
        
        Case 11
        
        block_1_green(1) = %11000001
        block_1_green(3) = %10000001
        block_1_green(7) = %00000011
        
        block_4_green(0) = %10000011
        block_4_green(1) = %10000001
        block_4_green(2) = %11000000
        block_4_green(4) = %11110000
        block_4_green(6) = %11000000
        block_4_green(7) = %10000001
        
        block_5_green(2) = %11111111
        block_5_green(5) = %01111111
        
        block_7_green(0) = %00000001
        block_7_green(3) = %00000011
        block_7_green(5) = %10000011
        block_7_green(6) = %10000001            
        
        Case 12
        
        block_1_green(2) = %11000001
        block_1_green(4) = %10000001
        
        block_4_green(0) = %00000011
        block_4_green(1) = %10000011
        block_4_green(2) = %10000001
        block_4_green(3) = %11000000
        block_4_green(5) = %11110000
        block_4_green(7) = %11000000
        
        block_5_green(3) = %11111111
        block_5_green(6) = %01111111
        
        block_7_green(0) = %10000001
        block_7_green(1) = %00000001
        block_7_green(4) = %00000011
        block_7_green(6) = %10000011
        block_7_green(7) = %10000001        
         
        Case 13
 
        block_1_green(0) = %10000001
        block_1_green(3) = %11000001
        block_1_green(5) = %10000001
        
        block_4_green(1) = %00000011
        block_4_green(2) = %10000011
        block_4_green(3) = %10000001
        block_4_green(4) = %11000000
        block_4_green(6) = %11110000
        
        block_5_green(4) = %11111111
        block_5_green(7) = %01111111
        
        block_7_green(0) = %11000000
        block_7_green(1) = %10000001
        block_7_green(2) = %00000001
        block_7_green(5) = %00000011
        block_7_green(7) = %10000011       
        
        Case 14

        block_1_green(0) = %10000011
        block_1_green(1) = %10000001
        block_1_green(4) = %11000001
        block_1_green(6) = %10000001
        
        block_4_green(2) = %00000011
        block_4_green(3) = %10000011
        block_4_green(4) = %10000001
        block_4_green(5) = %11000000
        block_4_green(7) = %11110000
        
        block_5_green(5) = %11111111
        
        block_7_green(1) = %11000000
        block_7_green(2) = %10000001
        block_7_green(3) = %00000001
        block_7_green(6) = %00000011
        
        block_8_green(0) = %01111111        
        
        Case 15

        block_1_green(1) = %10000011
        block_1_green(2) = %10000001
        block_1_green(5) = %11000001
        block_1_green(7) = %10000001
        
        block_4_green(3) = %00000011
        block_4_green(4) = %10000011
        block_4_green(5) = %10000001
        block_4_green(6) = %11000000
        
        block_5_green(6) = %11111111
        
        block_7_green(0) = %11110000
        block_7_green(2) = %11000000
        block_7_green(3) = %10000001
        block_7_green(4) = %00000001
        block_7_green(7) = %00000011
        
        block_8_green(1) = %01111111        
         
        Case 16

        block_1_green(0) = %00000011
        block_1_green(2) = %10000011
        block_1_green(3) = %10000001
        block_1_green(6) = %11000001
        
        block_4_green(0) = %10000001
        block_4_green(4) = %00000011
        block_4_green(5) = %10000011
        block_4_green(6) = %10000001
        block_4_green(7) = %11000000
        
        block_5_green(7) = %11111111
        
        block_7_green(1) = %11110000
        block_7_green(3) = %11000000
        block_7_green(4) = %10000001
        block_7_green(5) = %00000001
        
        block_8_green(2) = %01111111        
        
        Case 17

        block_1_green(1) = %00000011
        block_1_green(3) = %10000011
        block_1_green(4) = %10000001
        block_1_green(7) = %11000001
        
        block_4_green(1) = %10000001
        block_4_green(5) = %00000011
        block_4_green(6) = %10000011
        block_4_green(7) = %10000001
        
        block_7_green(0) = %11000000
        block_7_green(2) = %11110000
        block_7_green(4) = %11000000
        block_7_green(5) = %10000001
        block_7_green(6) = %00000001
        
        block_8_green(0) = %11111111
        block_8_green(3) = %01111111        
        
        Case 18

        block_1_green(2) = %00000011
        block_1_green(4) = %10000011
        block_1_green(5) = %10000001
        
        block_4_green(0) = %11000001
        block_4_green(2) = %10000001
        block_4_green(6) = %00000011
        block_4_green(7) = %10000011
        
        block_7_green(0) = %10000001
        block_7_green(1) = %11000000
        block_7_green(3) = %11110000
        block_7_green(5) = %11000000
        block_7_green(6) = %10000001
        block_7_green(7) = %00000001
        
        block_8_green(1) = %11111111
        block_8_green(4) = %01111111        
        
        Case 19

        block_1_green(0) = %00000001
        block_1_green(3) = %00000011
        block_1_green(5) = %10000011
        block_1_green(6) = %10000001
        
        block_4_green(1) = %11000001
        block_4_green(3) = %10000001
        block_4_green(7) = %00000011
        
        block_7_green(0) = %10000011
        block_7_green(1) = %10000001
        block_7_green(2) = %11000000
        block_7_green(4) = %11110000
        block_7_green(6) = %11000000
        block_7_green(7) = %10000001
        
        block_8_green(2) = %11111111
        block_8_green(5) = %01111111        
         
        Case 20      

        block_1_green(0) = %10000001
        block_1_green(1) = %00000001
        block_1_green(4) = %00000011
        block_1_green(6) = %10000011
        block_1_green(7) = %10000001
        
        block_4_green(2) = %11000001
        block_4_green(4) = %10000001
        
        block_7_green(0) = %00000011
        block_7_green(1) = %10000011
        block_7_green(2) = %10000001
        block_7_green(3) = %11000000
        block_7_green(5) = %11110000
        block_7_green(7) = %11000000
        
        block_8_green(3) = %11111111
        block_8_green(6) = %01111111        

        Case 21
        
        block_1_green(0) = %11000000
        block_1_green(1) = %10000001
        block_1_green(2) = %00000001
        block_1_green(5) = %00000011
        block_1_green(7) = %10000011
        
        block_4_green(0) = %10000001
        block_4_green(3) = %11000001
        block_4_green(5) = %10000001
        
        block_7_green(1) = %00000011
        block_7_green(2) = %10000011
        block_7_green(3) = %10000001
        block_7_green(4) = %11000000
        block_7_green(6) = %11110000
        
        block_8_green(4) = %11111111
        block_8_green(7) = %01111111        
        
        Case 22
        
        block_1_green(1) = %11000000
        block_1_green(2) = %10000001
        block_1_green(3) = %00000001
        block_1_green(6) = %00000011
        
        block_2_green(0) = %01111111
        
        block_4_green(0) = %10000011
        block_4_green(1) = %10000001
        block_4_green(4) = %11000001
        block_4_green(6) = %10000001
        
        block_7_green(2) = %00000011
        block_7_green(3) = %10000011
        block_7_green(4) = %10000001
        block_7_green(5) = %11000000
        block_7_green(7) = %11110000
        
        block_8_green(5) = %11111111        
        
        Case 23
        
        block_1_green(0) = %11110000
        block_1_green(2) = %11000000
        block_1_green(3) = %10000001
        block_1_green(4) = %00000001
        block_1_green(7) = %00000011
        
        block_2_green(1) = %01111111
        
        block_4_green(1) = %10000011
        block_4_green(2) = %10000001
        block_4_green(5) = %11000001
        block_4_green(7) = %10000001
        
        block_7_green(3) = %00000011
        block_7_green(4) = %10000011
        block_7_green(5) = %10000001
        block_7_green(6) = %11000000
        
        block_8_green(6) = %11111111        
        
        Case 24
        
        block_1_green(1) = %11110000
        block_1_green(3) = %11000000
        block_1_green(4) = %10000001
        block_1_green(5) = %00000001
        
        block_2_green(2) = %01111111
        
        block_4_green(0) = %00000011
        block_4_green(2) = %10000011
        block_4_green(3) = %10000001
        block_4_green(6) = %11000001
        
        block_7_green(0) = %10000001
        block_7_green(4) = %00000011
        block_7_green(5) = %10000011
        block_7_green(6) = %10000001
        block_7_green(7) = %11000000
        
        block_8_green(7) = %11111111        
                
                
       EndSelect
       
    
            // this is our count of frames
            // increment by 1
        display_step = display_step + 1
    
            // if we get to end, reset to 0
    If display_step = 24 Then    ' change the number of steps
        display_step = 0
    EndIf

        For t = 0 To 25  // t = time delay
        
              For x = 0 To 7 
  
        //===================================================================================                
                
        ' red data

             High   (L_RedB0_74573)               ' setup our RED CATHODE 74573 latch pin              
                Graphic_port = block_0_red(x)             
             Low    (L_RedB0_74573)               ' setup our RED CATHODE 74573 latch pin
                
             High   (L_RedB1_74573)               ' setup our RED CATHODE 74573 latch pin             
                Graphic_port = block_3_red(x)             
             Low    (L_RedB1_74573)               ' setup our RED CATHODE 74573 latch pin
                                          
             High   (L_RedB2_74573)               ' setup our RED CATHODE 74573 latch pin                
                Graphic_port = block_6_red(x)             
             Low    (L_RedB2_74573)               ' setup our RED CATHODE 74573 latch pin 
             
        //=================================================================================== 
       
        ' green data
 
             High   (L_GreenB0_74573)             ' setup our GREEN CATHODE 74573 latch pin                    
                Graphic_port = block_0_green(x)             
             Low    (L_GreenB0_74573)             ' setup our GREEN CATHODE 74573 latch pin
             
             High   (L_GreenB1_74573)             ' setup our GREEN CATHODE 74573 latch pin             
                Graphic_port = block_3_green(x)             
             Low    (L_GreenB1_74573)             ' setup our GREEN CATHODE 74573 latch pin                          
                          
             High   (L_GreenB2_74573)             ' setup our GREEN CATHODE 74573 latch pin
                Graphic_port = block_6_green(x)             
             Low    (L_GreenB2_74573)             ' setup our GREEN CATHODE 74573 latch pin                           
                
        //===================================================================================                
             
        ' anodes data

             High   (L_AnodeR0_74573)             ' setup our ANODE 74573 latch pin
                Anode_port = Anode_data (x)             
             Low    (L_AnodeR0_74573)             ' setup our ANODE 74573 latch pin                
 
 
             High   (L_AnodeR1_74573)             ' setup our ANODE 74573 latch pin
             High   (L_AnodeR2_74573)             ' setup our ANODE 74573 latch pin
                Anode_port = $00             
             Low    (L_AnodeR1_74573)             ' setup our ANODE 74573 latch pin
             Low    (L_AnodeR2_74573)             ' setup our ANODE 74573 latch pin 

                
        //===================================================================================                 
             
        ' Enable our Matrix
        
             Low    (E_ALL_74573)       ' makes enable pin low (all outputs ON)
  
                DelayUS(400)
                
             High   (E_ALL_74573)       ' makes enable pin high (all outputs OFF)

             ' we now clear our Anode data to stop graphic ghosting
             High   (L_AnodeR0_74573)             ' setup our ANODE 74573 latch pin
                Anode_port = $00             
             Low    (L_AnodeR0_74573)             ' setup our ANODE 74573 latch pin             
  
        //===================================================================================                
                
        ' red data

             High   (L_RedB0_74573)               ' setup our RED CATHODE 74573 latch pin              
                Graphic_port = block_1_red(x)             
             Low    (L_RedB0_74573)               ' setup our RED CATHODE 74573 latch pin
             
             High   (L_RedB1_74573)               ' setup our RED CATHODE 74573 latch pin             
                Graphic_port = block_4_red(x)             
             Low    (L_RedB1_74573)               ' setup our RED CATHODE 74573 latch pin
                                          
             High   (L_RedB2_74573)               ' setup our RED CATHODE 74573 latch pin                
                Graphic_port = block_7_red(x)             
             Low    (L_RedB2_74573)               ' setup our RED CATHODE 74573 latch pin 
             
        //=================================================================================== 
       
        ' green data

             High   (L_GreenB0_74573)             ' setup our GREEN CATHODE 74573 latch pin                    
                Graphic_port = block_1_green(x)             
             Low    (L_GreenB0_74573)             ' setup our GREEN CATHODE 74573 latch pin

             High   (L_GreenB1_74573)             ' setup our GREEN CATHODE 74573 latch pin             
                Graphic_port = block_4_green(x)             
             Low    (L_GreenB1_74573)             ' setup our GREEN CATHODE 74573 latch pin                          
                          
             High   (L_GreenB2_74573)             ' setup our GREEN CATHODE 74573 latch pin
                Graphic_port = block_7_green(x)             
             Low    (L_GreenB2_74573)             ' setup our GREEN CATHODE 74573 latch pin                           
                
        //===================================================================================                
             
        ' anodes data

             High   (L_AnodeR0_74573)             ' setup our ANODE 74573 latch pin
             High   (L_AnodeR2_74573)             ' setup our ANODE 74573 latch pin                
                Anode_port = $00             
             Low    (L_AnodeR0_74573)             ' setup our ANODE 74573 latch pin
             Low    (L_AnodeR2_74573)             ' setup our ANODE 74573 latch pin
             
 
             High   (L_AnodeR1_74573)             ' setup our ANODE 74573 latch pin  
                Anode_port = Anode_data (x)             
             Low    (L_AnodeR1_74573)             ' setup our ANODE 74573 latch pin
             
                
        //===================================================================================                 
             
        ' Enable our Matrix
        
             Low    (E_ALL_74573)       ' makes enable pin low (all outputs ON)
  
                DelayUS(400)
                
             High   (E_ALL_74573)       ' makes enable pin high (all outputs OFF)

             ' we now clear our Anode data to stop graphic ghosting
             High   (L_AnodeR1_74573)             ' setup our ANODE 74573 latch pin
                Anode_port = $00             
             Low    (L_AnodeR1_74573)             ' setup our ANODE 74573 latch pin 
                             
        //===================================================================================                
                
        ' red data

             High   (L_RedB0_74573)               ' setup our RED CATHODE 74573 latch pin              
                Graphic_port = block_2_red(x)             
             Low    (L_RedB0_74573)               ' setup our RED CATHODE 74573 latch pin
     
             High   (L_RedB1_74573)               ' setup our RED CATHODE 74573 latch pin             
                Graphic_port = block_5_red(x)             
             Low    (L_RedB1_74573)               ' setup our RED CATHODE 74573 latch pin
                                          
             High   (L_RedB2_74573)               ' setup our RED CATHODE 74573 latch pin                
                 Graphic_port = block_8_red(x)             
             Low    (L_RedB2_74573)               ' setup our RED CATHODE 74573 latch pin 
             
       //=================================================================================== 
       
       ' green data

             High   (L_GreenB0_74573)             ' setup our GREEN CATHODE 74573 latch pin                    
                Graphic_port = block_2_green(x)             
             Low    (L_GreenB0_74573)             ' setup our GREEN CATHODE 74573 latch pin

             High   (L_GreenB1_74573)             ' setup our GREEN CATHODE 74573 latch pin             
                Graphic_port = block_5_green(x)             
             Low    (L_GreenB1_74573)             ' setup our GREEN CATHODE 74573 latch pin                          
             
             High   (L_GreenB2_74573)             ' setup our GREEN CATHODE 74573 latch pin
                Graphic_port = block_8_green(x)
             Low    (L_GreenB2_74573)             ' setup our GREEN CATHODE 74573 latch pin                           
                
       //===================================================================================                
             
       ' anodes data
       
                Anode_port = Anode_data (x)
             High   (L_AnodeR2_74573)             ' setup our ANODE 74573 latch pin
             Low    (L_AnodeR2_74573)             ' setup our ANODE 74573 latch pin             
          

             High   (L_AnodeR0_74573)             ' setup our ANODE 74573 latch pin
             High   (L_AnodeR1_74573)             ' setup our ANODE 74573 latch pin
                Anode_port = $00    
             Low    (L_AnodeR0_74573)             ' setup our ANODE 74573 latch pin
             Low    (L_AnodeR1_74573)             ' setup our ANODE 74573 latch pin
             
       //===================================================================================                 
             
       ' Enable our Matrix
        
             Low    (E_ALL_74573)       ' makes enable pin low (all outputs ON)
  
                DelayUS(400)
                
             High   (E_ALL_74573)       ' makes enable pin high (all outputs OFF)

             ' we now clear our Anode data to stop graphic ghosting
             High   (L_AnodeR2_74573)             ' setup our ANODE 74573 latch pin
                Anode_port = $00             
             Low    (L_AnodeR2_74573)             ' setup our ANODE 74573 latch pin 
                                  
            Next
              Inc(t)
        Next
End Sub

// Check NES control Pad Data
Sub check_control_pad() 
    nes_latch = 1      // grab the state of the buttons 
    nes_latch = 0      // by giving a positive edge to the latch enable 
    For x = 0 To 7 
        nes_flags.bits(x) = nes_data    // the first bit (button a) will be shown on the nes_data pin, we read it,  
        nes_clock = 1                   // then clock through the remaining 7 bits to check the state of all buttons. 
        nes_clock = 0 
    Next    
End Sub 

// Check which button pressed
Sub check_buttons() 
 ' check left button 
    If button_debounce = 0 And nes_left = 0 And car_position <> 128 Then   // <> 128 is MSB bit 7
        car_position = car_position << 1
         button_debounce = 5
    EndIf 
 ' check right button    
    If button_debounce = 0 And nes_right = 0 And car_position <> 1 Then    // <1>> 1 
         button_debounce = 5
    EndIf
End Sub 

// Debounce for buttons
Sub debounce_buttons()               // here we debounce buttons for the control pad
    If button_debounce <> 0 Then 
        Dec(button_debounce) 
    EndIf 
End Sub 

// Stores Car Position for Display
Sub car_data ()
     block_7_red(6) = car_position      // this updates our car position to draw on display
End Sub 

// stores Road data 
Sub hit_data_update ()
     hit_data = block_7_green(6) 
End Sub


// check to see if the Car has crashed (hit a wall)
Sub collision_detect () 

Dim result As Byte
      
       result = 0

        result = car_position And hit_data

      If result <> 0 Then
        display_step = 0            // this resets the road data
        car_position = %00001000    // this resets the car to the start position
      EndIf
          
End Sub
 


// Set Ports 
SetAllDigital       // Make all Pins digital I/O's 
TRISA = %111001     // Make PORTA all inputs   NES control pad = RA0 Data input, RA1-RA2 Latch and Clock are outputs.
TRISB = %00000000   // Make PORTB all outputs 
TRISC = %00000000   // Make PORTC all outputs          
TRISD = %00000000   // Make PORTD all outputs 
TRISE = %000        // Make PORTE all outputs

    PORTB = $00      ' clear all ports
    PORTC = $00
    PORTD = $00
    PORTE = $00

    // this clears all data in all 74573 data latches
             High    (L_RedB0_74573)               ' setup our RED CATHODE 74573 latch pin
             High    (L_RedB1_74573)               ' setup our RED CATHODE 74573 latch pin
             High    (L_RedB2_74573)               ' setup our RED CATHODE 74573 latch pin

             High    (L_GreenB0_74573)             ' setup our GREEN CATHODE 74573 latch pin
             High    (L_GreenB1_74573)             ' setup our GREEN CATHODE 74573 latch pin
             High    (L_GreenB2_74573)             ' setup our GREEN CATHODE 74573 latch pin

             High    (L_AnodeR0_74573)             ' setup our ANODE 74573 latch pin
             High    (L_AnodeR1_74573)             ' setup our ANODE 74573 latch pin
             High    (L_AnodeR2_74573)             ' setup our ANODE 74573 latch pin
        
        // and this makes all outputs off     
        High (E_ALL_74573)  ' makes enable pin high (all outputs OFF)
        
        ' make sure all our data latches are closed
             Low    (L_RedB0_74573)               ' setup our RED CATHODE 74573 latch pin
             Low    (L_RedB1_74573)               ' setup our RED CATHODE 74573 latch pin
             Low    (L_RedB2_74573)               ' setup our RED CATHODE 74573 latch pin

             Low    (L_GreenB0_74573)             ' setup our GREEN CATHODE 74573 latch pin
             Low    (L_GreenB1_74573)             ' setup our GREEN CATHODE 74573 latch pin
             Low    (L_GreenB2_74573)             ' setup our GREEN CATHODE 74573 latch pin

             Low    (L_AnodeR0_74573)             ' setup our ANODE 74573 latch pin
             Low    (L_AnodeR1_74573)             ' setup our ANODE 74573 latch pin
             Low    (L_AnodeR2_74573)             ' setup our ANODE 74573 latch pin

// Initialize Variables  
counter = 0 

display_step = 0

        
nes_latch = 0 
nes_clock = 0
button_debounce = 5

car_position = %00001000  // start position for our car

hit_data = 0

// Main Program 

While True()
      
        car_data
        road_data
        
        check_control_pad
        check_buttons 
        debounce_buttons

        hit_data_update
        collision_detect
Wend    

// end of program.
End

User avatar
bitfogav
Moderator
Moderator
Posts: 915
Joined: Sun Mar 28, 2010 9:03 pm
Location: United Kingdom
Contact:

Post by bitfogav » Sun Sep 05, 2010 5:28 am

For some reason the subroutine "check_buttons" from the code above will not come out correctly when put in a forum code box, so here it is.

Image
Attachments
code.jpg
code.jpg (22.53 KiB) Viewed 22986 times

User avatar
brad
Site Admin
Site Admin
Posts: 2578
Joined: Fri Mar 26, 2010 10:30 pm
[phpBB Debug] PHP Warning: in file [ROOT]/vendor/twig/twig/lib/Twig/Extension/Core.php on line 1266: count(): Parameter must be an array or an object that implements Countable

Post by brad » Sun Sep 05, 2010 9:24 pm

Ah Swordfish basic - nice and simple!

User avatar
bitfogav
Moderator
Moderator
Posts: 915
Joined: Sun Mar 28, 2010 9:03 pm
Location: United Kingdom
Contact:

Post by bitfogav » Sun Sep 05, 2010 9:34 pm

brad wrote:Ah Swordfish basic - nice and simple!
yes im finding bits of it so easy now, where in assembly you had to write serveral lines of code to change the speed of the car for an example, where in swordfish its just a case of a few numbers.. :D

User avatar
brad
Site Admin
Site Admin
Posts: 2578
Joined: Fri Mar 26, 2010 10:30 pm
[phpBB Debug] PHP Warning: in file [ROOT]/vendor/twig/twig/lib/Twig/Extension/Core.php on line 1266: count(): Parameter must be an array or an object that implements Countable

Post by brad » Mon Sep 06, 2010 9:53 pm

I have just tonight started expermenting with the inbuilt ADC's within the microcontroller.

you know what has made it simple for me? SWORDFISH include files :)

User avatar
bitfogav
Moderator
Moderator
Posts: 915
Joined: Sun Mar 28, 2010 9:03 pm
Location: United Kingdom
Contact:

Post by bitfogav » Tue Sep 07, 2010 3:23 am

brad wrote:I have just tonight started expermenting with the inbuilt ADC's within the microcontroller.

you know what has made it simple for me? SWORDFISH include files :)
Cool, I have yet to look at the ADC's with swordfish but I did do abit of ADC's using assembly. I have looked at EEPROM though with swordfish and i am quite amazed that this bit of code writes to eeprom

Code: Select all

EE.Write(0,Value)
when I used to do it in assembly I had to write out this much code :o

Code: Select all

eeprom.write
		bsf		STATUS, RP1			; set RP1 + clear RP0 = Bank2
		bcf		STATUS, RP0			; select BANK 2
		movwf	EEDATA				; puts contents of Working register into EEDATA register
		bsf		STATUS, RP0			; selects BANK 3
		bcf		EECON1, EEPGD		; Stores to DATA memory (NOT Program memory)
		bsf		EECON1,WREN			; sets bit in EECON1, WREN bit (turns ON write bit) (WREN = EEPROM Write Enable bit) 
		movlw	55h					; puts 55h (85 decemal) into 
		movwf	EECON2				; EECON2 register = EEPROM Control register 2
		movlw	0AAh				; puts 0AAh (170 decemal) into
		movwf	EECON2				; EECON2 register = EEPROM Control register 2
		bsf		EECON1,	WR			; sets bit in EECON1, WR (write) bit, STARTS a write cycle. 
									; The bit is cleared by hardware once write is complete.
write.done
		btfsc	EECON1,	WR			; waits for WR bit to clear before moving on, when cleared next line skipped.
		goto	write.done			; goes back to write.done untill WR is cleared
		bcf		EECON1,	WREN		; clears bit in EECON1, WREN bit (turns OFF write bit) (WREN = EEPROM Write Enable bit)
		bcf		STATUS, RP1			; we now have to clear BOTH RP1 + RP0 to -
		bcf		STATUS, RP0			; select BANK 0 and return to our prog.
		return						; returns to prog

Post Reply
[phpBB Debug] PHP Warning: in file [ROOT]/vendor/twig/twig/lib/Twig/Extension/Core.php on line 1266: count(): Parameter must be an array or an object that implements Countable

Who is online

Users browsing this forum: No registered users and 2 guests