јдминистраци€ форума не несЄт ответственности за достоверность информации и оставл€ет за собой право редактировать или в особых случа€х даже удал€ть посты без предупреждени€. —пасибо за понимание.

ѕрограммирование ATMEL в BASCOM.

»нформаци€ о пользователе

ѕривет, √ость! ¬ойдите или зарегистрируйтесь.


¬ы здесь » ѕрограммирование ATMEL в BASCOM. » ¬опросы - ответы » Led матрица 32*16 дл€ бегущей строки


Led матрица 32*16 дл€ бегущей строки

—ообщений 1 страница 30 из 31

1

«дравствуйте, уважаемые форумчане, может кто-то из ¬ас работал с матрицей дл€ бегущей строки Qiang Li P10 или им подобных?   »нформацию не могу найти ни них. http://sg.uploads.ru/t/6g3EQ.jpg

0

2

„то то на официальном форуме было, а также на bascomforum.de

0

3

ƒолжно помочь: http://lightportal.info/publ/videoehkra … /8-1-0-111

0

4

что-то искал по ним, всЄ что есть:  https://transfiles.ru/ikxxa

+2

5

Ѕольшое спасибо всем кто откликнулс€, буду пытатьс€ изучить.

0

6

«дравствуйте, подключил к 8 atmega, по примеру который прислал јлександр. ѕолучилось вот что...http://s3.uploads.ru/t/wvmPH.jpg

пример

$regfile = "m8def.dat"                                      '
$crystal = 7372800
$hwstack = 64
$swstack = 40
$framesize = 80

$baud = 9600

Config Portb = Output
Config Portc = Output

Datapin Alias Portc.0                                     
Clockpin Alias Portc.2                                     
Latchpin Alias Portc.1                                     

Pin_bit0 Alias Portb.3                                     
Pin_bit1 Alias Portb.4                                     
Set Portb.5

Dim Temp As Byte , Temp2 As Byte , Temp3 As Byte , Temp4 As Byte
Dim Data_1_line_16byte(16) As Byte , X_64(64) As Byte

'Print "Start!"

' For Temp = 0 To 9
'  Portb.7 = 1
' Waitms 500
' Portb.7 = 0
' Waitms 500
' Next

Restore Dta1

For Temp = 1 To 64
   Read Temp2                 ' „итаем из блока данных
   X_64(temp) = Temp2         ' и помещаем в массив последовательно, как считали
Next

Start_prg:                    ' -----------------------------------------------

' ƒанные дл€ ѕ≈–¬ќ… строки
Data_1_line_16byte(1) = X_64(49)
Data_1_line_16byte(2) = X_64(33)
Data_1_line_16byte(3) = X_64(17)
Data_1_line_16byte(4) = X_64(1)

Data_1_line_16byte(5) = X_64(50)
Data_1_line_16byte(6) = X_64(34)
Data_1_line_16byte(7) = X_64(18)
Data_1_line_16byte(8) = X_64(2)

Data_1_line_16byte(9) = X_64(51)
Data_1_line_16byte(10) = X_64(35)
Data_1_line_16byte(11) = X_64(19)
Data_1_line_16byte(12) = X_64(3)

Data_1_line_16byte(13) = X_64(52)
Data_1_line_16byte(14) = X_64(36)
Data_1_line_16byte(15) = X_64(20)
Data_1_line_16byte(16) = X_64(4)

  Pin_bit0 = 0 : Pin_bit1 = 0 ' —трока 1
  Gosub Send_16_byte

' ƒанные дл€ ¬“ќ–ќ… строки
Data_1_line_16byte(1) = X_64(53)
Data_1_line_16byte(2) = X_64(37)
Data_1_line_16byte(3) = X_64(21)
Data_1_line_16byte(4) = X_64(5)

Data_1_line_16byte(5) = X_64(54)
Data_1_line_16byte(6) = X_64(38)
Data_1_line_16byte(7) = X_64(22)
Data_1_line_16byte(8) = X_64(6)

Data_1_line_16byte(9) = X_64(55)
Data_1_line_16byte(10) = X_64(39)
Data_1_line_16byte(11) = X_64(23)
Data_1_line_16byte(12) = X_64(7)

Data_1_line_16byte(13) = X_64(56)
Data_1_line_16byte(14) = X_64(40)
Data_1_line_16byte(15) = X_64(24)
Data_1_line_16byte(16) = X_64(8)

  Pin_bit0 = 0 : Pin_bit1 = 1 ' —трока 2
  Gosub Send_16_byte

' ƒанные дл€ “–≈“№≈… строки
Data_1_line_16byte(1) = X_64(57)
Data_1_line_16byte(2) = X_64(41)
Data_1_line_16byte(3) = X_64(25)
Data_1_line_16byte(4) = X_64(9)

Data_1_line_16byte(5) = X_64(58)
Data_1_line_16byte(6) = X_64(42)
Data_1_line_16byte(7) = X_64(26)
Data_1_line_16byte(8) = X_64(10)

Data_1_line_16byte(9) = X_64(59)
Data_1_line_16byte(10) = X_64(43)
Data_1_line_16byte(11) = X_64(27)
Data_1_line_16byte(12) = X_64(11)

Data_1_line_16byte(13) = X_64(60)
Data_1_line_16byte(14) = X_64(44)
Data_1_line_16byte(15) = X_64(28)
Data_1_line_16byte(16) = X_64(12)

  Pin_bit0 = 1 : Pin_bit1 = 0 ' —трока 3
  Gosub Send_16_byte

' ƒанные дл€ „≈“–≈–“ќ… строки
Data_1_line_16byte(1) = X_64(61)
Data_1_line_16byte(2) = X_64(45)
Data_1_line_16byte(3) = X_64(29)
Data_1_line_16byte(4) = X_64(13)

Data_1_line_16byte(5) = X_64(62)
Data_1_line_16byte(6) = X_64(46)
Data_1_line_16byte(7) = X_64(30)
Data_1_line_16byte(8) = X_64(14)

Data_1_line_16byte(9) = X_64(63)
Data_1_line_16byte(10) = X_64(47)
Data_1_line_16byte(11) = X_64(31)
Data_1_line_16byte(12) = X_64(15)

Data_1_line_16byte(13) = X_64(64)
Data_1_line_16byte(14) = X_64(48)
Data_1_line_16byte(15) = X_64(32)
Data_1_line_16byte(16) = X_64(16)

  Pin_bit0 = 1 : Pin_bit1 = 1 ' —трока 4
  Gosub Send_16_byte

Goto Start_prg



'------------------------
Send_16_byte:

Latchpin = 0                 ' Ќачало загрузки данных в регистр
For Temp2 = 1 To 16          ' «агружаем 16 байт (одну строку)
   Shiftout Datapin , Clockpin , Data_1_line_16byte(temp2) , 0
Next
Latchpin = 1                 ' ¬ыводим данные из регистра на его выводы

' Waitms 10                    ' „астота обновлени€ около 100 √ц

' ќчищаем строку, чтобы не было подсветки
Latchpin = 0                 ' Ќачало загрузки данных в регистр
Temp2 = 0                  ' ѕуста€ строка
For Temp = 1 To 16
  Shiftout Datapin , Clockpin , Temp2 , 0
Next
Latchpin = 1                 ' ¬ыводим данные из регистра на его выводы

Return



Dta1:
Data _
&H80 , &H00 , &H00 , &H01 , &H3F , &HFF , &HFF , &HFC , &H72 , &HAE , &HC5 , &H9E , &H6A , &HA4 , &HD5 , &H6E , _
&H6a , &H2A , &HB5 , &H6E , &H6B , &HAE , &H84 , &H6E , &H41 , &HAE , &HB5 , &H6A , &H5D , &H2E , &HB5 , &H9A , _
&H7f , &HFD , &HFF , &HFE , &H63 , &H36 , &HE6 , &H22 , &H5A , &HD6 , &HD6 , &HF6 , &H5E , &HD4 , &HD6 , &H76 , _
&H5e , &HD2 , &H82 , &HF6 , &H63 , &H36 , &HBA , &H36 , &H3F , &HFF , &HFF , &HFC , &H80 , &H00 , &H00 , &H01




+1

7

ƒайте пожалуйста совет как шрифты к этому коду добавить, мне нужны только цифры, в св€зи со своеобразной загрузкой регистров панели не соображу как это сделать. http://s7.uploads.ru/t/aum9F.jpg

0

8

Ќу вы же вывели выше текст

+1

9

по€сню. Ќе он текст вывел, а мо€ программа.
¬ ней, в dat разделе, на веки вечные вделана эта надпись.

—имвол "рисуетс€" в этой матрице весьма специфично... я просто сделал: в ѕеинте сделал надпись, сохранил как bmp моонохромную картинку, потом программой (есть в архиве выше) превратил это в последовательность байт (дл€ —и, но самосто€тельно заменил 0x## на прин€тое в Ѕаском), вручную поставил какие байты когда выдавать.
“о есть, никакого "написал" и тебе отобразилось не получитс€.
или писать дл€ ѕ  конвертер, который типовой шрифт "пересортирует" под эту матрицу, или делать "в лоб": дл€ отображени€ "1" вывести такую-то последовательность байт, дл€ "2" - такую и так далее.

0

10

ясно. Ќу ..делать буфер, брать шрифт, и выводить с помощью математики..

0

11

«дравствуйте, шрифт 8*16 выводить получилось, но хотелось бы 6*8 выводить в две строки на одном модуле, только тут дл€ мен€ есть загвоздка, которую не могу победить уже дней 5 :-).    Ўрифт в массиве находитс€ в байтах. ≈сли € создаю шрифт 6*8 и вывожу на дисплей, то у мен€ пробелы большие между символами. Ќасколько € понимаю нужно делать что-то типа видео буфера, а только потом выводить...  Ќо оп€ть при построении картинки в буфере  проблема тех же 8 бит.    ак быть, может есть у кого мысли на сей счЄт. ћожет кто-то готов вз€тьс€ помочь за материальное вознаграждение?

0

12

ћаски, сдвиги вам в помощь.

+1

13

ёрий, у мен€ проблема собственно заключаетс€ в том что нужно к байту одной строки 1 знака прибавить 2 бита первой строки от второго знака. »скал на форуме подобное, но не нашЄл. ќпыта в программировании не много, а задача не проста€ дл€ мен€. ≈сли не затруднит, может есть какие-то примеры масок.

0

14

Ќа форуме bascomforum.de нашЄл проект на P10 модул€х цветных, но там очень исходник сложный.

код RGB P10

$regfile = "m128def.dat"
$crystal = 12000000 : $hwstack = 64 : $swstack = 64 : $framesize = 80

Ddrd = &B01000000
Ddrb = &B01001110
Ddre = &B01110000

Shift_clock Alias Portb.1
D_green Alias Portb.2
D_red Alias Portb.3
Port_write Alias Porte.4
B Alias Porte.5
A Alias Porte.6
Config Base = 0

   'timer for multiplex
Const Timer2reload = 20
Config Timer2 = Timer , Prescale = 1024
Load Timer2 , Timer2reload
On Ovf2 Display_refresh
Enable Ovf2
Start Timer2
   'PWM ************************************************** *************************
Config Timer1 = Pwm , Pwm = 8 , Compare B Pwm = Clear Up , Prescale = 1
   '************************************************* ******************************
Enable Interrupts

