user34877: First C program. Spent a lot of time looking for a solution. KeyPad produces 'char' instead on 'int'.  Plus I want to display 'End', thus I wrote the 'main' to to support 'char' and thus had to adapt a 'char' to 'int' conversion work around, line 89  Certainly there are other errors.
extern "C" 
// Microwave ccp

  #include <Arduino.h>
  #include <stdlib.h>
  #include <string.h>
  #include <inttypes.h>
  #include <Keypad.h> 
  #include "TM1637.h"
  #include <TimerOne.h>
class TimingISR
{
public:
    TimingISR();
    bool Enable_interrupts, Disable_interrupts;

  char lead_char, unit_sec, tens_sec, num_min;
  int int_unit_sec, int_tens_sec, int_num_min;
  int Count_Seconds, Remainder, brightness = 4, PowerLevel;   //BRIGHT_TYPICAL = 4, BRIGHT_DARKEST = 0, BRIGHTEST = 7
  bool Colon, PointFlag, Points_enable;  
  char data_char;  
};

// these are all Clobal Variables
  int pin_Clk = 2; //  or 3 for IC2
  int pin_DIO = 3; //  or 2 for IC2
  int PIN_RELAY = 4;  // controls power on/off to 'cook'   
  int PIN_Beeper = 5; // PWM beeps when finished

  int  pos, Remainder, num;
    // Timer variables
  char tempchar;

  // Read Key Pad, continuously
const byte ROWS = 4; // Four rows
const byte COLS = 3; // Three columns 
char lastkey;
char keys[ROWS][COLS] = {
  {'1','2','3'},
  {'4','5','6'},
  {'7','8','9'},
  {'#','0','*'} };// Define the Keymap
