PaulS:
Consistent use of one base would be a good thing.
True it muddies the water using different bases but not the/a problem unless it casts to different data type.
I did not noticed you had commented out the "static byte lastValue;" its now replaced and corrected with proper data type "static unsigned long lastValue;". Without 'static' each time round the loop 'lastValue' was being reset to zero so you lost what the last non repeat key was. Ended up de-soldering the IR receiver from a defunct VHS recorder here at work to build a test setup
#include <IRremote.h>
int RECV_PIN = 11;
IRrecv irrecv(RECV_PIN);
decode_results results;
int led7 = 7;
int led8 = 8;
void setup()
{
  pinMode(led7, OUTPUT);
  pinMode(led8, OUTPUT);
 Â
  Serial.begin(9600);
  irrecv.enableIRIn(); // Start the receiver
 Â
  digitalWrite(led7, LOW);
  digitalWrite(led8, LOW);
 Â
}
void loop() {
  static unsigned long lastValue;
  if (irrecv.decode(&results)) {       // Check for IR button press
    unsigned long newValue = results.value; // Get IR code
    if (newValue == 0xffffffff) {     // NEC repeat button pressed?
      newValue = lastValue;       // Substitute last not repeat code
    }
    else {                 // Not repeat code
      lastValue = newValue;       // Store last not repeat code
    }
   Â
    switch (newValue) {
    case 0x77E1D08B:
      //do something when var equals 1
      digitalWrite(led7, HIGH);
      delay(50);
      break;
    case 0x77E1B08B:
      //do something when var equals 2
      digitalWrite(led8, HIGH);
      delay(50);
      break;
    }
    digitalWrite(led7, LOW);
    digitalWrite(led8, LOW);
    irrecv.resume();            // Receive the next value
  }
}