Dim Memory_red(64) As Byte , Memory_green(64) As Byte       'memory red/green
Dim Memory_invisible(64)as Byte                             'memory invisible
Dim Temp_m_r As Byte , Temp_m_g As Byte                     'temp memory red/green
Dim Page_counter As Byte
Dim C_1 As Byte , D_1 As Byte                               'counter in isr
Dim Character_column As Byte
Dim Font_byte As Byte
Dim N_1 As Byte , N_11 As Byte , N_12 As Byte , N_13 As Byte       'counter
Dim N_2 As Byte , N_21 As Byte , N_22 As Byte , N_23 As Byte       'counter
Dim N_3 As Byte , N_31 As Byte
Dim M_1 As Byte , M_2 As Byte , M_22 As Byte
Dim Sign As String * 1
Dim Tab_start As Word                                       'Startwert der Fonttabelle
Dim X1 As Word
Dim Inverting As Bit
Dim Speed As Word
Dim Text As String * 254
Dim Trigger As Bit
Dim Display_on As Bit
Dim N As Byte                                               'counterin main
Dim Inv1 As Bit , Inv As Bit
Dim Color As Byte , Red As Byte , Green As Byte , Orange As Byte , Invisible As Byte
Dim Brightness As Byte , Ascii_sign As Byte

Red = 1 : Green = 2 : Orange = 3 : Invisible = 4
   '**************************************************
   'user settings
Inverting = 0
   '**************************************************

'$sim

Brightness = 0                                              'max brightness
Gosub Clear_memory

Color = Green
Inv = 0
Speed = 10

Do

   Color = Green
   Text = "  Test   "
   Gosub Scroll_text_16                                     'load display with green text
   Wait 1
   Color = Invisible
   Text = " 12345"
   Gosub Scroll_text_upper                                  'load invisible memory with text in the upper
   Gosub Shift_left_upper                                   ' To center the text
   Color = Invisible
   Text = " 67890"
   Gosub Scroll_text_lower                                  'load invisible memory with text in the upper
   Gosub Shift_left_lower                                   ' To center the text
   Color = Red
   Gosub Rise_from_hell                                     'copy from invisible memory to display in red
   Wait 1
   Color = Green
   Text = " 67890"
   Gosub Scroll_text_upper
   Gosub Shift_left_upper                                   ' To center the text
   Wait 1
   Color = Red
   Text = " 12345"
   Gosub Scroll_text_lower
   Gosub Shift_left_lower                                   ' To center the text
   Wait 1
   Gosub Shift_right
   Wait 1

   Color = Green
   Text = "      12:26"
   Gosub Scroll_text_upper
   Gosub Shift_left_upper                                   ' To center the text
   Wait 1

   Color = Red
   Text = "      24.11"
   Gosub Scroll_text_lower
   Gosub Shift_left_lower                                   ' To center the text
   Wait 1

Loop

End
Scroll_text_upper:
'6x16font
   Inv1 = Inverting Xor Inv
   For M_1 = 1 To Len(text)
      Sign = Mid(text , M_1 , 1)                            'Only one letter
      Tab_start = Asc(sign)

      Tab_start = Tab_start - 32
      Tab_start = Tab_start * 6                             'Starting point in the font table
      For Character_column = 0 To 5
         Gosub Shift_left_upper
         X1 = Tab_start + Character_column
         Font_byte = Lookup(x1 , Font_6x8)
         For M_2 = 0 To 7
            M_22 = 56 + M_2
            Gosub Set_bit
         Next M_2
         If Color <> Invisible Then Waitms Speed            'full speed, when loadin invisible memory
      Next Character_column
   Next M_1
Return

Shift_left_upper:                                           'shift the upper display one column to left
   Inv1 = Inverting Xor Inv
   Trigger = 0
   Bitwait Trigger , Set                                    'wait untill isr is done
   If Color = Invisible Then
      For N_1 = 8 To 15                                     'only the upper 8 bytes
         N_11 = N_1 + 16 : N_12 = N_1 + 32 : N_13 = N_1 + 48
'invisible
         Shift Memory_invisible(n_1) , Right , 1
         Memory_invisible(n_1).7 = Memory_invisible(n_11).0
         Shift Memory_invisible(n_11) , Right , 1
         Memory_invisible(n_11).7 = Memory_invisible(n_12).0
         Shift Memory_invisible(n_12) , Right , 1
         Memory_invisible(n_12).7 = Memory_invisible(n_13).0
         Shift Memory_invisible(n_13) , Right , 1
         Memory_invisible(n_13).7 = Inv1
      Next N_1
   Else
      For N_1 = 8 To 15                                     'only the upper 8 bytes
         N_11 = N_1 + 16 : N_12 = N_1 + 32 : N_13 = N_1 + 48
'red
         Shift Memory_red(n_1) , Right , 1
         Memory_red(n_1).7 = Memory_red(n_11).0
         Shift Memory_red(n_11) , Right , 1
         Memory_red(n_11).7 = Memory_red(n_12).0
         Shift Memory_red(n_12) , Right , 1
         Memory_red(n_12).7 = Memory_red(n_13).0
         Shift Memory_red(n_13) , Right , 1
         Memory_red(n_13).7 = Inv1
'green
         Shift Memory_green(n_1) , Right , 1
         Memory_green(n_1).7 = Memory_green(n_11).0
         Shift Memory_green(n_11) , Right , 1
         Memory_green(n_11).7 = Memory_green(n_12).0
         Shift Memory_green(n_12) , Right , 1
         Memory_green(n_12).7 = Memory_green(n_13).0
         Shift Memory_green(n_13) , Right , 1
         Memory_green(n_13).7 = Inv1
      Next N_1
   End If
Return

Scroll_text_lower:
'6x16font
   Inv1 = Inverting Xor Inv
   For M_1 = 1 To Len(text)
      Sign = Mid(text , M_1 , 1)                            'Only one letter
      Tab_start = Asc(sign)

      Tab_start = Tab_start - 32
      Tab_start = Tab_start * 6                             'Starting point in the font table
      For Character_column = 0 To 5
         Gosub Shift_left_lower
         X1 = Tab_start + Character_column
         Font_byte = Lookup(x1 , Font_6x8)
         For M_2 = 0 To 7
            M_22 = 48 + M_2
            Gosub Set_bit
         Next M_2
         If Color <> Invisible Then Waitms Speed            'full speed, when loadin invisible memory
      Next Character_column
   Next M_1
Return

Shift_left_lower:                                           'shift the upper display one column to left
   Inv1 = Inverting Xor Inv
   Trigger = 0
   Bitwait Trigger , Set                                    'wait untill isr is done
   If Color = Invisible Then
      For N_1 = 0 To 7                                      'only the lower 8 bytes
         N_11 = N_1 + 16 : N_12 = N_1 + 32 : N_13 = N_1 + 48
'invisible
         Shift Memory_invisible(n_1) , Right , 1
         Memory_invisible(n_1).7 = Memory_invisible(n_11).0
         Shift Memory_invisible(n_11) , Right , 1
         Memory_invisible(n_11).7 = Memory_invisible(n_12).0
         Shift Memory_invisible(n_12) , Right , 1
         Memory_invisible(n_12).7 = Memory_invisible(n_13).0
         Shift Memory_invisible(n_13) , Right , 1
         Memory_invisible(n_13).7 = Inv1
      Next N_1
   Else
      For N_1 = 0 To 7                                      'only the lower 8 bytes
         N_11 = N_1 + 16 : N_12 = N_1 + 32 : N_13 = N_1 + 48
'red
         Shift Memory_red(n_1) , Right , 1
         Memory_red(n_1).7 = Memory_red(n_11).0
         Shift Memory_red(n_11) , Right , 1
         Memory_red(n_11).7 = Memory_red(n_12).0
         Shift Memory_red(n_12) , Right , 1
         Memory_red(n_12).7 = Memory_red(n_13).0
         Shift Memory_red(n_13) , Right , 1
         Memory_red(n_13).7 = Inv1
'green
         Shift Memory_green(n_1) , Right , 1
         Memory_green(n_1).7 = Memory_green(n_11).0
         Shift Memory_green(n_11) , Right , 1
         Memory_green(n_11).7 = Memory_green(n_12).0
         Shift Memory_green(n_12) , Right , 1
         Memory_green(n_12).7 = Memory_green(n_13).0
         Shift Memory_green(n_13) , Right , 1
         Memory_green(n_13).7 = Inv1
      Next N_1
   End If
Return


Set_bit:
   If Color.2 = 1 Then                                      'invisible
      If Inv1 = 1 Then Memory_invisible(m_22).7 = Not Font_byte.m_2 Else Memory_invisible(m_22).7 = Font_byte.m_2
      Else
'write to memory only when color is red or green
      If Color.0 = 1 Then                                   'red
         If Inv1 = 1 Then Memory_red(m_22).7 = Not Font_byte.m_2 Else Memory_red(m_22).7 = Font_byte.m_2
         Else
         Memory_red(m_22).7 = Inverting
      End If
      If Color.1 = 1 Then                                   'green
         If Inv1 = 1 Then Memory_green(m_22).7 = Not Font_byte.m_2 Else Memory_green(m_22).7 = Font_byte.m_2
         Else
         Memory_green(m_22).7 = Inverting
      End If
   End If
Return

