=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
Date: Thu, 27 Jan 2000 06:46:44
From: Nikolai Golovchenko
To: pic microcontroller discussion list
Subject: Re: pic c compiler
--------------------------------------------------------------------------------
Hello Tom,
I use one routine all the time and it has always suited me. It
is called every 20 ms or so and ensures that the button pressing
causes return of 1 only if two consecutive reads were the same.
Also, it implements auto-repeat.
Here it is:
#define KEYPORT PORTA
#define PAUSE 20
#define REPEAT 3
#define KEYMASK 0b00001000 //RA3
static unsigned char Keys;
/**************** KEYS POLLING ROUTINE *****************
Low active level assumed
Should be called every about 20 ms (T)
PAUSE * T - delay after first click
REPEAT * T - delay between clicks after
KEYPORT - PORT register (e.g. PORTA)
KEYMASK - mask for port register (1 for every button)
Returns TRUE if a key is pressed and on auto-repeat
*/
unsigned char
KeysPoll(void) {
static unsigned char KeysOld;
static unsigned char KeyCnt;
static unsigned char KeyCntLim;
Keys = KEYPORT; //read port
if (((Keys ^ KeysOld) & KEYMASK) == 0) { //Nothing changed
if (--KeyCnt == 0) {
KeyCnt = KeyCntLim;
KeyCntLim = REPEAT;
KeysOld = Keys;
if (((Keys ^ KEYMASK) & KEYMASK) != 0) return 1;
}
}
else {
KeyCnt = 1;
KeyCntLim = PAUSE;
}
KeysOld = Keys;
return 0;
}
Bye,
Nikolai
On Wednesday, January 26, 2000 Tom Weber wrote:
> Hello
> I've got the download version from the ht-soft pic c demo.
> I'm searching for a function, which reads the status of a button/key and
> considers the bouncing. Has someone already written a such function?
> And has already someone realised something with an TDA7318.
> Tom
> --
> Sent through Global Message Exchange - http://www.gmx.net