реклама на сайте
подробности

 
 
> Перекодировка для ЖКИ
goodking
сообщение Dec 21 2009, 13:12
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 32
Регистрация: 21-12-09
Пользователь №: 54 383



Привет! Не могу разобраться, как результат с АЦП перевести в подходящий для вывода на ЖКИ, помогите плз! МК Silabs c8051F120, ЖКИ 160203В.
Go to the top of the page
 
+Quote Post
3 страниц V   1 2 3 >  
Start new topic
Ответов (1 - 38)
barabek
сообщение Dec 21 2009, 13:47
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 540
Регистрация: 16-08-07
Из: Владивосток
Пользователь №: 29 831



Конкретизируйте, пожалуйста, Ваш вопрос. Что конкретно Вас интересует. Перевод выходного кода ацп в напряжение, выраженное в переменной определенного типа ( float, int ...) U=Ladc/(2^N)*Uref*Kdiv, Ladc - выходной код ацп, Kdiv - коэффициент предделителя. Либо что-то ещё?
Go to the top of the page
 
+Quote Post
goodking
сообщение Dec 21 2009, 13:57
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 32
Регистрация: 21-12-09
Пользователь №: 54 383



У меня уже имеется готовый вычисленный результат с АЦП, но на ЖКИ его вывести нельзя, т.к. нужно определенным образом преобразовать в "понятный" ЖКИ, вот я и спрашиваю, как это лучше сделать?
Причина редактирования: Избыточное цитирование
Go to the top of the page
 
+Quote Post
7_on_off
сообщение Dec 21 2009, 14:03
Сообщение #4


Участник
*

Группа:
Сообщений: 19
Регистрация: 19-12-09
Из: Питер
Пользователь №: 54 358



Вы задали вопрос, так укажите ссылку на ЖКИ 160203В. похоже это экзотика.


--------------------
Париться надо в бане.
Go to the top of the page
 
+Quote Post
esaulenka
сообщение Dec 21 2009, 14:21
Сообщение #5


Профессионал
*****

Группа: Свой
Сообщений: 1 032
Регистрация: 13-03-08
Из: Маськва
Пользователь №: 35 877



Беглый осмотр гугля показал, что оно построено на Seico M1632, а он, в свою очередь - аналог 44780, так что никакой экзотики. Хотя могу ошибаться, конечно, изучать вопрос детально лень.

Впрочем, да, вопрос чЮдный. Подозреваю, топикстартер пользуется ассемблером, т.к. я ещё не видел ни одной книжки про си, в которой не упоминался бы printf ;-)

Сообщение отредактировал esaulenka - Dec 21 2009, 14:23


--------------------
Тут обсуждается творческий порыв, а не соответствие каким-либо стандартам ©
Go to the top of the page
 
+Quote Post
goodking
сообщение Dec 21 2009, 14:37
Сообщение #6


Участник
*

Группа: Участник
Сообщений: 32
Регистрация: 21-12-09
Пользователь №: 54 383



Цитата(7_on_off @ Dec 21 2009, 17:03) *
Вы задали вопрос, так укажите ссылку на ЖКИ 160203В. похоже это экзотика.

пожалуйста http://www.arihav.com/Products/DataSheet/L...-%20Catalog.pdf smile.gif

Цитата(esaulenka @ Dec 21 2009, 17:21) *
Беглый осмотр гугля показал, что оно построено на Seico M1632, а он, в свою очередь - аналог 44780, так что никакой экзотики. Хотя могу ошибаться, конечно, изучать вопрос детально лень.

Впрочем, да, вопрос чЮдный. Подозреваю, топикстартер пользуется ассемблером, т.к. я ещё не видел ни одной книжки про си, в которой не упоминался бы printf ;-)

нет-нет, printf ни при чем, нужно как-то преобразовать результат с АЦП в шестнадцатиричный, либо в двоичный, который можно вывести на ЖКИ
Go to the top of the page
 
+Quote Post
7_on_off
сообщение Dec 21 2009, 14:42
Сообщение #7


Участник
*

Группа:
Сообщений: 19
Регистрация: 19-12-09
Из: Питер
Пользователь №: 54 358



ЖКИ состоит из 16 сегментов. По моему его лучше использовать как барграф. Разбить динамический диапазон АЦП на 16 частей и выводить результат посегментно.


