Например TDA7294

Форум РадиоКот • Просмотр темы - Семисегментный индикатор. Помогите с перекодировкой.
Форум РадиоКот
Здесь можно немножко помяукать :)

Текущее время: Пт янв 02, 2026 21:39:45

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 13 ] 
Автор Сообщение
Не в сети
 Заголовок сообщения: Семисегментный индикатор. Помогите с перекодировкой.
СообщениеДобавлено: Вт май 14, 2013 18:50:19 
Встал на лапы
Аватар пользователя

Зарегистрирован: Пн май 03, 2010 02:19:08
Сообщений: 82
Откуда: Москва
Рейтинг сообщения: 0
Всем привет.
Устройство на PIC16F84A.
Программный счётчик выполняет 16-тиразрядный счёт и записывает результат в два байта ОЗУ.
Полученное значение надо показать на семисегментном, 4-хразрядном индикаторе.
Как преобразовать двубайтное число, больше 255, в четыре отдельных байта?
Чтобы потом перекодировать каждый из 4-х байт в код семисегментной цифры и показать на индикаторе поразрядно.
С уважением, Питер.

_________________
Программист ПЛИС


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Семисегментный индикатор. Помогите с перекодировкой.
СообщениеДобавлено: Вт май 14, 2013 18:58:13 
Сверлит текстолит когтями
Аватар пользователя

Карма: 4
Рейтинг сообщений: 30
Зарегистрирован: Ср янв 05, 2011 16:25:15
Сообщений: 1163
Рейтинг сообщения: 0
Код:
//
#define led_a 0x01
#define led_b 0x02
#define led_c 0x04
#define led_d 0x08
#define led_e 0x10
#define led_f 0x20
#define led_g 0x40
#define led_h 0x80

#define  ch_0 (led_a + led_b + led_c + led_d + led_e + led_f)
#define  ch_1 (led_b + led_c)
#define  ch_2 (led_a + led_b + led_g + led_d + led_e)
#define  ch_3 (led_a + led_b + led_c + led_d + led_g)
#define  ch_4 (led_b + led_c + led_g + led_f)
#define  ch_5 (led_a + led_c + led_d + led_g + led_f)
#define  ch_6 (led_a + led_c + led_d + led_g + led_f + led_e)
#define  ch_7 (led_a + led_b + led_c)
#define  ch_8 (led_a + led_b + led_c + led_d + led_e + led_f + led_g)
#define  ch_9 (led_a + led_b + led_c + led_d + led_g + led_f)

а дальше
Код:
flash char table[10]={ch_0,ch_1,ch_2,ch_3,ch_4,ch_5,ch_6,ch_7,ch_8,ch_9};
...
PORTx=table[n]; // n - число 0..9


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Семисегментный индикатор. Помогите с перекодировкой.
СообщениеДобавлено: Вт май 14, 2013 19:13:38 
Встал на лапы
Аватар пользователя

Зарегистрирован: Пн май 03, 2010 02:19:08
Сообщений: 82
Откуда: Москва
Рейтинг сообщения: 0
Это перекодировка в семисегментные цифры.
А я спрашиваю:
"Как перекодировать двоичное число, выраженное 16-ю разрядами т. е. 2-мя байтами, в 5 отдельный байт, содержащие десяткитысяч, тысячи, сотни десятки и единицы."
16-ти разрядное число - это число от 0 до 65536 т. е. пять разрядов.
А 255 - 3 разряда т.е. 1 байт.

_________________
Программист ПЛИС


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Семисегментный индикатор. Помогите с перекодировкой.
СообщениеДобавлено: Вт май 14, 2013 19:19:15 
Сверлит текстолит когтями
Аватар пользователя

Карма: 4
Рейтинг сообщений: 30
Зарегистрирован: Ср янв 05, 2011 16:25:15
Сообщений: 1163
Рейтинг сообщения: 0
понял - welcome

PS. .. если сложно - можно последовательно вычитать 10000,1000,100,10 сохраняя число вычетов n которое и подставить в table[n]


Вернуться наверх
 
Эиком - электронные компоненты и радиодетали
Не в сети
 Заголовок сообщения: Re: Семисегментный индикатор. Помогите с перекодировкой.
СообщениеДобавлено: Вт май 14, 2013 19:26:14 
Встал на лапы
Аватар пользователя

Зарегистрирован: Пн май 03, 2010 02:19:08
Сообщений: 82
Откуда: Москва
Рейтинг сообщения: 0
ChipKiller писал(а):
понял - welcome

PS. .. если сложно - можно последовательно вычитать 10000,1000,100,10 сохраняя число вычетов n которое и подставить в table[n]

вычесть 100 и 10 ясно.
Как из одного байта вычесть 1000 и 10000?
Объясните пожалуйста алгоритм.

_________________
Программист ПЛИС


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Семисегментный индикатор. Помогите с перекодировкой.
СообщениеДобавлено: Вт май 14, 2013 19:30:17 
Сверлит текстолит когтями
Аватар пользователя