byte rowPins[ROWS] = { 9, 8, 7, 6 };  // Connect keypad ROW0, ROW1, ROW2 and ROW3 to these Arduino pins.
byte colPins[COLS] = { 12, 11, 10 };  // Connect keypad COL0, COL1 and COL2 to these Arduino pins.
Keypad kpd = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );  // Create the Keypad
#define ledpin 13    
void setup() 
//        Colon = OFF;   PointFlag, Points_enable   ***************************not coded yet
{
  pinMode(ledpin,OUTPUT);
  digitalWrite(ledpin, HIGH);
  Serial.begin(9600); 
}
void loop()       
{    // run repeatedly 

   char key = kpd.getKey();
   // if ((key = NO_KEY) || (lastkey = key)); delay(100); exit(0);    }    

 {  if (key)  // Check for a valid key.
      switch (key) {   

      case ('0'): case ('1' - '0'): case ('2' - '0'): case ('3'-'0'): case ('4' - '0'):  case ('5' - '0'): case ('6' - '0'): case ('7' - '0'): case ('8' - '0'): case ('9' - '0'): //all key integers 
 { if ( Count_Seconds > 0 ) // Cooking in progress, thus SHUT DOWN, any numeric key shuts down the power        
  {  lead_char = 'C';
     num_min=    'n';
     tens_sec=   'C';
     unit_sec=   'l'; 
goto CancelPower;
  } //  Short Delay, then Display “A000”
    else 
  {     num_min = tens_sec;  // integers: update the 'time' 'stack' as integers
        tens_sec = unit_sec;
        unit_sec =  (key-'0');  // '0' = 30 base 10 etc
        lastkey = key;
        Colon = ON;
goto DisplayAll;   // accumulate time value  // any old num_min_segment fall off    
  } }     //
  break;  //---------------------------------------

      case ('#'-'0'):  // Start Heating
      if (lead_char != 'A')   
goto OOPS ; 
       else  // convert time parts to Count_Seconds
        (  Count_Seconds = int(unit_sec) + int(tens_sec) * 10 + int(num_min) * 60  );
  {       if  (  Count_Seconds > 0 )          
TimingISR(  ) ; 
          lead_char = 'c'; //  ’c’ooking                      
          Colon = ON; 
          pinMode(PIN_RELAY, OUTPUT);
          digitalWrite(PIN_RELAY, HIGH);  // turn on the heat
          PowerLevel = 10;
  }
   break;  //---------------------------------------

      case  ('*'-'0'):  // Set Power level or default DEFROST Power level
     //unit_sec_segment = a number as a 'segment' value    // a power level manually inserted
{   if ( lead_char ==  'A'  &&   num_min == '0' &&  tens_sec == '0' )
{    if ( unit_sec =  !('0') )         // &&  unit_sec > '0' && unit_sec <= '9' ) 
 {      int PowerLevel = aoti(unit_sec);    
        lead_char = 'P';    //Display "P=n0", n = percent power via duty cycle
        num_min =   '=';
        tens_sec = unit_sec;  //display 'char' as 10's 'percent' value, move number left one place 
        unit_sec =  '0';  // insert a zero                       
 }   else  // power not manually set
 {      PowerLevel = 2;     // 'defrost' = 20 %   
        lead_char = 'd';    
        num_min =   'E';
        tens_sec =  'F';
        unit_sec =  '_';
 }             
goto DisplayAll; 
}
   else 
//    if ( lead_char != 'A'  ||  num_min != '0' ||  tens_sec != '0' || unit_sec !=  '0' )
goto OOPS ;
}     //end if, of Case “*" 
      break;  //---------------------------------------

   lastkey = key;
delay(100);  //100 millisec
}   // End Of Switch Key
}  //  End of If (Key)
//return

// Beginning of GOTO's--------------------------------------  
{
OOPS:     
     lead_char = 'o';   //Display "ooPS"
     num_min =   'o';
     tens_sec=   'P';
     unit_sec =  'S';   // then Short Delay, then Display “A000” 
CancelPower: 
      pinMode(PIN_RELAY,OUTPUT);
      digitalWrite(PIN_RELAY, LOW);  // turn off the heat    
goto DisplayAll;  //ready to accumulate 'heating' time input
    delay (3000);     //let it display for 3 Count_Seconds, then clear the display
    lead_char = 'A';        //ready to accumulate 'heating' time input
    num_min =   '0';
    tens_sec =  '0';
    unit_sec =  '0';  
    Disable_interrupts;
    int Count_Seconds = 0 ;    
DisplayAll:

// DisplayAll:  //Would like to put this into the 7 segment display
 // Address each 7 segent unit, one after the other; left to right  
{    for ( pos = 0 ; 3 < 4; pos++);
      if ( pos = 0 )
        char_data = lead_char
      if ( pos = 1 )
        char_data = num_min
      if ( pos = 2 )
        char_data = tens_sec
      if ( pos = 3 )
        char_data = unit_sec     

if ( char_data='0') ; num = 1; // the 7 segment display 'h' only allows for integers 0 through 15, i.e. HEX characters
if ( char_data='1') ; num = 2; 
if ( char_data='2') ; num = 3; 
if ( char_data='3') ; num = 4; 
if ( char_data='4') ; num = 5; 
if ( char_data='5') ; num = 6; 
if ( char_data='6') ; num = 7; 
if ( char_data='7') ; num = 8; 
if ( char_data='8') ; num = 9; 
if ( char_data='9') ; num = 10; 
if ( char_data='A') ; num = 11; 
if ( char_data='B') ; num = 12; 
if ( char_data='C') ; num = 13; 
if ( char_data='d') ; num = 14; 
if ( char_data='E') ; num = 15; 
if ( char_data='F') ; num = 16; 
if ( char_data='c') ; num = 17; 
if ( char_data='H') ; num = 18; 
if ( char_data='h') ; num = 19; 
if ( char_data='I') ; num = 20; //left vertical 2 segments 
if ( char_data='i') ; num = 21; 
if ( char_data='L') ; num = 22; 
if ( char_data='l') ; num = 23; /right /vertical 2 segments 
if ( char_data='n') ; num = 24; 
if ( char_data='O') ; num = 25; 
if ( char_data='o') ; num = 26; 
if ( char_data='P') ; num = 27; 
if ( char_data='r') ; num = 28; 
if ( char_data='S') ; num = 29; //same as a five 
if ( char_data='U') ; num = 30; 
if ( char_data='u') ; num = 31; 
if ( char_data=' ') ; num = 32; 
if ( char_data='=') ; num = 33; 
if ( char_data='-') ; num = 34; //dash / minus 
if ( char_data='_') ; num = 35; //under score 
if ( char_data='[') ; num = 36; /left /bracket 
if ( char_data=']') ; num = 37; //right bracket
// there are other usefull, such as "top score", "middle score... "top minus", "bottom Minus",
// which yoou could assign some other othervise unprintable character as a proxy, e.g  the ampersant to display a "top position minus sign"

} 
Disable_Interrupts;
  TM1637DisplayAll(uint8_t num, uint8_t pos);
Enable_Interrupts;
}
return(0)
}
}  //  End of void LOOP()

