Я разрабатываю счетчик кликов для микроконтроллера и использую C для разработки кода.
Что происходит здесь, когда я нажимаю первую кнопку, она подсчитывает количество нажатий кнопок. Затем я должен нажать вторую кнопку, чтобы отобразить счетчик в двоичном коде с подсветкой светодиодов. Например, если я нажму первую кнопку 10 раз, загорится второй светодиод и четвертый светодиод.
Поскольку имеется 8 светодиодов, я использую 2 разных порта . (6 бит из PORTB и 2 бита из PORTD).
Для этого я разработал код, использующий if / else. Но я хочу реализовать эту операцию без многократных операций if / else , потому что этот метод выглядит не слишком эффективным.
while(PIND & 0b00100000){ //while PD5 switch is not pressed
if(clickCount>=128){ //if click count>=128
PORTB = PORTB | 0b00100000; //set PB5 HIGH
clickCount-=128; //deduct 128 from clickCount
}else if(clickCount>=64){
PORTB = PORTB | 0b00010000;
clickCount-=64;
}else if(clickCount>=32){
PORTB = PORTB | 0b00001000;
clickCount-=32;
}else if(clickCount>=16){
PORTB = PORTB | 0b00000100;
clickCount-=16;
}else if(clickCount>=8){
PORTB = PORTB | 0b00000010;
clickCount-=8;
}else if(clickCount>=4){
PORTB = PORTB | 0b00000001;
clickCount-=4;
}else if(clickCount>=2){
PORTD = PORTD | 0b10000000;
clickCount-=2;
}else if(clickCount==1){
PORTD = PORTD | 0b01000000;
clickCount = 0;
}
}
И я хочу сделать этот код меньшим количеством байтов. Так есть ли способ разработать этот сегмент кода, используя цикл for или любой другой метод?