'Interrupt service
Display_refresh:                                            'show the memory on the display
   Load Timer2 , Timer2reload
   Incr Page_counter
   If Page_counter > 3 Then Page_counter = 0
   Select Case Page_counter
      Case 0:
         Restore Byte_order_0
         Pwm1b = 255                                        'switch all leds off
         For D_1 = 1 To 16
            Read C_1
            D_red = Memory_red(c_1).0 : D_green = Memory_green(c_1).0 : Shift_clock = 1 : Shift_clock = 0
            D_red = Memory_red(c_1).1 : D_green = Memory_green(c_1).1 : Shift_clock = 1 : Shift_clock = 0
            D_red = Memory_red(c_1).2 : D_green = Memory_green(c_1).2 : Shift_clock = 1 : Shift_clock = 0
            D_red = Memory_red(c_1).3 : D_green = Memory_green(c_1).3 : Shift_clock = 1 : Shift_clock = 0
            D_red = Memory_red(c_1).4 : D_green = Memory_green(c_1).4 : Shift_clock = 1 : Shift_clock = 0
            D_red = Memory_red(c_1).5 : D_green = Memory_green(c_1).5 : Shift_clock = 1 : Shift_clock = 0
            D_red = Memory_red(c_1).6 : D_green = Memory_green(c_1).6 : Shift_clock = 1 : Shift_clock = 0
            D_red = Memory_red(c_1).7 : D_green = Memory_green(c_1).7 : Shift_clock = 1 : Shift_clock = 0
         Next D_1
         Port_write = 1
         A = 0 : B = 0
         Port_write = 0
         Pwm1b = Brightness                                 'max brightness  switch all leds on
      Case 1:
         Restore Byte_order_1
         Pwm1b = 255                                        'switch all leds off
         For D_1 = 1 To 16
            Read C_1
            D_red = Memory_red(c_1).0 : D_green = Memory_green(c_1).0 : Shift_clock = 1 : Shift_clock = 0
            D_red = Memory_red(c_1).1 : D_green = Memory_green(c_1).1 : Shift_clock = 1 : Shift_clock = 0
            D_red = Memory_red(c_1).2 : D_green = Memory_green(c_1).2 : Shift_clock = 1 : Shift_clock = 0
            D_red = Memory_red(c_1).3 : D_green = Memory_green(c_1).3 : Shift_clock = 1 : Shift_clock = 0
            D_red = Memory_red(c_1).4 : D_green = Memory_green(c_1).4 : Shift_clock = 1 : Shift_clock = 0
            D_red = Memory_red(c_1).5 : D_green = Memory_green(c_1).5 : Shift_clock = 1 : Shift_clock = 0
            D_red = Memory_red(c_1).6 : D_green = Memory_green(c_1).6 : Shift_clock = 1 : Shift_clock = 0
            D_red = Memory_red(c_1).7 : D_green = Memory_green(c_1).7 : Shift_clock = 1 : Shift_clock = 0
         Next D_1
         Port_write = 1
         A = 1 : B = 0
         Port_write = 0
         Pwm1b = Brightness                                 'max brightness  switch all leds on
      Case 2:
         Restore Byte_order_2
         Pwm1b = 255                                        'switch all leds off
         For D_1 = 1 To 16
            Read C_1
            D_red = Memory_red(c_1).0 : D_green = Memory_green(c_1).0 : Shift_clock = 1 : Shift_clock = 0
            D_red = Memory_red(c_1).1 : D_green = Memory_green(c_1).1 : Shift_clock = 1 : Shift_clock = 0
            D_red = Memory_red(c_1).2 : D_green = Memory_green(c_1).2 : Shift_clock = 1 : Shift_clock = 0
            D_red = Memory_red(c_1).3 : D_green = Memory_green(c_1).3 : Shift_clock = 1 : Shift_clock = 0
            D_red = Memory_red(c_1).4 : D_green = Memory_green(c_1).4 : Shift_clock = 1 : Shift_clock = 0
            D_red = Memory_red(c_1).5 : D_green = Memory_green(c_1).5 : Shift_clock = 1 : Shift_clock = 0
            D_red = Memory_red(c_1).6 : D_green = Memory_green(c_1).6 : Shift_clock = 1 : Shift_clock = 0
            D_red = Memory_red(c_1).7 : D_green = Memory_green(c_1).7 : Shift_clock = 1 : Shift_clock = 0
         Next D_1
         Port_write = 1
         A = 0 : B = 1
         Port_write = 0
         Pwm1b = Brightness                                 'max brightness  switch all leds on
      Case 3:
         Restore Byte_order_3
         Pwm1b = 255                                        'switch all leds off
         For D_1 = 1 To 16
            Read C_1
            D_red = Memory_red(c_1).0 : D_green = Memory_green(c_1).0 : Shift_clock = 1 : Shift_clock = 0
            D_red = Memory_red(c_1).1 : D_green = Memory_green(c_1).1 : Shift_clock = 1 : Shift_clock = 0
            D_red = Memory_red(c_1).2 : D_green = Memory_green(c_1).2 : Shift_clock = 1 : Shift_clock = 0
            D_red = Memory_red(c_1).3 : D_green = Memory_green(c_1).3 : Shift_clock = 1 : Shift_clock = 0
            D_red = Memory_red(c_1).4 : D_green = Memory_green(c_1).4 : Shift_clock = 1 : Shift_clock = 0
            D_red = Memory_red(c_1).5 : D_green = Memory_green(c_1).5 : Shift_clock = 1 : Shift_clock = 0
            D_red = Memory_red(c_1).6 : D_green = Memory_green(c_1).6 : Shift_clock = 1 : Shift_clock = 0
            D_red = Memory_red(c_1).7 : D_green = Memory_green(c_1).7 : Shift_clock = 1 : Shift_clock = 0
         Next D_1
         Port_write = 1
         A = 1 : B = 1
         Port_write = 0
         Pwm1b = Brightness                                 'max brightness  switch all leds on
   End Select
   Trigger = 1
Return

Byte_order_0:
   Data 3 , 7 , 19 , 23 , 11 , 15 , 27 , 31 , 35 , 39 , 51 , 55 , 43 , 47 , 59 , 63
Byte_order_1:
   Data 2 , 6 , 18 , 22 , 10 , 14 , 26 , 30 , 34 , 38 , 50 , 54 , 42 , 46 , 58 , 62
Byte_order_2:
   Data 1 , 5 , 17 , 21 , 9 , 13 , 25 , 29 , 33 , 37 , 49 , 53 , 41 , 45 , 57 , 61
Byte_order_3:
   Data 0 , 4 , 16 , 20 , 8 , 12 , 24 , 28 , 32 , 36 , 48 , 52 , 40 , 44 , 56 , 60

Clear_memory:
   For N_1 = 0 To 63
      If Inverting = 1 Then
         Memory_red(n_1) = 255
         Memory_green(n_1) = 255
         Memory_invisible(n_1) = 255
      Else
         Memory_red(n_1) = 0
         Memory_green(n_1) = 0
         Memory_invisible(n_1) = 0
      End If
   Next N_1
Return

Shift_left:                                                 'shift the display one column to left
   Inv1 = Inverting Xor Inv
   Trigger = 0
   Bitwait Trigger , Set                                    'wait untill isr is done
   If Color = Invisible Then
      For N_1 = 0 To 15
         N_11 = N_1 + 16 : N_12 = N_1 + 32 : N_13 = N_1 + 48
'invisible
         Shift Memory_invisible(n_1) , Right , 1
         Memory_invisible(n_1).7 = Memory_invisible(n_11).0
         Shift Memory_invisible(n_11) , Right , 1
         Memory_invisible(n_11).7 = Memory_invisible(n_12).0
         Shift Memory_invisible(n_12) , Right , 1
         Memory_invisible(n_12).7 = Memory_invisible(n_13).0
         Shift Memory_invisible(n_13) , Right , 1
         Memory_invisible(n_13).7 = Inv1
      Next N_1
   Else
      For N_1 = 0 To 15
         N_11 = N_1 + 16 : N_12 = N_1 + 32 : N_13 = N_1 + 48
'red
         Shift Memory_red(n_1) , Right , 1
         Memory_red(n_1).7 = Memory_red(n_11).0
         Shift Memory_red(n_11) , Right , 1
         Memory_red(n_11).7 = Memory_red(n_12).0
         Shift Memory_red(n_12) , Right , 1
         Memory_red(n_12).7 = Memory_red(n_13).0
         Shift Memory_red(n_13) , Right , 1
         Memory_red(n_13).7 = Inv1
'green
         Shift Memory_green(n_1) , Right , 1
         Memory_green(n_1).7 = Memory_green(n_11).0
         Shift Memory_green(n_11) , Right , 1
         Memory_green(n_11).7 = Memory_green(n_12).0
         Shift Memory_green(n_12) , Right , 1
         Memory_green(n_12).7 = Memory_green(n_13).0
         Shift Memory_green(n_13) , Right , 1
         Memory_green(n_13).7 = Inv1
      Next N_1
   End If
Return

Shift_right:                                                'shift the display one column to right
   Inv1 = Inverting Xor Inv
   Trigger = 0
   Bitwait Trigger , Set                                    'wait untill isr is done
   For N_1 = 0 To 15
      N_11 = N_1 + 16 : N_12 = N_1 + 32 : N_13 = N_1 + 48
'red
      Shift Memory_red(n_13) , Left , 1
      Memory_red(n_13).0 = Memory_red(n_12).7
      Shift Memory_red(n_12) , Left , 1
      Memory_red(n_12).0 = Memory_red(n_11).7
      Shift Memory_red(n_11) , Left , 1
      Memory_red(n_11).0 = Memory_red(n_1).7
      Shift Memory_red(n_1) , Left , 1
      Memory_red(n_1).0 = Inv1
'green
      Shift Memory_green(n_13) , Left , 1
      Memory_green(n_13).0 = Memory_green(n_12).7
      Shift Memory_green(n_12) , Left , 1
      Memory_green(n_12).0 = Memory_green(n_11).7
      Shift Memory_green(n_11) , Left , 1
      Memory_green(n_11).0 = Memory_green(n_1).7
      Shift Memory_green(n_1) , Left , 1
      Memory_green(n_1).0 = Inv1
   Next N_1
Return

Rise_from_hell:                                             'roll the display complete up

   For N_3 = 15 To 0 Step -1

      Trigger = 0
      Bitwait Trigger , Set                                 'wait untill isr is done
      For N_1 = 0 To 48 Step 16
         For N_2 = 15 To 1 Step -1
            N_22 = N_2 + N_1 : N_23 = N_22 -1
            Memory_red(n_22) = Memory_red(n_23)
            Memory_green(n_22) = Memory_green(n_23)
         Next N_2
         N_31 = N_1 + N_3
         If Color.0 = 1 Then Memory_red(n_1) = Memory_invisible(n_31)       'copy from invisible
         If Color.1 = 1 Then Memory_green(n_1) = Memory_invisible(n_31)       'copy from invisible
      Next N_1

      Waitms 63
   Next N_3

Return

Fall_from_heaven:                                           'roll the display complete down

   For N_3 = 0 To 15

      Trigger = 0
      Bitwait Trigger , Set                                 'wait untill isr is done
      For N_1 = 0 To 48 Step 16
         For N_2 = 0 To 14
            N_22 = N_2 + N_1 : N_23 = N_22 + 1
            Memory_red(n_22) = Memory_red(n_23)
            Memory_green(n_22) = Memory_green(n_23)
         Next N_2
         N_31 = N_1 + N_3
         If Color.0 = 1 Then Memory_red(n_1 + 15) = Memory_invisible(n_31)       'copy from invisible
         If Color.1 = 1 Then Memory_green(n_1 + 15) = Memory_invisible(n_31)       'copy from invisible
      Next N_1

      Waitms 63
   Next N_3

Return

Roll_up:                                                    'roll the display one row up

   For N = 0 To 15

      Trigger = 0
      Bitwait Trigger , Set                                 'wait untill isr is done
      For N_1 = 0 To 48 Step 16
'red
         N_2 = N_1 + 15
         Temp_m_r = Memory_red(n_2)                         'save memory
'green
         Temp_m_g = Memory_green(n_2)                       'save memory
         For N_2 = 15 To 1 Step -1
            N_22 = N_2 + N_1 : N_23 = N_22 -1
'red
            Memory_red(n_22) = Memory_red(n_23)
'green
            Memory_green(n_22) = Memory_green(n_23)
         Next N_2
'red
         Memory_red(n_1) = Temp_m_r                         'recover memory
'green
         Memory_green(n_1) = Temp_m_g                       'recover memory
      Next N_1

      Waitms 40
   Next N

Return

Roll_down:                                                  'roll the display one row down

   For N = 0 To 15

      Trigger = 0
      Bitwait Trigger , Set                                 'wait untill isr is done
      For N_1 = 0 To 48 Step 16
'red
         Temp_m_r = Memory_red(n_1)                         'save memory
'green
         Temp_m_g = Memory_green(n_1)                       'save memory
         For N_2 = 0 To 14
            N_22 = N_2 + N_1 : N_23 = N_22 + 1
'red
            Memory_red(n_22) = Memory_red(n_23)
'green
            Memory_green(n_22) = Memory_green(n_23)
         Next N_2
'red
         N_2 = N_1 + 15
         Memory_red(n_2) = Temp_m_r                         'recover memory
