Cypress AN2034 manual Debouncing, Interrupt Driven Keypad Scans, Summary

Page 4

Example Code 3 is the main function that implements the design in Figure 5 on page 3.

Code 3. Keypad Project Implemented

;-----------------------------------------

;This program reads the keypad

;at port 1 and control the LEDs

;on port0.

;

;Copyright (c)

;Cypress Semiconductor 2002-2008.

;All Rights Reserved.

;------------------------------------------

include "m8c.inc" export _main

_main: loop:

call bReadKeypad index KeyToLED

mov reg[PRT0DR], A jmp loop

ret

xxh: equ 30h ;illegal character “E”

.Literal

KeyToLED:

db 7fh,xxh,xxh,xxh,xxh,xxh,xxh,xxh db xxh,xxh,xxh,xxh,xxh,xxh,xxh,xxh db xxh,4fh,4ch,xxh,0fh,xxh,xxh,xxh db 78h,xxh,xxh,xxh,xxh,xxh,xxh,xxh db xxh,12h,24h,xxh,00h,xxh,xxh,xxh db 01h,xxh,xxh,xxh,xxh,xxh,xxh,xxh db xxh,xxh,xxh,xxh,xxh,xxh,xxh,xxh db xxh,xxh,xxh,xxh,xxh,xxh,xxh,xxh db xxh,06h,20h,xxh,04h,xxh,xxh,xxh db 18h,xxh,xxh,xxh,xxh,xxh,xxh,xxh db xxh,xxh,xxh,xxh,xxh,xxh,xxh,xxh db xxh,xxh,xxh,xxh,xxh,xxh,xxh,xxh db xxh,xxh,xxh,xxh,xxh,xxh,xxh,xxh db xxh,xxh,xxh,xxh,xxh,xxh,xxh,xxh db xxh,xxh,xxh,xxh,xxh,xxh,xxh,xxh db xxh,xxh,xxh,xxh,xxh,xxh,xxh,xxh

.EndLiteral

The “.Literal” and “.EndLiteral” macros are used to disable the compiler’s code compression algorithms so that the literal information in the KeyToLED table is not compressed.

This code can also be found in the project associated with this application note. The table makes for a simple translation from key press to displayed character. Develop your own table for a particular application.

AN2034

Debouncing

Debouncing solutions are specific to each system’s program structure and switch selection. However, debouncing is simple; it requires two sequential keypad scans to agree for the scan to be valid.

Interrupt Driven Keypad Scans

Execute the following steps for an interrupt-instigated key scan:

ƒConfigure the lower four (row) pins to be I/O interrupts on a rising edge.

ƒSet the upper four (column) pins high.

ƒWrite an interrupt handler that calls bReadKeypad.

ƒEnable the GPIO interrupt.

The row pins stay low until a key press connects a column to a row causing an interrupt.

One possible application is a security gate keypad reader where the MCU is placed in the power-saving-sleep mode. When someone presses a key, the processor wakes up and decodes the user’s input. After finishing, the MCU can put itself back to sleep. For more information about sleep mode operation please refer to application note AN2354.

Summary

The PSoC microcontroller GPIO structure is ideal for fast keypad scans. The “index” instruction enables simple translation key presses to a user’s desired format. The GPIO to interrupts makes for an interrupt-driven keypad scan.

January 16, 2009

Document No. 001-40409 Rev. *A

4

[+] Feedback

Image 4
Contents Introduction Application Note AbstractRows and Columns Gpio Set For Pull Down Mode Psoc General Purpose IOUsing the Output Mov RegPRT1DR Read Columns X, a Combine them Pop RetInterrupt Driven Keypad Scans DebouncingSummary Document History JVY