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

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

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

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


Вы здесь » Программирование ATMEL в BASCOM. » Дисплеи и индикация » SSD1306. Можно ли поставить отдельную точку через PSET?


SSD1306. Можно ли поставить отдельную точку через PSET?

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

1

приветствую!
а библиотеки SSD1306 поддерживают PSET?
нет возможности проверить самостоятельно  :dontknow:
хочу сделать типа термометра и отображать значения в виде графика

0

2

Александр Д. написал(а):

нет возможности проверить самостоятельно

В Протеусе прогнать тоже нет возможности? Такой дисплей, по идее, там должен быть.

0

3

в дисплее нет такой возможности.

от силы можно вывести вертикальную строчку из 8 точек (байт)
Но еще не пробовал.

я так понимаю, высчитать нужный байт, в который надо поставить/убрать точку,
считать его, выполнить логическую операцию, загрузить обратно
Только так.

ps
и СЧИТАТЬ ИЗ дисплея тоже нельзя.

Отредактировано Александр Д. (2026-04-18 13:05:22)

0

4

раскурил тему полностью
ОЧЕНЬ неприятно впечатлён какчеством документации! Неверно указаны режимы по умолчанию, ошибки в примере инициализации...

В сети гуляет как минимум 7 версий библиотек. ВСЕ c ляпами.

Та, что на сайте Баскома, рабочая, но медленная (видимо, не поняли метод передачи массива и каждый байт шлют в виде пакета: адрес дисплея, команда, данные.

Причешу и выложу без всяких библиотек, потом хочу перенести на STC 8051

Отредактировано Александр Д. (2026-04-17 11:46:55)

0

5

Шрифт 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)

+1

6

потом попробую сделать что-то типа самописца, благо могу вывести вертикальную строчку в любое место экрана (кратно позициям, конечно)

Отредактировано Александр Д. (2026-04-17 12:45:36)

0

7

https://upforme.ru/uploads/0000/25/b8/439/t485712.jpg
https://upforme.ru/uploads/0000/25/b8/439/t354645.jpg
https://upforme.ru/uploads/0000/25/b8/439/t11234.jpg

Код:
$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)

0


Вы здесь » Программирование ATMEL в BASCOM. » Дисплеи и индикация » SSD1306. Можно ли поставить отдельную точку через PSET?