'green
         Memory_green(n_2) = Temp_m_g                       'recover memory
      Next N_1

      Waitms 40
   Next N

Return

Shift_up:                                                   'shift the display one row up

   For N = 0 To 15

      Inv1 = Inverting Xor Inv
      Trigger = 0
      Bitwait Trigger , Set                                 'wait untill isr is done
      For N_1 = 0 To 48 Step 16
         For N_2 = 15 To 1 Step -1
            N_22 = N_2 + N_1 : N_23 = N_22 -1
'red
            Memory_red(n_22) = Memory_red(n_23)
'green
            Memory_green(n_22) = Memory_green(n_23)
         Next N_2
'red
         If Inv1 = 1 Then Memory_red(n_1) = 255 Else Memory_red(n_1) = 0
'red
         If Inv1 = 1 Then Memory_red(n_1) = 255 Else Memory_red(n_1) = 0
      Next N_1

      Waitms 40
   Next N

Return

Shift_down:                                                 'shift the display one row down

   For N = 0 To 15

      Inv1 = Inverting Xor Inv
      Trigger = 0
      Bitwait Trigger , Set                                 'wait untill isr is done
      For N_1 = 0 To 48 Step 16
         For N_2 = 0 To 14
            N_22 = N_2 + N_1 : N_23 = N_22 + 1
'red
            Memory_red(n_22) = Memory_red(n_23)
'green
            Memory_green(n_22) = Memory_green(n_23)
         Next N_2
'red
N_2 = N_1 + 15
         If Inv1 = 1 Then Memory_red(n_2) = 255 Else Memory_red(n_2) = 0
'green
         If Inv1 = 1 Then Memory_green(n_2) = 255 Else Memory_green(n_2) = 0
      Next N_1

      Waitms 40
   Next N

Return

Scroll_text_16:
'12x16font
   Inv1 = Inverting Xor Inv
   For M_1 = 1 To Len(text)
      Sign = Mid(text , M_1 , 1)                            'Only one letter
      Tab_start = Asc(sign)

      Tab_start = Tab_start - 32
      Tab_start = Tab_start * 24                            'Starting point in the font table
      For Character_column = 0 To 22 Step 2
         Gosub Shift_left
         X1 = Tab_start + Character_column
         Font_byte = Lookup(x1 , Font_12x16)
         For M_2 = 0 To 7
            M_22 = 48 + M_2
            Gosub Set_bit
         Next M_2
         X1 = X1 + 1
         Font_byte = Lookup(x1 , Font_12x16)
         For M_2 = 0 To 7
            M_22 = 56 + M_2
            Gosub Set_bit
         Next M_2
         If Color <> Invisible Then Waitms Speed            'full speed, when loadin invisible memory
      Next Character_column
   Next M_1
Return

Scroll_text_10:
'10x16font
   Inv1 = Inverting Xor Inv
   For M_1 = 1 To Len(text)
      Sign = Mid(text , M_1 , 1)                            'Only one letter
      Tab_start = Asc(sign)

      Tab_start = Tab_start - 32
      Tab_start = Tab_start * 20                            'Starting point in the font table
      For Character_column = 0 To 18 Step 2
         Gosub Shift_left
         X1 = Tab_start + Character_column
         Font_byte = Lookup(x1 , Font_10x16)
         For M_2 = 0 To 7
            M_22 = 48 + M_2
            Gosub Set_bit
         Next M_2
         X1 = X1 + 1
         Font_byte = Lookup(x1 , Font_10x16)
         For M_2 = 0 To 7
            M_22 = 56 + M_2
            Gosub Set_bit
         Next M_2
         If Color <> Invisible Then Waitms Speed            'full speed, when loadin invisible memory
      Next Character_column
   Next M_1
Return

Font_12x16:
   Data 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0       '<space>
   Data 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 31 , 230 , 127 , 230 , 127 , 0 , 31 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0       '!
   Data 0 , 0 , 0 , 0 , 0 , 0 , 0 , 60 , 0 , 60 , 0 , 0 , 0 , 0 , 0 , 60 , 0 , 60 , 0 , 0 , 0 , 0 , 0 , 0 '"
   Data 0 , 0 , 64 , 0 , 120 , 8 , 248 , 9 , 192 , 15 , 64 , 126 , 120 , 120 , 248 , 9 , 192 , 15 , 64 , 126 , 0 , 120 , 0 , 8       '#
   Data 0 , 0 , 0 , 0 , 16 , 15 , 152 , 31 , 152 , 25 , 254 , 127 , 254 , 127 , 152 , 25 , 248 , 25 , 240 , 8 , 0 , 0 , 0 , 0       '$
   Data 0 , 0 , 12 , 0 , 28 , 28 , 56 , 28 , 112 , 28 , 224 , 0 , 192 , 1 , 128 , 3 , 28 , 7 , 28 , 14 , 28 , 28 , 0 , 56       '%
   Data 0 , 0 , 0 , 0 , 248 , 0 , 252 , 29 , 140 , 63 , 132 , 99 , 236 , 71 , 120 , 124 , 56 , 56 , 108 , 0 , 68 , 0 , 0 , 0       '&
   Data 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 114 , 0 , 126 , 0 , 124 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0       'С
   Data 0 , 0 , 0 , 0 , 0 , 0 , 224 , 7 , 248 , 31 , 252 , 63 , 14 , 112 , 2 , 64 , 2 , 64 , 0 , 0 , 0 , 0 , 0 , 0       ' (
   Data 0 , 0 , 0 , 0 , 0 , 0 , 2 , 64 , 2 , 64 , 14 , 112 , 252 , 63 , 248 , 31 , 224 , 7 , 0 , 0 , 0 , 0 , 0 , 0       ')
   Data 0 , 0 , 0 , 0 , 48 , 25 , 96 , 13 , 64 , 5 , 240 , 31 , 240 , 31 , 64 , 5 , 96 , 13 , 48 , 25 , 0 , 0 , 0 , 0       '*
   Data 0 , 0 , 0 , 0 , 128 , 1 , 128 , 1 , 128 , 1 , 240 , 15 , 240 , 15 , 128 , 1 , 128 , 1 , 128 , 1 , 0 , 0 , 0 , 0       '+
   Data 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 29 , 0 , 31 , 0 , 30 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0       ',
   Data 0 , 0 , 0 , 0 , 128 , 1 , 128 , 1 , 128 , 1 , 128 , 1 , 128 , 1 , 128 , 1 , 128 , 1 , 128 , 1 , 0 , 0 , 0 , 0       '-
   Data 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 28 , 0 , 28 , 0 , 28 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0       '.
   Data 0 , 0 , 24 , 0 , 56 , 0 , 112 , 0 , 224 , 0 , 192 , 1 , 128 , 3 , 0 , 7 , 0 , 14 , 0 , 28 , 0 , 56 , 0 , 112       '/
   Data 0 , 0 , 240 , 15 , 252 , 63 , 60 , 48 , 102 , 96 , 198 , 96 , 134 , 97 , 6 , 99 , 6 , 102 , 12 , 60 , 252 , 63 , 240 , 15       '0
   Data 0 , 0 , 0 , 0 , 0 , 0 , 6 , 24 , 6 , 24 , 6 , 56 , 254 , 127 , 254 , 127 , 6 , 0 , 6 , 0 , 6 , 0 , 0 , 0       '1
   Data 0 , 0 , 6 , 28 , 14 , 60 , 30 , 112 , 62 , 96 , 118 , 96 , 230 , 96 , 198 , 97 , 134 , 99 , 6 , 119 , 6 , 62 , 6 , 28       '2
   Data 0 , 0 , 24 , 24 , 28 , 56 , 14 , 112 , 134 , 97 , 134 , 97 , 134 , 97 , 134 , 97 , 134 , 97 , 206 , 115 , 124 , 63 , 56 , 30       '3
   Data 0 , 0 , 224 , 1 , 224 , 3 , 96 , 7 , 96 , 14 , 96 , 28 , 96 , 56 , 96 , 112 , 254 , 127 , 254 , 127 , 96 , 0 , 96 , 0       '4
   Data 0 , 0 , 24 , 126 , 28 , 127 , 14 , 99 , 6 , 99 , 6 , 99 , 6 , 99 , 6 , 99 , 6 , 99 , 142 , 99 , 252 , 97 , 248 , 96       '5
   Data 0 , 0 , 248 , 1 , 252 , 7 , 206 , 15 , 134 , 29 , 134 , 57 , 134 , 113 , 134 , 97 , 134 , 97 , 206 , 97 , 252 , 0 , 120 , 0       '6
   Data 0 , 0 , 0 , 96 , 0 , 96 , 0 , 96 , 6 , 96 , 30 , 96 , 120 , 96 , 224 , 97 , 128 , 103 , 0 , 126 , 0 , 120 , 0 , 96       '7
   Data 0 , 0 , 120 , 0 , 252 , 30 , 206 , 63 , 134 , 115 , 134 , 97 , 134 , 97 , 134 , 97 , 134 , 115 , 206 , 63 , 252 , 30 , 120 , 0       '8
   Data 0 , 0 , 0 , 30 , 0 , 63 , 134 , 115 , 134 , 97 , 134 , 97 , 142 , 97 , 156 , 97 , 184 , 97 , 240 , 115 , 224 , 63 , 128 , 31       '9

