key.c File Reference

#include "includes.h"

Go to the source code of this file.

Defines

#define KeyIdleState   0
#define KeyReleaseState   1
#define KeyPressTransitionState   2
#define KeyPressState   3
#define KeyReleaseTransitionState   4
#define Keys   PORTA

Functions

void KeyInit (void)
void KeySvc (void)
void KeyReset (void)
void KeyRun (void)
BOOL KeyStatusCheck (void)
INT8U KeyGet (void)

Variables

KEY_CONTROL KeyCtrl


Define Documentation

#define KeyIdleState   0

Definition at line 11 of file key.c.

#define KeyPressState   3

Definition at line 14 of file key.c.

#define KeyPressTransitionState   2

Definition at line 13 of file key.c.

#define KeyReleaseState   1

Definition at line 12 of file key.c.

#define KeyReleaseTransitionState   4

Definition at line 15 of file key.c.

#define Keys   PORTA

Definition at line 17 of file key.c.


Function Documentation

INT8U KeyGet ( void   ) 

Definition at line 148 of file key.c.

00148                   {
00149     if(KeyCtrl.HasKey==TRUE){
00150         KeyCtrl.HasKey=FALSE;
00151         return KeyCtrl.HasKeyValue;
00152     }
00153     else return 0;
00154 }

void KeyInit ( void   ) 

Definition at line 25 of file key.c.

00025                   {
00026     //PORTA is set to gpio in gpio.c
00027     TRISA=0x3f; //set all porta pins input
00028     KeyCtrl.HasKey=FALSE;
00029     KeyCtrl.State=KeyReleaseState;
00030     KeyCtrl.Timer=2;
00031 }

void KeyReset ( void   ) 

Definition at line 119 of file key.c.

00119                    {
00120     //PORTA is set to gpio in gpio.c
00121     TRISA=0x3f; //set all porta pins input
00122     KeyCtrl.HasKey=FALSE;
00123     KeyCtrl.State=KeyReleaseState;
00124     KeyCtrl.Timer=1;
00125 }

void KeyRun ( void   ) 

Definition at line 131 of file key.c.

00131                  {
00132     KeyCtrl.State=KeyReleaseState;
00133 }

BOOL KeyStatusCheck ( void   ) 

Definition at line 139 of file key.c.

00139                          {
00140     if(KeyCtrl.HasKey==TRUE) return TRUE;
00141     else return FALSE;
00142 }

void KeySvc ( void   ) 

Definition at line 37 of file key.c.

00037                  {
00038     if(KeyCtrl.State==KeyIdleState) return; // key is not in use
00039     if(KeyCtrl.Timer!=0) return;
00040     KeyCtrl.Timer=1;
00041     switch(KeyCtrl.State){
00042         case KeyReleaseState:
00043             if((Keys&0x3f)!=0x3f){
00044                 //DebugStringPrint("0.");
00045                 KeyCtrl.KeyValue=Keys&0x3f;     
00046                 KeyCtrl.ReadKeyCounter=0;        
00047                 KeyCtrl.HitKeyCounter=0;
00048                 KeyCtrl.State=KeyPressTransitionState;
00049             }
00050             break;
00051         case KeyPressTransitionState:
00052             if((Keys&0x3f)!=0x3f){
00053                 if((Keys&0x3f)==KeyCtrl.KeyValue){
00054                      //DebugStringPrint("1.");
00055                      KeyCtrl.HitKeyCounter++;
00056                 }
00057                 else{
00058                     KeyCtrl.KeyValue=Keys&0x3f;
00059                     KeyCtrl.HitKeyCounter=0;  // reset HitKeyCounter
00060                 }
00061             }            
00062             KeyCtrl.ReadKeyCounter++; 
00063             if(KeyCtrl.ReadKeyCounter>=KEY_DEBOUNCE_NUMBER){
00064                 if(KeyCtrl.HitKeyCounter>=KEY_ACCEPT_NUMBER){
00065                     //DebugStringPrint("2.");
00066                     if(KeyCtrl.HasKey==FALSE){
00067                         //DebugStringPrint("3.");
00068                         KeyCtrl.HasKey=TRUE;
00069                         KeyCtrl.HasKeyValue=KeyCtrl.KeyValue;
00070                         KeyCtrl.State=KeyPressState;
00071                     }
00072                     else{
00073                         KeyCtrl.State=KeyPressState;
00074                     }
00075                 }
00076                 else{
00077                     KeyCtrl.State=KeyReleaseState;
00078                 }
00079             }
00080             break;
00081         case KeyPressState:
00082             if((Keys&0x3f)!=KeyCtrl.HasKeyValue){
00083                 KeyCtrl.ReadKeyCounter=0;        
00084                 KeyCtrl.HitKeyCounter=0;
00085                 KeyCtrl.State=KeyReleaseTransitionState;
00086             }
00087             else{
00088                 // time delay for key repeat
00089             }
00090             break;
00091         case KeyReleaseTransitionState:
00092             KeyCtrl.ReadKeyCounter++; 
00093             if((Keys&0x3f)!=0x3f){
00094                 if(KeyCtrl.ReadKeyCounter>=KEY_DEBOUNCE_NUMBER){
00095                     KeyCtrl.ReadKeyCounter=0;
00096                     KeyCtrl.HitKeyCounter=0;
00097                 } 
00098             }
00099             else{
00100                 KeyCtrl.HitKeyCounter++;
00101                 if(KeyCtrl.ReadKeyCounter>=KEY_DEBOUNCE_NUMBER){
00102                     if(KeyCtrl.HitKeyCounter>=KEY_ACCEPT_NUMBER){
00103                         KeyCtrl.State=KeyReleaseState;
00104                     }
00105                     else{
00106                         KeyCtrl.ReadKeyCounter=0;
00107                         KeyCtrl.HitKeyCounter=0;
00108                     }
00109                 } 
00110             }
00111             break;
00112     }
00113 }


Variable Documentation

Definition at line 19 of file key.c.


Generated on Tue Jul 7 20:39:55 2009 for A SIMPLE APPLICATION FOR PIC18F87J10 by  doxygen 1.5.9