Регистрация | Вход
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Модератор форума: demanik, ivan_fd  
Форум Picbasic.ru » Программирование МК » Proton PicBasic » LC75883 (рациональная организация отправки сиданных)
LC75883
доцент2 Дата: Сб, 22.08.2020, 14:23  |                                                                                                                Сообщение # 1
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 445
Репутация: 10   ±
Замечания:   ±
На сайте с 13.09.2011

Статус: Offline

Решил оживить и использовать панельку от магнитолы с контроллером LC75883. Отправил все единички панелька ожила. Перебором получил таблицу
по битно за каждый символ. Но оказалось (и это естественно) в один байт
не умещаются символы для одного разряда. Происходит смещение. Т.е.
некоторые разряды "растягиваются" на 3 байта. Подскажите как правильно
(рационально) организовать формирование символов (цифр) при отправке для
конкретного разряда (в одном байте информация может быть для двух
разрядов).
Прикрепления: 5009814.jpg(249.6 Kb) · 6299983.jpg(77.5 Kb) · 4848565.docx(173.3 Kb)
ЯНДЕКС Дата: 22.08.2020
Aleksey_174 Дата: Пн, 24.08.2020, 05:28  |                                                                                                                Сообщение # 2
Группа: Проверенные
Ранг:  Понимаю
Сообщений: 93
Репутация: 17   ±
Замечания:   ±
На сайте с 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
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 445
Репутация: 10   ±
Замечания:   ±
На сайте с 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
Репутация: 17   ±
Замечания:   ±
На сайте с 22.01.2017

Статус: Offline

Тож не совсем понял, что вам надо, но есть команды работы с битами
SetBit
ClearBit
И с помощью их можно менять биты например в переменной DWord
%00001111000011110000111100001111
которую вы потом можете отправлять вместо нескольких байт
как я понял вам нужно отправлять 27 бит, вот и меняйте те которые нужно
доцент2 Дата: Пн, 24.08.2020, 17:22  |                                                                                                                Сообщение # 5
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 445
Репутация: 10   ±
Замечания:   ±
На сайте с 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

и такой блок нужен для каждого разряда. Громоздко получилось.
Прикрепления: 9934584.docx(173.3 Kb)

Сообщение отредактировал доцент2 - Вт, 25.08.2020, 16:19
Aleksey_174 Дата: Ср, 26.08.2020, 14:00  |                                                                                                                Сообщение # 6
Группа: Проверенные
Ранг:  Понимаю
Сообщений: 93
Репутация: 17   ±
Замечания:   ±
На сайте с 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
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 445
Репутация: 10   ±
Замечания:   ±
На сайте с 13.09.2011

Статус: Offline

Я думаю не все так просто. Использовать "шрифт" врятли получится, т.к. все разряды занимают по три байта, при чем в одном байте находятся биты двух разрядов. Кроме того, вся посылка состоит из трех частей и информация по одному разряду может быть в двух посылках. И если использовать шрифт, то получится, что один из разрядов будет частично затирать другой.
Или я не прав?

Добавлено (29.08.2020, 10:11)
---------------------------------------------

Цитата Aleksey_174 ()
CData %000011110 CData %001111110
Спасибо за направление.
Прикрепления: 5020296.jpg(136.5 Kb)

Сообщение отредактировал доцент2 - Ср, 26.08.2020, 21:11
Форум Picbasic.ru » Программирование МК » Proton PicBasic » LC75883 (рациональная организация отправки сиданных)
  • Страница 1 из 1
  • 1
Поиск: