доцент2 |
Дата: Сб, 22.08.2020, 14:23 | Сообщение # 1 |
Группа:
Проверенные
Ранг:
Помогаю всем
Сообщений:
446
Замечания:
±
На сайте с 13.09.2011
Статус:
Offline
|
Решил оживить и использовать панельку от магнитолы с контроллером LC75883. Отправил все единички панелька ожила. Перебором получил таблицу по битно за каждый символ. Но оказалось (и это естественно) в один байт не умещаются символы для одного разряда. Происходит смещение. Т.е. некоторые разряды "растягиваются" на 3 байта. Подскажите как правильно (рационально) организовать формирование символов (цифр) при отправке для конкретного разряда (в одном байте информация может быть для двух разрядов).
|
|
|
|
Aleksey_174 |
Дата: Пн, 24.08.2020, 05:28 | Сообщение # 2 |
Группа:
Проверенные
Ранг:
Понимаю
Сообщений:
93
Замечания:
±
На сайте с 22.01.2017
Статус:
Offline
|
Dim VR1 As Byte VR1 = %00001111 ' Присвоить 8-битное значение VR1 Dim VD1 As Word VD1 = %0000111100001111 ' Присвоить 16-битное значение VD1 Dim D1 As DWord D1 = %00001111000011110000111100001111 ' Присвоить 32-битное значение D1
|
|
|
|
доцент2 |
Дата: Пн, 24.08.2020, 16:29 | Сообщение # 3 |
Группа:
Проверенные
Ранг:
Помогаю всем
Сообщений:
446
Замечания:
±
На сайте с 13.09.2011
Статус:
Offline
|
Пока не совсем понял, что дает такое назначение переменных. Например, если нужно вывести "0" в 7-м разряде, то выглядеть это будет так: 2byte %00000001 3byte %10000100 4byte %00011100 если при этом надо вывести в 6-й разряд "0", то надо опять обратиться к 4byte 4byte %00000011 5byte %00001000 6byte %00111000 Пока приходит на ум одно решение: прописать для каждого разряда от 0 до 9 (Select...Case...EndSelect), а потом суммировать одинаковые байты и полученный результат отправлять на дисплей. Но получиться громоздко, слишком много переменных будет (для 8-ми разрядов примерно 80шт и переменные окончательного результата 10шт.). Или я не прав?
|
|
|
|
Aleksey_174 |
Дата: Пн, 24.08.2020, 17:16 | Сообщение # 4 |
Группа:
Проверенные
Ранг:
Понимаю
Сообщений:
93
Замечания:
±
На сайте с 22.01.2017
Статус:
Offline
|
Тож не совсем понял, что вам надо, но есть команды работы с битами SetBit ClearBit И с помощью их можно менять биты например в переменной DWord %00001111000011110000111100001111 которую вы потом можете отправлять вместо нескольких байт как я понял вам нужно отправлять 27 бит, вот и меняйте те которые нужно
|
|
|
|
доцент2 |
Дата: Пн, 24.08.2020, 17:22 | Сообщение # 5 |
Группа:
Проверенные
Ранг:
Помогаю всем
Сообщений:
446
Замечания:
±
На сайте с 13.09.2011
Статус:
Offline
|
Вся посылка состоит из 27 байт, т.е. 216 бит. Вашу мысль я уловил, сейчас переварю.
Добавлено (25.08.2020, 09:47) --------------------------------------------- Для одного разряда из восьми цифры от 0 до 9 пока выглядят примерно так: For xx=0 To 9 'очищаем 1-й разряд Clear DisplayD_14 Clear DisplayD_16 Select xx ' Начало действия оператора выбора варианта Select Case 0 ' Если цифра 0 SetBit DisplayD_14,7: SetBit DisplayD_14,6: SetBit DisplayD_14,1: SetBit DisplayD_16,4: SetBit DisplayD_16,3: SetBit DisplayD_16,2 Case 1 ' Если цифра 1 SetBit DisplayD_16,3: SetBit DisplayD_16,4 Case 2 ' Если цифра 2 SetBit DisplayD_14,1: SetBit DisplayD_16,4: SetBit DisplayD_14,3: SetBit DisplayD_16,6: SetBit DisplayD_14,6: SetBit DisplayD_16,2 Case 3 ' Если цифра 3 SetBit DisplayD_14,1: SetBit DisplayD_16,3: SetBit DisplayD_16,4: SetBit DisplayD_14,3: SetBit DisplayD_16,6: SetBit DisplayD_16,3: SetBit DisplayD_16,2 Case 4 ' Если цифра 4 SetBit DisplayD_14,7: SetBit DisplayD_14,3: SetBit DisplayD_16,6: SetBit DisplayD_16,3: SetBit DisplayD_16,4 Case 5 ' Если цифра 5 SetBit DisplayD_14,1: SetBit DisplayD_14,7: SetBit DisplayD_14,3: SetBit DisplayD_16,6: SetBit DisplayD_16,2: SetBit DisplayD_16,3 Case 6 ' Если цифра 6 SetBit DisplayD_14,1: SetBit DisplayD_14,7: SetBit DisplayD_14,3: SetBit DisplayD_16,6: SetBit DisplayD_14,6: SetBit DisplayD_16,2: SetBit DisplayD_16,3 Case 7 ' Если цифра 7 SetBit DisplayD_14,1: SetBit DisplayD_16,3: SetBit DisplayD_16,4 Case 8 ' Если цифра 8 SetBit DisplayD_14,7: SetBit DisplayD_14,6: SetBit DisplayD_14,1: SetBit DisplayD_16,4: SetBit DisplayD_16,3: SetBit DisplayD_16,2: SetBit DisplayD_14,3: SetBit DisplayD_16,6 Case 9 ' Если цифра 9 SetBit DisplayD_14,7: SetBit DisplayD_14,1: SetBit DisplayD_16,4: SetBit DisplayD_16,3: SetBit DisplayD_16,2: SetBit DisplayD_14,3: SetBit DisplayD_16,6 Case Else EndSelect GoSub LC75883_Data DelayMS 1000 Next xx
и такой блок нужен для каждого разряда. Громоздко получилось.
Сообщение отредактировал
доцент2 - Вт, 25.08.2020, 16:19
|
|
|
|
Aleksey_174 |
Дата: Ср, 26.08.2020, 14:00 | Сообщение # 6 |
Группа:
Проверенные
Ранг:
Понимаю
Сообщений:
93
Замечания:
±
На сайте с 22.01.2017
Статус:
Offline
|
для таких вещей проще сделать шрифт типа как в нокии 3310 и вытаскивать его по командам и обрабатывать, если сильно постараться,то можно потом выводить и текст Что то типо этого
Lcd_Data=CRead font1+1 for n = 0 to 9 Variable = GetBit Lcd_Data, n if Variable = 1 then SetBit DisplayD_16,n if Variable = 0 then ClearBit DisplayD_16,n next
Font1:- CData %000011110 CData %001111110
|
|
|
|
доцент2 |
Дата: Ср, 26.08.2020, 19:29 | Сообщение # 7 |
Группа:
Проверенные
Ранг:
Помогаю всем
Сообщений:
446
Замечания:
±
На сайте с 13.09.2011
Статус:
Offline
|
Я думаю не все так просто. Использовать "шрифт" врятли получится, т.к. все разряды занимают по три байта, при чем в одном байте находятся биты двух разрядов. Кроме того, вся посылка состоит из трех частей и информация по одному разряду может быть в двух посылках. И если использовать шрифт, то получится, что один из разрядов будет частично затирать другой. Или я не прав?Добавлено (29.08.2020, 10:11) ---------------------------------------------
Цитата Aleksey_174 (  ) CData %000011110 CData %001111110 Спасибо за направление.
Сообщение отредактировал
доцент2 - Ср, 26.08.2020, 21:11
|
|
|
|