--------------------
Париться надо в бане.
Go to the top of the page
 
+Quote Post
goodking
сообщение Dec 21 2009, 14:42
Сообщение #8


Участник
*

Группа: Участник
Сообщений: 32
Регистрация: 21-12-09
Пользователь №: 54 383



если точнее то преобразовать в тип unsigned char
Go to the top of the page
 
+Quote Post
7_on_off
сообщение Dec 21 2009, 14:53
Сообщение #9


Участник
*

Группа:
Сообщений: 19
Регистрация: 19-12-09
Из: Питер
Пользователь №: 54 358



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


--------------------
Париться надо в бане.
Go to the top of the page
 
+Quote Post
goodking
сообщение Dec 21 2009, 15:26
Сообщение #10


Участник
*

Группа: Участник
Сообщений: 32
Регистрация: 21-12-09
Пользователь №: 54 383



Цитата(7_on_off @ Dec 21 2009, 18:53) *
Смотря что вы собираетесь отображать на дисплее, какой процесс и с какой точностью.

мне нужно отображать непрерывное измерение температуры, с точностью ну где-то до 4-го знака!
Go to the top of the page
 
+Quote Post
esaulenka
сообщение Dec 21 2009, 16:07
Сообщение #11


Профессионал
*****

Группа: Свой
Сообщений: 1 032
Регистрация: 13-03-08
Из: Маськва
Пользователь №: 35 877



Цитата(goodking @ Dec 21 2009, 18:26) *
с точностью ну где-то до 4-го знака!

Хорошее начало. Предоставьте, пожалуйста расчёты, подтверждающие, что Вы можете измерить температуру с такой точностью.


Хм. unsigned char с точностью до четвёртого знака. Звучит... smile.gif

Модератор (rezident). Фиксирую оффтопик в сообщении. Вопрос топикстартера про способы отображения, а не про точность измерения!

Сообщение отредактировал rezident - Dec 21 2009, 20:32


--------------------
Тут обсуждается творческий порыв, а не соответствие каким-либо стандартам ©
Go to the top of the page
 
+Quote Post
rezident
сообщение Dec 21 2009, 20:28
Сообщение #12


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Цитата(goodking @ Dec 21 2009, 18:12) *
Привет! Не могу разобраться, как результат с АЦП перевести в подходящий для вывода на ЖКИ, помогите плз! МК Silabs c8051F120, ЖКИ 160203В.
Не ленитесь пользоваться поиском! Тема двоично-десятичного преобразования (BCD - Binary-Coded Decimal) мусолится на форуме постоянно.
Навскидку
http://electronix.ru/forum/index.php?showtopic=66009
http://electronix.ru/forum/index.php?showtopic=68217
Или вот статья из Википедии
Go to the top of the page
 
+Quote Post
goodking
сообщение Dec 22 2009, 09:55
Сообщение #13


Участник
*

Группа: Участник
Сообщений: 32
Регистрация: 21-12-09
Пользователь №: 54 383



Цитата(rezident @ Dec 21 2009, 23:28) *
Не ленитесь пользоваться поиском! Тема двоично-десятичного преобразования (BCD - Binary-Coded Decimal) мусолится на форуме постоянно.

мне нужно преобразовать в строку то-есть в char smile.gif

пробую так
Код
temperaturefin = (temperature-41857)/154;//это вычисление температуры
    sprintf(buf,"%d",temperaturefin);


в окне просмотра показывает нормальную температуру, а на ЖКИ высвечивается 01, непонятно smile.gif

Сообщение отредактировал rezident - Dec 22 2009, 12:12
Причина редактирования: Излишнее цитирование.
Go to the top of the page
 
+Quote Post
Dog Pawlowa
сообщение Dec 22 2009, 10:49
Сообщение #14


Гуру
******

Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823



Цитата(goodking @ Dec 22 2009, 13:55) *
непонятно smile.gif

Непонятно, чего Вы веселитесь, вместо того, чтобы помочь желающим помочь Вам.
Какие типы переменных?
Какая переменная правильно видна в окне отладки?
Какие их значения?
temperature?
temperaturefin?
buf?


--------------------
Уходя, оставьте свет...
Go to the top of the page
 
