Администрация форума не несёт ответственности за достоверность информации и оставляет за собой право редактировать или в особых случаях даже удалять посты без предупреждения. Спасибо за понимание.

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

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Программирование ATMEL в BASCOM. » Дисплеи и индикация » Led матрица 32*16 для бегущей строки


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

Сообщений 1 страница 30 из 61

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

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

+3


Вы здесь » Программирование ATMEL в BASCOM. » Дисплеи и индикация » Led матрица 32*16 для бегущей строки