//--------------------------------------

// ----------------------------------------------------


user10394: 
The first line says extern "C" but you haven't scoped it, I'm really not sure what you are trying to achieve or if it will work.  Personally I would remove that line.
"Microwave ccp" come compilers complain if the filename is not right.  As far as I know it should be either .cc or .cpp, but its proably just a typo in the comment, because I doubt you would get this far if it was wrong.
Pins 2 and 3 for I2C, its normally A4 and A5.
Line 58 The reason your commented out code didn't work is (lastkey = delay) you should have used equivalence (==) rather than assignment (=).
Use function calls rather than goto statements, it isn't the 1970s anymore! :)
int(variable) is not casting it is creating an integer from variable and then its disposed of when it goes out of scope.  (int)variable is casting.
for (pos = 0; 3 < 4; pos++); This will cause you problems, because its an empty loop, does nothing, which means pos doesn't have the value you think it does.

Please don't take any of this the wrong way, I'm not a teacher but I need to explain what has gone wrong with you code and how you can fix it.  It is not personal criticism, I bet my first program was ten times worse.
You seem to have a misunderstanding of "variable scopes".  Put simply a variable can only be 'seen' after the point you declare it and within the immediate curly braces {} and all child braces. e.g.:
int GlobalVariable = 1; // Visible through-out the code
void loop ()
{
    int LoopVariable = 2;
    for (int ForVariable = 0 ForVariable < LoopVariable; ++ForVariable)
    { 
       ++GlobalVariable;
    }
    Serial.println (ForVariable);  // ERROR
}
void AFunction()
{
    Serial.println(LoopVariable);//ERROR
}