+Quote Post
goodking
сообщение Dec 22 2009, 10:57
Сообщение #15


Участник
*

Группа: Участник
Сообщений: 32
Регистрация: 21-12-09
Пользователь №: 54 383



Цитата(Dog Pawlowa @ Dec 22 2009, 14:49) *
Какие типы переменных?
Какая переменная правильно видна в окне отладки?

в окне отладки ставится по умолчанию, предположительно int

а вот интересно, Вы спросили про значение buf в окне, я посмотрел, высветило следующее- 0x2a "0", хотя temperaturefin=14(т.е. правильно)

Сообщение отредактировал rezident - Dec 22 2009, 12:13
Причина редактирования: Нарушение п.3.4 Правил форума.
Go to the top of the page
 
+Quote Post
Dog Pawlowa
сообщение Dec 22 2009, 11:21
Сообщение #16


Гуру
******

Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823



Цитата(goodking @ Dec 22 2009, 14:57) *
а вот интересно ...

cranky.gif Вам трудно ответить на конкретные вопросы? Зачем тему создавали?


--------------------
Уходя, оставьте свет...
Go to the top of the page
 
+Quote Post
goodking
сообщение Dec 22 2009, 11:38
Сообщение #17


Участник
*

Группа: Участник
Сообщений: 32
Регистрация: 21-12-09
Пользователь №: 54 383



извините, temperaturefin-long

все типы переменных-long
Go to the top of the page
 
+Quote Post
rezident
сообщение Dec 22 2009, 12:10
Сообщение #18


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Цитата(goodking @ Dec 22 2009, 14:55) *
мне нужно преобразовать в строку то-есть в char smile.gif
Если бы вы потрудились почитать по ссылкам, то могли бы понять, что для перевода бинарного представления числа в символьное для начала нужно его (число) преобразовать в двоично-десятичное представление, где каждая тетрада (полубайт) имеет значение от 0 до 9. Дальнейшее преобразование в символы ASCII не представляет трудности, поскольку для этого достаточно к каждой тетраде прибавить код символа '0' - 0x30. В языке Си имеются и готовые функции для преобразования чисел в строку символов. Почитайте какой-нибудь "букварь" по языку Си наконец.
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Dec 22 2009, 12:54
Сообщение #19


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



Цитата(goodking @ Dec 22 2009, 14:38) *
извините, temperaturefin-long
все типы переменных-long

buf должен быть не лонг, а указатель на char[]
Попробуйте char buf[10] (ну или 20, 30 - сколько надо символов)

Цитата(rezident @ Dec 22 2009, 15:10) *
В языке Си имеются и готовые функции для преобразования чисел в строку символов. Почитайте какой-нибудь "букварь" по языку Си наконец.

Дык эта... sprintf вроде как раз это и делает. Только ему указатель на правильный буфер надо подсунуть
Цитата
sprintf(buf,"%d",temperaturefin);


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
goodking
сообщение Dec 22 2009, 13:10
Сообщение #20


Участник
*

Группа: Участник
Сообщений: 32
Регистрация: 21-12-09
Пользователь №: 54 383



Цитата(MrYuran @ Dec 22 2009, 16:54) *
buf должен быть не лонг, а указатель на char[]
Попробуйте char buf[10] (ну или 20, 30 - сколько надо символов)


Дык эта... sprintf вроде как раз это и делает. Только ему указатель на правильный буфер надо подсунуть

нет, buf у меня как раз обьявлен char buf[10]; но все -равно на выходе какая-то ерунда выходит, 0x10 "0l"
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Dec 22 2009, 13:26
Сообщение #21


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



Цитата(goodking @ Dec 22 2009, 16:10) *
нет, buf у меня как раз обьявлен char buf[10]; но все -равно на выходе какая-то ерунда выходит, 0x10 "0l"

а "HelloWorld" выводит?
если константой забить, причём прямо в буфер


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
goodking
сообщение Dec 22 2009, 13:35
Сообщение #22


Участник
*

Группа: Участник
Сообщений: 32
Регистрация: 21-12-09
Пользователь №: 54 383



Цитата(MrYuran @ Dec 22 2009, 17:26) *
а "HelloWorld" выводит?
если константой забить, причём прямо в буфер

