Create New Item
Item Type
File
Folder
Item Name
Search file in folder and subfolders...
Are you sure want to rename?
File Manager
/
private
/
Projet
:
keypad.c
Advanced Search
Upload
New Item
Settings
Back
Back Up
Advanced Editor
Save
/* =========================================================================== keypad.c - KEYPAD routines for Axiom CML12SDP256 and 912x boards using port H Version: 1.0 Author: Dusty Nidey, Axiom Manufacturing (www.axman.com) Compiler: GNU for 68HC11 & 68HC12 (www.gnu-m68hc11.org) This is freeware - use as you like Modified By Jason Siegel MOnday Dec 13 2004 siegeljb ============================================================================== ------------------------------------------------------------------------------ */ #include "keypad.h" #include "..\ports_d256.h" #define DelAY 0x10 // Constant Definitions // -------------------- const char keytable[17] = ".123A456B789C*0#D"; // RAM Variables // ------------- unsigned char Newkey, Oldkey; /*---------------------------------------------------------------------------- InitKeyPad ---------- Initialize KEYPAD port used Port H 0-3 must be output 4-7 must be input with pull-down enabled ----------------------------------------------------------------------------*/ void InitKeypad(){ DDRH = 0x0F; // set Port H direction (0=input, 1=output) PPSH = 0xF0; // set for pull downs PERH = 0xF0; // enable pull downs //PIEH= 0xF0; //enable interrupts Newkey=0; Oldkey=0; // reset keypad status variables } /*---------------------------------------------------------------------------- kbhit ----- Does a KEYPAD scan. returns 0 if NO key is pressed otherwise returns the representation of the key pressed from the included table ----------------------------------------------------------------------------*/ char kbhit() { unsigned char kstat0, column,output,strobeout; unsigned char delaytime; output=0; PTH = 0x0F; // set all KEYPAD columns for(delaytime=DelAY; delaytime > 0; delaytime--) ; kstat0 = PTH& 0xF0; // get KEYPAD data if(kstat0 != 0) { strobeout=1; for(column=0;column<4;column++) { PTH = strobeout; // set all KEYPAD columns strobeout<<=1; for(delaytime=DelAY; delaytime > 0; delaytime--) ; kstat0 = PTH & 0xF0; // get KEYPAD data kstat0 >>= 4; if(kstat0 != 0) { if(kstat0 == 0x04) kstat0 = 3; if(kstat0 == 0x08) kstat0 = 4; output=keytable[(4*column)+kstat0]; column=5; } } } return output; // return no key pressed } /*---------------------------------------------------------------------------- getkeypad --------- Returns a key pressed on the keypad. First waits for any current key pressed to be released, then does not return until a new key is debounced. Returns the representation of the key pressed from the array keytable[] ----------------------------------------------------------------------------*/ char getkeypad(){ long debcount; // debounce counter do{ Newkey = kbhit(); // get key pressed status }while(Newkey == Oldkey); // while same key pressed as last scan for(debcount=0; debcount < 1000; debcount++){ //KEY_DEBTIME Newkey = kbhit(); if(Newkey == 0 || Newkey != Oldkey){ // if key not still pressed debcount=0; // clear debounce counter } Oldkey = Newkey; // save for next scan } return(Newkey); }