Font_10x16:
   Data 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0       '&H20
   Data 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 216 , 127 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0       '&H21
   Data 0 , 0 , 0 , 0 , 0 , 120 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 120 , 0 , 0 , 0 , 0 , 0 , 0       '&H22
   Data 128 , 0 , 152 , 4 , 224 , 5 , 128 , 30 , 152 , 100 , 224 , 5 , 128 , 30 , 128 , 100 , 128 , 4 , 0 , 0       '&H23
   Data 0 , 0 , 0 , 0 , 24 , 56 , 8 , 100 , 8 , 66 , 252 , 255 , 136 , 65 , 240 , 64 , 0 , 0 , 0 , 0       '&H24
   Data 8 , 56 , 16 , 68 , 32 , 68 , 192 , 68 , 0 , 57 , 112 , 2 , 136 , 12 , 136 , 16 , 136 , 32 , 112 , 64       '&H25
   Data 224 , 0 , 16 , 1 , 8 , 58 , 8 , 70 , 136 , 69 , 200 , 76 , 56 , 56 , 24 , 0 , 104 , 0 , 128 , 1       '&H26
   Data 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 120 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0       '&H27
   Data 0 , 0 , 0 , 0 , 0 , 0 , 224 , 7 , 24 , 24 , 12 , 48 , 4 , 32 , 2 , 64 , 2 , 64 , 0 , 0       '&H28
   Data 0 , 0 , 2 , 64 , 2 , 64 , 4 , 32 , 12 , 48 , 24 , 24 , 224 , 7 , 0 , 0 , 0 , 0 , 0 , 0       '&H29
   Data 0 , 0 , 0 , 16 , 0 , 24 , 0 , 15 , 0 , 114 , 0 , 15 , 0 , 24 , 0 , 16 , 0 , 0 , 0 , 0       '&H2A
   Data 64 , 0 , 64 , 0 , 64 , 0 , 64 , 0 , 248 , 7 , 64 , 0 , 64 , 0 , 64 , 0 , 64 , 0 , 0 , 0       '&H2B
   Data 0 , 0 , 0 , 0 , 0 , 0 , 25 , 0 , 30 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0       '&H2C
   Data 0 , 0 , 0 , 0 , 128 , 0 , 128 , 0 , 128 , 0 , 128 , 0 , 128 , 0 , 128 , 0 , 0 , 0 , 0 , 0       '&H2D
   Data 0 , 0 , 0 , 0 , 0 , 0 , 24 , 0 , 24 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0       '&H2E
   Data 0 , 0 , 2 , 0 , 12 , 0 , 48 , 0 , 192 , 0 , 0 , 3 , 0 , 12 , 0 , 48 , 0 , 64 , 0 , 0       '&H2F
   Data 0 , 0 , 224 , 7 , 24 , 24 , 4 , 32 , 4 , 32 , 4 , 32 , 24 , 24 , 224 , 7 , 0 , 0 , 0 , 0       '&H30
   Data 0 , 0 , 4 , 8 , 4 , 8 , 4 , 8 , 252 , 63 , 4 , 0 , 4 , 0 , 4 , 0 , 0 , 0 , 0 , 0       '&H31
   Data 0 , 0 , 60 , 16 , 68 , 32 , 132 , 32 , 132 , 32 , 4 , 33 , 12 , 30 , 0 , 0 , 0 , 0 , 0 , 0       '&H32
   Data 0 , 0 , 8 , 16 , 4 , 33 , 4 , 33 , 4 , 33 , 4 , 33 , 4 , 33 , 248 , 30 , 0 , 0 , 0 , 0       '&H33
   Data 96 , 0 , 160 , 1 , 32 , 2 , 32 , 12 , 32 , 16 , 252 , 63 , 32 , 0 , 32 , 0 , 0 , 0 , 0 , 0       '&H34
   Data 0 , 0 , 8 , 62 , 4 , 34 , 4 , 34 , 4 , 34 , 4 , 34 , 8 , 33 , 240 , 0 , 0 , 0 , 0 , 0       '&H35
   Data 0 , 0 , 248 , 31 , 4 , 33 , 4 , 33 , 4 , 33 , 4 , 33 , 4 , 33 , 248 , 0 , 0 , 0 , 0 , 0       '&H36
   Data 0 , 0 , 0 , 32 , 12 , 32 , 112 , 32 , 128 , 33 , 0 , 38 , 0 , 40 , 0 , 48 , 0 , 0 , 0 , 0       '&H37
   Data 0 , 0 , 120 , 28 , 132 , 34 , 4 , 33 , 4 , 33 , 4 , 33 , 132 , 34 , 120 , 28 , 0 , 0 , 0 , 0       '&H38
   Data 0 , 0 , 0 , 31 , 132 , 32 , 132 , 32 , 132 , 32 , 132 , 32 , 132 , 32 , 248 , 31 , 0 , 0 , 0 , 0       '&H39

Font_6x8:                                                   '6x8font
Data &H00 , &H00 , &H00 , &H00 , &H00 , &H00                ' &H20
Data &H00 , &H00 , &H60 , &HFA , &H60 , &H00                ' &H21
Data &H00 , &HE0 , &HC0 , &H00 , &HE0 , &HC0                ' &H22
Data &H00 , &H24 , &H7E , &H24 , &H7E , &H24                ' &H23
Data &H00 , &H24 , &HD4 , &H56 , &H48 , &H00                ' &H24
Data &H00 , &HC6 , &HC8 , &H10 , &H26 , &HC6                ' &H25
Data &H00 , &H6C , &H92 , &H6A , &H04 , &H0A                ' &H26
Data &H00 , &H00 , &HE0 , &HC0 , &H00 , &H00                ' &H27
Data &H00 , &H00 , &H7C , &H82 , &H00 , &H00                ' &H28
Data &H00 , &H00 , &H82 , &H7C , &H00 , &H00                ' &H29
Data &H00 , &H10 , &H7C , &H38 , &H7C , &H10                ' &H2A
Data &H00 , &H10 , &H10 , &H7C , &H10 , &H10                ' &H2B
Data &H00 , &H00 , &H07 , &H06 , &H00 , &H00                ' &H2C
Data &H00 , &H10 , &H10 , &H10 , &H10 , &H10                ' &H2D
Data &H00 , &H00 , &H06 , &H06 , &H00 , &H00                ' &H2E
Data &H00 , &H04 , &H08 , &H10 , &H20 , &H40                ' &H2F
Data &H00 , &H7C , &H8A , &H92 , &HA2 , &H7C                ' &H30
Data &H00 , &H00 , &H42 , &HFE , &H02 , &H00                ' &H31
Data &H00 , &H46 , &H8A , &H92 , &H92 , &H62                ' &H32
Data &H00 , &H44 , &H92 , &H92 , &H92 , &H6C                ' &H33
Data &H00 , &H18 , &H28 , &H48 , &HFE , &H08                ' &H34
Data &H00 , &HF4 , &H92 , &H92 , &H92 , &H8C                ' &H35
Data &H00 , &H3C , &H52 , &H92 , &H92 , &H0C                ' &H36
Data &H00 , &H80 , &H8E , &H90 , &HA0 , &HC0                ' &H37
Data &H00 , &H6C , &H92 , &H92 , &H92 , &H6C                ' &H38
Data &H00 , &H60 , &H92 , &H92 , &H94 , &H78                ' &H39
Data &H00 , &H00 , &H36 , &H36 , &H00 , &H00                ' &H3A
Data &H00 , &H00 , &H37 , &H36 , &H00 , &H00                ' &H3B

0

15

€ примерно такое делаю в своЄм контроллере, правда, вывожу на GLCD
напомните через неделю, когда вернусь домой.

+1

16

—пасибо, буду ждать, через неделю напишу.

ќтредактировано catalex (2019-11-08 20:14:55)

0

17

“оже вот под ногами лежит панелька, думаю на ней вдохновитс€.
¬роде без ошибок нарисовал, распиновка используемых контактов.
http://sg.uploads.ru/t/azmWs.jpg

0

18

” вас немного друга€, у мен€ монохромна€. ѕо расположению контактов примерно тоже самое, у ¬ас только одним выводом больше. „уть позже выложу свой исходник, приведу его маленько в пор€док. Ќе правильно у мен€ получаетс€ overley раскладывать переменную по байтам. ћожет дадите совет. :-)

0

19

catalex написал(а):

” вас немного друга€

“акае-же. ѕросто € не могу найти схему подключени€ и застр€л на этой стадии  :D
¬аш код не смог запустить, попробую сам написать:
http://s7.uploads.ru/t/WbNpF.jpg

—вернутый текст

http://conture.by/wp-content/uploads/2013/08/hub12_protocol1.jpg

≈щЄ статейка

Ќе могу запустить никак на 10PC1D1, никак не слушаетс€.

ќтредактировано Ev3658 (2019-11-11 01:29:18)

0

20

¬от жуть то кака€!!!! ќна же с динамичной индикацией!!!!
“о-есть пам€ти в панели всего да ничего - 128 байт, по этому надо их загон€ть в цикле 4 раза дл€ полного кадра  :canthearyou:

ќтредактировано Ev3658 (2019-11-11 02:17:52)

0

21

¬се эти матрицы спроектированы таким образом, чтобы было: дешевое производство, малое потребление (на сколько это возможно). Ёто всЄ накладывает на обратную сторону медали кучу других проблем как, производительное железо/контроллер (т.к. всЄ обслуживание ложитс€ на его плечи). Ёто не WS2812. :dontknow:

0

22

Ѕлин, у мен€ не та заполн€емость что на картинке.
 ому интересно, вот, проверьте:

—вернутый текст
 од:
$regfile = "m328pdef.dat"
$crystal = 16000000
$hwstack = 90
$swstack = 90
$framesize = 90




Config Portd.7 = Output
Config Portb = Output
Oe_pin Alias Portb.4

Set Oe_pin                                                  '¬ключаем дисплей (можно его на таймер поставить дл€ регулировки €ркости)

A_pin Alias Portb.3                                         'јдрес в €чейке
B_pin Alias Portb.2                                         'јдрес в €чейке
Clk_pin Alias Portb.1                                       'строб передачи данных SPI
Stb_pin Alias Portb.0                                       '—троб защЄлки
Data_pin Alias Portd.7                                      '¬ывод данных SPI


Dim Led(64) As Byte                                         'ћассив видео пам€ти


Dim Adrs As Byte                                            'координаты пам€ти


Dim L As Word                                               'временно дл€ теста
Dim Tm As Byte                                              'ƒл€ задержки кода


Do
  Set Oe_pin                                                '¬ключаем дисплей

      Reset A_pin
      Reset B_pin

      For Adrs = 1 To 64
          Shiftout Data_pin , Clk_pin , Led(adrs)           '¬ывод данных
          Select Case Adrs
          Case 16
             Set Stb_pin                                    'ƒрыгаем защЄлкой регистров
             Reset Stb_pin

             Set A_pin                                      '¬ыбор адреса строки 1-4
          Case 32
             Set Stb_pin
             Reset Stb_pin

             Reset A_pin
             Set B_pin
          Case 48
             Set Stb_pin
             Reset Stb_pin
             Set A_pin


          End Select

      Next Adrs

      Set Stb_pin
      Reset Stb_pin



   Incr Tm                                                  'дл€ замедлени€
   If Tm = 155 Then
       Tm = 0
       '============== ƒл€ теста
          For Adrs = 1 To 64                                '–исуем заполнение по пор€дку
            If Adrs <= L Then
               Led(adrs) = 0
               Else
               Led(adrs) = 254
            End If
          Next Adrs
           Incr L
           If L = 64 Then L = 1
   End If


Loop


End

¬идео работы: https://yadi.sk/i/NpmimTyDKt7BYg

ќтредактировано Ev3658 (2019-11-11 14:55:47)

0

23

Ќе весь мозг ещЄ пропил  :crazyfun:

¬идео: https://yadi.sk/d/EReW5bTJVWIn2A

 ќƒ
 од:
$regfile = "m328pdef.dat"
$crystal = 16000000
$hwstack = 90
$swstack = 90
$framesize = 90

Const Lsdram = 128                                          ' оличество панелей (64=1 панель, 128=две панели)
Const Lsdstr = 128 / 4                                      '–ассчЄт блоков дл€ вывода графики

'ќбычна€ конфигураци€ портов
Config Portd.7 = Output
Config Portb = Output
Oe_pin Alias Portb.4                                        'Ёто дл€ отклчюени€ и включени€ диспле€, можно посадить на таймер и регулировать €ркость.

Set Oe_pin                                                  '¬ключаем дисплей (можно его на таймер поставить дл€ регулировки €ркости)

A_pin Alias Portb.3                                         'јдрес в €чейке
B_pin Alias Portb.2                                         'јдрес в €чейке
Clk_pin Alias Portb.1                                       'строб передачи данных SPI
Stb_pin Alias Portb.0                                       '—троб защЄлки
Data_pin Alias Portd.7                                      '¬ывод данных SPI


Dim Led(lsdram) As Byte                                     'ћассив видео пам€ти
Dim Adrs As Byte                                            'координаты пам€ти
Dim Triglsd As Byte                                         'јдрес строки в €чейке
Dim Blsd As Byte                                            'Ѕайт дл€ вычислени€ обрабатываемой строки

Dim L As Word                                               'временно дл€ теста
Dim Tm As Byte                                              'ƒл€ задержки кода



