
ihsenksouri
|
j'ai une methode d'utilise le clavier 12 touche en mode alphanumerique en picc
en utilisant un timer
si se dernier rester a plus que le temps désirer elle va ecrir le numero suivant
exemple:
si je presse la touche '2' une fois s'écrit 'a' sur un afficheur lcd
si je presse la touche '2' deux fois s'écrit 'b' sur un afficheur lcd
et ansi de suite
#include "16F876.h"
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use delay (clock=10000000)
#USE RS232(BAUD=57600, XMIT=PIN_C6, RCV=PIN_C7,bits = 8, parity = n)
#include <LCDmod.c>
#include <KBDmod.c>
char const touche[10][3]=
{{'X', 'Y', 'Z'},
{'.', '/', ','},
{'A', 'B', 'C'},
{'D', 'E', 'F'},
{'G', 'H', 'I'},
{'J', 'K', 'L'},
{'M', 'N', 'O'},
{'P', 'Q', 'R'},
{'S', 'T', 'U'},
{'V', 'W', ' '}};
char textlu[20];
Void lireclavier_date()
{
int i,long_max;
char k;
int val,jj;
long_max=6;
for(i=0;i<long_max;i++)
{
textlu[i]=0;
}
i=0;
lcd_gotoxy(1,2);
do
{
k=kbd_getc();
if(k!=0)
{
if(k=='#')
{
return;
}
else if (k=='*')
{
if(i>0)
{
i--;
lcd_gotoxy(i+1,2);
textlu[i]=0;
lcd_putc(textlu[i]);
lcd_gotoxy(i+1,2);
}
}
else if(i<long_max)
{
jj = (val*10) + k-48;
if((i==1 && (jj<=0 || jj>31))||(i==3 && (jj<=0 || jj>12))||(i==5 && jj<=0))
{
textlu[i]=0;
i--;
textlu[i]=0;val=0;
lcd_gotoxy(i+1,2);
lcd_putc(textlu[i]);
lcd_gotoxy(i+2,2);
lcd_putc(textlu[i+1]);
lcd_gotoxy(i+1,2);
}
else
{
lcd_gotoxy(i+1,2);
textlu[i]=k;
lcd_putc(textlu[i]);
i++;
val = k-48;
}
}
}
}
while(true);
}
Void lireclavier(int long_max )
{ int i;
char k;
for(i=0;i<long_max;i++)
{
textlu[i]=0;
}
i=0;
lcd_gotoxy(1,2);
do{
k=kbd_getc();
if(k!=0)
{
if(k=='#')
{
return;
}
else if(k=='*')
{
if(i>0)
{
i--;
lcd_gotoxy(i+1,2);
textlu[i]=0;
lcd_putc(textlu[i]);
lcd_gotoxy(i+1,2);
}
}
else if(i!=long_max)
{
lcd_gotoxy(i+1,2);
textlu[i]=k;
lcd_putc(textlu[i]);
i++;
}
}
}while(true);
}
Void lireclavier_alpha(int long_max )
{
long temps;
int i;
char k;
char k_prec;
char N;
for (i = 0;i< long_max;i++)
{
textlu[i] = 0;
}
setup_timer_1 (T1_INTERNAL|T1_DIV_BY_8);
set_timer1 (0);
k_prec = 0;
N = 0;
temps = 0;
i = 0;
lcd_gotoxy (1, 2) ;
do
{
k = kbd_getc ();
if (k != 0)
{
if (k == '#')
{
return;
}
else if (k == '*')
{
if (i > 0)
{
i--;
lcd_gotoxy (i + 1, 2) ;
textlu[i] = 0;
lcd_putc (textlu[i]);
lcd_gotoxy (i + 1, 2) ;
}
}
else if (i != long_max)
{
if (k == k_prec)
{
if (temps < 5)
{
if (N == 4)
{
N = 1;
}
else
{
N++;
}
}
else
{
k_prec = k ;
N = 1;
i++;
}
}
else
{
k_prec = k ;
N = 1;
i++;
}
temps = 0 ;
if (N == 1)
{
textlu[i-1]=k;
}
else
{
textlu[i-1]=touche[k - 48][N - 2];
}
lcd_gotoxy (i,2) ;
lcd_putc(textlu[i-1]) ;
}
}
if (get_timer1 () > 65000)
{
temps++;
set_timer1 (0);
}
}while (true);
}
Void main()
{
lcd_init();
kbd_init();
lcd_send_byte(0,0x0F);
lcd_putc("\f Ksouri ihsen ");
lcd_putc("\n ing info & elect ");
delay_ms(1500);
while(true)
{
lcd_putc("\f matricule: ");
lireclavier(10);
}
}
|