You immediate error is you have defined the variable unit_sec inside class TimingISR and you are accessing it like a local variable.  
Now The way you have defined class TimingISR is like designing a car, its fine on paper but you can't drive it until you build one.  As far as I can see you haven't instantiated an instance of TimingISR.  It sounds complex but you have been doing it for int and char (They aren't classes, but its very similar)  
int pin_clk = 2;
TimingISR aTimingISR;

If a value should change define it as const.
const int pin_clk = 2;

If it does change you will get a compilation error rather than suddenly sending the I2C clock signal to the on board LED.
goto is evil.  
case ('0'): case ('1' - '0'): case ('2' - '0'): case ('3' - '0'): case ('4' - '0'):  case ('5' - '0'): case ('6' - '0'): case ('7' - '0'): case ('8' - '0'): case ('9' - '0'): //all key integers 
        { if (Count_Seconds > 0) // Cooking in progress, thus SHUT DOWN, any numeric key shuts down the power        
        {
            lead_char = 'C';
            num_min = 'n';
            tens_sec = 'C';
            unit_sec = 'l';
            goto CancelPower;

CancelPower:
        pinMode(PIN_RELAY, OUTPUT);
        digitalWrite(PIN_RELAY, LOW);  // turn off the heat    
        goto DisplayAll;  //ready to accumulate 'heating' time input
        delay(3000);         /// NEVER EXECUTED
        lead_char = 'A';     /// NEVER EXECUTED 
        num_min = '0';       /// NEVER EXECUTED
        tens_sec = '0';      /// NEVER EXECUTED
        unit_sec = '0';      /// NEVER EXECUTED
        Disable_interrupts;  /// NEVER EXECUTED
        int Count_Seconds = 0;/// NEVER EXECUTED
    DisplayAll:

        // DisplayAll:  //Would like to put this into the 7 segment display
        // Address each 7 segent unit, one after the other; left to right  
// Code cut (but it should be == not =)
        Disable_Interrupts;
        TM1637DisplayAll(uint8_t num, uint8_t pos);
        Enable_Interrupts;

Code isn't being executed because gotos never return to the call, they just carry on from the label.  Try this instead:
// TimingISR& theISR means you can change the values in theISR
// TimingISR  theISR means you copy theISR and all changes are lost when the function exits.
// TimingISR const& theISR means you can't change the values in theISR
void CancelPower (TimingISR& theISR) 
{
  pinMode(PIN_RELAY, OUTPUT);
  digitalWrite(PIN_RELAY, LOW);  // turn off the heat    
  DisplayAll(theISR);  //ready to accumulate 'heating' time input
  delay(3000);     //let it display for 3 Count_Seconds, 
  ClearDisplay();
  theISR.lead_char = 'A';        //ready to accumulate 'heating' time input
  theISR.num_min = '0';
  theISR.tens_sec = '0';
  theISR.unit_sec = '0';
  theISR.Disable_interrupts(); // This should be a function that does something, not a bool
  theISR.Count_Seconds = 0;
}

I'm afraid that's just some of the things you need to change, BUT that's one hell of a program for a first attempts and that's the only reason I raised so many issues.  Try again and post it again, I'd love to  see the differences.

34877: <p>First C program. Spent a lot of time looking for a solution. KeyPad produces 'char' instead on 'int'.  Plus I want to display 'End', thus I wrote the 'main' to to support 'char' and thus had to adapt a 'char' to 'int' conversion work around, line 89  Certainly there are other errors.</p>

<pre><code>extern "C" 
// Microwave ccp

  #include &lt;Arduino.h&gt;
  #include &lt;stdlib.h&gt;
  #include &lt;string.h&gt;
  #include &lt;inttypes.h&gt;
  #include &lt;Keypad.h&gt; 
  #include "TM1637.h"
  #include &lt;TimerOne.h&gt;
class TimingISR
{
public:
    TimingISR();
    bool Enable_interrupts, Disable_interrupts;

  char lead_char, unit_sec, tens_sec, num_min;
  int int_unit_sec, int_tens_sec, int_num_min;
  int Count_Seconds, Remainder, brightness = 4, PowerLevel;   //BRIGHT_TYPICAL = 4, BRIGHT_DARKEST = 0, BRIGHTEST = 7
  bool Colon, PointFlag, Points_enable;  
  char data_char;  
};

// these are all Clobal Variables
  int pin_Clk = 2; //  or 3 for IC2
  int pin_DIO = 3; //  or 2 for IC2
  int PIN_RELAY = 4;  // controls power on/off to 'cook'   
  int PIN_Beeper = 5; // PWM beeps when finished

  int  pos, Remainder, num;
    // Timer variables
  char tempchar;

  // Read Key Pad, continuously
const byte ROWS = 4; // Four rows
const byte COLS = 3; // Three columns 
char lastkey;
char keys[ROWS][COLS] = {
  {'1','2','3'},
  {'4','5','6'},
  {'7','8','9'},
  {'#','0','*'} };// Define the Keymap
byte rowPins[ROWS] = { 9, 8, 7, 6 };  // Connect keypad ROW0, ROW1, ROW2 and ROW3 to these Arduino pins.
byte colPins[COLS] = { 12, 11, 10 };  // Connect keypad COL0, COL1 and COL2 to these Arduino pins.
Keypad kpd = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );  // Create the Keypad
#define ledpin 13    
void setup() 
//        Colon = OFF;   PointFlag, Points_enable   ***************************not coded yet
{
  pinMode(ledpin,OUTPUT);
  digitalWrite(ledpin, HIGH);
  Serial.begin(9600); 
}
void loop()       
{    // run repeatedly 

   char key = kpd.getKey();
   // if ((key = NO_KEY) || (lastkey = key)); delay(100); exit(0);    }    

 {  if (key)  // Check for a valid key.
      switch (key) {   

      case ('0'): case ('1' - '0'): case ('2' - '0'): case ('3'-'0'): case ('4' - '0'):  case ('5' - '0'): case ('6' - '0'): case ('7' - '0'): case ('8' - '0'): case ('9' - '0'): //all key integers 
 { if ( Count_Seconds &gt; 0 ) // Cooking in progress, thus SHUT DOWN, any numeric key shuts down the power        
  {  lead_char = 'C';
     num_min=    'n';
     tens_sec=   'C';
     unit_sec=   'l'; 
goto CancelPower;
  } //  Short Delay, then Display “A000”
    else 
  {     num_min = tens_sec;  // integers: update the 'time' 'stack' as integers
        tens_sec = unit_sec;
        unit_sec =  (key-'0');  // '0' = 30 base 10 etc
        lastkey = key;
        Colon = ON;
goto DisplayAll;   // accumulate time value  // any old num_min_segment fall off    
  } }     //
  break;  //---------------------------------------

      case ('#'-'0'):  // Start Heating
      if (lead_char != 'A')   
goto OOPS ; 
       else  // convert time parts to Count_Seconds
        (  Count_Seconds = int(unit_sec) + int(tens_sec) * 10 + int(num_min) * 60  );
  {       if  (  Count_Seconds &gt; 0 )          
TimingISR(  ) ; 
          lead_char = 'c'; //  ’c’ooking                      
          Colon = ON; 
          pinMode(PIN_RELAY, OUTPUT);
          digitalWrite(PIN_RELAY, HIGH);  // turn on the heat
          PowerLevel = 10;
  }
   break;  //---------------------------------------

      case  ('*'-'0'):  // Set Power level or default DEFROST Power level
     //unit_sec_segment = a number as a 'segment' value    // a power level manually inserted
{   if ( lead_char ==  'A'  &amp;&amp;   num_min == '0' &amp;&amp;  tens_sec == '0' )
{    if ( unit_sec =  !('0') )         // &amp;&amp;  unit_sec &gt; '0' &amp;&amp; unit_sec &lt;= '9' ) 
 {      int PowerLevel = aoti(unit_sec);    
        lead_char = 'P';    //Display "P=n0", n = percent power via duty cycle
        num_min =   '=';
        tens_sec = unit_sec;  //display 'char' as 10's 'percent' value, move number left one place 
        unit_sec =  '0';  // insert a zero                       
 }   else  // power not manually set
 {      PowerLevel = 2;     // 'defrost' = 20 %   
        lead_char = 'd';    
        num_min =   'E';
        tens_sec =  'F';
        unit_sec =  '_';
 }             
goto DisplayAll; 
}
   else 
//    if ( lead_char != 'A'  ||  num_min != '0' ||  tens_sec != '0' || unit_sec !=  '0' )
goto OOPS ;
}     //end if, of Case “*" 
      break;  //---------------------------------------

   lastkey = key;
delay(100);  //100 millisec
}   // End Of Switch Key
}  //  End of If (Key)
//return

// Beginning of GOTO's--------------------------------------  
{
OOPS:     
     lead_char = 'o';   //Display "ooPS"
     num_min =   'o';
     tens_sec=   'P';
     unit_sec =  'S';   // then Short Delay, then Display “A000” 
CancelPower: 
      pinMode(PIN_RELAY,OUTPUT);
      digitalWrite(PIN_RELAY, LOW);  // turn off the heat    
goto DisplayAll;  //ready to accumulate 'heating' time input
    delay (3000);     //let it display for 3 Count_Seconds, then clear the display
    lead_char = 'A';        //ready to accumulate 'heating' time input
    num_min =   '0';
    tens_sec =  '0';
    unit_sec =  '0';  
    Disable_interrupts;
    int Count_Seconds = 0 ;    
DisplayAll:

// DisplayAll:  //Would like to put this into the 7 segment display
 // Address each 7 segent unit, one after the other; left to right  
{    for ( pos = 0 ; 3 &lt; 4; pos++);
      if ( pos = 0 )
        char_data = lead_char
      if ( pos = 1 )
        char_data = num_min
      if ( pos = 2 )
        char_data = tens_sec
      if ( pos = 3 )
        char_data = unit_sec     

if ( char_data='0') ; num = 1; // the 7 segment display 'h' only allows for integers 0 through 15, i.e. HEX characters
if ( char_data='1') ; num = 2; 
if ( char_data='2') ; num = 3; 
if ( char_data='3') ; num = 4; 
if ( char_data='4') ; num = 5; 
if ( char_data='5') ; num = 6; 
if ( char_data='6') ; num = 7; 
if ( char_data='7') ; num = 8; 
if ( char_data='8') ; num = 9; 
if ( char_data='9') ; num = 10; 
if ( char_data='A') ; num = 11; 
if ( char_data='B') ; num = 12; 
if ( char_data='C') ; num = 13; 
if ( char_data='d') ; num = 14; 
if ( char_data='E') ; num = 15; 
if ( char_data='F') ; num = 16; 
if ( char_data='c') ; num = 17; 
if ( char_data='H') ; num = 18; 
if ( char_data='h') ; num = 19; 
if ( char_data='I') ; num = 20; //left vertical 2 segments 
if ( char_data='i') ; num = 21; 
if ( char_data='L') ; num = 22; 
if ( char_data='l') ; num = 23; /right /vertical 2 segments 
if ( char_data='n') ; num = 24; 
if ( char_data='O') ; num = 25; 
if ( char_data='o') ; num = 26; 
if ( char_data='P') ; num = 27; 
if ( char_data='r') ; num = 28; 
if ( char_data='S') ; num = 29; //same as a five 
if ( char_data='U') ; num = 30; 
if ( char_data='u') ; num = 31; 
if ( char_data=' ') ; num = 32; 
if ( char_data='=') ; num = 33; 
if ( char_data='-') ; num = 34; //dash / minus 
if ( char_data='_') ; num = 35; //under score 
if ( char_data='[') ; num = 36; /left /bracket 
if ( char_data=']') ; num = 37; //right bracket
// there are other usefull, such as "top score", "middle score... "top minus", "bottom Minus",
// which yoou could assign some other othervise unprintable character as a proxy, e.g  the ampersant to display a "top position minus sign"

} 
Disable_Interrupts;
  TM1637DisplayAll(uint8_t num, uint8_t pos);
Enable_Interrupts;
}
return(0)
}
}  //  End of void LOOP()

//--------------------------------------

// ----------------------------------------------------
</code></pre>
 10394: <ol>
<li>The first line says <code>extern "C"</code> but you haven't scoped it, I'm really not sure what you are trying to achieve or if it will work.  Personally I would remove that line.</li>
<li>"Microwave ccp" come compilers complain if the filename is not right.  As far as I know it should be either .cc or .cpp, but its proably just a typo in the comment, because I doubt you would get this far if it was wrong.</li>
<li>Pins 2 and 3 for I2C, its normally A4 and A5.</li>
<li>Line 58 The reason your commented out code didn't work is <code>(lastkey = delay)</code> you should have used equivalence (==) rather than assignment (=).</li>
<li>Use function calls rather than goto statements, it isn't the 1970s anymore! :)</li>
<li><code>int(variable)</code> is not casting it is creating an integer from variable and then its disposed of when it goes out of scope.  <code>(int)variable</code> is casting.</li>
<li><code>for (pos = 0; 3 &lt; 4; pos++);</code> This will cause you problems, because its an empty loop, does nothing, which means <code>pos</code> doesn't have the value you think it does.</li>
</ol>

<p>Please don't take any of this the wrong way, I'm not a teacher but I need to explain what has gone wrong with you code and how you can fix it.  It is not personal criticism, I bet my first program was ten times worse.</p>

<p>You seem to have a misunderstanding of "variable scopes".  Put simply a variable can only be 'seen' after the point you declare it and within the immediate curly braces {} and all child braces. e.g.:</p>

<pre><code>int GlobalVariable = 1; // Visible through-out the code
void loop ()
{
    int LoopVariable = 2;
    for (int ForVariable = 0 ForVariable &lt; LoopVariable; ++ForVariable)
    { 
       ++GlobalVariable;
    }
    Serial.println (ForVariable);  // ERROR
}
void AFunction()
{
    Serial.println(LoopVariable);//ERROR
}
</code></pre>

<p>You immediate error is you have defined the variable <code>unit_sec</code> inside class TimingISR and you are accessing it like a local variable.  </p>

<p>Now The way you have defined <code>class TimingISR</code> is like designing a car, its fine on paper but you can't drive it until you build one.  As far as I can see you haven't instantiated an instance of TimingISR.  It sounds complex but you have been doing it for int and char (They aren't classes, but its very similar)  </p>

<pre><code>int pin_clk = 2;
TimingISR aTimingISR;
</code></pre>

<p>If a value should change define it as const.</p>

<pre><code>const int pin_clk = 2;
</code></pre>

<p>If it does change you will get a compilation error rather than suddenly sending the I2C clock signal to the on board LED.</p>

<p>goto is evil.  </p>

<pre><code>case ('0'): case ('1' - '0'): case ('2' - '0'): case ('3' - '0'): case ('4' - '0'):  case ('5' - '0'): case ('6' - '0'): case ('7' - '0'): case ('8' - '0'): case ('9' - '0'): //all key integers 
        { if (Count_Seconds &gt; 0) // Cooking in progress, thus SHUT DOWN, any numeric key shuts down the power        
        {
            lead_char = 'C';
            num_min = 'n';
            tens_sec = 'C';
            unit_sec = 'l';
            goto CancelPower;

CancelPower:
        pinMode(PIN_RELAY, OUTPUT);
        digitalWrite(PIN_RELAY, LOW);  // turn off the heat    
        goto DisplayAll;  //ready to accumulate 'heating' time input
        delay(3000);         /// NEVER EXECUTED
        lead_char = 'A';     /// NEVER EXECUTED 
        num_min = '0';       /// NEVER EXECUTED
        tens_sec = '0';      /// NEVER EXECUTED
        unit_sec = '0';      /// NEVER EXECUTED
        Disable_interrupts;  /// NEVER EXECUTED
        int Count_Seconds = 0;/// NEVER EXECUTED
    DisplayAll:

        // DisplayAll:  //Would like to put this into the 7 segment display
        // Address each 7 segent unit, one after the other; left to right  
// Code cut (but it should be == not =)
        Disable_Interrupts;
        TM1637DisplayAll(uint8_t num, uint8_t pos);
        Enable_Interrupts;
</code></pre>

<p>Code isn't being executed because gotos never return to the call, they just carry on from the label.  Try this instead:</p>

<pre><code>// TimingISR&amp; theISR means you can change the values in theISR
// TimingISR  theISR means you copy theISR and all changes are lost when the function exits.
// TimingISR const&amp; theISR means you can't change the values in theISR
void CancelPower (TimingISR&amp; theISR) 
{
  pinMode(PIN_RELAY, OUTPUT);
  digitalWrite(PIN_RELAY, LOW);  // turn off the heat    
  DisplayAll(theISR);  //ready to accumulate 'heating' time input
  delay(3000);     //let it display for 3 Count_Seconds, 
  ClearDisplay();
  theISR.lead_char = 'A';        //ready to accumulate 'heating' time input
  theISR.num_min = '0';
  theISR.tens_sec = '0';
  theISR.unit_sec = '0';
  theISR.Disable_interrupts(); // This should be a function that does something, not a bool
  theISR.Count_Seconds = 0;
}
</code></pre>

<p>I'm afraid that's just some of the things you need to change, <strong><em>BUT</em></strong> that's one hell of a program for a first attempts and that's the only reason I raised so many issues.  Try again and post it again, I'd love to  see the differences.</p>