Do
  Set Oe_pin                                                '¬ключаем дисплей

  '=============================  од вывода на дисплей =================================================

  Reset A_pin : Reset B_pin
  Triglsd = 4                                               '—брос счЄтчика строк

  For Adrs = 1 To Lsdram                                    'ѕеребираем видео пам€ть
          Shiftout Data_pin , Clk_pin , Led(adrs) , 2       '¬ывод данных
          Blsd = Adrs Mod Lsdstr                            'ѕровер€ем
          If Blsd = 0 Then
            Decr Triglsd
            If Triglsd = 0 Then Triglsd = 4
            A_pin = Triglsd .0
            B_pin = Triglsd .1
            Set Stb_pin                                     'ƒрыгаем защЄлкой регистров
            Reset Stb_pin
          End If
  Next Adrs

  Set Stb_pin                                               'ƒрыгаем защЄлкой регистров
  Reset Stb_pin
  '=====================================================================================================



  '==================ѕросто тестова€ программа проверки правильности вывода видео данных =================
   Incr Tm                                                  'дл€ замедлени€
   If Tm = 10 Then
      Tm = 0
       '============== ƒл€ теста
          For Adrs = 1 To Lsdram                            '–исуем заполнение по пор€дку
            If Adrs <= L Then
               Led(adrs) = 0
               Else
               Led(adrs) = 254
            End If
          Next Adrs
           Incr L
           If L => Lsdram Then L = 1
   End If


Loop


End

+3

24

ћедленно как-то работает.

0

25

RDW написал(а):

ћедленно как-то работает.


“ам замедлитель:

 од:
Incr Tm                                                  'дл€ замедлени€
   If Tm = 10 Then


ƒа и код вывода бы оптимизировать:

 од:
Reset A_pin : Reset B_pin
  Triglsd = 4                                               '—брос счЄтчика строк

  For Adrs = 1 To Lsdram                                    'ѕеребираем видео пам€ть
          Shiftout Data_pin , Clk_pin , Led(adrs) , 2       '¬ывод данных
          Blsd = Adrs Mod Lsdstr                            'ѕровер€ем
          If Blsd = 0 Then
            Decr Triglsd
            If Triglsd = 0 Then Triglsd = 4
            A_pin = Triglsd .0
            B_pin = Triglsd .1
            Set Stb_pin                                     'ƒрыгаем защЄлкой регистров
            Reset Stb_pin
          End If
  Next Adrs

  Set Stb_pin                                               'ƒрыгаем защЄлкой регистров
  Reset Stb_pin

0

26

ќбратите внимание как выводитс€ видео информаци€:

 од:
 For Adrs = 1 To 64                                '–исуем заполнение по пор€дку
            If Adrs <= L Then
               Led(adrs) = 0 '“ут мы рисуем линию
               Else
               Led(adrs) = 254 '“ут мы ставим точку
            End If
          Next Adrs


ѕросто перебором от 1 до конца.  ак рисуетс€ видно на видео выше. ”же стало приемлемо делать знакогенератор.

ќтредактировано Ev3658 (2019-11-12 12:38:55)

0

27

¬ообщем, правда, признаюсь. “ут 99,9% логики и 0,1 процент пока не разбиралс€, но работает.
“о-есть шрифт уже можно выводить пиксел€ми.
Ќужна оптимизаци€ адресации 4х строк в кластере, может ещЄ чего умное бы  :glasses:

¬идео: https://yadi.sk/i/vYBjgT0KNpeYpg

 од программы:
 од:
$regfile = "m328pdef.dat"
$crystal = 16000000
$hwstack = 90
$swstack = 90
$framesize = 90


Declare Sub Point(x1 As Byte , Y1 As Byte)                  'подпрограмма вывода пиксел€
'“ут на два сегмента:
Const Lsdram = 129                                          ' оличество панелей (65=1 панель, 129=две панели)  - но почему-то надо чуть больше чтоб небыло утчки пам€ти, по идее 64 и 128 должно быть
'Const Lsdram = 65                                           'Ёто на одну матрицу, но учтите, в цикле координаты X 63 помен€йте на 31
Const Lsdstr = Lsdram / 4                                   '–ассчЄт блоков дл€ вывода графики


'ќбычна€ конфигураци€ портов
Config Portd.7 = Output
Config Portb = Output
Oe_pin Alias Portb.4                                        'Ёто дл€ отклчюени€ и включени€ диспле€, можно посадить на таймер и регулировать €ркость.

Set Oe_pin                                                  '¬ключаем дисплей (можно его на таймер поставить дл€ регулировки €ркости)

A_pin Alias Portb.3                                         'јдрес в €чейке
B_pin Alias Portb.2                                         'јдрес в €чейке
Clk_pin Alias Portb.1                                       'строб передачи данных SPI
Stb_pin Alias Portb.0                                       '—троб защЄлки
Data_pin Alias Portd.7                                      '¬ывод данных SPI


Dim Led(200) As Byte                                        'ћассив видео пам€ти
Dim Adrsstart As Byte                                       'координаты пам€ти
Dim Adrsend As Byte                                         'координаты пам€ти
Dim Adrsschet As Byte                                       'координаты пам€ти
Dim Adrs As Byte                                            'координаты пам€ти
Dim Triglsd As Byte                                         'јдрес строки в €чейке


'============== ѕеременные графики
Dim X As Byte
Dim Y As Byte
Dim Xadrs As Byte
Dim Yadrs As Byte
Dim Xost As Byte                                            '¬ыссчитывание координаты отстака X (положение бита в байте)
Dim Yost As Byte                                            'высчитывание остатка координаты Y
Dim Trigstr As Byte                                         'дл€ подсчЄта строки в кластере


For Adrs = 1 To Lsdram                                      'ќчищаем дисплей
   Led(adrs) = 255
Next Adrs

Set Stb_pin                                                 'ƒрыгаем защЄлкой регистров чтоб наверн€ка всЄ сбросить
Reset Stb_pin
X = 0
Y = 0
Triglsd = 0

Config Timer2 = Timer , Prescale = 256                      '«апускаем таймер, он будет рисовать одну строку из четырЄх
On Timer2 Graf
Enable Timer2
Enable Interrupts

Set Oe_pin                                                  '¬ключаем дисплей
Do


For X = 0 To 63                                             'рисуем точки
 For Y = 0 To 15
    Waitms 10
    Call Point(x , Y)
 Next Y
Next X

For Adrs = 1 To Lsdram                                      'очищаем
   Led(adrs) = 255
Next Adrs




  '==================ѕросто тестова€ программа проверки правильности вывода видео данных =================



Loop





Sub Point(byval X1 As Byte , Byval Y1 As Byte )             '–исуем точку

   Xadrs = X1 / 8                                           '“ак как 8 точек в одном слобце, делим и узнаЄм сколько столбцов
   Xadrs = Xadrs * 4                                        '”мнажаем на 4 кластера в столбце

   Xost = X1 Mod 8                                          '¬ыссчитываем пиксель из байта

   Yadrs = Y1 Mod 4                                         'определ€ем кака€ строка в кластере
   Yadrs = Yadrs * Lsdstr                                   'умножаем на длину строки экрана

   Yost = Y1 / 4                                            'высчитываем сколько кластеров в столбце
   Yadrs = Yadrs + Yost                                     'суммируем полученное

   Yadrs = Xadrs + Yadrs                                    'прибавл€ем рассчЄты по X

   Yadrs = Lsdram - Yadrs                                   'вычитаем из общего массива, там почему-то стабильней
   Led(yadrs).xost = 0                                      'рисуем точку

End Sub


Graf:
'=============================  од вывода на дисплей =================================================
'–исуем только одну строку из 4х
  Adrsstart = Lsdstr * Triglsd                              'высчитываем начальный адрес строки
  Incr Adrsstart                                            'ѕрибавл€ем на один из-за проблем в Ѕаскоме в нумерации массива, он не должен начинатс€ с нул€
  Adrsend = Adrsstart + Lsdstr                              'высчитываем конечный адрес строки

  For Adrsschet = Adrsstart To Adrsend                      'ѕеребираем видео пам€ть
          Shiftout Data_pin , Clk_pin , Led(adrsschet)      '¬ывод данных

  Next Adrsschet

  Set Stb_pin                                               'ƒрыгаем защЄлкой регистров и через паузу закрываем (дл€ надЄжности)

  Select Case Triglsd                                       '¬ыбираем адрес строки в €чейке (1-4) - тут проблема, нужна оптимизаци€ кода
      Case 0
         A_pin = 1
         B_pin = 1
         Incr Triglsd
      Case 1
         A_pin = 0
         B_pin = 1
         Incr Triglsd
      Case 2
         A_pin = 1
         B_pin = 0
         Incr Triglsd
      Case 3
         A_pin = 0
         B_pin = 0
         Triglsd = 0
  End Select

  Reset Stb_pin                                             'сбрасываем защЄлку регистров
  '=====================================================================================================
  Return



End


0

28

catalex написал(а):

Ќасколько € понимаю нужно делать что-то типа видео буфера, а только потом выводить...†

¬ предыдущем посте вывод сделал по пиксел€м, не знаю как быстро будет работать, но шрифт можно генерировать в любой точке экрана, главное не уходить за область пам€ти.

0

29

–укожопный исходник
 од:
$regfile = "m328pdef.dat"
$crystal = 16000000
$hwstack = 90
$swstack = 90
$framesize = 90


Dim X As Byte
Dim Y As Byte
Dim S As String * 255
Dim Cl As Byte





Declare Sub Point(byval X As Byte , Byval Y As Byte , Byval Cl As Byte)       'подпрограмма вывода пиксел€
Declare Sub Text(byval X As Byte , Byval Y As Byte , Byval S As String * 25 )       'подпрограмма

'“ут на два сегмента:
Const Lsdram = 65                                           ' оличество панелей (65=1 панель, 129=две панели)  - но почему-то надо чуть больше чтоб небыло утчки пам€ти, по идее 64 и 128 должно быть
'Const Lsdram = 65                                           'Ёто на одну матрицу, но учтите, в цикле координаты X 63 помен€йте на 31
Const Lsdstr = Lsdram / 4                                   '–ассчЄт блоков дл€ вывода графики
Dim Endx As Byte
Dim Endstr As Byte
Endx = Lsdram / 2
Endstr = Lsdram / 11
'ќбычна€ конфигураци€ портов
Config Portd.7 = Output
Config Portb = Output
Oe_pin Alias Portb.4                                        'Ёто дл€ отклчюени€ и включени€ диспле€, можно посадить на таймер и регулировать €ркость.

Set Oe_pin                                                  '¬ключаем дисплей (можно его на таймер поставить дл€ регулировки €ркости)

A_pin Alias Portb.3                                         'јдрес в €чейке
B_pin Alias Portb.2                                         'јдрес в €чейке
Clk_pin Alias Portb.1                                       'строб передачи данных SPI
Stb_pin Alias Portb.0                                       '—троб защЄлки
Data_pin Alias Portd.7                                      '¬ывод данных SPI


Dim Led(200) As Byte                                        'ћассив видео пам€ти
Dim Adrsstart As Byte                                       'координаты пам€ти
Dim Adrsend As Byte                                         'координаты пам€ти
Dim Adrsschet As Byte                                       'координаты пам€ти
Dim Adrs As Byte                                            'координаты пам€ти
Dim Triglsd As Byte                                         'јдрес строки в €чейке