Карма: 4
Рейтинг сообщений: 30
Зарегистрирован: Ср янв 05, 2011 16:25:15
Сообщений: 1163
Рейтинг сообщения: 0
Цитата:
Как из одного байта вычесть 1000 и 10000?
из одного байта - никак. Вычитаете из двух байт (по очереди с учетом флага переноса)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Семисегментный индикатор. Помогите с перекодировкой.
СообщениеДобавлено: Вт май 14, 2013 19:41:38 
Встал на лапы
Аватар пользователя

Зарегистрирован: Пн май 03, 2010 02:19:08
Сообщений: 82
Откуда: Москва
Рейтинг сообщения: 0
ChipKiller писал(а):
Цитата:
Как из одного байта вычесть 1000 и 10000?
из одного байта - никак. Вычитаете из двух байт (по очереди с учетом флага переноса)

Но ведь 1000 состоит тоже из двух байт. Это - 0000 0011 1110 1000
И 10000 тоже - 0010 0111 0001 0000

_________________
Программист ПЛИС


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Семисегментный индикатор. Помогите с перекодировкой.
СообщениеДобавлено: Вт май 14, 2013 19:44:59 
Встал на лапы
Аватар пользователя

Зарегистрирован: Пн май 03, 2010 02:19:08
Сообщений: 82
Откуда: Москва
Рейтинг сообщения: 0
Я примера код преобразования одного байта.
Код:
   clrf   hun   ;Очистить сотни
   clrf   dec   ;Очистить десятки
   bsf   status,c   ;Установить перенос
con100
   movlw   d'100'   ;
   subwf   count1,w   ;Вычесть сто
   btfss   status,c   ;Если сотен не осталось,
   goto   con10   ;идти дальше
   movwf   count1   ;Иначе сохранить остаток
   incf   hun,f   ;и добавить сотню
   goto   con100   ;и повторить
   bsf   status,c   ;Установить перенос
con10
   movlw   d'10'   ;
   subwf   count1,w   ;Вычесть десять
   btfss   status,c   ;Если сотен не осталось,
   goto   con1   ;идти дальше
   movwf   count1   ;Иначе сохранить остаток
   incf   dec,f   ;и добавить сотню
   goto   con10   ;и повторить
con1

_________________
Программист ПЛИС


Последний раз редактировалось ipiter Ср май 15, 2013 15:33:30, всего редактировалось 2 раз(а).

Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Семисегментный индикатор. Помогите с перекодировкой.
СообщениеДобавлено: Ср май 15, 2013 06:09:30 
Вымогатель припоя
Аватар пользователя

Карма: 5
Рейтинг сообщений: 74
Зарегистрирован: Пн июн 18, 2012 12:01:04
Сообщений: 650
Откуда: Челябинская область, Копейск
Рейтинг сообщения: 0
Сначала вычитаете по 10000 до тех пор пока число не станет меньше 10000, затем вычитаете по 1000, затем по 100, затем по 10 и остаток единицы. Для первых двух используется двухбайтовое вычитание.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Семисегментный индикатор. Помогите с перекодировкой.
СообщениеДобавлено: Ср май 15, 2013 06:39:17 
Потрогал лапой паяльник
Аватар пользователя

Карма: 2
Рейтинг сообщений: 13
Зарегистрирован: Чт июн 23, 2011 07:55:51
Сообщений: 330
Рейтинг сообщения: 0
Для ipiter, строка
Код:
bsf   status,c   ;Установить перенос

никогда не выполнится.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Семисегментный индикатор. Помогите с перекодировкой.
СообщениеДобавлено: Ср май 15, 2013 07:07:25 
Сверлит текстолит когтями
Аватар пользователя

Карма: 4
Рейтинг сообщений: 30
Зарегистрирован: Ср янв 05, 2011 16:25:15
Сообщений: 1163
Рейтинг сообщения: 0
похоже ТС имеет весьма смутные представления о двоичной арифметике, так что лучше разобраться с основами http://progcode.narod.ru/stati/asm_stan ... tricks.pdf

PS. на последней странице есть пример многобайтного вычитания


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Семисегментный индикатор. Помогите с перекодировкой.
СообщениеДобавлено: Ср май 15, 2013 15:27:11 
Встал на лапы
Аватар пользователя

Зарегистрирован: Пн май 03, 2010 02:19:08
Сообщений: 82
Откуда: Москва
Рейтинг сообщения: 0
ChipKiller писал(а):
похоже ТС имеет весьма смутные представления о двоичной арифметике, так что лучше разобраться с основами http://progcode.narod.ru/stati/asm_stan ... tricks.pdf

PS. на последней странице есть пример многобайтного вычитания

Вот это то, что надо!
Спасибо.

_________________
Программист ПЛИС


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Семисегментный индикатор. Помогите с перекодировкой.
СообщениеДобавлено: Ср май 15, 2013 15:29:09 
Встал на лапы
Аватар пользователя

Зарегистрирован: Пн май 03, 2010 02:19:08
Сообщений: 82
Откуда: Москва
Рейтинг сообщения: 0
korsaj писал(а):
Для ipiter, строка
Код:
bsf   status,c   ;Установить перенос

никогда не выполнится.

Посмотрите, в каком случае перенос устанавливается.

_________________
Программист ПЛИС


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 13 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 18


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y