приветствую!
а библиотеки SSD1306 поддерживают PSET?
нет возможности проверить самостоятельно
хочу сделать типа термометра и отображать значения в виде графика
SSD1306. Можно ли поставить отдельную точку через PSET?
Сообщений 1 страница 7 из 7
Поделиться12026-04-16 10:12:20
Поделиться22026-04-16 15:21:59
нет возможности проверить самостоятельно
В Протеусе прогнать тоже нет возможности? Такой дисплей, по идее, там должен быть.
Поделиться32026-04-16 15:44:28
в дисплее нет такой возможности.
от силы можно вывести вертикальную строчку из 8 точек (байт)
Но еще не пробовал.
я так понимаю, высчитать нужный байт, в который надо поставить/убрать точку,
считать его, выполнить логическую операцию, загрузить обратно
Только так.
ps
и СЧИТАТЬ ИЗ дисплея тоже нельзя.
Отредактировано Александр Д. (2026-04-18 13:05:22)
Поделиться42026-04-17 11:46:23
раскурил тему полностью
ОЧЕНЬ неприятно впечатлён какчеством документации! Неверно указаны режимы по умолчанию, ошибки в примере инициализации...
В сети гуляет как минимум 7 версий библиотек. ВСЕ c ляпами.
Та, что на сайте Баскома, рабочая, но медленная (видимо, не поняли метод передачи массива и каждый байт шлют в виде пакета: адрес дисплея, команда, данные.
Причешу и выложу без всяких библиотек, потом хочу перенести на STC 8051
Отредактировано Александр Д. (2026-04-17 11:46:55)
Поделиться52026-04-17 12:24:44
Шрифт 8*8, ТОЛЬКО символы до 96 (ходовые символы, БОЛЬШИЕ латинские) и БОЛЬШИЕ русские.
Шрифт весьма жирный и неплохо читается. Брал тут. Кто делал - не знаю, но ему благодарность ))
$regfile = "m16adef.dat" '
$crystal = 7372800 '
$hwstack = 128 '
$swstack = 128 '
$framesize = 128 '
Dim Symbol$ As String * 1
Dim Q , H , Len_msg , Dat_oled As Byte
Dim Tmp_w As Word
Declare Sub Init_oled
Declare Sub Cls_oled
Declare Sub Oled(byval Text$ As String * 16 , Byval X_oled As Byte , Byval Y_oled As Byte)
Declare Sub Cmd_oled(byval Command_to_oled As Byte)
Const Contrast = &HFF '00-FF contrast
Const Address_i2c_oled = &H78
Const Data_mode_oled = &H40
Const Command_mode_oled = &H80
Led Alias Portd.6 : Config Led = Output
Config Sda = Portc.7
Config Scl = Portc.6
Config I2cdelay = 1
I2cinit : Waitms 5
Call Init_oled
Call Cls_oled
'Call Oled( "H" , 1 , 1)
'Call Oled( "H" , 8 , 2)
'Call Oled( "H" , 15 , 8)
'End
Call Oled( "HELLO MY FRIEND!" , 1 , 1)
Call Oled( "17-04-2026" , 0 , 2)
Call Oled( "@#^ ПРОВЕРКА [\]" , 1 , 5)
Call Oled( "АБВГДЕЖЗИЙКЛМНОП" , 1 , 7)
Call Oled( "РСТУФХЦЧШЩЪЫЬЭЮЯ" , 1 , 8)
Waitms 2000
Cmd_oled(&Ha7) ' инверсный дисплей [A7:инверсный]
Waitms 4000
Cmd_oled(&Ha6) ' Нормальный дисплей [A6:нормальный]
Waitms 2000
Call Cls_oled
Call Oled( "A" , 1 , 1)
Call Oled( "B" , 2 , 2)
Call Oled( "C" , 3 , 1)
Call Oled( "D" , 4 , 2)
Call Oled( "E" , 5 , 1)
Call Oled( "F" , 6 , 2)
Call Oled( "G" , 7 , 1)
Call Oled( "H" , 8 , 2)
Call Oled( "0123456789ABCDEF" , 1 , 4)
End
'---------------------------------------------------------------------------------------
Sub Oled(byval Text$ As String * 16 , Byval X_oled As Byte , Byval Y_oled As Byte)
Y_oled = Y_oled + 175 ' Page Start (Y) 176 hB0-hB7
X_oled = X_oled - 1
X_oled = X_oled * 8 ' column start (x)
Dat_oled = X_oled
Dat_oled = Dat_oled And &B_0000_1111 ' Обнулим СТАРШИЕ 4 бита
Shift X_oled , Right , 4 ' Сместим старшие 4 бита вправо
X_oled = X_oled Or &B_0001_0000 ' и установим 4й бит
I2cstart
I2cwbyte Address_i2c_oled ' Адрес Дисплея, для записи
I2cwbyte 0 ' Command_mode_oled
I2cwbyte Y_oled ' start page address (Y) 176-183 hB0-hB7
I2cwbyte X_oled ' column start address (x) Верхний нибл
I2cwbyte Dat_oled ' column start address (x) Нижний нибл
I2cstop
I2cstart
I2cwbyte Address_i2c_oled ' Адрес Дисплея, для записи
I2cwbyte Data_mode_oled ' 40h = следом идёт много байт данных
Len_msg = Len(text$)
For Q = 1 To Len_msg
Symbol$ = Mid(text$ , Q , 1)
H = Asc(symbol$) - 32
If H > 63 Then H = H - 97 ' Убрали из таблицы маленькие английские и русские
Tmp_w = H * 8
For H = 1 To 8
Dat_oled = Lookup(tmp_w , Font8x8)
I2cwbyte Dat_oled
Incr Tmp_w
Next
Next
I2cstop
End Sub
'---------------------------------------------------------------------------------------
Sub Cls_oled 'OLED RESET, Проснись, удали всё
I2cstart
I2cwbyte Address_i2c_oled
I2cwbyte Data_mode_oled ' пакет данных
For Tmp_w = 0 To 1023
I2cwbyte &H00 ' отправить "пустой столбец"
Next
I2cstop
End Sub
'---------------------------------------------------------------------------------------
Sub Cmd_oled(byval Command_to_oled As Byte)
I2cstart
I2cwbyte Address_i2c_oled
I2cwbyte Command_mode_oled
I2cwbyte Command_to_oled
I2cstop
End Sub
'---------------------------------------------------------------------------------------
Sub Init_oled ' OLED initialisation
I2cstart
I2cwbyte Address_i2c_oled
I2cwbyte &HAE 'DISPLAY OFF
I2cwbyte &HD5 'SET DISPLAY CLOCK DIV
I2cwbyte &H80 'ratio 0x80
I2cwbyte &H00 'SET MULTIPLEX
I2cwbyte &H3F ' 1f 128x32
I2cwbyte &HD3 'SET DISPLAY OFFSET (No Offset).
I2cwbyte &H00
I2cwbyte &H40 ' Set Display Start Line to 0
I2cwbyte &H8D 'CHARGE PUMP
I2cwbyte &H14 'vccstate 14
I2cwbyte &H20 'MEMORY MODE
I2cwbyte &H00 ' Horizontal Addressing Mode
I2cwbyte &HA1 'A0 upside down SEGREMAP
I2cwbyte &HC8 'COM SCAN DEC
I2cwbyte &HDA 'SET COM PINS
I2cwbyte &H12 ' 02 128x32 12
I2cwbyte &H81 'SET CONTRAST
I2cwbyte Contrast 'value 1-->256
I2cwbyte &HD9 'SET PRECHARGE
I2cwbyte &HF1 'vccstate f1
I2cwbyte &HDB 'SET VCOM DETECT
I2cwbyte &H40 ' Set Display Start Line
I2cwbyte &HA4 ' DISPLAY ALL ON_RESUME (Entire Display ON)
I2cwbyte &HA6 ' NORMAL DISPLAY (Inverse Display = A7h)
I2cwbyte &HAF ' Display ON
I2cstop
End Sub
'---------------------------------------------------------------------------------------
Font8x8: ' Символы записаны ВЕРТИКАЛЬНО
Data 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0
Data 0 , 6 , 95 , 95 , 6 , 0 , 0 , 0 ' !
Data 0 , 7 , 7 , 0 , 7 , 7 , 0 , 0 ' "
Data 20 , 127 , 127 , 20 , 127 , 127 , 20 , 0 ' #
Data 0 , 36 , 46 , 107 , 107 , 58 , 18 , 0 ' $
Data 70 , 102 , 48 , 24 , 12 , 102 , 98 , 0 ' %
Data 48 , 122 , 79 , 93 , 55 , 122 , 72 , 0 ' &
Data 0 , 4 , 7 , 3 , 0 , 0 , 0 , 0 ' '
Data 0 , 0 , 0 , 28 , 62 , 99 , 65 , 0 ' (
Data 0 , 65 , 99 , 62 , 28 , 0 , 0 , 0 ' )
Data 8 , 42 , 62 , 28 , 62 , 42 , 8 , 0 ' *
Data 0 , 8 , 8 , 62 , 62 , 8 , 8 , 0 ' +
Data 0 , 128 , 224 , 96 , 0 , 0 , 0 , 0 ' ,
Data 0 , 8 , 8 , 8 , 8 , 8 , 8 , 0 ' -
Data 0 , 0 , 96 , 96 , 0 , 0 , 0 , 0 ' .
Data 96 , 48 , 24 , 12 , 6 , 3 , 1 , 0 ' /
Data 62 , 127 , 89 , 77 , 127 , 62 , 0 , 0 ' 0
Data 66 , 66 , 127 , 127 , 64 , 64 , 0 , 0 ' 1
Data 98 , 115 , 89 , 73 , 79 , 70 , 0 , 0 ' 2
Data 34 , 99 , 73 , 73 , 127 , 54 , 0 , 0 ' 3
Data 24 , 28 , 22 , 19 , 127 , 127 , 0 , 0 ' 4
Data 39 , 103 , 69 , 69 , 125 , 57 , 0 , 0 ' 5
Data 60 , 126 , 75 , 73 , 121 , 48 , 0 , 0 ' 6
Data 1 , 97 , 113 , 25 , 15 , 7 , 0 , 0 ' 7
Data 54 , 127 , 73 , 73 , 127 , 54 , 0 , 0 ' 8
Data 6 , 79 , 73 , 105 , 63 , 30 , 0 , 0 ' 9
Data 0 , 0 , 54 , 54 , 0 , 0 , 0 , 0 ' :
Data 0 , 64 , 118 , 54 , 0 , 0 , 0 , 0 ' ;
Data 0 , 8 , 28 , 54 , 99 , 65 , 0 , 0 ' <
Data 0 , 20 , 20 , 20 , 20 , 20 , 20 , 0 ' =
Data 0 , 0 , 65 , 99 , 54 , 28 , 8 , 0 ' >
Data 0 , 2 , 3 , 81 , 89 , 15 , 6 , 0 ' ?
Data 62 , 127 , 65 , 93 , 85 , 23 , 30 , 0 ' @
Data 124 , 126 , 19 , 19 , 126 , 124 , 0 , 0 ' A
Data 127 , 127 , 73 , 73 , 127 , 54 , 0 , 0 ' B
Data 28 , 62 , 99 , 65 , 65 , 99 , 34 , 0 ' C
Data 127 , 127 , 65 , 65 , 34 , 28 , 0 , 0 ' D
Data 127 , 127 , 73 , 73 , 65 , 65 , 0 , 0 ' E
Data 127 , 127 , 9 , 9 , 1 , 3 , 0 , 0 ' F
Data 28 , 62 , 99 , 65 , 81 , 115 , 50 , 0 ' G
Data 127 , 127 , 8 , 8 , 127 , 127 , 0 , 0 ' H
Data 0 , 65 , 127 , 127 , 65 , 0 , 0 , 0 ' I
Data 48 , 112 , 64 , 65 , 127 , 63 , 1 , 0 ' J
Data 127 , 127 , 8 , 28 , 119 , 99 , 0 , 0 ' K
Data 127 , 127 , 64 , 64 , 64 , 112 , 0 , 0 ' L
Data 127 , 127 , 6 , 12 , 6 , 127 , 127 , 0 ' M
Data 127 , 127 , 6 , 12 , 24 , 127 , 127 , 0 ' N
Data 28 , 62 , 99 , 65 , 99 , 62 , 28 , 0 ' O
Data 127 , 127 , 9 , 9 , 15 , 6 , 0 , 0 ' P
Data 62 , 127 , 65 , 81 , 35 , 94 , 0 , 0 ' Q
Data 127 , 127 , 25 , 57 , 111 , 70 , 0 , 0 ' R
Data 38 , 71 , 77 , 89 , 121 , 50 , 0 , 0 ' S
Data 1 , 1 , 127 , 127 , 1 , 1 , 0 , 0 ' T
Data 63 , 127 , 64 , 64 , 127 , 63 , 0 , 0 ' U
Data 31 , 63 , 96 , 96 , 63 , 31 , 0 , 0 ' V
Data 127 , 127 , 48 , 28 , 48 , 127 , 127 , 0 ' W
Data 99 , 119 , 28 , 8 , 28 , 119 , 99 , 0 ' X
Data 7 , 15 , 120 , 120 , 15 , 7 , 0 , 0 ' Y
Data 97 , 113 , 89 , 77 , 71 , 67 , 65 , 0 ' Z
Data 0 , 127 , 127 , 65 , 65 , 0 , 0 , 0 ' [
Data 1 , 3 , 6 , 12 , 24 , 48 , 96 , 0 ' \
Data 0 , 65 , 65 , 127 , 127 , 0 , 0 , 0 ' ]
Data 8 , 12 , 6 , 3 , 6 , 12 , 8 , 0 ' ^
Data 124 , 126 , 19 , 17 , 17 , 127 , 127 , 0 ' А
Data 127 , 127 , 73 , 73 , 121 , 113 , 0 , 0 ' Б
Data 127 , 127 , 73 , 73 , 127 , 54 , 0 , 0 ' В
Data 127 , 127 , 1 , 1 , 3 , 3 , 0 , 0 ' Г
Data 96 , 56 , 62 , 35 , 33 , 63 , 63 , 96 ' Д
Data 127 , 127 , 73 , 73 , 65 , 97 , 0 , 0 ' Е
Data 99 , 119 , 28 , 127 , 28 , 119 , 99 , 0 ' Ж
Data 34 , 99 , 73 , 73 , 127 , 54 , 0 , 0 ' З
Data 127 , 127 , 48 , 24 , 12 , 127 , 127 , 0 ' И
Data 127 , 126 , 49 , 25 , 12 , 127 , 127 , 0 ' Й
Data 127 , 127 , 8 , 28 , 54 , 99 , 65 , 0 ' К
Data 64 , 124 , 126 , 3 , 1 , 127 , 127 , 0 ' Л
Data 127 , 127 , 6 , 28 , 6 , 127 , 127 , 0 ' М
Data 127 , 127 , 8 , 8 , 8 , 127 , 127 , 0 ' Н
Data 62 , 127 , 65 , 65 , 65 , 127 , 62 , 0 ' О
Data 127 , 127 , 1 , 1 , 1 , 127 , 127 , 0 ' П
Data 127 , 127 , 9 , 9 , 9 , 15 , 6 , 0 ' Р
Data 28 , 62 , 99 , 65 , 65 , 99 , 34 , 0 ' С
Data 3 , 1 , 127 , 127 , 1 , 3 , 0 , 0 ' Т
Data 7 , 79 , 72 , 72 , 72 , 127 , 63 , 0 ' У
Data 14 , 27 , 17 , 127 , 17 , 27 , 14 , 0 ' Ф
Data 99 , 119 , 28 , 8 , 28 , 119 , 99 , 0 ' Х
Data 127 , 127 , 64 , 64 , 127 , 255 , 192 , 0 ' Ц
Data 7 , 15 , 8 , 8 , 8 , 127 , 127 , 0 ' Ч
Data 127 , 127 , 64 , 127 , 64 , 127 , 127 , 0 ' Ш
Data 127 , 127 , 64 , 127 , 64 , 127 , 255 , 192 ' Щ
Data 3 , 127 , 127 , 72 , 72 , 120 , 48 , 0 ' Ъ
Data 127 , 127 , 72 , 72 , 120 , 0 , 127 , 0 ' Ы
Data 127 , 127 , 72 , 72 , 120 , 48 , 0 , 0 ' Ь
Data 34 , 65 , 73 , 73 , 107 , 62 , 28 , 0 ' Э
Data 127 , 127 , 8 , 62 , 65 , 65 , 62 , 0 ' Ю
Data 70 , 111 , 57 , 25 , 25 , 127 , 127 , 0 ' Я
Отредактировано Александр Д. (2026-04-17 12:34:32)
Поделиться62026-04-17 12:25:34
потом попробую сделать что-то типа самописца, благо могу вывести вертикальную строчку в любое место экрана (кратно позициям, конечно)
Отредактировано Александр Д. (2026-04-17 12:45:36)
Поделиться72026-04-18 13:03:18
$regfile = "m16adef.dat" '
$crystal = 7372800 '
$hwstack = 128 '
$swstack = 128 '
$framesize = 128 '
Dim Temp , Datchik , Dlitelnost_nazhatiya As Byte
Dim Temperatura_opornaya , Znak , 1wire_dat(9) As Byte
Dim Gradusy_sng As Single
Const T_minusovaya = 123
Dim Symbol$ As String * 1
Dim Q , H , Len_msg , Dat_oled As Byte
Dim Tmp_w As Word
Dim My_dat , Vremya , Nagrev , Uroven , Tmp , Tmp_2 As Byte
Dim T_min , T_max As Byte
Declare Sub Init_oled
Declare Sub Cls_oled
Declare Sub Oled(byval Text$ As String * 16 , Byval X_oled As Byte , Byval Y_oled As Byte)
Declare Sub Cmd_oled(byval Command_to_oled As Byte)
Declare Sub Stolb_oled(byval Stolb As Byte , Byval X_oled As Byte , Byval Y_oled As Byte)
Const Address_i2c_oled = &H78
Const Data_mode_oled = &H40
Const Contrast = &HFF '00-FF contrast
Led Alias Portd.6 : Config Led = Output
1wire_in Alias Pind.5 : 1wire_out Alias Portd.5 'на эту ножку DS18B20 и 4,7 ком к +5v
Config 1wire = 1wire_out
Gosub Init_18b20 ' Инициализация цифрового термометра ds18b20 (помещение)
T_min = 255
T_max = 0
Config Sda = Portc.7
Config Scl = Portc.6
Config I2cdelay = 1
I2cinit : Waitms 5
Do
Call Init_oled
Call Cls_oled
For Temp = 5 To 8 ' вертикальная линия слева дисплея
Call Stolb_oled(255 , 0 , Temp)
Next
For Temp = 1 To 127
Call Stolb_oled(&B_10000000 , Temp , 8) ' горизонтальная линия внизу
Next
For Temp = 1 To 127 Step 10
Call Stolb_oled(&B_10000100 , Temp , 5) ' горизонтальные точки
Call Stolb_oled(&B_00000100 , Temp + 5 , 5) ' горизонтальные точки
Next
For Temp = 1 To 127 Step 10
Call Stolb_oled(&B_00010000 , Temp , 6) ' горизонтальные точки
Call Stolb_oled(&B_00010000 , Temp + 5 , 6) ' горизонтальные точки
Next
For Temp = 1 To 127 Step 10
Call Stolb_oled(&B_01000010 , Temp , 7) ' горизонтальные точки
Call Stolb_oled(&B_01000000 , Temp + 5 , 7) ' горизонтальные точки
Next
For Temp = 1 To 127 Step 10
Call Stolb_oled(&B_10001000 , Temp , 8) ' горизонтальные точки
Next
Call Oled( "ТЕМПЕРАТУРА: --^" , 1 , 1)
For Vremya = 0 To 127
Gosub Zapusk_izmeren_temp_18b20 ' Запуск измерения температуры ds18b20
Waitms 990
Gosub Chitaem_temp_18b20 ' Считаем температуру цифрового термометра в помещении
Call Oled(str(temperatura_opornaya) , 14 , 1)
If Temperatura_opornaya < T_min Then T_min = Temperatura_opornaya
If Temperatura_opornaya > T_max Then T_max = Temperatura_opornaya
Call Oled( "МИН:" + Str(t_min) + "^ МАКС:" + Str(t_max) + "^" , 1 , 3)
Nagrev = Temperatura_opornaya
If Temperatura_opornaya > 20 Then Nagrev = Temperatura_opornaya - 20
If Nagrev > 31 Then Nagrev = 31
If Nagrev >= 24 Then Uroven = 5
If Nagrev >= 16 And Nagrev < 24 Then Uroven = 6
If Nagrev >= 8 And Nagrev < 16 Then Uroven = 7
If Nagrev < 8 Then Uroven = 8
My_dat = 255
Tmp = Nagrev Mod 8 : Tmp = 8 - Tmp
Shift My_dat , Left , Tmp
Call Stolb_oled(my_dat , Vremya , Uroven)
If Uroven = 5 Then
Call Stolb_oled(255 , Vremya , 6)
Call Stolb_oled(255 , Vremya , 7)
Call Stolb_oled(255 , Vremya , 8)
End If
If Uroven = 6 Then
Call Stolb_oled(255 , Vremya , 7)
Call Stolb_oled(255 , Vremya , 8)
End If
If Uroven = 7 Then
Call Stolb_oled(255 , Vremya , 8)
End If
Next
Loop
End
'=============================================================================
Init_18b20: ' Инициализация датчика ds18b20
1wreset ' Инициализация шины 1Wire
1wwrite &HCC ' Выдаем команду чтения ПЗУ
1wwrite &H4E ' Установим разрядность термодатчика
1wwrite 0
1wwrite 0
1wwrite &H7F ' Configuration Register 12-BIT Mode 0.0625° 750 mS
Return
Zapusk_izmeren_temp_18b20:
1wreset ' Инициализация шины 1Wire
1wwrite &HCC ' Выдаем команду чтения ПЗУ
1wwrite &H44 ' Запуск измерения
'Waitms 750 ' Ждем окончания преобразования 12-BIT Mode 0.0625° 750 mS
Return
Chitaem_temp_18b20: ' Проверяем температуру
1wreset ' Инициализация шины 1Wire
1wwrite &HCC
1wwrite &HBE ' Команда чтения ОЗУ датчика
1wire_dat(1) = 1wread(9) ' Принимаем данные
Znak = 0 ' знак температуры
If 1wire_dat(2) >= 248 Then ' Проверяем на отрицательную температуру. 248 в десятичном, 11111000 в двоичном.
1wire_dat(1) = &HFF - 1wire_dat(1)
1wire_dat(2) = &HFF - 1wire_dat(2) ' Если температура отрицательная – вычитаем из &HFF
Znak = T_minusovaya ' признак "температура отрицательная"
End If
Shift 1wire_dat(1) , Right , 4
Temperatura_opornaya = 1wire_dat(1) ' Сдвигаем нулевой байт вправо на 4 бита
Shift 1wire_dat(2) , Left , 4
Temp = 1wire_dat(2) ' Сдвигаем первый байт влево на 4 бита
Temperatura_opornaya = Temperatura_opornaya + Temp ' Формирмируем результат
Return
'---------------------------------------------------------------------------------------
Sub Stolb_oled(byval Stolb As Byte , Byval X_oled As Byte , Byval Y_oled As Byte)
Y_oled = Y_oled + 175 ' Page Start (Y) 176 hB0-hB7
Dat_oled = X_oled
Dat_oled = Dat_oled And &B_0000_1111 ' Обнулим СТАРШИЕ 4 бита
Shift X_oled , Right , 4 ' Сместим старшие 4 бита вправо
X_oled = X_oled Or &B_0001_0000 ' и установим 4й бит
I2cstart
I2cwbyte Address_i2c_oled ' Адрес Дисплея, для записи
I2cwbyte 0
I2cwbyte Y_oled ' start page address (Y) 176-183 hB0-hB7
I2cwbyte X_oled ' column start address (x) Верхний нибл
I2cwbyte Dat_oled ' column start address (x) Нижний нибл
I2cstop
I2cstart
I2cwbyte Address_i2c_oled ' Адрес Дисплея, для записи
I2cwbyte Data_mode_oled ' 40h = следом идёт много байт данных
I2cwbyte Stolb
I2cstop
End Sub
'---------------------------------------------------------------------------------------
Sub Oled(byval Text$ As String * 16 , Byval X_oled As Byte , Byval Y_oled As Byte)
Y_oled = Y_oled + 175 ' Page Start (Y) 176 hB0-hB7
X_oled = X_oled - 1
X_oled = X_oled * 8 ' column start (x)
Dat_oled = X_oled
Dat_oled = Dat_oled And &B_0000_1111 ' Обнулим СТАРШИЕ 4 бита
Shift X_oled , Right , 4 ' Сместим старшие 4 бита вправо
X_oled = X_oled Or &B_0001_0000 ' и установим 4й бит
I2cstart
I2cwbyte Address_i2c_oled ' Адрес Дисплея, для записи
I2cwbyte 0
I2cwbyte Y_oled ' start page address (Y) 176-183 hB0-hB7
I2cwbyte X_oled ' column start address (x) Верхний нибл
I2cwbyte Dat_oled ' column start address (x) Нижний нибл
I2cstop
I2cstart
I2cwbyte Address_i2c_oled ' Адрес Дисплея, для записи
I2cwbyte Data_mode_oled ' 40h = следом идёт много байт данных
Len_msg = Len(text$)
For Q = 1 To Len_msg
Symbol$ = Mid(text$ , Q , 1)
H = Asc(symbol$) - 32
If H > 63 Then H = H - 97 ' Убрали из таблицы маленькие английские и русские
Tmp_w = H * 8
For H = 1 To 8
Dat_oled = Lookup(tmp_w , Font8x8)
I2cwbyte Dat_oled
Incr Tmp_w
Next
Next
I2cstop
End Sub
'---------------------------------------------------------------------------------------
Sub Cls_oled 'OLED RESET, Проснись, удали всё
I2cstart
I2cwbyte Address_i2c_oled
I2cwbyte Data_mode_oled ' пакет данных
For Tmp_w = 0 To 1023
I2cwbyte &H00 ' отправить "пустой столбец"
Next
I2cstop
End Sub
'---------------------------------------------------------------------------------------
Sub Cmd_oled(byval Command_to_oled As Byte)
I2cstart
I2cwbyte Address_i2c_oled
I2cwbyte 0
I2cwbyte Command_to_oled
I2cstop
End Sub
'---------------------------------------------------------------------------------------
Sub Init_oled ' OLED initialisation
I2cstart
I2cwbyte Address_i2c_oled
I2cwbyte &HAE 'DISPLAY OFF
I2cwbyte &HD5 'SET DISPLAY CLOCK DIV
I2cwbyte &H80 'ratio 0x80
I2cwbyte &H00 'SET MULTIPLEX
I2cwbyte &H3F ' 1f 128x32
I2cwbyte &HD3 'SET DISPLAY OFFSET (No Offset).
I2cwbyte &H00
I2cwbyte &H40 ' Set Display Start Line to 0
I2cwbyte &H8D 'CHARGE PUMP
I2cwbyte &H14 'vccstate 14
I2cwbyte &H20 'MEMORY MODE
I2cwbyte &H00 ' Horizontal Addressing Mode
I2cwbyte &HA1 'A0 upside down SEGREMAP
I2cwbyte &HC8 'COM SCAN DEC
I2cwbyte &HDA 'SET COM PINS
I2cwbyte &H12 ' 02 128x32 12
I2cwbyte &H81 'SET CONTRAST
I2cwbyte Contrast 'value 1-->256
I2cwbyte &HD9 'SET PRECHARGE
I2cwbyte &HF1 'vccstate f1
I2cwbyte &HDB 'SET VCOM DETECT
I2cwbyte &H40 ' Set Display Start Line
I2cwbyte &HA4 ' DISPLAY ALL ON_RESUME (Entire Display ON)
I2cwbyte &HA6 ' NORMAL DISPLAY (Inverse Display = A7h)
I2cwbyte &HAF ' Display ON
I2cstop
End Sub
'---------------------------------------------------------------------------------------
Font8x8: ' Символы записаны ВЕРТИКАЛЬНО
Data 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0
Data 0 , 6 , 95 , 95 , 6 , 0 , 0 , 0 ' !
Data 0 , 7 , 7 , 0 , 7 , 7 , 0 , 0 ' "
Data 20 , 127 , 127 , 20 , 127 , 127 , 20 , 0 ' #
Data 0 , 36 , 46 , 107 , 107 , 58 , 18 , 0 ' $
Data 70 , 102 , 48 , 24 , 12 , 102 , 98 , 0 ' %
Data 48 , 122 , 79 , 93 , 55 , 122 , 72 , 0 ' &
Data 0 , 4 , 7 , 3 , 0 , 0 , 0 , 0 ' '
Data 0 , 0 , 0 , 28 , 62 , 99 , 65 , 0 ' (
Data 0 , 65 , 99 , 62 , 28 , 0 , 0 , 0 ' )
Data 8 , 42 , 62 , 28 , 62 , 42 , 8 , 0 ' *
Data 0 , 8 , 8 , 62 , 62 , 8 , 8 , 0 ' +
Data 0 , 128 , 224 , 96 , 0 , 0 , 0 , 0 ' ,
Data 0 , 8 , 8 , 8 , 8 , 8 , 8 , 0 ' -
Data 0 , 0 , 96 , 96 , 0 , 0 , 0 , 0 ' .
Data 96 , 48 , 24 , 12 , 6 , 3 , 1 , 0 ' /
Data 62 , 127 , 89 , 77 , 127 , 62 , 0 , 0 ' 0
Data 66 , 66 , 127 , 127 , 64 , 64 , 0 , 0 ' 1
Data 98 , 115 , 89 , 73 , 79 , 70 , 0 , 0 ' 2
Data 34 , 99 , 73 , 73 , 127 , 54 , 0 , 0 ' 3
Data 24 , 28 , 22 , 19 , 127 , 127 , 0 , 0 ' 4
Data 39 , 103 , 69 , 69 , 125 , 57 , 0 , 0 ' 5
Data 60 , 126 , 75 , 73 , 121 , 48 , 0 , 0 ' 6
Data 1 , 97 , 113 , 25 , 15 , 7 , 0 , 0 ' 7
Data 54 , 127 , 73 , 73 , 127 , 54 , 0 , 0 ' 8
Data 6 , 79 , 73 , 105 , 63 , 30 , 0 , 0 ' 9
Data 0 , 0 , 54 , 54 , 0 , 0 , 0 , 0 ' :
Data 0 , 64 , 118 , 54 , 0 , 0 , 0 , 0 ' ;
Data 0 , 8 , 28 , 54 , 99 , 65 , 0 , 0 ' <
Data 0 , 20 , 20 , 20 , 20 , 20 , 20 , 0 ' =
Data 0 , 0 , 65 , 99 , 54 , 28 , 8 , 0 ' >
Data 0 , 2 , 3 , 81 , 89 , 15 , 6 , 0 ' ?
Data 62 , 127 , 65 , 93 , 85 , 23 , 30 , 0 ' @
Data 124 , 126 , 19 , 19 , 126 , 124 , 0 , 0 ' A
Data 127 , 127 , 73 , 73 , 127 , 54 , 0 , 0 ' B
Data 28 , 62 , 99 , 65 , 65 , 99 , 34 , 0 ' C
Data 127 , 127 , 65 , 65 , 34 , 28 , 0 , 0 ' D
Data 127 , 127 , 73 , 73 , 65 , 65 , 0 , 0 ' E
Data 127 , 127 , 9 , 9 , 1 , 3 , 0 , 0 ' F
Data 28 , 62 , 99 , 65 , 81 , 115 , 50 , 0 ' G
Data 127 , 127 , 8 , 8 , 127 , 127 , 0 , 0 ' H
Data 0 , 65 , 127 , 127 , 65 , 0 , 0 , 0 ' I
Data 48 , 112 , 64 , 65 , 127 , 63 , 1 , 0 ' J
Data 127 , 127 , 8 , 28 , 119 , 99 , 0 , 0 ' K
Data 127 , 127 , 64 , 64 , 64 , 112 , 0 , 0 ' L
Data 127 , 127 , 6 , 12 , 6 , 127 , 127 , 0 ' M
Data 127 , 127 , 6 , 12 , 24 , 127 , 127 , 0 ' N
Data 28 , 62 , 99 , 65 , 99 , 62 , 28 , 0 ' O
Data 127 , 127 , 9 , 9 , 15 , 6 , 0 , 0 ' P
Data 62 , 127 , 65 , 81 , 35 , 94 , 0 , 0 ' Q
Data 127 , 127 , 25 , 57 , 111 , 70 , 0 , 0 ' R
Data 38 , 71 , 77 , 89 , 121 , 50 , 0 , 0 ' S
Data 1 , 1 , 127 , 127 , 1 , 1 , 0 , 0 ' T
Data 63 , 127 , 64 , 64 , 127 , 63 , 0 , 0 ' U
Data 31 , 63 , 96 , 96 , 63 , 31 , 0 , 0 ' V
Data 127 , 127 , 48 , 28 , 48 , 127 , 127 , 0 ' W
Data 99 , 119 , 28 , 8 , 28 , 119 , 99 , 0 ' X
Data 7 , 15 , 120 , 120 , 15 , 7 , 0 , 0 ' Y
Data 97 , 113 , 89 , 77 , 71 , 67 , 65 , 0 ' Z
Data 0 , 127 , 127 , 65 , 65 , 0 , 0 , 0 ' [
Data 1 , 3 , 6 , 12 , 24 , 48 , 96 , 0 ' \
Data 0 , 65 , 65 , 127 , 127 , 0 , 0 , 0 ' ]
'Data 8 , 12 , 6 , 3 , 6 , 12 , 8 , 0 ' ^
Data &H03 , &H03 , &H00 , &H3C , &H42 , &H42 , &H24 , &H00 ' 'с
Data 124 , 126 , 19 , 17 , 17 , 127 , 127 , 0 ' А
Data 127 , 127 , 73 , 73 , 121 , 113 , 0 , 0 ' Б
Data 127 , 127 , 73 , 73 , 127 , 54 , 0 , 0 ' В
Data 127 , 127 , 1 , 1 , 3 , 3 , 0 , 0 ' Г
Data 96 , 56 , 62 , 35 , 33 , 63 , 63 , 96 ' Д
Data 127 , 127 , 73 , 73 , 65 , 97 , 0 , 0 ' Е
Data 99 , 119 , 28 , 127 , 28 , 119 , 99 , 0 ' Ж
Data 34 , 99 , 73 , 73 , 127 , 54 , 0 , 0 ' З
Data 127 , 127 , 48 , 24 , 12 , 127 , 127 , 0 ' И
Data 127 , 126 , 49 , 25 , 12 , 127 , 127 , 0 ' Й
Data 127 , 127 , 8 , 28 , 54 , 99 , 65 , 0 ' К
Data 64 , 124 , 126 , 3 , 1 , 127 , 127 , 0 ' Л
Data 127 , 127 , 6 , 28 , 6 , 127 , 127 , 0 ' М
Data 127 , 127 , 8 , 8 , 8 , 127 , 127 , 0 ' Н
Data 62 , 127 , 65 , 65 , 65 , 127 , 62 , 0 ' О
Data 127 , 127 , 1 , 1 , 1 , 127 , 127 , 0 ' П
Data 127 , 127 , 9 , 9 , 9 , 15 , 6 , 0 ' Р
Data 28 , 62 , 99 , 65 , 65 , 99 , 34 , 0 ' С
Data 3 , 1 , 127 , 127 , 1 , 3 , 0 , 0 ' Т
Data 7 , 79 , 72 , 72 , 72 , 127 , 63 , 0 ' У
Data 14 , 27 , 17 , 127 , 17 , 27 , 14 , 0 ' Ф
Data 99 , 119 , 28 , 8 , 28 , 119 , 99 , 0 ' Х
Data 127 , 127 , 64 , 64 , 127 , 255 , 192 , 0 ' Ц
Data 7 , 15 , 8 , 8 , 8 , 127 , 127 , 0 ' Ч
Data 127 , 127 , 64 , 127 , 64 , 127 , 127 , 0 ' Ш
Data 127 , 127 , 64 , 127 , 64 , 127 , 255 , 192 ' Щ
Data 3 , 127 , 127 , 72 , 72 , 120 , 48 , 0 ' Ъ
Data 127 , 127 , 72 , 72 , 120 , 0 , 127 , 0 ' Ы
Data 127 , 127 , 72 , 72 , 120 , 48 , 0 , 0 ' Ь
Data 34 , 65 , 73 , 73 , 107 , 62 , 28 , 0 ' Э
Data 127 , 127 , 8 , 62 , 65 , 65 , 62 , 0 ' Ю
Data 70 , 111 , 57 , 25 , 25 , 127 , 127 , 0 ' Я
Отредактировано Александр Д. (2026-04-18 13:05:59)