Выводит!
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Dec 22 2009, 14:40
Сообщение #23


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Цитата(rezident @ Dec 21 2009, 23:28) *
Не ленитесь пользоваться поиском! Тема двоично-десятичного преобразования (BCD - Binary-Coded Decimal) мусолится на форуме постоянно.
А причём тут BCD, простите? Ему надо просто коды АЦП пересчитать в температуру, а её отобразить в виде строки на дисплее.


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
goodking
сообщение Dec 22 2009, 15:29
Сообщение #24


Участник
*

Группа: Участник
Сообщений: 32
Регистрация: 21-12-09
Пользователь №: 54 383



Все, разобрался, всем большое спасибо! biggrin.gif

Сообщение отредактировал goodking - Dec 22 2009, 15:29
Go to the top of the page
 
+Quote Post
rezident
сообщение Dec 22 2009, 15:47
Сообщение #25


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Цитата(demiurg_spb @ Dec 22 2009, 19:40) *
А причём тут BCD, простите?
А что по-вашему делает sprintf при указании формата %d, как не BCD + конвертация в ASCII?
Цитата(demiurg_spb @ Dec 22 2009, 19:40) *
Ему надо просто коды АЦП пересчитать в температуру, а её отобразить в виде строки на дисплее.
Ну да. Загвоздка была как раз в отображении.
Цитата(goodking @ Dec 22 2009, 20:29) *
Все, разобрался, всем большое спасибо! biggrin.gif
Разобрались - хорошо. Только нужно огласить причину, чтобы у отвечающих не пропало желание в следующий раз вновь помогать вам.
Go to the top of the page
 
+Quote Post
goodking
сообщение Dec 22 2009, 16:06
Сообщение #26


Участник
*

Группа: Участник
Сообщений: 32
Регистрация: 21-12-09
Пользователь №: 54 383



Цитата(rezident @ Dec 22 2009, 18:47) *
А что по-вашему делает sprintf при указании формата %d, как не BCD + конвертация в ASCII?
Ну да. Загвоздка была как раз в отображении.
Разобрались - хорошо. Только нужно огласить причину, чтобы у отвечающих не пропало желание в следующий раз вновь помогать вам.

причина была в неверном присвоении типов используемых переменных!
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Dec 22 2009, 18:58
Сообщение #27


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Цитата(rezident @ Dec 22 2009, 18:47) *
А что по-вашему делает sprintf при указании формата %d, как не BCD + конвертация в ASCII?
Это да.
Цитата(rezident @ Dec 22 2009, 15:10) *
для начала нужно его (число) преобразовать в двоично-десятичное представление, где каждая тетрада (полубайт) имеет значение от 0 до 9.
Вы просо усложняете немного. Зачем ему тут вообще знать про упакованный BCD? ИМХО это немного лишне для совсем начинающегоsmile.gif


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
rezident
сообщение Dec 23 2009, 05:53
Сообщение #28


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Цитата(demiurg_spb @ Dec 22 2009, 23:58) *
Это да.Вы просо усложняете немного. Зачем ему тут вообще знать про упакованный BCD? ИМХО это немного лишне для совсем начинающегоsmile.gif
Как раз начинать нужно с основ языка, типовых алгоритмов и примитивов. В следующий раз ему понадобиться float на дисплей выводить и sprintf начнет требовать такой размер ОЗУ для стека, которого просто нет в кристалле. Что вы предложите: взять кристалл "пожирнее" или самостоятельно написать простой алгоритм вывода float на индикацию?
Go to the top of the page
 
+Quote Post
goodking
сообщение Dec 23 2009, 07:34
Сообщение #29


Участник
*

Группа: Участник
Сообщений: 32
Регистрация: 21-12-09
Пользователь №: 54 383



Цитата(rezident @ Dec 23 2009, 09:53) *
Как раз начинать нужно с основ языка, типовых алгоритмов и примитивов. В следующий раз ему понадобиться float на дисплей выводить и sprintf начнет требовать такой размер ОЗУ для стека, которого просто нет в кристалле. Что вы предложите: взять кристалл "пожирнее" или самостоятельно написать простой алгоритм вывода float на индикацию?

