Library Functions
| PROTOTYPE | void kp_init() |
| PARAMETERS | none |
| RETURNS | nothing |
| DESCRIPTION | prepare the PIC keypad and button library. |
| REQUIRES | the file keypad_cfg.h must be set accordingly to user's hardware (see below) |
| EXAMPLE | kp_init() ; |
| PROTOTYPE | unsigned char kp_full() |
| PARAMETERS | none |
| RETURNS | return > 0 if the buffer is full, 0 otherwise |
| DESCRIPTION | check for buffer full |
| REQUIRES | kp_init() must have been called and timer interrupt must be enabled |
| EXAMPLE | if(kp_full()) return ; // return if buffer full |
| PROTOTYPE | unsigned char kp_hit() |
| PARAMETERS | none |
| RETURNS | return > 0 if a key is being pressed, 0 otherwise (pseudo function) |
| DESCRIPTION | check for a key hit |
| REQUIRES | kp_init() must have been called and timer interrupt must be enabled |
| EXAMPLE | while(kp_hit()) ; // wait for key to be released |
none return > 0 if enter key has been pressed, 0 otherwise (pseudo function) check for enter key kp_init() must have been called and timer interrupt must be enabled if(kp_enter()) { ... } // do input treatment on enter key
PROTOTYPE unsigned char kp_enter() PARAMETERS RETURNS DESCRIPTION REQUIRES EXAMPLE
| PROTOTYPE | unsigned char kp_erase() |
| PARAMETERS | none |
| RETURNS | return > 0 if last key was erase , 0 otherwise (pseudo function) |
| DESCRIPTION | check for erase key |
| REQUIRES | kp_init() must have been called and timer interrupt must be enabled |
| EXAMPLE | if(kp_erase()) { ... } // do input treatment on erase key |
| PROTOTYPE | unsigned char kp_last() |
| PARAMETERS | none |
| RETURNS | return last key pressed |
| DESCRIPTION | get last key |
| REQUIRES | kp_init() must have been called and timer interrupt must be enabled |
| EXAMPLE | switch(kp_last()) { ... } // process keys |
| PROTOTYPE | void kp_setCircular() |
| PARAMETERS | none |
| RETURNS | nothing |
| DESCRIPTION | switch on circular mode on input buffer : |
| REQUIRES | kp_init() must have been called and timer interrupt must be enabled |
| EXAMPLE | kp_setCircular() ; |
| PROTOTYPE | void kp_setLinear() |
| PARAMETERS | none |
| RETURNS | nothing |
| DESCRIPTION | switch on linear mode on input buffer : |
| REQUIRES | kp_init() must have been called and timer interrupt must be enabled |
| EXAMPLE | kp_setLinear() ; |
| PROTOTYPE | unsigned char kp_circular() |
| PARAMETERS | none |
| RETURNS | return > 0 if input buffer is in circular mode, 0 otherwise. |
| DESCRIPTION | check for buffer circular mode, default is linear mode. |
| REQUIRES | kp_init() must have been called and timer interrupt must be enabled |
| EXAMPLE | if(kp_circular()) kp_setLinear() ; |
| PROTOTYPE | void kp_setTypematic() |
| PARAMETERS | none |
| RETURNS | nothing |
| DESCRIPTION | switch on typematic (auto-repeat) mode |
| REQUIRES | kp_init() must have been called and timer interrupt must be enabled |
| EXAMPLE | kp_setTypematic() ; |
| PROTOTYPE | void kp_unsetTypematic() |
| PARAMETERS | none |
| RETURNS | nothing |
| DESCRIPTION | switch off typematic (auto-repeat) mode |
| REQUIRES | kp_init() must have been called and timer interrupt must be enabled |
| EXAMPLE | kp_unsetTypematic() ; |
| PROTOTYPE | unsigned char kp_typematic() |
| PARAMETERS | none |
| RETURNS | return > 0 if typematic (auto-repeat) in enable, 0 otherwise. |
| DESCRIPTION | return typematic state, default is not enabled. |
| REQUIRES | kp_init() must have been called and timer interrupt must be enabled |
| EXAMPLE | if(kp_typematic()) kp_unsetTypematic() ; |
| PROTOTYPE | void kp_flush() |
| PARAMETERS | none |
| RETURNS | nothing |
| DESCRIPTION | flush input, buffer is cleared |
| REQUIRES | kp_init() must have been called and timer interrupt must be enabled |
| EXAMPLE | kp_flush() ; |
| PROTOTYPE | void kp_isr() |
| PARAMETERS | none |
| RETURNS | nothing |
| DESCRIPTION | this function must not be called directly by user, but must be placed in the timer interrupt() function. the input is stored in buffer kp_buf, defined as a pointer to char. |
| REQUIRES | kp_init() must have been called |
| EXAMPLE | void interrupt(void) INTCON.T0IF = 0 ; // done |
Configuration
Keypad configuration is defined in file keypad_cfg.h, you can change it depending on your hardware and preferences :
| SYMBOL | USAGE | EXAMPLE |
| KEYPAD_MODE | define this symbol if you are using a keypad (rows and colums) do not define this symbol if you are using buttons (colums only) | #define KEYPAD_MODE |
| KP_ROW_PORT | PORT where rows are connected to | #define KP_ROW_PORT PORTB |
| KP_ROW_TRIS | TRIS direction register corresponding to KP_ROW_PORT (only if KEYPAD_MODE is defined) | #define KP_ROW_TRIS TRISB |
| KP_ROW_BITNUM | bit number of the first row in the PORT, other bits must be next and contiguous | #define KP_ROW_BITNUM 0 |
| KP_ROW_NUMBER | number of rows (only if KEYPAD_MODE is defined) | #define KP_ROW_NUMBER 3 |
| KP_COL_PORT | PORT where columns are connected to. Each column input must be pulled down with a 10 K resistor. | #define KP_COL_PORT PORTB |
| KP_COL_TRIS | TRIS direction register corresponding to KP_COL_PORT | #define KP_COL_TRIS TRISB |
| KP_COL_BITNUM | bit number of the first row in the PORT, other bits must be next and contiguous | #define KP_COL_BITNUM 3 |
| KP_COL_NUMBER | number of columns | #define KP_COL_NUMBER 4 |
| KP_SCAN_CODES | scan codes lookup table the top left key is the first one, the bottom right key is the last one. | #define KP_SCAN_CODES "*7410852#963" |
| KP_ERASE | erase key, must be one in KP_SCAN_CODES string | #define KP_ERASE '*' |
| KP_ENTER | enter key, must be one in KP_SCAN_CODES string don't define it if you don't need an enter key | #define KP_ENTER '#' |
| KP_MAX_LENGTH | maximum input length | #define KP_MAX_LENGTH 16 |
| KP_TMR_REPEAT | typematic rate, must be set depending on timer overflow period and user's preferences. when using a PIC16F877A @ 8 Mhz with 8 bit TMR0 and no prescaler, if you want an auto repeat rate of 300 ms, use : | #define KP_TMR_REPEAT 2343 |
| KP_TMR_DEBOUNCE | debounce time, must be set depending on timer overflow period and user's preferences. when using a PIC16F877A @ 8 Mhz with 8 bit TMR0 and no prescaler, if you want a debounce time of 30 ms, use : | #define KP_TMR_DEBOUNCE 234 |
| KP_MAX_LENGTH | maximum input length | #define KP_MAX_LENGTH 16 |
CIRCUIT EXAMPLE
MIKROC SOURCE CODE EXAMPLE
Here is the mikroC source code of the program example. You have to use the zipped mikroC project to build it.
|


Post a Comment