File "clavier.c"
Full Path: /home/analogde/www/68hc11/clavier.c
File size: 1.42 KB
MIME-type: text/x-c
Charset: 8 bit
#include <hc11.h>
#define EOF 00
/************************************************************/
int scanf(char *buff)
{
int i=0;
char c;
curs_on();
while ((c=getkey())!=EOF)
{
buff[i]=c;i++;
putchar(c);
}
curs_off();
return(c);
}
/************************************************************/
char getkey(void)
{
char c;
char n;
int cnt;
// asm("sei");
for(cnt=0;cnt<=5;cnt++)
while((PORTE != 0xFF)||(PORTA & 0x0F) != 0x0F); /* attente de relachement */
for(cnt=0;cnt<=5;cnt++)
while((PORTE == 0xFF)&&(PORTA & 0x0F) == 0x0F); /* attente d'une touche
presse */
if (PORTE != 0xFF ) /* touche 1 8 */
{
for(cnt=0;cnt<=5;cnt++)
while((c=PORTE) != (n=PORTE)); /* anti rebond */
switch (c){
case 0xFE: c='1';break;
case 0xFD: c='2';break;
case 0xFB: c='3';break;
case 0xF7: c='4';break;
case 0xEF: c='5';break;
case 0xDF: c='6';break;
case 0xBF: c='7';break;
case 0x7F: c='8';break;
default: c=0xFF;break; /* erreur */
}
}
else /* touches 0, 9, #, * */
{
for(cnt=0;cnt<=5;cnt++)
while((c=(PORTA & 0x0F)) != (n=(PORTA & 0x0F))); /* anti rebond */
switch(c){
case 0x0E: c='9';break;
case 0x0D: c='0';break;
case 0x0B: c=EOF;break; /* touche entre */
case 0x07: c='*';break;
default: c=0xFF;break; /* erreur */
}
}
// asm("cli");
return(c);
}
/************************************************************/