А что в таком случае надо сделать??
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Dec 23 2009, 09:29
Сообщение #30


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Цитата(goodking @ Dec 23 2009, 10:34) *
А что в таком случае надо сделать??
Застрелиться.
Цитата(rezident @ Dec 23 2009, 08:53) *
Как раз начинать нужно с основ языка, типовых алгоритмов и примитивов. В следующий раз ему понадобиться float на дисплей выводить и sprintf начнет требовать такой размер ОЗУ для стека, которого просто нет в кристалле. Что вы предложите: взять кристалл "пожирнее" или самостоятельно написать простой алгоритм вывода float на индикацию?
Вариантов достаточно. Ну если так пойти то начинать надо было с архитектуры MCU, понятиях стек, способы адресации, способы передачи аргументов. Изучить ассемблер хотя бы одного самого примитивного семейства. А уже потом браться за Сиsmile.gif Ну а ещё раньше системы исчисления, форматы чисел, булеву алгебру и т.д. и т.п. Спорить дпльше не вижу смысла. Главное не загубить в человеке желания учиться и саморазвиваться! Остальное приложится!


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
goodking
сообщение Dec 23 2009, 09:33
Сообщение #31


Участник
*

Группа: Участник
Сообщений: 32
Регистрация: 21-12-09
Пользователь №: 54 383



Цитата(demiurg_spb @ Dec 23 2009, 13:29) *
Застрелится.

Что сделать с программой, а не с собой? smile.gif
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Dec 23 2009, 09:46
Сообщение #32


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Цитата(goodking @ Dec 23 2009, 12:33) *
Что сделать с программой, а не с собой? smile.gif
Нет, тут Вы не правы, с программой можно больше ничего пока не делать.
А вот собой заняться стоит! Купить пару умных книжек по Си и изучить их внимательно, как вам уже здесь советовали.


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
goodking
сообщение Dec 23 2009, 10:28
Сообщение #33


Участник
*

Группа: Участник
Сообщений: 32
Регистрация: 21-12-09
Пользователь №: 54 383



Цитата(demiurg_spb @ Dec 23 2009, 12:46) *
Нет, тут Вы не правы, с программой можно больше ничего пока не делать.
А вот собой заняться стоит! Купить пару умных книжек по Си и изучить их внимательно, как вам уже здесь советовали.

Хорошо, спасибо smile.gif
Go to the top of the page
 
+Quote Post
goodking
сообщение Dec 24 2009, 08:46
Сообщение #34


Участник
*

Группа: Участник
Сообщений: 32
Регистрация: 21-12-09
Пользователь №: 54 383



Читаю книжку по МК, там есть пример с выводом результата на LCD, в программе указана следующая таблица
Код
code byte LCDCODE[132] = {0xdb,0xd1,0xdc,0xd9,0x41,0xA0,0x42,0xa1,
                          0xe0,0x45,0xA3,0xA4,0xa5,0xa6,0x4b,0xa7,
                          0x4d,0x48,0x4f,0xa8,0x50,0x43,0x54,0xa9,
                          0xaa,0x58,0xe1,0xab,0xac,0xe2,0xad,0xae,
                          0x62,0xaf,0xb0,0xb1,0x61,0xb2,0xb3,0xb4,
                          0xe3,0x65,0xb6,0xb7,0xb8,0xb9,0xba,0xbb,
                          0xbc,0xbd,0x6f,0xbe,0x70,0x63,0xbf,0x79,
                          0xe4,0x78,0xe5,0xc0,0xc1,0xe6,0xc2,0xc3,
                          0xc4,0xc5,0xc6,0xc7};


я не совсем понимаю, для чего эта подпрограмма, и как она используется, обьясните пожалуйста!
Go to the top of the page
 
+Quote Post
rezident
сообщение Dec 24 2009, 11:52
Сообщение #35


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Посмотрите и сравните кодировку символов символьных LCD, основанных на контроллере HD44780U и его клонах, с кодировками Win-1251, KOI-8R.
http://www.gaw.ru/html.cgi/txt/lcd/chips/hd44780/start.htm
Go to the top of the page
 
+Quote Post
DpInRock
сообщение Dec 24 2009, 11:54
Сообщение #36


Гуру
******

Группа: Участник
Сообщений: 2 254
Регистрация: 4-05-07
Из: Moscow
Пользователь №: 27 515



