Я пытался отобразить 7-сегментный светодиод на комплекте MDA-8086, но я застрял в вычислении шестнадцатеричных значений для соответствующих цифр. Код у меня с собой, но я не понимаю, как он работает. Например, 0 представлен шестнадцатеричным значением 0xc0 [я полагаю]. Мне интересно, как здесь были рассчитаны значения?
C Код для 7-сегментного светодиодного дисплея:
#include"mde8086.h"
int data[11] = { 0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90, 0x00 };
void wait(long del)
{
while( del-- );
}
void main(void)
{
int *data1;
/* 8255 -1 Initialization */
outportb( PPI1_CR, 0x80 );
outportb( PPI1_B, 0xf0 );
outportb( PPI1_C, 0x00 );
//main loop
do {
data1 = data;
while( *data1 != 0x00 )
{
outportb( PPI1_A, *data1 );
wait(30000);
data1++;
}
} while(1);
}
Результат был сгенерирован отсюда:
1
отображается, освещая всего 2 сегмента, поэтому мы можем сказать, что это должно быть0xc0
(в двоичном представлении которого установлено только 2 бита, поэтому сегмент b = 0x80, c = 0x40 или наоборот). цикл по этому массиву подсчитывает от 1 до 9, а затем, я думаю, оборачивается до 0. Но это не сработает, если вы посмотрите на остальные; есть другие шаблоны с установленным только 1 или парой битов, так что должно быть так, что маски инвертированы, а чистые биты освещают соответствующий сегмент? Тогда оставив сегмент G и десятичную запятую незажженными, могут быть верхние 2 бита. - person Peter Cordes   schedule 26.08.2020