Как максимально просто перевести байт из двоично-десятичной в десятичную систему счисления - C (СИ)
Формулировка задачи:
Всем привет в си я не силен , пот столкнулся с проблемой. Приходит мне байт в двоично десятичной системе. Как максимально просто перевести в десятичную систему?
Решение задачи: «Как максимально просто перевести байт из двоично-десятичной в десятичную систему счисления»
textual
Листинг программы
int b1=TWDR; //получил байт
int b2=TWDR;
dva[0]=(b1>>4)<<4;
dva[1]=(b2<<8)>>4;
dva[2]=0b11111101;
dva[3]=0b11111110;
_delay_ms(10) ;
for (int ii=0;ii<=1;ii++)
{
switch(dva[ii]){
case 0b00000000 :PORTD=0b0111111; break;//0
case 0b00010000 :PORTD=0b0000110; break;//1
case 0b00100000 :PORTD=0b1011011; break;//2
case 0b00110000 :PORTD=0b1001111; break;//3
case 0b01000000 :PORTD=0b1100110; break;//4
case 0b01010000 :PORTD=0b1101101; break;//5
case 0b01100000 :PORTD=0b1111101; break;//6
case 0b01110000 :PORTD=0b0000111; break;//7
case 0b10000000 :PORTD=0b1111111; break;//8
case 0b10010000 :PORTD=0b1101111; break;//9
break;
}
PORTC=dva[ii+2];
_delay_ms(10) ;
PORTC=0b11111111;
}
Объяснение кода листинга программы
Список элементов кода, сопровождаемых номерами:
- Объявление переменной
b1и присваивание ей значенияTWDR(возможно, это значение поступает с периферийного устройства). - Объявление переменной
b2и присваивание ей значенияTWDR. - Попытка перевести байт в десятичную систему счисления, используя сдвиги и маску. Значение
dva[0]будет содержать старшие 4 бита байта, аdva[1]- младшие 4 бита. - Присваивание переменной
dva[2]значение 0b11111101. - Присваивание переменной
dva[3]значение 0b11111110. - Задержка в 10 миллисекунд.
- Начало цикла, который будет выполняться для каждого из двух возможных значений
dva[ii]. - В каждой итерации цикла происходит проверка значения
dva[ii]и присвоение соответствующего значения портуPORTD. - После каждой итерации цикла происходит задержка в 10 миллисекунд.
- После завершения цикла происходит присвоение порту
PORTCзначениеdva[ii+2]. - Задержка в 10 миллисекунд.
- Присваивание порту
PORTCзначение 0b11111111. Похоже, что этот код выполняет функцию перевода двоичного значения в десятичное, а затем использует это значение для управления светодиодами, начиная с определенного адреса и с задержками между каждым шагом. Однако, без дополнительной информации о контексте, это лишь предположение.