Слишком тихо телепатируете текст подпрограммы.
По тем обрывкам, что слышу сквозь ментальную атаку пришельцев, полагаю, что символы для вывода на LCD
имеют вполне определенную собственную кодировку. Которая не обязана совпадать с какой-либо существующей, например DOS (и в ней самой куча кодировок, не совпадающих).

Самый простой способ перекодировки из одной системы в другую: входной параметр служит индексом массива. А значение массива - выходным параметром.

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


--------------------
On the road again (Canned Heat)
Go to the top of the page
 
+Quote Post
goodking
сообщение Dec 24 2009, 12:20
Сообщение #37


Участник
*

Группа: Участник
Сообщений: 32
Регистрация: 21-12-09
Пользователь №: 54 383



То-есть таблица служит для перевода символов, которые не поддерживает ЖКИ?
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Dec 24 2009, 12:24
Сообщение #38


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Цитата(DpInRock @ Dec 24 2009, 14:54) *
Таким образом, чтобы перекодировать один байт в любой другой байт нужна таблица размером в 256 байт.

Точнее 128, так как младшая половина обычно совпадает.

Если брать конкретно HD44780 и выводить в формате WIN (1251), то выглядит так:

Код
const uint8_t __flash TabWin[] =    
{
0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf,   // псевдографика
0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7,   // псевдографика
0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf,   // псевдографика
0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee,   // псевдографика
0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6,   // псевдографика
0xa2, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd,   // Ё    псевдографика
0xfe, 0xff, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec,   // псевдографика
0xb5, 0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xfd, 0xff,   // ё    псевдографика
0x41, 0xa0, 0x42, 0xa1, 0xe0, 0x45, 0xa3, 0xa4,   // АБВГДЕЖЗ
0xa5, 0xa6, 0x4b, 0xa7, 0x4d, 0x48, 0x4f, 0xa8,   // ИЙКЛМНОП
0x50, 0x43, 0x54, 0xa9, 0xaa, 0x58, 0xe1, 0xab,   // РСТУФХЦЧ
0xac, 0xe2, 0xad, 0xae, 0x62, 0xaf, 0xb0, 0xb1,   // ШЩЪЫЬЭЮЯ
0x61, 0xb2, 0xb3, 0xb4, 0xe3, 0x65, 0xb6, 0xb7,   // абвгдежз
0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0x6f, 0xbe,   // ийклмноп
0x70, 0x63, 0xbf, 0x79, 0xe4, 0x78, 0xe5, 0xc0,   // рстуфхцч
0xc1, 0xe6, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7,   // шщъыьэюя
};


Начало п/п вывода примерно так
Код
       if(c>=0x80)
       {                            // Если символ не латинский, то
         c -= 0x80;                    // Уменьшить таблицу
         c = TabWin[c];                // Перекодировать
       }
Go to the top of the page
 
+Quote Post
SysRq
сообщение Dec 24 2009, 15:13
Сообщение #39


Чайник, 1 литр
****

Группа: Свой
Сообщений: 655
Регистрация: 17-05-06
Из: Moscow
Пользователь №: 17 168



Отображающуюся на экране букву следует воспринимать как два компонента: графическое изображение символа, и код символа.
Код символа - первичные данные, а изображение символа - функция от кода символа. Функция эта основана на кодировке - таблице соответствий кодов их графическим изображениям.

Суть в том, что в разных кодировках одинаково изображаемые символы имеют разный код, или одинаковый код символа отображается в разные графические изображения в разных кодировках. То что в одной кодировке выглядит как "Абвгд", в другой выглядит как "бВЧЗД", но при этом в виде кодов символов оно одинаково.

Т.о., если вы хотите чтобы набранная строка "Превед" в исходнике вашей программы на компьютере, в кодировке DOS (как предлагают авторы вашей книжки), осталась выглядеть как "Превед" и на LCD-экранчике вашего устройства, у которого своя специальная кодировка, то необходимо преобразовывать коды символов этой строки таким образом, чтобы совпали графические изображения символов. Преобразовывать на основе двух кодовых страниц.

// Ваш К.О.
Go to the top of the page
 
+Quote Post

3 страниц V   1 2 3 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 23:04
Рейтинг@Mail.ru


Страница сгенерированна за 0.08339 секунд с 7
ELECTRONIX ©2004-2016