AnsweredAssumed Answered

LC60 keyboard interrupt

Question asked by asjdhadjfg nksjsdkj on Jun 2, 2009
Latest reply on Jun 2, 2009 by Daniel Lundin

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

Outcomes