Led матрица 32*16 для бегущей строки
Сообщений 1 страница 30 из 61
Поделиться22019-10-16 17:50:50
Что то на официальном форуме было, а также на bascomforum.de
Поделиться42019-10-16 18:27:14
что-то искал по ним, всё что есть: https://transfiles.ru/ikxxa
Поделиться52019-10-16 18:40:37
Большое спасибо всем кто откликнулся, буду пытаться изучить.
Поделиться62019-10-19 13:36:36
Здравствуйте, подключил к 8 atmega, по примеру который прислал Александр. Получилось вот что...
$regfile = "m8def.dat" '
$crystal = 7372800
$hwstack = 64
$swstack = 40
$framesize = 80$baud = 9600
Config Portb = Output
Config Portc = OutputDatapin Alias Portc.0
Clockpin Alias Portc.2
Latchpin Alias Portc.1Pin_bit0 Alias Portb.3
Pin_bit1 Alias Portb.4
Set Portb.5Dim 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
' NextRestore Dta1
For Temp = 1 To 64
Read Temp2 ' Читаем из блока данных
X_64(temp) = Temp2 ' и помещаем в массив последовательно, как считали
NextStart_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_byteGoto 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
Поделиться82019-10-21 21:32:50
Ну вы же вывели выше текст
Поделиться92019-10-21 22:08:20
поясню. Не он текст вывел, а моя программа.
В ней, в dat разделе, на веки вечные вделана эта надпись.
Символ "рисуется" в этой матрице весьма специфично... Я просто сделал: в Пеинте сделал надпись, сохранил как bmp моонохромную картинку, потом программой (есть в архиве выше) превратил это в последовательность байт (для Си, но самостоятельно заменил 0x## на принятое в Баском), вручную поставил какие байты когда выдавать.
То есть, никакого "написал" и тебе отобразилось не получится.
или писать для ПК конвертер, который типовой шрифт "пересортирует" под эту матрицу, или делать "в лоб": для отображения "1" вывести такую-то последовательность байт, для "2" - такую и так далее.
Поделиться102019-10-22 00:27:52
Ясно. Ну ..делать буфер, брать шрифт, и выводить с помощью математики..
Поделиться112019-11-08 17:39:46
Здравствуйте, шрифт 8*16 выводить получилось, но хотелось бы 6*8 выводить в две строки на одном модуле, только тут для меня есть загвоздка, которую не могу победить уже дней 5
. Шрифт в массиве находится в байтах. Если я создаю шрифт 6*8 и вывожу на дисплей, то у меня пробелы большие между символами. Насколько я понимаю нужно делать что-то типа видео буфера, а только потом выводить... Но опять при построении картинки в буфере проблема тех же 8 бит. Как быть, может есть у кого мысли на сей счёт. Может кто-то готов взяться помочь за материальное вознаграждение?
Поделиться122019-11-08 18:34:42
Маски, сдвиги вам в помощь.
Поделиться132019-11-08 18:46:40
Юрий, у меня проблема собственно заключается в том что нужно к байту одной строки 1 знака прибавить 2 бита первой строки от второго знака. Искал на форуме подобное, но не нашёл. Опыта в программировании не много, а задача не простая для меня. Если не затруднит, может есть какие-то примеры масок.
Поделиться142019-11-08 19:17:41
На форуме bascomforum.de нашёл проект на P10 модулях цветных, но там очень исходник сложный.
$regfile = "m128def.dat"
$crystal = 12000000 : $hwstack = 64 : $swstack = 64 : $framesize = 80Ddrd = &B01000000
Ddrb = &B01001110
Ddre = &B01110000Shift_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 InterruptsDim 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 ByteRed = 1 : Green = 2 : Orange = 3 : Invisible = 4
'**************************************************
'user settings
Inverting = 0
'**************************************************'$sim
Brightness = 0 'max brightness
Gosub Clear_memoryColor = Green
Inv = 0
Speed = 10Do
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 1Color = Green
Text = " 12:26"
Gosub Scroll_text_upper
Gosub Shift_left_upper ' To center the text
Wait 1Color = Red
Text = " 24.11"
Gosub Scroll_text_lower
Gosub Shift_left_lower ' To center the text
Wait 1Loop
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
ReturnShift_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
ReturnScroll_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
ReturnShift_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
ReturnSet_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
ReturnByte_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 , 60Clear_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
ReturnShift_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
ReturnShift_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
ReturnRise_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_1Waitms 63
Next N_3Return
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_1Waitms 63
Next N_3Return
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_1Waitms 40
Next NReturn
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_1Waitms 40
Next NReturn
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_1Waitms 40
Next NReturn
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_1Waitms 40
Next NReturn
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
ReturnScroll_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
ReturnFont_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 '9Font_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 '&H39Font_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
Поделиться152019-11-08 19:57:46
я примерно такое делаю в своём контроллере, правда, вывожу на GLCD
напомните через неделю, когда вернусь домой.
Поделиться162019-11-08 20:08:23
Спасибо, буду ждать, через неделю напишу.
Отредактировано catalex (2019-11-08 20:14:55)
Поделиться182019-11-10 12:43:24
У вас немного другая, у меня монохромная. По расположению контактов примерно тоже самое, у Вас только одним выводом больше. Чуть позже выложу свой исходник, приведу его маленько в порядок. Не правильно у меня получается overley раскладывать переменную по байтам. Может дадите совет. 
Поделиться192019-11-10 20:21:29
Поделиться202019-11-11 02:17:42
Вот жуть то какая!!!! Она же с динамичной индикацией!!!!
То-есть памяти в панели всего да ничего - 128 байт, по этому надо их загонять в цикле 4 раза для полного кадра 
Отредактировано Ev3658 (2019-11-11 02:17:52)
Поделиться212019-11-11 12:10:03
Все эти матрицы спроектированы таким образом, чтобы было: дешевое производство, малое потребление (на сколько это возможно). Это всё накладывает на обратную сторону медали кучу других проблем как, производительное железо/контроллер (т.к. всё обслуживание ложится на его плечи). Это не WS2812. 
Поделиться222019-11-11 14:48:37
Блин, у меня не та заполняемость что на картинке.
Кому интересно, вот, проверьте:
Код:$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)
Поделиться232019-11-12 03:14:35
Не весь мозг ещё пропил
Видео: 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
Поделиться242019-11-12 10:29:18
Медленно как-то работает.
Поделиться252019-11-12 12:00:14
Медленно как-то работает.
Там замедлитель:
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Поделиться262019-11-12 12:35:25
Обратите внимание как выводится видео информация:
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)
Поделиться272019-11-14 03:15:02
Вообщем, правда, признаюсь. Тут 99,9% логики и 0,1 процент пока не разбирался, но работает.
То-есть шрифт уже можно выводить пикселями.
Нужна оптимизация адресации 4х строк в кластере, может ещё чего умное бы
Видео: 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
Поделиться282019-11-14 14:23:36
Насколько я понимаю нужно делать что-то типа видео буфера, а только потом выводить...
В предыдущем посте вывод сделал по пикселям, не знаю как быстро будет работать, но шрифт можно генерировать в любой точке экрана, главное не уходить за область памяти.
Поделиться292019-11-15 02:24:30
Код:$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 ' Я
Поделиться302019-11-15 10:43:31
В подпрограмме вывода точки деление нужно заменить сдвигом. Это даст значительное ускорение.
Ниже пример деления на 2. Если нужно на другое число (степеь двойки), то ещё нужно указать для Shift дополнительный параметр, на сколько байт сдвигать.
В хелпе описание есть.
Shift _kolzo , Right 'Заменяем деление на сдвиг... _kolzo = _kolzo / 2
А вообще желательно этот участок кода переписать на ассемблер.