'============== ѕеременные графики
Dim Xadrs As Byte
Dim Yadrs As Byte
Dim Xost As Byte                                            '¬ыссчитывание координаты отстака X (положение бита в байте)
Dim Yost As Byte                                            'высчитывание остатка координаты Y
Dim Trigstr As Byte                                         'дл€ подсчЄта строки в кластере


For Adrs = 1 To Lsdram                                      'ќчищаем дисплей
   Led(adrs) = 255
Next Adrs

Set Stb_pin                                                 'ƒрыгаем защЄлкой регистров чтоб наверн€ка всЄ сбросить
Reset Stb_pin
X = 0
Y = 0
Triglsd = 0

Config Timer2 = Timer , Prescale = 256                      '«апускаем таймер, он будет рисовать одну строку из четырЄх
On Timer2 Graf
Enable Timer2
Enable Interrupts

Set Oe_pin                                                  '¬ключаем дисплей

Dim L As Byte
Dim P As Byte
Dim O As Byte
Dim Txt As String * 255

Do

Txt = Space(10)
Txt = Txt + "–адиаци€: 2мр√.     —ќ2: 450       “емпература воздуха: +18     ¬лажность:       јтмосферное давление: "
Txt = Txt + Space(10)
L = Len(txt)
L = L - 10
For O = 1 To L
   For P = 1 To 6
      S = Mid(txt , O , 11)
      X = 6 - P
      Call Text(x , 0 , S)
      Waitms 100
   Next P
Next O

For Adrs = 1 To Lsdram                                      'очищаем
   Led(adrs) = 255
Next Adrs




  '==================ѕросто тестова€ программа проверки правильности вывода видео данных =================



Loop

Sub Text(x As Byte , Y As Byte , S As String * 255 )        '–иceм текст
Local Txts As String * 1
Local Vrl As Byte
Local S1 As Word
Local S2 As Word

Local Vrw As Word
Local Vrb As Byte
Local Vrs As Byte
Local Vrx As Byte
Local Vry As Byte
Local Vrxb As Byte
Local Vrtxt As Byte                                         'байт строки шрифта
Vrl = Len(s)
If Vrl > Endstr Then Vrl = Endstr
For Vrs = 1 To Vrl
   Txts = Mid(s , Vrs , 1)
   Vrb = Asc(txts)
   Vrb = Vrb - 32
   S1 = Vrb * 6
   S2 = S1 + 5
   Vrxb = 0
   For Vrw = S1 To S2

         Vrtxt = Lookup(vrw , F6x5)
         For Vrb = 0 To 7
               Vry = 6                                      'Vrs * 8
               Vry = Vry - Vrb
               Vry = Y + Vry

               Vrx = Vrs - 1
               Vrx = Vrx * 6
               Vrx = Vrx + X
               Vrx = Vrx + Vrxb


            If Vrtxt.vrb = 1 Then

               If Vrx < Endx Then Call Point(vrx , Vry , 1)

               Else
                  Call Point(vrx , Vry , 0)
            End If
         Next Vrb
          Incr Vrxb
   Next Vrw
Next Vrs
End Sub





Sub Point(x As Byte , Y As Byte , Cl As Byte )              '–исуем точку


   Xadrs = X / 8                                            '“ак как 8 точек в одном слобце, делим и узнаЄм сколько столбцов
   Xadrs = Xadrs * 4                                        '”мнажаем на 4 кластера в столбце

   Xost = X Mod 8                                           '¬ыссчитываем пиксель из байта

   Yadrs = Y Mod 4                                          'определ€ем кака€ строка в кластере
   Yadrs = Yadrs * Lsdstr                                   'умножаем на длину строки экрана

   Yost = Y / 4                                             'высчитываем сколько кластеров в столбце
   Yadrs = Yadrs + Yost                                     'суммируем полученное

   Yadrs = Xadrs + Yadrs                                    'прибавл€ем рассчЄты по X

   Yadrs = Lsdram - Yadrs                                   'вычитаем из общего массива, там почему-то стабильней
   If Yadrs < Lsdram And Yadrs > 0 Then
      Led(yadrs).xost = Not Cl.0                            'рисуем точку
   End If

End Sub


Graf:
'=============================  од вывода на дисплей =================================================
'–исуем только одну строку из 4х
  Adrsstart = Lsdstr * Triglsd                              'высчитываем начальный адрес строки
  Incr Adrsstart                                            'ѕрибавл€ем на один из-за проблем в Ѕаскоме в нумерации массива, он не должен начинатс€ с нул€
  Adrsend = Adrsstart + Lsdstr                              'высчитываем конечный адрес строки

  For Adrsschet = Adrsstart To Adrsend                      'ѕеребираем видео пам€ть
          Shiftout Data_pin , Clk_pin , Led(adrsschet)      '¬ывод данных

  Next Adrsschet

  Set Stb_pin                                               'ƒрыгаем защЄлкой регистров и через паузу закрываем (дл€ надЄжности)

  Select Case Triglsd                                       '¬ыбираем адрес строки в €чейке (1-4) - тут проблема, нужна оптимизаци€ кода
      Case 0
         A_pin = 1
         B_pin = 1
         Incr Triglsd
      Case 1
         A_pin = 0
         B_pin = 1
         Incr Triglsd
      Case 2
         A_pin = 1
         B_pin = 0
         Incr Triglsd
      Case 3
         A_pin = 0
         B_pin = 0
         Triglsd = 0
  End Select

  Reset Stb_pin                                             'сбрасываем заЄлку регистров
  '=====================================================================================================
  Return



End



F6x5:
Fonts:


