File "keypad.c"
Full Path: /home/analogde/www/68hc11/keypad.c
File size: 3.53 KB
MIME-type: text/plain
Charset: utf-8
/* A modifier selon la disposition des touches du clavier */
#define ZERO 0x07
#define UN 0x00
#define DEUX 0x04
#define TROIS 0x08
#define QUATRE 0x01
#define CINQ 0x05
#define SIX 0x09
#define SEPT 0x02
#define HUIT 0x06
#define NEUF 0x0a
#define A 0x03
#define B 0x0b
#define C 0x0e
#define D 0x0d
#define E 0x0c
#define F 0x0f
#define CLAVIER *(unsigned char *)0x1600
unsigned char FlagIT ;
/********************************************************************************/
/* getch() */
/********************************************************************************/
unsigned char getch(void)
{
FlagIT = 0 ;
while (FlagIT != 1) ;
/* Clavier est "l'adresse" du CS CLAVIER */
switch(CLAVIER & 0x0f)
{
case ZERO :
{
return 0 ;
}
case UN :
{
return 1 ;
}
case DEUX :
{
return 2 ;
}
case TROIS :
{
return 3 ;
}
case QUATRE :
{
return 4 ;
}
case CINQ :
{
return 5 ;
}
case SIX :
{
return 6 ;
}
case SEPT :
{
return 7 ;
}
case HUIT :
{
return 8 ;
}
case NEUF :
{
return 9 ;
}
case A :
{
return 0x0a ;
}
case B :
{
return 0x0b ;
}
case C :
{
return 0x0c ;
}
case D :
{
return 0x0d ;
}
case E :
{
return 0x0e ;
}
case F :
{
return 0x0f ;
}
}
}
/********************************************************************************/
/* getche() */
/********************************************************************************/
unsigned char getche(void)
{
FlagIT = 0 ;
while (FlagIT != 1) ;
switch(CLAVIER & 0x0f)
{
case ZERO :
{
AFFICHED('0') ;
return 0 ;
}
case UN :
{
AFFICHED('1') ;
return 1 ;
}
case DEUX :
{
AFFICHED('2') ;
return 2 ;
}
case TROIS :
{
AFFICHED('3') ;
return 3 ;
}
case QUATRE :
{
AFFICHED('4') ;
return 4 ;
}
case CINQ :
{
AFFICHED('5') ;
return 5 ;
}
case SIX :
{
AFFICHED('6') ;
return 6 ;
}
case SEPT :
{
AFFICHED('7') ;
return 7 ;
}
case HUIT :
{
AFFICHED('8') ;
return 8 ;
}
case NEUF :
{
AFFICHED('9') ;
return 9 ;
}
case A :
{
AFFICHED('A') ;
return 0x0a ;
}
case B :
{
AFFICHED('B') ;
return 0x0b ;
}
case C :
{
AFFICHED('C') ;
return 0x0c ;
}
case D :
{
AFFICHED('D') ;
return 0x0d ;
}
case E :
{
AFFICHED('E') ;
return 0x0e ;
}
case F :
{
AFFICHED('F') ;
return 0x0f ;
}
}
}
/********************************************************************************/
/* IRQ clavier */
/********************************************************************************/
interrupt [INTVEC_START + 28] void IRQ_interrupt(void)
{
disable_interrupt() ;
FlagIT = 1 ;
enable_interrupt() ;
}