|
/*
*******************************************************************************
* PIC ADVANCED UNIVERSAL KEYPAD LIBRARY
*******************************************************************************
*
* source code for mikroC compiler
* feel free to use this code at your own risks
*
* target : any PIC
*
* Author : Bruno Gavand, October 2007
* Release : 1.0
* see more details on http://www.micro-examples.com/
*
*******************************************************************************
*/
#i nclude "keypad_lib.h"
char kp_buf[KP_MAX_LENGTH + 1] ; // input buffer
unsigned char kp_mask = 0 ; // current scan mask
unsigned char kp_old = 0xff ; // previous key
unsigned char kp_idx = 0 ; // buffer index
unsigned char kp_flags = 0 ; // status flags
unsigned char kp_last = 0 ; // last input char
unsigned int kp_tmr = 0 ; // timer
const char kp_tbl[] = KP_SCAN_CODES ; // scan code to character lookup table
#ifdef KEYPAD_MODE
unsigned char kp_cnt = 0 ; // row counter
unsigned char kp_row = 0 ; // current row mask
unsigned char kp_first = 0 ; // first row mask
#endif
/*
* private function :
* set bit b to value v in register pointer to by reg
*/
void kp_bit(unsigned char *reg, unsigned char b, unsigned char v)
{
unsigned char m ;
m = 1 << b ;
if(v)
{
*reg |= m ;
}
else
{
*reg &= ~m ;
}
}
/*
* public function :
* init keypad
*/
void kp_init()
{
unsigned int i ;
#ifdef KEYPAD_MODE
/*
* prepare row direction register and port register
*/
for(i = 0 ; i < KP_ROW_NUMBER ; i++)
{
kp_bit(&KP_ROW_TRIS, i + KP_ROW_BITNUM, 1) ;
kp_bit(&KP_ROW_PORT, i + KP_ROW_BITNUM, 1) ;
}
/*
* prepare row masks
*/
kp_bit(&kp_first, KP_ROW_BITNUM, 1) ;
kp_row = kp_first ;
#endif
|
|