Data 0 , 0 , 0 , 0 , 0 , 0                                  '
Data 0 , 0 , 95 , 0 , 0 , 0 ' !
Data 0 , 3 , 0 , 3 , 0 , 0 ' ""
Data 20 , 127 , 20 , 127 , 20 , 0 ' #
Data 4 , 42 , 127 , 42 , 16 , 0 ' $
Data 35 , 19 , 8 , 100 , 98 , 0 ' %
Data 54 , 73 , 86 , 32 , 80 , 0 ' &
Data 0 , 3 , 0 , 0 , 0 , 0 '                                 '
Data 0 , 28 , 34 , 65 , 0 , 0
Data 65 , 34 , 28 , 0 , 0 , 0
Data 42 , 28 , 127 , 28 , 42 , 0 ' *
Data 8 , 8 , 62 , 8 , 8 , 0 ' +
Data 0 , 64 , 112 , 48 , 0 , 0 ' ,
Data 8 , 8 , 8 , 8 , 8 , 0 ' -
Data 0 , 0 , 96 , 96 , 0 , 0 ' .
Data 96 , 16 , 8 , 4 , 3 , 0 ' /
Data 62 , 81 , 73 , 69 , 62 , 0 ' 0
Data 0 , 66 , 127 , 64 , 0 , 0 ' 1
Data 98 , 81 , 73 , 73 , 70 , 0 ' 2
Data 34 , 65 , 73 , 73 , 54 , 0 ' 3
Data 24 , 20 , 18 , 17 , 127 , 0 ' 4
Data 39 , 69 , 69 , 69 , 57 , 0 ' 5
Data 62 , 69 , 69 , 69 , 57 , 0 ' 6
Data 1 , 97 , 17 , 9 , 7 , 0 ' 7
Data 54 , 73 , 73 , 73 , 54 , 0 ' 8
Data 14 , 81 , 81 , 81 , 62 , 0 ' 9
Data 0 , 0 , 54 , 54 , 0 , 0 ' :
Data 0 , 64 , 118 , 54 , 0 , 0 ' '
Data 0 , 8 , 20 , 34 , 0 , 0 ' <
Data 20 , 20 , 20 , 20 , 20 , 0 ' =
Data 0 , 34 , 20 , 8 , 0 , 0 ' >
Data 2 , 1 , 81 , 9 , 6 , 0 ' Print
Data 62 , 73 , 85 , 85 , 14 , 0 ' @
Data 124 , 18 , 17 , 18 , 124 , 0 ' A
Data 127 , 73 , 73 , 73 , 54 , 0 ' B
Data 62 , 65 , 65 , 65 , 34 , 0 ' C
Data 127 , 65 , 65 , 34 , 28 , 0 ' D
Data 127 , 73 , 73 , 73 , 65 , 0 ' E
Data 127 , 9 , 9 , 9 , 1 , 0 ' F
Data 62 , 65 , 65 , 81 , 114 , 0 ' G
Data 127 , 8 , 8 , 8 , 127 , 0 ' H
Data 0 , 65 , 127 , 65 , 0 , 0 ' I
Data 32 , 64 , 65 , 63 , 1 , 0 ' J
Data 127 , 8 , 20 , 34 , 65 , 0 ' K
Data 127 , 64 , 64 , 64 , 96 , 0 ' L
Data 127 , 2 , 12 , 2 , 127 , 0 ' M
Data 127 , 2 , 4 , 8 , 127 , 0 ' N
Data 62 , 65 , 65 , 65 , 62 , 0 ' O
Data 127 , 17 , 17 , 17 , 14 , 0 ' P
Data 62 , 65 , 81 , 97 , 126 , 0 ' Q
Data 127 , 9 , 25 , 41 , 70 , 0 ' R
Data 38 , 73 , 73 , 73 , 50 , 0 ' S
Data 1 , 1 , 127 , 1 , 1 , 0 ' T
Data 63 , 64 , 64 , 64 , 63 , 0 ' U
Data 31 , 32 , 64 , 32 , 31 , 0 ' V
Data 63 , 64 , 56 , 64 , 63 , 0 ' W
Data 99 , 20 , 8 , 20 , 99 , 0 ' X
Data 7 , 8 , 112 , 8 , 7 , 0 ' Y
Data 97 , 81 , 73 , 69 , 67 , 0 ' Z
Data 0 , 0 , 127 , 65 , 65 , 0 ' [
Data 3 , 4 , 8 , 16 , 96 , 0 ' \
Data 65 , 65 , 127 , 0 , 0 , 0 ' ]
Data 4 , 2 , 1 , 2 , 4 , 0 ' ^
Data 64 , 64 , 64 , 64 , 64 , 64
Data 1 , 2 , 0 , 0 , 0 , 0 ' `
Data 48 , 74 , 74 , 60 , 64 , 0 ' A
Data 127 , 72 , 72 , 72 , 48 , 0 ' B
Data 56 , 68 , 68 , 68 , 32 , 0 ' C
Data 48 , 72 , 72 , 72 , 127 , 0 ' D
Data 56 , 84 , 84 , 84 , 24 , 0 ' E
Data 0 , 8 , 126 , 9 , 0 , 0 ' F
Data 8 , 84 , 84 , 84 , 56 , 0 ' G
Data 127 , 8 , 4 , 4 , 120 , 0 ' H
Data 0 , 72 , 122 , 64 , 0 , 0 ' I
Data 0 , 32 , 64 , 61 , 0 , 0 ' J
Data 127 , 16 , 16 , 40 , 68 , 0 ' K
Data 0 , 0 , 127 , 0 , 0 , 0 ' L
Data 124 , 4 , 124 , 4 , 120 , 0 ' M
Data 124 , 8 , 4 , 4 , 120 , 0 ' N
Data 56 , 68 , 68 , 68 , 56 , 0 ' O
Data 124 , 20 , 20 , 20 , 8 , 0 ' P
Data 8 , 20 , 20 , 124 , 64 , 0 ' Q
Data 124 , 8 , 4 , 4 , 8 , 0 ' R
Data 72 , 84 , 84 , 84 , 36 , 0 ' S
Data 0 , 4 , 63 , 68 , 0 , 0 ' T
Data 60 , 64 , 64 , 32 , 124 , 0 ' U
Data 28 , 32 , 64 , 32 , 28 , 0 ' V
Data 60 , 64 , 48 , 64 , 60 , 0 ' W
Data 68 , 40 , 16 , 40 , 68 , 0 ' X
Data 12 , 80 , 80 , 80 , 60 , 0 ' Y
Data 68 , 100 , 84 , 76 , 68 , 0 ' Z
Data 0 , 0 , 8 , 54 , 65 , 0 ' {
Data 0 , 0 , 127 , 0 , 0 , 0 ' |
Data 65 , 54 , 8 , 0 , 0 , 0 ' }
Data 8 , 4 , 8 , 4 , 0 , 0 ' ~
Data 0 , 0 , 0 , 0 , 0 , 0 ' 
Data 0 , 0 , 0 , 0 , 0 , 0 ' А
Data 0 , 0 , 0 , 0 , 0 , 0 ' Б
Data 0 , 0 , 0 , 0 , 0 , 0 ' В
Data 0 , 0 , 0 , 0 , 0 , 0 ' Б
Data 0 , 0 , 0 , 0 , 0 , 0 ' Д
Data 64 , 0 , 64 , 0 , 64 , 0 ' Е
Data 0 , 0 , 0 , 0 , 0 , 0 ' Ж
Data 0 , 0 , 0 , 0 , 0 , 0 ' З
Data 20 , 62 , 85 , 85 , 65 , 0 ' И
Data 19 , 8 , 100 , 2 , 96 , 0 ' Й
Data 0 , 0 , 0 , 0 , 0 , 0 ' К
Data 0 , 0 , 0 , 0 , 0 , 0 ' Л
Data 0 , 0 , 0 , 0 , 0 , 0 ' М
Data 0 , 0 , 0 , 0 , 0 , 0 ' Н
Data 0 , 0 , 0 , 0 , 0 , 0 ' О
Data 0 , 0 , 0 , 0 , 0 , 0 ' П
Data 0 , 0 , 0 , 0 , 0 , 0 ' А
Data 0 , 0 , 0 , 0 , 0 , 0 ' С
Data 0 , 0 , 0 , 0 , 0 , 0 ' Т
Data 0 , 0 , 0 , 0 , 0 , 0 ' У
Data 0 , 0 , 0 , 0 , 0 , 0 ' Ф
Data 0 , 24 , 60 , 60 , 24 , 0 ' Х
Data 0 , 0 , 0 , 0 , 0 , 0 ' Ц
Data 0 , 0 , 0 , 0 , 0 , 0 ' Ч
Data 0 , 60 , 36 , 36 , 60 , 0 ' Ш
Data 0 , 0 , 0 , 0 , 0 , 0 ' Щ
Data 0 , 0 , 0 , 0 , 0 , 0 ' К
Data 0 , 0 , 0 , 0 , 0 , 0 ' Ы
Data 0 , 0 , 0 , 0 , 0 , 0 ' М
Data 0 , 0 , 0 , 0 , 0 , 0 ' Н
Data 0 , 0 , 0 , 0 , 0 , 0 ' О
Data 0 , 0 , 0 , 0 , 0 , 0 ' П
Data 0 , 0 , 0 , 0 , 0 , 0 ' †
Data 0 , 0 , 0 , 0 , 0 , 0 ' °
Data 0 , 0 , 0 , 0 , 0 , 0 ' °
Data 0 , 0 , 0 , 0 , 0 , 0 ' £
Data 0 , 90 , 36 , 36 , 90 , 0 ' §
Data 0 , 0 , 0 , 0 , 0 , 0 ' •
Data 0 , 0 , 119 , 0 , 0 , 0 ' ¶
Data 0 , 0 , 0 , 0 , 0 , 0 ' І
Data 124 , 85 , 84 , 85 , 84 , 0 ' ®
Data 62 , 65 , 93 , 85 , 65 , 62 ' ©
Data 0 , 0 , 0 , 0 , 0 , 0 ' ™
Data 8 , 20 , 42 , 20 , 34 , 0 ' Ђ
Data 2 , 2 , 2 , 2 , 14 , 0 ' ђ
Data 0 , 0 , 0 , 0 , 0 , 0 ' ≠
Data 0 , 0 , 0 , 0 , 0 , 0 ' Ѓ
Data 0 , 0 , 0 , 0 , 0 , 0 ' ѓ
Data 6 , 9 , 9 , 6 , 0 , 0 ' ∞
Data 0 , 36 , 46 , 36 , 0 , 0 ' ±
Data 0 , 0 , 0 , 0 , 0 , 0 ' ≤
Data 0 , 0 , 0 , 0 , 0 , 0 ' ≤
Data 0 , 0 , 0 , 0 , 0 , 0 ' •
Data 252 , 32 , 64 , 64 , 60 , 0 ' µ
Data 4 , 14 , 126 , 2 , 126 , 0 ' ґ
Data 0 , 0 , 8 , 0 , 0 , 0 ' Ј
Data 56 , 85 , 84 , 85 , 24 , 0 ' ®
Data 120 , 16 , 32 , 126 , 2 , 0 ' є
Data 0 , 0 , 0 , 0 , 0 , 0 ' ™
Data 34 , 20 , 42 , 20 , 8 , 0 ' ї
Data 0 , 0 , 0 , 0 , 0 , 0 ' £
Data 0 , 0 , 0 , 0 , 0 , 0 ' љ
Data 0 , 0 , 0 , 0 , 0 , 0 ' љ
Data 0 , 2 , 120 , 2 , 0 , 0 ' ѓ
Data 124 , 18 , 17 , 18 , 124 , 0 ' ј
Data 127 , 73 , 73 , 73 , 48 , 0 ' Ѕ
Data 127 , 73 , 73 , 73 , 54 , 0 ' ¬
Data 127 , 1 , 1 , 1 , 1 , 0 ' √
Data 64 , 126 , 65 , 127 , 64 , 0 ' ƒ
Data 127 , 73 , 73 , 73 , 65 , 0 ' ≈
Data 119 , 8 , 126 , 8 , 119 , 0 ' ∆
Data 34 , 65 , 73 , 73 , 54 , 0 ' «
Data 127 , 32 , 16 , 8 , 127 , 0 ' »
Data 127 , 32 , 17 , 8 , 127 , 0 ' …
Data 127 , 8 , 20 , 34 , 65 , 0 '  
Data 64 , 62 , 1 , 1 , 127 , 0 ' Ћ
Data 127 , 2 , 4 , 2 , 127 , 0 ' ћ
Data 127 , 8 , 8 , 8 , 127 , 0 ' Ќ
Data 62 , 65 , 65 , 65 , 62 , 0 ' ќ
Data 127 , 1 , 1 , 1 , 127 , 0 ' ѕ
Data 127 , 9 , 9 , 9 , 6 , 0 ' –
Data 62 , 65 , 65 , 65 , 34 , 0 ' —
Data 1 , 1 , 127 , 1 , 1 , 0 ' “
Data 7 , 72 , 72 , 72 , 63 , 0 ' ”
Data 12 , 18 , 127 , 18 , 12 , 0 ' ‘
Data 99 , 20 , 8 , 20 , 99 , 0 ' ’
Data 63 , 32 , 32 , 63 , 96 , 0 ' ÷
Data 7 , 8 , 8 , 8 , 127 , 0 ' „
Data 127 , 64 , 124 , 64 , 127 , 0 ' Ў
Data 63 , 32 , 60 , 32 , 63 , 96 ' ў
Data 1 , 127 , 72 , 72 , 48 , 0 ' Џ
Data 127 , 72 , 48 , 0 , 127 , 0 ' џ
Data 127 , 72 , 72 , 72 , 48 , 0 ' №
Data 34 , 65 , 73 , 73 , 62 , 0 ' Ё
Data 127 , 8 , 62 , 65 , 62 , 0 ' ё
Data 70 , 41 , 25 , 9 , 127 , 0 ' я
Data 32 , 84 , 84 , 84 , 120 , 0 ' ј
Data 120 , 84 , 84 , 84 , 32 , 0 ' Ѕ
Data 124 , 84 , 84 , 84 , 40 , 0 ' ¬
Data 124 , 4 , 4 , 4 , 4 , 0 ' √
Data 8 , 84 , 84 , 84 , 56 , 0 ' ƒ
Data 56 , 84 , 84 , 84 , 24 , 0 ' ≈
Data 108 , 16 , 120 , 16 , 108 , 0 ' ∆
Data 40 , 68 , 84 , 84 , 40 , 0 ' «
Data 60 , 64 , 64 , 64 , 124 , 0 ' »
Data 60 , 64 , 68 , 64 , 124 , 0 ' …
Data 124 , 16 , 16 , 40 , 68 , 0 '  
Data 64 , 56 , 4 , 4 , 124 , 0 ' Ћ
Data 124 , 8 , 16 , 8 , 124 , 0 ' ћ
Data 124 , 16 , 16 , 16 , 124 , 0 ' Ќ
Data 56 , 68 , 68 , 68 , 56 , 0 ' ќ
Data 124 , 4 , 4 , 4 , 124 , 0 ' ѕ
Data 124 , 20 , 20 , 20 , 8 , 0 ' –
Data 56 , 68 , 68 , 68 , 40 , 0 ' —
Data 124 , 4 , 124 , 4 , 120 , 0 ' “
Data 12 , 80 , 80 , 80 , 60 , 0 ' ”
Data 8 , 20 , 124 , 20 , 8 , 0 ' ‘
Data 68 , 40 , 16 , 40 , 68 , 0 ' ’
Data 28 , 32 , 32 , 60 , 96 , 0 ' ÷
Data 12 , 16 , 16 , 16 , 124 , 0 ' „
Data 60 , 64 , 120 , 64 , 124 , 0 ' Ў
Data 28 , 32 , 56 , 32 , 60 , 96 ' ў
Data 4 , 124 , 80 , 80 , 32 , 0 ' Џ
Data 124 , 80 , 32 , 0 , 124 , 0 ' џ
Data 124 , 80 , 80 , 80 , 32 , 0 ' №
Data 40 , 68 , 84 , 84 , 56 , 0 ' Ё
Data 124 , 16 , 56 , 68 , 56 , 0 ' ё
Data 8 , 84 , 52 , 20 , 124 , 0                             ' я


+4

30

¬ подпрограмме вывода точки деление нужно заменить сдвигом. Ёто даст значительное ускорение.
Ќиже пример делени€ на 2. ≈сли нужно на другое число (степеь двойки), то ещЄ нужно указать дл€ Shift дополнительный параметр, на сколько байт сдвигать.
¬ хелпе описание есть.

 од:
Shift _kolzo , Right                                    '«амен€ем деление на сдвиг... _kolzo = _kolzo / 2


ј вообще желательно этот участок кода переписать на ассемблер.

+2


¬ы здесь » ѕрограммирование ATMEL в BASCOM. » ¬опросы - ответы » Led матрица 32*16 дл€ бегущей строки