LC60 keyboard interrupt

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

LC60 keyboard interrupt

1,837 Views
birdbird
Contributor I

hello i m doing a proj on lc60 that requires me to do a programme on keyboard interrupt. i keep getting errors on my codes. Can anyone point out my mistake? Thank you.

 

#include <MC9S08LC60.h>
#include "derivative.h"
#include <stdtypes.h>
#include "LCD.h"
#include "TPM1.h"
#include <stdio.h>
#include "Delays.h"
//#include "StopModes.h"
//#include "Timeout.h"
//#include "ADC.h"
#include "KBInotes.h"

unsigned char ucKey_press, ucKey_press2,row_press, column_press, i=1, P_ucKey_press;
unsigned char KeyStore[6]={0,0,0,0,0,0}; //Test
unsigned char *str, key_entered= FALSE;

// KEYPAD
/////////////////////////////////////////////////////////////////////////////////////////

void KBIinit (void){
  KBI1SC_KBIE = 0; //clear keyboard interrupt
  KBI1ES = 0; //select falling edge
  PTADD = 0X78; //initialize Port A(0,1,2) as inputs, Port A(3,4,5,6) as output
 PTAPE = 0X07; //Pull up enable for bit 0,1,2
 KBI1PE = 0X07; //Enables pin 0-2
 KBI1SC_KBACK = 1; //Clear interrupt
  KBI1SC_KBIE = 1; //Keyboard interrupt enabled
  PTAD=0x00;  // set other output to low
  KBI1SC_KBIMOD = 0; //Keyboard detects edges only
 
}


void Column_Read(void)
{
    if (PTAD_PTAD0 == 0)
  {
    column_press = 1; 
  }

  else if (PTAD_PTAD1 == 0)
  { 
    column_press = 2;   
  }

  else if (PTAD_PTAD2 == 0)
  { 
    column_press = 3;
  }
}


  void Row_Read(void)
{

  PTADD = 0X07; //initialize Port A(3,4,5,6) as inputs, Port A(0,1,2) as output           
  PTAPE = 0X78; //Pull up enable for bit 3,4,5,6  
  KBI1PE = 0X78; //Enables pin 3-6 
  PTAD_PTAD4 = 1;
  PTAD_PTAD0 = 0;
  PTAD_PTAD1 = 0;
  PTAD_PTAD2 = 0;


  if (PTAD_PTAD3 == 0)
  {
    row_press = 1; 
  }

  else if (PTAD_PTAD3 == 1)
  { 
    row_press = 0;   
  }

  PTADD = 0X78; //initialize Port A(0,1,2) as inputs, Port A(3,4,5,6) as output
  PTAPE = 0X07; //Pull up enable for bit 0,1,2
  KBI1PE = 0X07; //Enables pin 0-2
  PTAD_PTAD3 = 0;
  PTAD_PTAD4= 0;
  PTAD_PTAD5= 0;
  PTAD_PTAD6=0;

}


void KBI_Read (void)

  //declaration of 2 dimensional array
  static char KBI_Read_Data[3] = {{'1'},{'2'},{'3'}}; 
  Column_Read();
  Row_Read();
 
  ucKey_press = KBI_Read_Data[column_press - 1];  
  key_entered= TRUE;
}

unsigned char KBI_Read2(void){       //for passing back to BMI prog as unsigned char fn.
     key_entered = FALSE;
     while (!key_entered);
     ucKey_press2=ucKey_press;
     key_entered = FALSE;
    
return ucKey_press2;
}

void Keypad_Recall_Display(void)
{
    //declaration
    unsigned char First_Digit=0, Second_Digit=0, Third_Digit=0;
    unsigned char Fourth_Digit=0, Fifth_Digit=0, Sixth_Digit=0;
   
    First_Digit  = KeyStore[0];
    Second_Digit = KeyStore[1];
    Third_Digit  = KeyStore[2];
    Fourth_Digit = KeyStore[3];
    Fifth_Digit  = KeyStore[4];
    Sixth_Digit  = KeyStore[5];

    LCDPutChar(First_Digit, 1);
   LCDPutChar(Second_Digit, 2); 
    LCDPutChar(Third_Digit, 3);
   LCDPutChar(Fourth_Digit, 4);
    LCDPutChar(Fifth_Digit, 5);
   LCDPutChar(Sixth_Digit, 6);
   
}

//======================Keypad interrupt=========================
interrupt VectorNumber_Vkeyboard1 void KeypadInterrupt (void){    
extern unsigned int TimerTable[10], TimerFlag[10];
extern byte bADC_Sample;

//STOP3_MODE_EXIT();
//TimeOut_init();
KBI_Read();  // check the key pressed
KBI1SC_KBACK = 1; // Acknowledge Interrupt and Clear flag

if ((ucKey_press != P_ucKey_press) || (TimerFlag[0] == TRUE)){
  //j=i-1;  //Test
  //KeyStore[j] = ucKey_press; //Test
  LCDPutChar(ucKey_press, i); // accept key entry
  P_ucKey_press = ucKey_press;
  i++;
  if (i >=9)i=1;
 
 
  TimerTable[0]=320;    // set debounce time
  TimerFlag[0]=FALSE;
  if(TimerFlag[0]==FALSE){
  bADC_Sample =  TRUE;
 
  }
 
}//endif
}//end interruptKBI

Labels (1)
Tags (1)
0 Kudos
3 Replies

429 Views
birdbird
Contributor I

Error   : C1815: ucKey_press not declared (or typename)

main.c line 35  

Error   : C1815: P_ucKey_press not declared (or typename)

main.c line 35  

Warning : C1801: Implicit parameter-declaration for 'LED1_turnOn'

main.c line 37  

Warning : C1420: Result of function-call is ignored

main.c line 37  

Error   : Compile failed

 

0 Kudos

429 Views
Lundin
Senior Contributor IV
Are you certain the errors are for the file you posted and not some other file in the project?

ucKey_press and P_ucKey_press are indeed declared.
The other references must be in some other file in the project.

You can get these warnings if you have missing semicolons etc in h-files, or if you have declared variables in h-files. It is hard to tell what's causing the error.

Apart from that, I also noticed a severe bug: the variables shared between main and the interrupt are not declared as volatile. The bug might cause your program to behave completely randomly when any kind of compiler optimization is active.
0 Kudos

429 Views
Lundin
Senior Contributor IV
What is "errors in codes" more specifically?
0 Kudos