24x24 led matrix
Moderators: Chuckt, Garth, bitfogav
24x24 led matrix
Hi everyone!
Ive had this idea for awhile of making a 24x24 matrix from nine 8x8 Green and Red led matrix displays, I want it to make random patterns, make a game or even do scrolling letters and numbers, But I know I am limited to three colours using these 8x8 boards (green, red and orange) but that should be fine!
My main problem at the moment is that im not sure how I want to power up all the 8x8 displays? because I will have to use probably mulitplexing, and im not sure whether to use Transistor Mosfets to power the Columns or use Darlington chips ULN2803A, and whether or not I can power up a complete Column of 24 leds or if I will have to power up a single column of 8 leds on each 8x8 led matrix
My other problem at the moment is how I will control all the Rows or Leds, I could use cmos 74373's but I have also been thinking of using cmos 74595's, I guess Ill just have to do abit of breadboard experiments Unless anyone has got any ideas or can help!!
heres a board ive made up so far of all the 8x8 matrix displays
Ive had this idea for awhile of making a 24x24 matrix from nine 8x8 Green and Red led matrix displays, I want it to make random patterns, make a game or even do scrolling letters and numbers, But I know I am limited to three colours using these 8x8 boards (green, red and orange) but that should be fine!
My main problem at the moment is that im not sure how I want to power up all the 8x8 displays? because I will have to use probably mulitplexing, and im not sure whether to use Transistor Mosfets to power the Columns or use Darlington chips ULN2803A, and whether or not I can power up a complete Column of 24 leds or if I will have to power up a single column of 8 leds on each 8x8 led matrix
My other problem at the moment is how I will control all the Rows or Leds, I could use cmos 74373's but I have also been thinking of using cmos 74595's, I guess Ill just have to do abit of breadboard experiments Unless anyone has got any ideas or can help!!
heres a board ive made up so far of all the 8x8 matrix displays
- Attachments
-
- 24x24led.jpg (50.17 KiB) Viewed 18360 times
- brad
- 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
I have to say that I am very interested in where this project could be headed!
I have to head off to work now but will reply with some thoughts of how best to go about it this afternoon.
Actually, now that I think about it. I have built almost exactly the same thing for work!
It is a 24 x 24 LED matrix (one colour) that takes up a space on the wall about 2m x 2m I will post a video for you...
I have to head off to work now but will reply with some thoughts of how best to go about it this afternoon.
Actually, now that I think about it. I have built almost exactly the same thing for work!
It is a 24 x 24 LED matrix (one colour) that takes up a space on the wall about 2m x 2m I will post a video for you...
- brad
- 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
Okay I am back but don't have a video...
Anyway,
My design used six 74373's (three for the common anodes and three for the cathodes)
However, you want to use bi-colour displays so you would need nine 74373's.
With a 40 pin microcontroller you easily have enough pins to control it.
I.E. you would use say, PORTB for all inputs of all nine 74373's you would then need a further nine connections to use as the latch enable connections of the nine 74373's
Then you should be able to connect all of the 74373's output enable connections together and then to a single port pin.
since the 8x8 LED matrix displays are common anode you would need to use 24 NPN transistors to handle all the current (which would be upto 48 LED's on at any one time I.E. 24 red and 24 green on at the same time)
Here is an example of how you would connect the anodes to an NPN transistor:
Now for this project I would certainly recommend using a higher level language than ASM. I only say this because I know how involved it was to program something like this in ASM. But basic however is quite straight forward and I am happy to help you with it.
Here is my ASM code for the 24x24 display I made last year. It displays a big message that says "WELCOME TO AVIONICS" it scrolls these huge fonts from bottom to top.
Sorry I couldnt post all the code because this forum software cuts it off!
Anyway,
My design used six 74373's (three for the common anodes and three for the cathodes)
However, you want to use bi-colour displays so you would need nine 74373's.
With a 40 pin microcontroller you easily have enough pins to control it.
I.E. you would use say, PORTB for all inputs of all nine 74373's you would then need a further nine connections to use as the latch enable connections of the nine 74373's
Then you should be able to connect all of the 74373's output enable connections together and then to a single port pin.
since the 8x8 LED matrix displays are common anode you would need to use 24 NPN transistors to handle all the current (which would be upto 48 LED's on at any one time I.E. 24 red and 24 green on at the same time)
Here is an example of how you would connect the anodes to an NPN transistor:
Now for this project I would certainly recommend using a higher level language than ASM. I only say this because I know how involved it was to program something like this in ASM. But basic however is quite straight forward and I am happy to help you with it.
Here is my ASM code for the 24x24 display I made last year. It displays a big message that says "WELCOME TO AVIONICS" it scrolls these huge fonts from bottom to top.
Code: Select all
#include <p18F4550.inc>
CONFIG WDT=OFF ; disable watchdog timer
CONFIG MCLRE = OFF ; MCLEAR Pin off
CONFIG DEBUG = ON ; Enable Debug Mode
CONFIG LVP = OFF ; Low-Voltage programming disabled (necessary for debugging)
CONFIG FOSC = INTOSCIO_EC ; Internal oscillator, port function on RA6
org h'00' ; We want our program to start running from the start 00 hex
movlw h'0F'
movwf ADCON1
cblock h'00' ; We define our variables in here
delay_1
delay_2
vram_1_left
vram_2_left
vram_3_left
vram_4_left
vram_5_left
vram_6_left
vram_7_left
vram_8_left
vtemp_1_left
vtemp_2_left
vtemp_3_left
vtemp_4_left
vtemp_5_left
vtemp_6_left
vtemp_7_left
vram_1_middle
vram_2_middle
vram_3_middle
vram_4_middle
vram_5_middle
vram_6_middle
vram_7_middle
vram_8_middle
vtemp_1_middle
vtemp_2_middle
vtemp_3_middle
vtemp_4_middle
vtemp_5_middle
vtemp_6_middle
vtemp_7_middle
vram_1_right
vram_2_right
vram_3_right
vram_4_right
vram_5_right
vram_6_right
vram_7_right
vram_8_right
vtemp_1_right
vtemp_2_right
vtemp_3_right
vtemp_4_right
vtemp_5_right
vtemp_6_right
vtemp_7_right
vram_9_left
vram_10_left
vram_11_left
vram_12_left
vram_13_left
vram_14_left
vram_15_left
vram_16_left
vtemp_8_left
vtemp_9_left
vtemp_10_left
vtemp_11_left
vtemp_12_left
vtemp_13_left
vtemp_14_left
vtemp_15_left
vtemp_16_left
vram_9_middle
vram_10_middle
vram_11_middle
vram_12_middle
vram_13_middle
vram_14_middle
vram_15_middle
vram_16_middle
vtemp_8_middle
vtemp_9_middle
vtemp_10_middle
vtemp_11_middle
vtemp_12_middle
vtemp_13_middle
vtemp_14_middle
vtemp_15_middle
vtemp_16_middle
vram_9_right
vram_10_right
vram_11_right
vram_12_right
vram_13_right
vram_14_right
vram_15_right
vram_16_right
vtemp_8_right
vtemp_9_right
vtemp_10_right
vtemp_11_right
vtemp_12_right
vtemp_13_right
vtemp_14_right
vtemp_15_right
vtemp_16_right
vram_17_left
vram_18_left
vram_19_left
vram_20_left
vram_21_left
vram_22_left
vram_23_left
vram_24_left
vtemp_17_left
vtemp_18_left
vtemp_19_left
vtemp_20_left
vtemp_21_left
vtemp_22_left
vtemp_23_left
vram_17_middle
vram_18_middle
vram_19_middle
vram_20_middle
vram_21_middle
vram_22_middle
vram_23_middle
vram_24_middle
vtemp_17_middle
vtemp_18_middle
vtemp_19_middle
vtemp_20_middle
vtemp_21_middle
vtemp_22_middle
vtemp_23_middle
vram_17_right
vram_18_right
vram_19_right
vram_20_right
vram_21_right
vram_22_right
vram_23_right
vram_24_right
vtemp_17_right
vtemp_18_right
vtemp_19_right
vtemp_20_right
vtemp_21_right
vtemp_22_right
vtemp_23_right
graphics_data_save
low_left_data
low_middle_data
low_right_data
high_left_data
high_middle_data
high_right_data
upper_left_data
upper_middle_data
upper_right_data
repeat_frame ; used to determine how many times we will be repeating each 'frame'
animation_counter_a
animation_counter_b
received_command
which_animation
what_anim_speed
what_row_speed
anim_speed_temp
completion_bit_hold
endc ; and now we have finished defining variables
port_setup
clrf BSR
movlw b'10111111'
;movlw b'00000000'
movwf TRISA ; make PORTA all outputs
clrf TRISB ; make PORTB all outputs
movlw b'01000000'
;movlw b'00000000'
movwf TRISC ; make PORTC all outputs (except pin 6)
clrf TRISD ; make PORTD all outputs
clrf TRISE ; make PORTE all outputs
clrf LATA ; make PORTA all outputs
clrf LATB ; make PORTB all outputs
clrf LATC ; make PORTC all outputs
clrf LATD ; make PORTD all outputs
clrf LATE ; make PORTE all outputs
zero_latches
bsf LATC, 0 ; ensures all latches have zeros on startup
bsf LATC, 1
bsf LATC, 2
bcf LATC, 0
bcf LATC, 1
bcf LATC, 2
bsf LATE, 0 ; ensures all latches have zeros on startup
bsf LATE, 1
bsf LATE, 2
bcf LATE, 0
bcf LATE, 1
bcf LATE, 2
setup
clrf vram_1_left
clrf vram_2_left
clrf vram_3_left
clrf vram_4_left
clrf vram_5_left
clrf vram_6_left
clrf vram_7_left
clrf vram_8_left
clrf vram_1_middle
clrf vram_2_middle
clrf vram_3_middle
clrf vram_4_middle
clrf vram_5_middle
clrf vram_6_middle
clrf vram_7_middle
clrf vram_8_middle
clrf vram_1_right
clrf vram_2_right
clrf vram_3_right
clrf vram_4_right
clrf vram_5_right
clrf vram_6_right
clrf vram_7_right
clrf vram_8_right
bsf LATC, 7 ; turn off all LED's
call animation_2
call reset_animation_counter_a_b
movlw b'00000010'
movwf which_animation
bcf PORTA, 6
movlw d'13'
movwf what_anim_speed
begin
call check_remote
call display ; call the display routine
movf what_anim_speed, w
xorlw d'00'
btfsc STATUS, Z
goto begin
call fill_vram_left ; call the fill video ram routine
call fill_vram_middle ; call the fill video ram routine
call fill_vram_right ; call the fill video ram routine
goto begin
reset_animation_counter_a_b
movlw d'02'
movwf animation_counter_b
reset_animation_counter_a
movlw d'105'
movwf animation_counter_a
return
check_remote
btfss PORTC, 6
call anim_speed_command
btfss PORTA, 4 ; check for command
return
btfsc PORTC, 6
call check_row_speed_and_graphic
btfss PORTC, 6
call check_animation_and_animation_speed
bsf PORTA, 6
decfsz completion_bit_hold, f
return
bcf PORTA, 6
return
check_row_speed_and_graphic
btfsc PORTA, 5
call graphic_command
btfss PORTA, 6
call row_speed_command
return
check_animation_and_animation_speed
btfsc PORTA, 5
call anim_speed_command
btfss PORTA, 6
call animation_command
return
graphic_command
return
row_speed_command
return
anim_speed_command
btfss PORTA, 5
return
; clrf what_anim_speed
clrf received_command
btfsc PORTA, 3
bsf received_command, 2
btfsc PORTA, 2
bsf received_command, 1
btfsc PORTA, 1
bsf received_command, 0
movf received_command, w
xorlw d'00'
btfsc STATUS, Z
call set_anim_speed_0
movf received_command, w
xorlw d'01'
btfsc STATUS, Z
call set_anim_speed_1
movf received_command, w
xorlw d'02'
btfsc STATUS, Z
call set_anim_speed_2
movf received_command, w
xorlw d'03'
btfsc STATUS, Z
call set_anim_speed_3
movf received_command, w
xorlw d'04'
btfsc STATUS, Z
call set_anim_speed_4
movf received_command, w
xorlw d'05'
btfsc STATUS, Z
call set_anim_speed_5
movf received_command, w
xorlw d'06'
btfsc STATUS, Z
call set_anim_speed_6
movf received_command, w
xorlw d'07'
btfsc STATUS, Z
call set_anim_speed_7
return
set_anim_speed_0
movlw d'00'
movwf what_anim_speed
return
set_anim_speed_1
movlw d'01'
movwf what_anim_speed
return
set_anim_speed_2
movlw d'02'
movwf what_anim_speed
return
set_anim_speed_3
movlw d'03'
movwf what_anim_speed
return
set_anim_speed_4
movlw d'04'
movwf what_anim_speed
return
set_anim_speed_5
movlw d'05'
movwf what_anim_speed
return
set_anim_speed_6
movlw d'06'
movwf what_anim_speed
return
set_anim_speed_7
movlw d'07'
movwf what_anim_speed
return
animation_command
return
animation_1
movlw low left_data_1
movwf low_left_data
movlw high left_data_1
movwf high_left_data
movlw upper left_data_1
movwf upper_left_data
movlw low middle_data_1
movwf low_middle_data
movlw high middle_data_1
movwf high_middle_data
movlw upper middle_data_1
movwf upper_middle_data
movlw low right_data_1
movwf low_right_data
movlw high right_data_1
movwf high_right_data
movlw upper right_data_1
movwf upper_right_data
return
animation_2
movlw low left_data_2
movwf low_left_data
movlw high left_data_2
movwf high_left_data
movlw upper left_data_2
movwf upper_left_data
movlw low middle_data_2
movwf low_middle_data
movlw high middle_data_2
movwf high_middle_data
movlw upper middle_data_2
movwf upper_middle_data
movlw low right_data_2
movwf low_right_data
movlw high right_data_2
movwf high_right_data
movlw upper right_data_2
movwf upper_right_data
return
anim_speed_temp_1
movlw d'50'
movwf anim_speed_temp
return
anim_speed_temp_2
movlw d'40'
movwf anim_speed_temp
return
anim_speed_temp_3
movlw d'25'
movwf anim_speed_temp
return
anim_speed_temp_4
movlw d'12'
movwf anim_speed_temp
return
anim_speed_temp_5
movlw d'07'
movwf anim_speed_temp
return
anim_speed_temp_6
movlw d'05'
movwf anim_speed_temp
return
anim_speed_temp_7
movlw d'03'
movwf anim_speed_temp
return
display
movf what_anim_speed, w
xorlw d'00'
btfsc STATUS, Z
call anim_speed_temp_0
movf what_anim_speed, w
xorlw d'01'
btfsc STATUS, Z
call anim_speed_temp_1
movf what_anim_speed, w
xorlw d'02'
btfsc STATUS, Z
call anim_speed_temp_2
movf what_anim_speed, w
xorlw d'03'
btfsc STATUS, Z
call anim_speed_temp_3
movf what_anim_speed, w
xorlw d'04'
btfsc STATUS, Z
call anim_speed_temp_4
movf what_anim_speed, w
xorlw d'05'
btfsc STATUS, Z
call anim_speed_temp_5
movf what_anim_speed, w
xorlw d'06'
btfsc STATUS, Z
call anim_speed_temp_6
movf what_anim_speed, w
xorlw d'07'
btfsc STATUS, Z
call anim_speed_temp_7
movf anim_speed_temp, w
movwf repeat_frame ; so we grab that data from speed and copy it to our frame_rate
loop
call check_remote
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
movlw b'10000000' ; activate top row of cathodes
movwf LATD
bsf LATC, 2
bcf LATC, 2
clrf LATD
bsf LATC, 1
bsf LATC, 0
bcf LATC, 1
bcf LATC, 0
bsf LATE, 2 ;
movf vram_1_left, w ; Now we grab the first row of data from vram_1.
movwf LATB
bcf LATE, 2
bsf LATE, 1 ;
movf vram_1_middle, w ; Now we grab the first row of data from vram_1.
movwf LATB
bcf LATE, 1
bsf LATE, 0 ;
movf vram_1_right, w ; Now we grab the first row of data from vram_1.
movwf LATB
bcf LATE, 0
bcf LATC, 7
call delay ; Call the delay (to hold that one row ON for a split second)rate
bsf LATC, 7
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
movlw b'01000000'
movwf LATD
bsf LATC, 2
bcf LATC, 2
clrf LATD
bsf LATC, 1
bsf LATC, 0
bcf LATC, 1
bcf LATC, 0
bsf LATE, 2
movf vram_2_left, w ; Now we grab the first row of data from vram_1.
movwf LATB ; then we copy it to PORTB
bcf LATE, 2
bsf LATE, 1
movf vram_2_middle, w ; Now we grab the first row of data from vram_1.
movwf LATB ; then we copy it to PORTB
bcf LATE, 1
bsf LATE, 0
movf vram_2_right, w ; Now we grab the first row of data from vram_1.
movwf LATB ; then we copy it to PORTB
bcf LATE, 0
bcf LATC, 7
call delay ; Call the delay (to hold that one row ON for a split second)rate
bsf LATC, 7
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
movlw b'00100000'
movwf LATD
bsf LATC, 2
bcf LATC, 2
clrf LATD
bsf LATC, 1
bsf LATC, 0
bcf LATC, 1
bcf LATC, 0
bsf LATE, 2
movf vram_3_left, w ; Now we grab the first row of data from vram_1.
movwf LATB ; then we copy it to PORTB
bcf LATE, 2
bsf LATE, 1
movf vram_3_middle, w ; Now we grab the first row of data from vram_1.
movwf LATB ; then we copy it to PORTB
bcf LATE, 1
bsf LATE, 0
movf vram_3_right, w ; Now we grab the first row of data from vram_1.
movwf LATB ; then we copy it to PORTB
bcf LATE, 0
bcf LATC, 7
call delay ; Call the delay (to hold that one row ON for a split second)rate
bsf LATC, 7
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
movlw b'00010000'
movwf LATD
bsf LATC, 2
bcf LATC, 2
clrf LATD
bsf LATC, 1
bsf LATC, 0
bcf LATC, 1
bcf LATC, 0
bsf LATE, 2
movf vram_4_left, w ; Now we grab the first row of data from vram_1.
movwf LATB ; then we copy it to PORTB
bcf LATE, 2
bsf LATE, 1
movf vram_4_middle, w ; Now we grab the first row of data from vram_1.
movwf LATB ; then we copy it to PORTB
bcf LATE, 1
bsf LATE, 0
movf vram_4_right, w ; Now we grab the first row of data from vram_1.
movwf LATB ; then we copy it to PORTB
bcf LATE, 0
bcf LATC, 7
call delay ; Call the delay (to hold that one row ON for a split second)rate
bsf LATC, 7
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
movlw b'00001000'
movwf LATD
bsf LATC, 2
bcf LATC, 2
clrf LATD
bsf LATC, 1
bsf LATC, 0
bcf LATC, 1
bcf LATC, 0
bsf LATE, 2
movf vram_5_left, w ; Now we grab the first row of data from vram_1.
movwf LATB ; then we copy it to PORTB
bcf LATE, 2
bsf LATE, 1
movf vram_5_middle, w ; Now we grab the first row of data from vram_1.
movwf LATB ; then we copy it to PORTB
bcf LATE, 1
bsf LATE, 0
movf vram_5_right, w ; Now we grab the first row of data from vram_1.
movwf LATB ; then we copy it to PORTB
bcf LATE, 0
bcf LATC, 7
call delay ; Call the delay (to hold that one row ON for a split second)rate
bsf LATC, 7
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
movlw b'00000100'
movwf LATD
bsf LATC, 2
bcf LATC, 2
clrf LATD
bsf LATC, 1
bsf LATC, 0
bcf LATC, 1
bcf LATC, 0
bsf LATE, 2
movf vram_6_left, w ; Now we grab the first row of data from vram_1.
movwf LATB ; then we copy it to PORTB
bcf LATE, 2
bsf LATE, 1
movf vram_6_middle, w ; Now we grab the first row of data from vram_1.
movwf LATB ; then we copy it to PORTB
bcf LATE, 1
bsf LATE, 0
movf vram_6_right, w ; Now we grab the first row of data from vram_1.
movwf LATB ; then we copy it to PORTB
bcf LATE, 0
bcf LATC, 7
call delay ; Call the delay (to hold that one row ON for a split second)rate
bsf LATC, 7
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
movlw b'00000010'
movwf LATD
bsf LATC, 2
bcf LATC, 2
clrf LATD
bsf LATC, 1
bsf LATC, 0
bcf LATC, 1
bcf LATC, 0
bsf LATE, 2
movf vram_7_left, w ; Now we grab the first row of data from vram_1.
movwf LATB ; then we copy it to PORTB
bcf LATE, 2
bsf LATE, 1
movf vram_7_middle, w ; Now we grab the first row of data from vram_1.
movwf LATB ; then we copy it to PORTB
bcf LATE, 1
bsf LATE, 0
movf vram_7_right, w ; Now we grab the first row of data from vram_1.
movwf LATB ; then we copy it to PORTB
bcf LATE, 0
bcf LATC, 7
call delay ; Call the delay (to hold that one row ON for a split second)rate
bsf LATC, 7
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
movlw b'00000001'
movwf LATD
bsf LATC, 2
bcf LATC, 2
clrf LATD
bsf LATC, 1
bsf LATC, 0
bcf LATC, 1
bcf LATC, 0
bsf LATE, 2
movf vram_8_left, w ; Now we grab the first row of data from vram_1.
movwf LATB ; then we copy it to PORTB
bcf LATE, 2
bsf LATE, 1
movf vram_8_middle, w ; Now we grab the first row of data from vram_1.
movwf LATB ; then we copy it to PORTB
bcf LATE, 1
bsf LATE, 0
movf vram_8_right, w ; Now we grab the first row of data from vram_1.
movwf LATB ; then we copy it to PORTB
bcf LATE, 0
bcf LATC, 7
call delay ; Call the delay (to hold that one row ON for a split second)
bsf LATC, 7
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
movlw b'10000000' ; activate top row of cathodes
movwf LATD
bsf LATC, 1
bcf LATC, 1
clrf LATD
bsf LATC, 0
bsf LATC, 2
bcf LATC, 0
bcf LATC, 2
bsf LATE, 2 ;
movf vram_9_left, w ; Now we grab the first row of data from vram_1.
movwf LATB
bcf LATE, 2
bsf LATE, 1 ;
movf vram_9_middle, w ; Now we grab the first row of data from vram_1.
movwf LATB
bcf LATE, 1
bsf LATE, 0 ;
movf vram_9_right, w ; Now we grab the first row of data from vram_1.
movwf LATB
bcf LATE, 0
bcf LATC, 7
call delay ; Call the delay (to hold that one row ON for a split second)rate
bsf LATC, 7
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
movlw b'01000000'
movwf LATD
bsf LATC, 1
bcf LATC, 1
clrf LATD
bsf LATC, 0
bsf LATC, 2
bcf LATC, 0
bcf LATC, 2
bsf LATE, 2
movf vram_10_left, w ; Now we grab the first row of data from vram_1.
movwf LATB ; then we copy it to PORTB
bcf LATE, 2
bsf LATE, 1
movf vram_10_middle, w ; Now we grab the first row of data from vram_1.
movwf LATB ; then we copy it to PORTB
bcf LATE, 1
bsf LATE, 0
movf vram_10_right, w ; Now we grab the first row of data from vram_1.
movwf LATB ; then we copy it to PORTB
bcf LATE, 0
bcf LATC, 7
call delay ; Call the delay (to hold that one row ON for a split second)rate
bsf LATC, 7
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
movlw b'00100000'
movwf LATD
bsf LATC, 1
bcf LATC, 1
clrf LATD
bsf LATC, 0
bsf LATC, 2
bcf LATC, 0
bcf LATC, 2
bsf LATE, 2
movf vram_11_left, w ; Now we grab the first row of data from vram_1.
movwf LATB ; then we copy it to PORTB
bcf LATE, 2
bsf LATE, 1
movf vram_11_middle, w ; Now we grab the first row of data from vram_1.
movwf LATB ; then we copy it to PORTB
bcf LATE, 1
bsf LATE, 0
movf vram_11_right, w ; Now we grab the first row of data from vram_1.
movwf LATB ; then we copy it to PORTB
bcf LATE, 0
bcf LATC, 7
call delay ; Call the delay (to hold that one row ON for a split second)rate
bsf LATC, 7
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
movlw b'00010000'
movwf LATD
bsf LATC, 1
bcf LATC, 1
clrf LATD
bsf LATC, 0
bsf LATC, 2
bcf LATC, 0
bcf LATC, 2
bsf LATE, 2
movf vram_12_left, w ; Now we grab the first row of data from vram_1.
movwf LATB ; then we copy it to PORTB
bcf LATE, 2
bsf LATE, 1
movf vram_12_middle, w ; Now we grab the first row of data from vram_1.
movwf LATB ; then we copy it to PORTB
bcf LATE, 1
bsf LATE, 0
movf vram_12_right, w ; Now we grab the first row of data from vram_1.
movwf LATB ; then we copy it to PORTB
bcf LATE, 0
bcf LATC, 7
call delay ; Call the delay (to hold that one row ON for a split second)rate
bsf LATC, 7
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
movlw b'00001000'
movwf LATD
bsf LATC, 1
bcf LATC, 1
clrf LATD
bsf LATC, 0
bsf LATC, 2
bcf LATC, 0
bcf LATC, 2
bsf LATE, 2
movf vram_13_left, w ; Now we grab the first row of data from vram_1.
movwf LATB ; then we copy it to PORTB
bcf LATE, 2
bsf LATE, 1
movf vram_13_middle, w ; Now we grab the first row of data from vram_1.
movwf LATB ; then we copy it to PORTB
bcf LATE, 1
bsf LATE, 0
movf vram_13_right, w ; Now we grab the first row of data from vram_1.
movwf LATB ; then we copy it to PORTB
bcf LATE, 0
bcf LATC, 7
call delay ; Call the delay (to hold that one row ON for a split second)rate
bsf LATC, 7
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
movlw b'00000100'
movwf LATD
bsf LATC, 1
bcf LATC, 1
clrf LATD
bsf LATC, 0
bsf LATC, 2
bcf LATC, 0
bcf LATC, 2
bsf LATE, 2
movf vram_14_left, w ; Now we grab the first row of data from vram_1.
movwf LATB ; then we copy it to PORTB
bcf LATE, 2
bsf LATE, 1
movf vram_14_middle, w ; Now we grab the first row of data from vram_1.
movwf LATB ; then we copy it to PORTB
bcf LATE, 1
bsf LATE, 0
movf vram_14_right, w ; Now we grab the first row of data from vram_1.
movwf LATB ; then we copy it to PORTB
bcf LATE, 0
bcf LATC, 7
call delay ; Call the delay (to hold that one row ON for a split second)rate
bsf LATC, 7
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
movlw b'00000010'
movwf LATD
bsf LATC, 1
bcf LATC, 1
clrf LATD
bsf LATC, 0
bsf LATC, 2
bcf LATC, 0
bcf LATC, 2
bsf LATE, 2
movf vram_15_left, w ; Now we grab the first row of data from vram_1.
movwf LATB ; then we copy it to PORTB
bcf LATE, 2
bsf LATE, 1
movf vram_15_middle, w ; Now we grab the first row of data from vram_1.
movwf LATB ; then we copy it to PORTB
bcf LATE, 1
bsf LATE, 0
movf vram_15_right, w ; Now we grab the first row of data from vram_1.
movwf LATB ; then we copy it to PORTB
bcf LATE, 0
bcf LATC, 7
call delay ; Call the delay (to hold that one row ON for a split second)rate
bsf LATC, 7
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
movlw b'00000001'
movwf LATD
bsf LATC, 1
bcf LATC, 1
clrf LATD
bsf LATC, 0
bsf LATC, 2
bcf LATC, 0
bcf LATC, 2
bsf LATE, 2
movf vram_16_left, w ; Now we grab the first row of data from vram_1.
movwf LATB ; then we copy it to PORTB
bcf LATE, 2
bsf LATE, 1
movf vram_16_middle, w ; Now we grab the first row of data from vram_1.
movwf LATB ; then we copy it to PORTB
bcf LATE, 1
bsf LATE, 0
movf vram_16_right, w ; Now we grab the first row of data from vram_1.
movwf LATB ; then we copy it to PORTB
bcf LATE, 0
bcf LATC, 7
call delay ; Call the delay (to hold that one row ON for a split second)
bsf LATC, 7
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
movlw b'10000000' ; activate top row of cathodes
movwf LATD
bsf LATC, 0
bcf LATC, 0
clrf LATD
bsf LATC, 1
bsf LATC, 2
bcf LATC, 1
bcf LATC, 2
bsf LATE, 2 ;
movf vram_17_left, w ; Now we grab the first row of data from vram_1.
movwf LATB
bcf LATE, 2
bsf LATE, 1 ;
movf vram_17_middle, w ; Now we grab the first row of data from vram_1.
movwf LATB
bcf LATE, 1
bsf LATE, 0 ;
movf vram_17_right, w ; Now we grab the first row of data from vram_1.
movwf LATB
bcf LATE, 0
bcf LATC, 7
call delay ; Call the delay (to hold that one row ON for a split second)rate
bsf LATC, 7
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
movlw b'01000000'
movwf LATD
bsf LATC, 0
bcf LATC, 0
clrf LATD
bsf LATC, 1
bsf LATC, 2
bcf LATC, 1
bcf LATC, 2
bsf LATE, 2
movf vram_18_left, w ; Now we grab the first row of data from vram_1.
movwf LATB ; then we copy it to PORTB
bcf LATE, 2
bsf LATE, 1
movf vram_18_middle, w ; Now we grab the first row of data from vram_1.
movwf LATB ; then we copy it to PORTB
bcf LATE, 1
bsf LATE, 0
movf vram_18_right, w ; Now we grab the first row of data from vram_1.
movwf LATB ; then we copy it to PORTB
bcf LATE, 0
bcf LATC, 7
call delay ; Call the delay (to hold that one row ON for a split second)rate
bsf LATC, 7
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
movlw b'00100000'
movwf LATD
bsf LATC, 0
bcf LATC, 0
clrf LATD
bsf LATC, 1
bsf LATC, 2
bcf LATC, 1
bcf LATC, 2
bsf LATE, 2
movf vram_19_left, w ; Now we grab the first row of data from vram_1.
movwf LATB ; then we copy it to PORTB
bcf LATE, 2
bsf LATE, 1
movf vram_19_middle, w ; Now we grab the first row of data from vram_1.
movwf LATB ; then we copy it to PORTB
bcf LATE, 1
bsf LATE, 0
movf vram_19_right, w ; Now we grab the first row of data from vram_1.
movwf LATB ; then we copy it to PORTB
bcf LATE, 0
bcf LATC, 7
call delay ; Call the delay (to hold that one row ON for a split second)rate
bsf LATC, 7
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
movlw b'00010000'
movwf LATD
bsf LATC, 0
bcf LATC, 0
clrf LATD
bsf LATC, 1
bsf LATC, 2
bcf LATC, 1
bcf LATC, 2
bsf LATE, 2
movf vram_20_left, w ; Now we grab the first row of data from vram_1.
movwf LATB ; then we copy it to PORTB
bcf LATE, 2
bsf LATE, 1
movf vram_20_middle, w ; Now we grab the first row of data from vram_1.
movwf LATB ; then we copy it to PORTB
bcf LATE, 1
bsf LATE, 0
movf vram_20_right, w ; Now we grab the first row of data from vram_1.
movwf LATB ; then we copy it to PORTB
bcf LATE, 0
bcf LATC, 7
call delay ; Call the delay (to hold that one row ON for a split second)rate
bsf LATC, 7
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
movlw b'00001000'
movwf LATD
bsf LATC, 0
bcf LATC, 0
clrf LATD
bsf LATC, 1
bsf LATC, 2
bcf LATC, 1
bcf LATC, 2
bsf LATE, 2
movf vram_21_left, w ; Now we grab the first row of data from vram_1.
movwf LATB ; then we copy it to PORTB
bcf LATE, 2
bsf LATE, 1
movf vram_21_middle, w ; Now we grab the first row of data from vram_1.
movwf LATB ; then we copy it to PORTB
bcf LATE, 1
bsf LATE, 0
movf vram_21_right, w ; Now we grab the first row of data from vram_1.
movwf LATB ; then we copy it to PORTB
bcf LATE, 0
bcf LATC, 7
call delay ; Call the delay (to hold that one row ON for a split second)rate
bsf LATC, 7
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
movlw b'00000100'
movwf LATD
bsf LATC, 0
bcf LATC, 0
clrf LATD
bsf LATC, 1
bsf LATC, 2
bcf LATC, 1
bcf LATC, 2
bsf LATE, 2
movf vram_22_left, w ; Now we grab the first row of data from vram_1.
movwf LATB ; then we copy it to PORTB
bcf LATE, 2
bsf LATE, 1
movf vram_22_middle, w ; Now we grab the first row of data from vram_1.
movwf LATB ; then we copy it to PORTB
bcf LATE, 1
bsf LATE, 0
movf vram_22_right, w ; Now we grab the first row of data from vram_1.
movwf LATB ; then we copy it to PORTB
bcf LATE, 0
bcf LATC, 7
call delay ; Call the delay (to hold that one row ON for a split second)rate
bsf LATC, 7
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
movlw b'00000010'
movwf LATD
bsf LATC, 0
bcf LATC, 0
clrf LATD
bsf LATC, 1
bsf LATC, 2
bcf LATC, 1
bcf LATC, 2
bsf LATE, 2
movf vram_23_left, w ; Now we grab the first row of data from vram_1.
movwf LATB ; then we copy it to PORTB
bcf LATE, 2
bsf LATE, 1
movf vram_23_middle, w ; Now we grab the first row of data from vram_1.
movwf LATB ; then we copy it to PORTB
bcf LATE, 1
bsf LATE, 0
movf vram_23_right, w ; Now we grab the first row of data from vram_1.
movwf LATB ; then we copy it to PORTB
bcf LATE, 0
bcf LATC, 7
call delay ; Call the delay (to hold that one row ON for a split second)rate
bsf LATC, 7
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
movlw b'00000001'
movwf LATD
bsf LATC, 0
bcf LATC, 0
clrf LATD
bsf LATC, 1
bsf LATC, 2
bcf LATC, 1
bcf LATC, 2
bsf LATE, 2
movf vram_24_left, w ; Now we grab the first row of data from vram_1.
movwf LATB ; then we copy it to PORTB
bcf LATE, 2
bsf LATE, 1
movf vram_24_middle, w ; Now we grab the first row of data from vram_1.
movwf LATB ; then we copy it to PORTB
bcf LATE, 1
bsf LATE, 0
movf vram_24_right, w ; Now we grab the first row of data from vram_1.
movwf LATB ; then we copy it to PORTB
bcf LATE, 0
bcf LATC, 7
call delay ; Call the delay (to hold that one row ON for a split second)
bsf LATC, 7
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
decfsz repeat_frame ; then decrease repeat_frame by one,
goto loop ; if its not zero then draw it all again!
return
fill_vram_left
movf vram_1_left, 0 ; Copy vram_1 into vtemp_1 to use as a backup
movwf vtemp_1_left ; storage location. (just before we overwrite vram_1)
movf vram_2_left, 0 ; Copy vram_1 into vtemp_2 to use as a backup
movwf vtemp_2_left ; storage location. (just before we overwrite vram_2)
movf vram_3_left, 0 ; Copy vram_1 into vtemp_3 to use as a backup
movwf vtemp_3_left ; storage location. (just before we overwrite vram_3)
movf vram_4_left, 0 ; Copy vram_1 into vtemp_4 to use as a backup
movwf vtemp_4_left ; storage location. (just before we overwrite vram_4)
movf vram_5_left, 0 ; Copy vram_1 into vtemp_5 to use as a backup
movwf vtemp_5_left ; storage location. (just before we overwrite vram_5)
movf vram_6_left, 0 ; Copy vram_1 into vtemp_6 to use as a backup
movwf vtemp_6_left ; storage location. (just before we overwrite vram_6)
movf vram_7_left, 0 ; Copy vram_7 into vtemp_7 to use as a backup
movwf vtemp_7_left ; storage location. (just before we overwrite vram_7)
movf vram_8_left, 0 ; Copy vram_1 into vtemp_1 to use as a backup
movwf vtemp_8_left ; storage location. (just before we overwrite vram_1)
movf vram_9_left, 0 ; Copy vram_1 into vtemp_2 to use as a backup
movwf vtemp_9_left ; storage location. (just before we overwrite vram_2)
movf vram_10_left, 0 ; Copy vram_1 into vtemp_3 to use as a backup
movwf vtemp_10_left ; storage location. (just before we overwrite vram_3)
movf vram_11_left, 0 ; Copy vram_1 into vtemp_4 to use as a backup
movwf vtemp_11_left ; storage location. (just before we overwrite vram_4)
movf vram_12_left, 0 ; Copy vram_1 into vtemp_5 to use as a backup
movwf vtemp_12_left ; storage location. (just before we overwrite vram_5)
movf vram_13_left, 0 ; Copy vram_1 into vtemp_6 to use as a backup
movwf vtemp_13_left ; storage location. (just before we overwrite vram_6)
movf vram_14_left, 0 ; Copy vram_7 into vtemp_7 to use as a backup
movwf vtemp_14_left ; storage location. (just before we overwrite vram_7)
movf vram_15_left, 0 ; Copy vram_1 into vtemp_1 to use as a backup
movwf vtemp_15_left ; storage location. (just before we overwrite vram_1)
movf vram_16_left, 0 ; Copy vram_1 into vtemp_2 to use as a backup
movwf vtemp_16_left ; storage location. (just before we overwrite vram_2)
movf vram_17_left, 0 ; Copy vram_1 into vtemp_3 to use as a backup
movwf vtemp_17_left ; storage location. (just before we overwrite vram_3)
movf vram_18_left, 0 ; Copy vram_1 into vtemp_4 to use as a backup
movwf vtemp_18_left ; storage location. (just before we overwrite vram_4)
movf vram_19_left, 0 ; Copy vram_1 into vtemp_5 to use as a backup
movwf vtemp_19_left ; storage location. (just before we overwrite vram_5)
movf vram_20_left, 0 ; Copy vram_1 into vtemp_6 to use as a backup
movwf vtemp_20_left ; storage location. (just before we overwrite vram_6)
movf vram_21_left, 0 ; Copy vram_7 into vtemp_7 to use as a backup
movwf vtemp_21_left ; storage location. (just before we overwrite vram_7)
movf vram_22_left, 0 ; Copy vram_7 into vtemp_7 to use as a backup
movwf vtemp_22_left ; storage location. (just before we overwrite vram_7)
movf vram_23_left, 0 ; Copy vram_7 into vtemp_7 to use as a backup
movwf vtemp_23_left ; storage location. (just before we overwrite vram_7)
call graphics_data_left ; Call track_data routine and return with a byte of data in the w register
movf graphics_data_save, w
movwf vram_1_left ; then copy the new byte of data to the first vram location
movf vtemp_1_left, 0 ; copy what was in vram_1 into vram_2 (remember how we made
movwf vram_2_left ; a backup of vram_1 and called it vtemp_1.)
movf vtemp_2_left, 0 ; copy what was in vram_2 into vram_3 (remember how we made
movwf vram_3_left ; a backup of vram_2 and called it vtemp_2.)
movf vtemp_3_left, 0 ; copy what was in vram_3 into vram_4 (remember how we made
movwf vram_4_left ; a backup of vram_3 and called it vtemp_3.)
movf vtemp_4_left, 0 ; copy what was in vram_4 into vram_5 (remember how we made
movwf vram_5_left ; a backup of vram_4 and called it vtemp_4.)
movf vtemp_5_left, 0 ; copy what was in vram_5 into vram_6 (remember how we made
movwf vram_6_left ; a backup of vram_5 and called it vtemp_5.)
movf vtemp_6_left, 0 ; copy what was in vram_6 into vram_7 (remember how we made
movwf vram_7_left ; a backup of vram_6 and called it vtemp_6.)
movf vtemp_7_left, 0 ; copy what was in vram_7 into vram_8 (remember how we made
movwf vram_8_left ; a backup of vram_7 and called it vtemp_7.)
movf vtemp_8_left, 0 ; copy what was in vram_1 into vram_2 (remember how we made
movwf vram_9_left ; a backup of vram_1 and called it vtemp_1.)
movf vtemp_9_left, 0 ; copy what was in vram_2 into vram_3 (remember how we made
movwf vram_10_left ; a backup of vram_2 and called it vtemp_2.)
movf vtemp_10_left, 0 ; copy what was in vram_3 into vram_4 (remember how we made
movwf vram_11_left ; a backup of vram_3 and called it vtemp_3.)
movf vtemp_11_left, 0 ; copy what was in vram_4 into vram_5 (remember how we made
movwf vram_12_left ; a backup of vram_4 and called it vtemp_4.)
movf vtemp_12_left, 0 ; copy what was in vram_5 into vram_6 (remember how we made
movwf vram_13_left ; a backup of vram_5 and called it vtemp_5.)
movf vtemp_13_left, 0 ; copy what was in vram_6 into vram_7 (remember how we made
movwf vram_14_left ; a backup of vram_6 and called it vtemp_6.)
movf vtemp_14_left, 0 ; copy what was in vram_7 into vram_8 (remember how we made
movwf vram_15_left ; a backup of vram_7 and called it vtemp_7.)
movf vtemp_15_left, 0 ; copy what was in vram_1 into vram_2 (remember how we made
movwf vram_16_left ; a backup of vram_1 and called it vtemp_1.)
movf vtemp_16_left, 0 ; copy what was in vram_2 into vram_3 (remember how we made
movwf vram_17_left ; a backup of vram_2 and called it vtemp_2.)
movf vtemp_17_left, 0 ; copy what was in vram_3 into vram_4 (remember how we made
movwf vram_18_left ; a backup of vram_3 and called it vtemp_3.)
movf vtemp_18_left, 0 ; copy what was in vram_4 into vram_5 (remember how we made
movwf vram_19_left ; a backup of vram_4 and called it vtemp_4.)
movf vtemp_19_left, 0 ; copy what was in vram_5 into vram_6 (remember how we made
movwf vram_20_left ; a backup of vram_5 and called it vtemp_5.)
movf vtemp_20_left, 0 ; copy what was in vram_6 into vram_7 (remember how we made
movwf vram_21_left ; a backup of vram_6 and called it vtemp_6.)
movf vtemp_21_left, 0 ; copy what was in vram_7 into vram_8 (remember how we made
movwf vram_22_left ; a backup of vram_7 and called it vtemp_7.)
movf vtemp_22_left, 0 ; copy what was in vram_7 into vram_8 (remember how we made
movwf vram_23_left ; a backup of vram_7 and called it vtemp_7.)
movf vtemp_23_left, 0 ; copy what was in vram_7 into vram_8 (remember how we made
movwf vram_24_left
return ; Now that we're all done here, go back to our main program.
fill_vram_middle
movf vram_1_middle, 0 ; Copy vram_1 into vtemp_1 to use as a backup
movwf vtemp_1_middle ; storage location. (just before we overwrite vram_1)
movf vram_2_middle, 0 ; Copy vram_1 into vtemp_2 to use as a backup
movwf vtemp_2_middle ; storage location. (just before we overwrite vram_2)
movf vram_3_middle, 0 ; Copy vram_1 into vtemp_3 to use as a backup
movwf vtemp_3_middle ; storage location. (just before we overwrite vram_3)
movf vram_4_middle, 0 ; Copy vram_1 into vtemp_4 to use as a backup
movwf vtemp_4_middle ; storage location. (just before we overwrite vram_4)
movf vram_5_middle, 0 ; Copy vram_1 into vtemp_5 to use as a backup
movwf vtemp_5_middle ; storage location. (just before we overwrite vram_5)
movf vram_6_middle, 0 ; Copy vram_1 into vtemp_6 to use as a backup
movwf vtemp_6_middle ; storage location. (just before we overwrite vram_6)
movf vram_7_middle, 0 ; Copy vram_7 into vtemp_7 to use as a backup
movwf vtemp_7_middle ; storage location. (just before we overwrite vram_7)
movf vram_8_middle, 0 ; Copy vram_1 into vtemp_1 to use as a backup
movwf vtemp_8_middle ; storage location. (just before we overwrite vram_1)
movf vram_9_middle, 0 ; Copy vram_1 into vtemp_2 to use as a backup
movwf vtemp_9_middle ; storage location. (just before we overwrite vram_2)
movf vram_10_middle, 0 ; Copy vram_1 into vtemp_3 to use as a backup
movwf vtemp_10_middle ; storage location. (just before we overwrite vram_3)
movf vram_11_middle, 0 ; Copy vram_1 into vtemp_4 to use as a backup
movwf vtemp_11_middle ; storage location. (just before we overwrite vram_4)
movf vram_12_middle, 0 ; Copy vram_1 into vtemp_5 to use as a backup
movwf vtemp_12_middle ; storage location. (just before we overwrite vram_5)
movf vram_13_middle, 0 ; Copy vram_1 into vtemp_6 to use as a backup
movwf vtemp_13_middle ; storage location. (just before we overwrite vram_6)
movf vram_14_middle, 0 ; Copy vram_7 into vtemp_7 to use as a backup
movwf vtemp_14_middle ; storage location. (just before we overwrite vram_7)
movf vram_15_middle, 0 ; Copy vram_1 into vtemp_1 to use as a backup
movwf vtemp_15_middle ; storage location. (just before we overwrite vram_1)
movf vram_16_middle, 0 ; Copy vram_1 into vtemp_2 to use as a backup
movwf vtemp_16_middle ; storage location. (just before we overwrite vram_2)
movf vram_17_middle, 0 ; Copy vram_1 into vtemp_3 to use as a backup
movwf vtemp_17_middle ; storage location. (just before we overwrite vram_3)
movf vram_18_middle, 0 ; Copy vram_1 into vtemp_4 to use as a backup
movwf vtemp_18_middle ; storage location. (just before we overwrite vram_4)
movf vram_19_middle, 0 ; Copy vram_1 into vtemp_5 to use as a backup
movwf vtemp_19_middle ; storage location. (just before we overwrite vram_5)
movf vram_20_middle, 0 ; Copy vram_1 into vtemp_6 to use as a backup
movwf vtemp_20_middle ; storage location. (just before we overwrite vram_6)
movf vram_21_middle, 0 ; Copy vram_7 into vtemp_7 to use as a backup
movwf vtemp_21_middle ; storage location. (just before we overwrite vram_7)
movf vram_22_middle, 0 ; Copy vram_7 into vtemp_7 to use as a backup
movwf vtemp_22_middle ; storage location. (just before we overwrite vram_7)
movf vram_23_middle, 0 ; Copy vram_7 into vtemp_7 to use as a backup
movwf vtemp_23_middle ; storage location. (just before we overwrite vram_7)
call graphics_data_middle ; Call track_data routine and return with a byte of data in the w register
movf graphics_data_save, w
movwf vram_1_middle ; then copy the new byte of data to the first vram location
movf vtemp_1_middle, 0 ; copy what was in vram_1 into vram_2 (remember how we made
movwf vram_2_middle ; a backup of vram_1 and called it vtemp_1.)
movf vtemp_2_middle, 0 ; copy what was in vram_2 into vram_3 (remember how we made
movwf vram_3_middle ; a backup of vram_2 and called it vtemp_2.)
movf vtemp_3_middle, 0 ; copy what was in vram_3 into vram_4 (remember how we made
movwf vram_4_middle ; a backup of vram_3 and called it vtemp_3.)
movf vtemp_4_middle, 0 ; copy what was in vram_4 into vram_5 (remember how we made
movwf vram_5_middle ; a backup of vram_4 and called it vtemp_4.)
movf vtemp_5_middle, 0 ; copy what was in vram_5 into vram_6 (remember how we made
movwf vram_6_middle ; a backup of vram_5 and called it vtemp_5.)
movf vtemp_6_middle, 0 ; copy what was in vram_6 into vram_7 (remember how we made
movwf vram_7_middle ; a backup of vram_6 and called it vtemp_6.)
movf vtemp_7_middle, 0 ; copy what was in vram_7 into vram_8 (remember how we made
movwf vram_8_middle ; a backup of vram_7 and called it vtemp_7.)
movf vtemp_8_middle, 0 ; copy what was in vram_1 into vram_2 (remember how we made
movwf vram_9_middle ; a backup of vram_1 and called it vtemp_1.)
movf vtemp_9_middle, 0 ; copy what was in vram_2 into vram_3 (remember how we made
movwf vram_10_middle ; a backup of vram_2 and called it vtemp_2.)
movf vtemp_10_middle, 0 ; copy what was in vram_3 into vram_4 (remember how we made
movwf vram_11_middle ; a backup of vram_3 and called it vtemp_3.)
movf vtemp_11_middle, 0 ; copy what was in vram_4 into vram_5 (remember how we made
movwf vram_12_middle ; a backup of vram_4 and called it vtemp_4.)
movf vtemp_12_middle, 0 ; copy what was in vram_5 into vram_6 (remember how we made
movwf vram_13_middle ; a backup of vram_5 and called it vtemp_5.)
movf vtemp_13_middle, 0 ; copy what was in vram_6 into vram_7 (remember how we made
movwf vram_14_middle ; a backup of vram_6 and called it vtemp_6.)
movf vtemp_14_middle, 0 ; copy what was in vram_7 into vram_8 (remember how we made
movwf vram_15_middle ; a backup of vram_7 and called it vtemp_7.)
movf vtemp_15_middle, 0 ; copy what was in vram_1 into vram_2 (remember how we made
movwf vram_16_middle ; a backup of vram_1 and called it vtemp_1.)
movf vtemp_16_middle, 0 ; copy what was in vram_2 into vram_3 (remember how we made
movwf vram_17_middle ; a backup of vram_2 and called it vtemp_2.)
movf vtemp_17_middle, 0 ; copy what was in vram_3 into vram_4 (remember how we made
movwf vram_18_middle ; a backup of vram_3 and called it vtemp_3.)
movf vtemp_18_middle, 0 ; copy what was in vram_4 into vram_5 (remember how we made
movwf vram_19_middle ; a backup of vram_4 and called it vtemp_4.)
movf vtemp_19_middle, 0 ; copy what was in vram_5 into vram_6 (remember how we made
movwf vram_20_middle ; a backup of vram_5 and called it vtemp_5.)
movf vtemp_20_middle, 0 ; copy what was in vram_6 into vram_7 (remember how we made
movwf vram_21_middle ; a backup of vram_6 and called it vtemp_6.)
movf vtemp_21_middle, 0 ; copy what was in vram_7 into vram_8 (remember how we made
movwf vram_22_middle ; a backup of vram_7 and called it vtemp_7.)
movf vtemp_22_middle, 0 ; copy what was in vram_7 into vram_8 (remember how we made
movwf vram_23_middle ; a backup of vram_7 and called it vtemp_7.)
movf vtemp_23_middle, 0 ; copy what was in vram_7 into vram_8 (remember how we made
movwf vram_24_middle
return ; Now that we're all done here, go back to our main program.
fill_vram_right
movf vram_1_right, 0 ; Copy vram_1 into vtemp_1 to use as a backup
movwf vtemp_1_right ; storage location. (just before we overwrite vram_1)
movf vram_2_right, 0 ; Copy vram_1 into vtemp_2 to use as a backup
movwf vtemp_2_right ; storage location. (just before we overwrite vram_2)
movf vram_3_right, 0 ; Copy vram_1 into vtemp_3 to use as a backup
movwf vtemp_3_right ; storage location. (just before we overwrite vram_3)
movf vram_4_right, 0 ; Copy vram_1 into vtemp_4 to use as a backup
movwf vtemp_4_right ; storage location. (just before we overwrite vram_4)
movf vram_5_right, 0 ; Copy vram_1 into vtemp_5 to use as a backup
movwf vtemp_5_right ; storage location. (just before we overwrite vram_5)
movf vram_6_right, 0 ; Copy vram_1 into vtemp_6 to use as a backup
movwf vtemp_6_right ; storage location. (just before we overwrite vram_6)
movf vram_7_right, 0 ; Copy vram_7 into vtemp_7 to use as a backup
movwf vtemp_7_right ; storage location. (just before we overwrite vram_7)
movf vram_8_right, 0 ; Copy vram_1 into vtemp_1 to use as a backup
movwf vtemp_8_right ; storage location. (just before we overwrite vram_1)
movf vram_9_right, 0 ; Copy vram_1 into vtemp_2 to use as a backup
movwf vtemp_9_right ; storage location. (just before we overwrite vram_2)
movf vram_10_right, 0 ; Copy vram_1 into vtemp_3 to use as a backup
movwf vtemp_10_right ; storage location. (just before we overwrite vram_3)
movf vram_11_right, 0 ; Copy vram_1 into vtemp_4 to use as a backup
movwf vtemp_11_right ; storage location. (just before we overwrite vram_4)
movf vram_12_right, 0 ; Copy vram_1 into vtemp_5 to use as a backup
movwf vtemp_12_right ; storage location. (just before we overwrite vram_5)
movf vram_13_right, 0 ; Copy vram_1 into vtemp_6 to use as a backup
movwf vtemp_13_right ; storage location. (just before we overwrite vram_6)
movf vram_14_right, 0 ; Copy vram_7 into vtemp_7 to use as a backup
movwf vtemp_14_right ; storage location. (just before we overwrite vram_7)
movf vram_15_right, 0 ; Copy vram_1 into vtemp_1 to use as a backup
movwf vtemp_15_right ; storage location. (just before we overwrite vram_1)
movf vram_16_right, 0 ; Copy vram_1 into vtemp_2 to use as a backup
movwf vtemp_16_right ; storage location. (just before we overwrite vram_2)
movf vram_17_right, 0 ; Copy vram_1 into vtemp_3 to use as a backup
movwf vtemp_17_right ; storage location. (just before we overwrite vram_3)
movf vram_18_right, 0 ; Copy vram_1 into vtemp_4 to use as a backup
movwf vtemp_18_right ; storage location. (just before we overwrite vram_4)
movf vram_19_right, 0 ; Copy vram_1 into vtemp_5 to use as a backup
movwf vtemp_19_right ; storage location. (just before we overwrite vram_5)
movf vram_20_right, 0 ; Copy vram_1 into vtemp_6 to use as a backup
movwf vtemp_20_right ; storage location. (just before we overwrite vram_6)
movf vram_21_right, 0 ; Copy vram_7 into vtemp_7 to use as a backup
movwf vtemp_21_right ; storage location. (just before we overwrite vram_7)
movf vram_22_right, 0 ; Copy vram_7 into vtemp_7 to use as a backup
movwf vtemp_22_right ; storage location. (just before we overwrite vram_7)
movf vram_23_right, 0 ; Copy vram_7 into vtemp_7 to use as a backup
movwf vtemp_23_right ; storage location. (just before we overwrite vram_7)
call graphics_data_right ; Call track_data routine and return with a byte of data in the w register
movf graphics_data_save, w
movwf vram_1_right ; then copy the new byte of data to the first vram location
movf vtemp_1_right, 0 ; copy what was in vram_1 into vram_2 (remember how we made
movwf vram_2_right ; a backup of vram_1 and called it vtemp_1.)
movf vtemp_2_right, 0 ; copy what was in vram_2 into vram_3 (remember how we made
movwf vram_3_right ; a backup of vram_2 and called it vtemp_2.)
movf vtemp_3_right, 0 ; copy what was in vram_3 into vram_4 (remember how we made
movwf vram_4_right ; a backup of vram_3 and called it vtemp_3.)
movf vtemp_4_right, 0 ; copy what was in vram_4 into vram_5 (remember how we made
movwf vram_5_right ; a backup of vram_4 and called it vtemp_4.)
movf vtemp_5_right, 0 ; copy what was in vram_5 into vram_6 (remember how we made
movwf vram_6_right ; a backup of vram_5 and called it vtemp_5.)
movf vtemp_6_right, 0 ; copy what was in vram_6 into vram_7 (remember how we made
movwf vram_7_right ; a backup of vram_6 and called it vtemp_6.)
movf vtemp_7_right, 0 ; copy what was in vram_7 into vram_8 (remember how we made
movwf vram_8_right ; a backup of vram_7 and called it vtemp_7.)
movf vtemp_8_right, 0 ; copy what was in vram_1 into vram_2 (remember how we made
movwf vram_9_right ; a backup of vram_1 and called it vtemp_1.)
movf vtemp_9_right, 0 ; copy what was in vram_2 into vram_3 (remember how we made
movwf vram_10_right ; a backup of vram_2 and called it vtemp_2.)
movf vtemp_10_right, 0 ; copy what was in vram_3 into vram_4 (remember how we made
movwf vram_11_right ; a backup of vram_3 and called it vtemp_3.)
movf vtemp_11_right, 0 ; copy what was in vram_4 into vram_5 (remember how we made
movwf vram_12_right ; a backup of vram_4 and called it vtemp_4.)
movf vtemp_12_right, 0 ; copy what was in vram_5 into vram_6 (remember how we made
movwf vram_13_right ; a backup of vram_5 and called it vtemp_5.)
movf vtemp_13_right, 0 ; copy what was in vram_6 into vram_7 (remember how we made
movwf vram_14_right ; a backup of vram_6 and called it vtemp_6.)
movf vtemp_14_right, 0 ; copy what was in vram_7 into vram_8 (remember how we made
movwf vram_15_right ; a backup of vram_7 and called it vtemp_7.)
movf vtemp_15_right, 0 ; copy what was in vram_1 into vram_2 (remember how we made
movwf vram_16_right ; a backup of vram_1 and called it vtemp_1.)
movf vtemp_16_right, 0 ; copy what was in vram_2 into vram_3 (remember how we made
movwf vram_17_right ; a backup of vram_2 and called it vtemp_2.)
movf vtemp_17_right, 0 ; copy what was in vram_3 into vram_4 (remember how we made
movwf vram_18_right ; a backup of vram_3 and called it vtemp_3.)
movf vtemp_18_right, 0 ; copy what was in vram_4 into vram_5 (remember how we made
movwf vram_19_right ; a backup of vram_4 and called it vtemp_4.)
movf vtemp_19_right, 0 ; copy what was in vram_5 into vram_6 (remember how we made
movwf vram_20_right ; a backup of vram_5 and called it vtemp_5.)
movf vtemp_20_right, 0 ; copy what was in vram_6 into vram_7 (remember how we made
movwf vram_21_right ; a backup of vram_6 and called it vtemp_6.)
movf vtemp_21_right, 0 ; copy what was in vram_7 into vram_8 (remember how we made
movwf vram_22_right ; a backup of vram_7 and called it vtemp_7.)
movf vtemp_22_right, 0 ; copy what was in vram_7 into vram_8 (remember how we made
movwf vram_23_right ; a backup of vram_7 and called it vtemp_7.)
movf vtemp_23_right, 0 ; copy what was in vram_7 into vram_8 (remember how we made
movwf vram_24_right
return ; Now that we're all done here, go back to our main program.
delay
call delay_a
return
delay_a ; here is a nice and simple delay routine
movlw d'05'
movwf delay_1
delay_loop_a ; We come back to this label when we have not yet reached zero.
call check_remote
decfsz delay_1, f ; decrement whatever is in delay_1 by 1 and store the answer back in delay_1
goto delay_loop_a ; if the answer is not zero, then go back to the delay_loop label. but if the
return ; is zero, then we have completed our delay and now we can return to our main program!
long_delay ; here is a nice and simple delay routine
movlw d'255'
movwf delay_1
movwf delay_2
delay_loop_long ; We come back to this label when we have not yet reached zero.
decfsz delay_1, f ; decrement whatever is in delay_1 by 1 and store the answer back in delay_1
goto delay_loop_long ; if the answer is not zero, then go back to the delay_loop label. but if the
decfsz delay_2, f ; decrement whatever is in delay_1 by 1 and store the answer back in delay_1
goto delay_loop_long ; if the answer is not zero, then go back to the delay_loop label. but if the
return ; is zero, then we have completed our delay and now we can return to our main program!
; is zero, then we have completed our delay and now we can return to our main program!
graphics_data_left
call left_read
call copy_data_to_w
call left_write
return
left_read
movf low_left_data, w
movwf TBLPTRL
movf high_left_data, w
movwf TBLPTRH
movf upper_left_data, w
movwf TBLPTRU
return
left_write
movf TBLPTRL, w
movwf low_left_data
movf TBLPTRH, w
movwf high_left_data
movf TBLPTRU, w
movwf upper_left_data
return
graphics_data_middle
call middle_read
call copy_data_to_w
call middle_write
return
middle_read
movf low_middle_data, w
movwf TBLPTRL
movf high_middle_data, w
movwf TBLPTRH
movf upper_middle_data, w
movwf TBLPTRU
return
middle_write
movf TBLPTRL, w
movwf low_middle_data
movf TBLPTRH, w
movwf high_middle_data
movf TBLPTRU, w
movwf upper_middle_data
return
graphics_data_right
call right_read
call copy_data_to_w
call right_write
decfsz animation_counter_a, f
return
call reset_animation_counter_a
decfsz animation_counter_b, f
return
btfsc which_animation, 0
call animation_1
btfsc which_animation, 1
call animation_2
call reset_animation_counter_a_b
return
right_read
movf low_right_data, w
movwf TBLPTRL
movf high_right_data, w
movwf TBLPTRH
movf upper_right_data, w
movwf TBLPTRU
return
right_write
movf TBLPTRL, w
movwf low_right_data
movf TBLPTRH, w
movwf high_right_data
movf TBLPTRU, w
movwf upper_right_data
return
copy_data_to_w
tblrd*+
movf TABLAT, w
movwf graphics_data_save
return
left_data_1
db h'18', h'3C'
db h'3C', h'7C'
db h'7E', h'7E'
db h'7E', h'7F'
db h'3F', h'3F'
db h'0F', h'03'
db h'00', h'00'
db h'1F', h'3F'
db h'7F', h'7F'
db h'7F', h'7F'
db h'7F', h'7F'
db h'7F', h'3F'
db h'3F', h'0F'
db h'00', h'00'
db h'7C', h'7C'
db h'7C', h'7C'
db h'7C', h'7C'
db h'7C', h'7C'
db h'7C', h'7C'
db h'7F', h'7F'
db h'00', h'00'
db h'1F', h'3F'
db h'7F', h'7E'
db h'7E', h'7E'
db h'7E', h'7E'
db h'7F', h'3F'
db h'3F', h'0F'
db h'00', h'00'
db h'0F', h'3F'
db h'3F', h'7F'
db h'7E', h'7E'
db h'7E', h'7E'
db h'7E', h'7F'
db h'3F', h'1F'
db h'00', h'00'
db h'03', h'0F'
db h'3F', h'3F'
db h'7F', h'7E'
db h'7E', h'7E'
db h'7C', h'3C'
db h'3C', h'18'
db h'00', h'00'
db h'0F', h'3F'
db h'3F', h'7F'
db h'7F', h'7F'
db h'7F', h'7F'
db h'7F', h'7F'
db h'3F', h'1F'
db h'00', h'00'
db h'00', h'00'
db h'00', h'00'
db h'1F', h'7F'
db h'7F', h'1F'
db h'00', h'00'
db h'00', h'00'
db h'00', h'00'
db h'00', h'00'
db h'00', h'00'
db h'1F', h'3F'
db h'7F', h'7E'
db h'7E', h'7E'
db h'7E', h'7E'
db h'7F', h'3F'
db h'3F', h'0F'
db h'00', h'00'
db h'00', h'00'
db h'00', h'00'
db h'03', h'07'
db h'0F', h'1F'
db h'3F', h'3F'
db h'7F', h'7F'
db h'7F', h'7E'
db h'7E', h'18'
db h'00', h'00'
db h'10', h'7C'
db h'7C', h'7C'
db h'7E', h'3E'
db h'1F', h'1F'
db h'0F', h'07'
db h'07', h'03'
db h'00', h'00'
db h'3F', h'7F'
db h'3F', h'00'
db h'00', h'00'
db h'00', h'00'
db h'1F', h'7F'
db h'7F', h'1F'
db h'00', h'00'
db h'0F', h'3F'
db h'3F', h'7F'
db h'7E', h'7E'
db h'7E', h'7E'
db h'7E', h'7F'
db h'3F', h'1F'
db h'00', h'00'
db h'7E', h'7F'
db h'7F', h'7F'
db h'7F', h'7F'
db h'7C', h'7C'
db h'7C', h'7C'
db h'7C', h'38'
db h'00', h'00'
db h'1F', h'7F'
db h'7F', h'1F'
db h'00', h'00'
db h'00', h'00'
db h'00', h'3F'
db h'7F', h'3F'
db h'00', h'00'
db h'1F', h'3F'
db h'7F', h'7E'
db h'7E', h'7E'
db h'7E', h'7E'
db h'7F', h'3F'
db h'3F', h'0F'
db h'00', h'00'
db h'0F', h'3F'
db h'7F', h'78'
db h'78', h'7F'
db h'3F', h'0F'
db h'00', h'70'
db h'7F', h'3F'
db h'00', h'00'
db h'00', h'00'
db h'00', h'00'
db h'00', h'00'
db h'00', h'00'
db h'00', h'00'
db h'00', h'00'
db h'00', h'00'
db h'00', h'00'
db h'00', h'00'
db h'00', h'00'
db h'00', h'00'
db h'00', h'00'
db h'00', h'00'
db h'00', h'00'
middle_data_1
db h'00', h'00'
db h'00', h'00'
db h'00', h'3C'
db h'7E', h'FF'
db h'FF', h'FF'
db h'FF', h'E7'
db h'00', h'00'
db h'FF', h'FF'
db h'80', h'00'
db h'FF', h'FF'
db h'FF', h'80'
db h'00', h'FF'
db h'FF', h'FF'
db h'00', h'00'
db h'00', h'00'
db h'00', h'00'
db h'00', h'00'
db h'00', h'00'
db h'00', h'00'
db h'FF', h'FF'
db h'00', h'00'
db h'FF', h'FF'
db h'80', h'00'
db h'00', h'00'
db h'00', h'00'
db h'00', h'FF'
db h'FF', h'FF'
db h'00', h'00'
db h'FF', h'FF'
db h'FF', h'00'
db h'00', h'00'
db h'00', h'00'
db h'00', h'81'
db h'FF', h'FF'
db h'00', h'00'
db h'E7', h'FF'
db h'FF', h'FF'
db h'FF', h'7E'
db h'3C', h'00'
db h'00', h'00'
db h'00', h'00'
db h'00', h'00'
db h'FF', h'FF'
db h'FF', h'00'
db h'80', h'FF'
db h'FF', h'FF'
db h'00', h'80'
db h'FF', h'FF'
db h'00', h'00'
db h'00', h'00'
db h'00', h'00'
db h'FF', h'FF'
db h'FF', h'FF'
db h'7E', h'7E'
db h'7E', h'7E'
db h'7E', h'7E'
db h'7E', h'3C'
db h'00', h'00'
db h'FF', h'FF'
db h'81', h'00'
db h'00', h'00'
db h'00', h'00'
db h'00', h'FF'
db h'FF', h'FF'
db h'00', h'00'
db h'00', h'00'
db h'00', h'00'
db h'FF', h'FF'
db h'C3', h'81'
db h'00', h'FF'
db h'FF', h'FF'
db h'FF', h'00'
db h'00', h'00'
db h'00', h'00'
db h'00', h'00'
db h'00', h'00'
db h'00', h'00'
db h'00', h'81'
db h'81', h'C3'
db h'FF', h'FF'
db h'00', h'00'
db h'FF', h'FF'
db h'FF', h'FF'
db h'7E', h'7E'
db h'7E', h'7E'
db h'FF', h'FF'
db h'FF', h'FF'
db h'00', h'00'
db h'FF', h'FF'
db h'FF', h'00'
db h'00', h'00'
db h'00', h'00'
db h'00', h'81'
db h'FF', h'FF'
db h'00', h'00'
db h'00', h'80'
db h'E0', h'F8'
db h'FE', h'FF'
db h'FF', h'3F'
db h'0F', h'03'
db h'00', h'00'
db h'00', h'00'
db h'FF', h'FF'
db h'FF', h'FF'
db h'7E', h'7E'
db h'7E', h'7E'
db h'FF', h'FF'
db h'FF', h'FF'
db h'00', h'00'
db h'FF', h'FF'
db h'80', h'00'
db h'00', h'00'
db h'00', h'00'
db h'00', h'FF'
db h'FF', h'FF'
db h'00', h'00'
db h'FF', h'FF'
db h'FF', h'00'
db h'00', h'FF'
db h'FF', h'FF'
db h'00', h'00'
db h'FF', h'FF'
db h'00', h'00'
db h'00', h'00'
db h'00', h'00'
db h'00', h'00'
db h'00', h'00'
db h'00', h'00'
db h'00', h'00'
db h'00', h'00'
db h'00', h'00'
db h'00', h'00'
db h'00', h'00'
db h'00', h'00'
db h'00', h'00'
db h'00', h'00'
db h'00', h'00'
right_data_1
db h'18', h'3C'
db h'3C', h'3E'
db h'7E', h'7E'
db h'7E', h'FE'
db h'FC', h'FC'
db h'F0', h'C0'
db h'00', h'00'
db h'FE', h'FC'
db h'00', h'00'
db h'E0', h'F0'
db h'F0', h'00'
db h'00', h'F8'
db h'FE', h'FE'
db h'00', h'00'
db h'00', h'00'
db h'00', h'00'
db h'00', h'00'
db h'00', h'00'
db h'00', h'00'
db h'FE', h'FE'
db h'00', h'00'
db h'FE', h'FC'
db h'00', h'00'
db h'00', h'00'
db h'00', h'00'
db h'00', h'F8'
db h'FE', h'FE'
db h'00', h'00'
db h'F0', h'FC'
db h'FC', h'FE'
db h'7E', h'7E'
db h'7E', h'7E'
db h'7E', h'FE'
db h'FC', h'F8'
db h'00', h'00'
db h'C0', h'F0'
db h'FC', h'FC'
db h'FE', h'7E'
db h'7E', h'7E'
db h'3E', h'3C'
db h'3C', h'18'
db h'00', h'00'
db h'FE', h'FE'
db h'F8', h'00'
db h'00', h'F0'
db h'F0', h'E0'
db h'00', h'00'
db h'FC', h'FE'
db h'00', h'00'
db h'00', h'00'
db h'00', h'00'
db h'F8', h'FE'
db h'FE', h'F8'
db h'00', h'00'
db h'00', h'00'
db h'00', h'00'
db h'00', h'00'
db h'00', h'00'
db h'F8', h'FC'
db h'FE', h'7E'
db h'7E', h'7E'
db h'7E', h'7E'
db h'FE', h'FC'
db h'FC', h'F0'
db h'00', h'00'
db h'00', h'00'
db h'00', h'00'
db h'C0', h'E0'
db h'F0', h'F8'
- Attachments
-
- common_anodes.PNG (7.22 KiB) Viewed 18352 times
Thanks Brad, that has giving me some ideas for a starting point, I know how many 74373's I might need and transistors now, Thank you
I was going use either a 40pin 16F877A or 18F4550 for this project.
Do you think using 24x 2N2222 transistors would be enough to power the 8x8 displays? (upto 48 LED's on at any one time I.E. 24 red and 24 green on at the same time)?.
I have also got swordfish downloaded and installed so will have to learn some pic basic then for this project.
I was going use either a 40pin 16F877A or 18F4550 for this project.
Do you think using 24x 2N2222 transistors would be enough to power the 8x8 displays? (upto 48 LED's on at any one time I.E. 24 red and 24 green on at the same time)?.
I have also got swordfish downloaded and installed so will have to learn some pic basic then for this project.
- brad
- 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
Yes indeed sir!sdudley wrote:Hey Brad,
After looking at the lines of code to do that, I think I am starting to understand why you made the move to BASIC!
Stacy
I am actually working on a piece of code to control bitfogavs 24 x 24 matrix and i'm programming in BASIC! Once I get at least a little bit done I will post here.
Thanks for that Bradbrad wrote:Yes indeed sir!sdudley wrote:Hey Brad,
After looking at the lines of code to do that, I think I am starting to understand why you made the move to BASIC!
Stacy
I am actually working on a piece of code to control bitfogavs 24 x 24 matrix and i'm programming in BASIC! Once I get at least a little bit done I will post here.
Brad is this correct for a 24x24 led display in basic?
Code: Select all
Const graphic_data(24) As LongWord = (%101110011100001110011101, %101000000000000000000101, %101000010000000010000101, %100001010000000010100001, %100000010000000010000001, %101000000000000000000101, %101000000000000000000101, %101000000001100000000101, %101000001000000100000101, %100000001000000100000001, %100000001100100100000001, %100000001001100100000001, %101000001100100100000101, %101000001010100100000101, %100000001000000100000001, %100000001000000100000001, %101000001000000100000101, %101000000000000000000101, %101000000000000000000101, %101011100000000001110101, %100000100000000001000001, %100010100000000001010001, %101110011100001110011101, %100000000000000000000001)
Const anodes(24) As Longword = (%000000000000000000000001,%000000000000000000000010,%000000000000000000000100,%000000000000000000001000,%000000000000000000010000,%000000000000000000100000,%000000000000000001000000,%000000000000000010000000,%000000000000000100000000,%
000000000000001000000000,%000000000000010000000000,%
000000000000100000000000,%000000000001000000000000,%
000000000010000000000000,%000000000100000000000000,%
000000001000000000000000,%000000010000000000000000,%
000000100000000000000000,%000001000000000000000000,%
000010000000000000000000,%000100000000000000000000,%
000100000000000000000000,%010000000000000000000000,%
10000000000000000000000)
- brad
- 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
Oh don't be like that I have a vested interest in this project because I have made exactly the same thing at work and saw this as a way to improve on that project.sdudley wrote:Yea, thanks for that Brad.
Just remember when you are done I have few projects I need you to code up for me!
Thanks buddy.
Stacy
Can't we just be friends again
- brad
- 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
That code would work however it would not be very efficient due to the requirement to have 24 longwords (which is 24 x 32 bits = 768 bits or 96 bytes) Just to activate one column of LED's at a time.bitfogav wrote:Brad is this correct for a 24x24 led display in basic?
Code: Select all
Const graphic_data(24) As LongWord = (%101110011100001110011101, %101000000000000000000101, %101000010000000010000101, %100001010000000010100001, %100000010000000010000001, %101000000000000000000101, %101000000000000000000101, %101000000001100000000101, %101000001000000100000101, %100000001000000100000001, %100000001100100100000001, %100000001001100100000001, %101000001100100100000101, %101000001010100100000101, %100000001000000100000001, %100000001000000100000001, %101000001000000100000101, %101000000000000000000101, %101000000000000000000101, %101011100000000001110101, %100000100000000001000001, %100010100000000001010001, %101110011100001110011101, %100000000000000000000001) Const anodes(24) As Longword = (%000000000000000000000001, %000000000000000000000010, %000000000000000000000100, %000000000000000000001000, %000000000000000000010000, %000000000000000000100000, %000000000000000001000000, %000000000000000010000000, %000000000000000100000000, %000000000000001000000000, %000000000000010000000000, %000000000000100000000000, %000000000001000000000000, %000000000010000000000000, %000000000100000000000000, %000000001000000000000000, %000000010000000000000000, %000000100000000000000000, %000001000000000000000000, %000010000000000000000000, %000100000000000000000000, %001000000000000000000000, %010000000000000000000000, %100000000000000000000000)
I'm guessing you were going to have some sort of for next loop to draw each column e.g.
Code: Select all
for x = 0 to 23
PORTB = anodes(x)
- Then all your other code would be here to call the required graphics -
next
what we could do instead is have just one variable called anodes, start with the right most bit as a one and then everytime we call the variable, we just shift it to the left one space.
e.g.
Code: Select all
for x = 0 to 23
PORTB = anodes << (x)
- Then all your other code would be here to call the required graphics -
next
- sdudley
- Moderator
- Posts: 337
- Joined: Sun Mar 28, 2010 1:33 pm
- Location: Florida, U.S.A. [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
I have a vested interest in my projects too. Unfortunately I just don't have the smarts to make them work.brad wrote:Oh don't be like that I have a vested interest in this project because I have made exactly the same thing at work and saw this as a way to improve on that project.
Can't we just be friends again
Stacy
PS> Gavin, sorry to highjack your thread!
Any time you deviate from sequential consistency, you increase the complexity of the problem by orders of magnitude.
Thats fine Stacy when you both have kissed and made up (hehe) maybe we all can make code together (hehe)sdudley wrote:I have a vested interest in my projects too. Unfortunately I just don't have the smarts to make them work.brad wrote:Oh don't be like that I have a vested interest in this project because I have made exactly the same thing at work and saw this as a way to improve on that project.
Can't we just be friends again
Stacy
PS> Gavin, sorry to highjack your thread!
- sdudley
- Moderator
- Posts: 337
- Joined: Sun Mar 28, 2010 1:33 pm
- Location: Florida, U.S.A. [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
Sounds good to me. Why don't you and Brad go ahead and get started on coding my project...bitfogav wrote:Thats fine Stacy when you both have kissed and made up (hehe) maybe we all can make code together (hehe)
I'll get back with you when you guys are almost done.
Any time you deviate from sequential consistency, you increase the complexity of the problem by orders of magnitude.
Who is online
Users browsing this forum: No registered users and 11 guests