Autor Tema: Ayuda con el 18F4620 para conectarle un teclado normal de PC y una pantalla LCD  (Leído 1406 veces)

0 Usuarios y 3 Visitantes están viendo este tema.

Desconectado oscarec60

  • PIC10
  • *
  • Mensajes: 15
por Favor ayudenme en lo que pueda con eso he buscado mucha información pero todavia no llego a nada...

Gracias de antemano
Saludos desde Caracas Venezuela...

Desconectado microcarsil

  • PIC10
  • *
  • Mensajes: 44
RE: Ayuda con el 18F4620 para conectarle un teclado normal de PC y una pantalla LCD
« Respuesta #1 en: 13 de Febrero de 2006, 12:10:00 »
Escrito originalmente por oscarec60
por Favor ayudenme en lo que pueda con eso he buscado mucha información pero todavia no llego a nada...

Gracias de antemano


Hola oscarec60 hace tiempo yo modifique un ejemplo que utilizaba una interrupción externa para decodificar un teclado ps/2, y transmitirla serialmente hacia una hyperterminal, en el siguiente enlace te dejo un tutorial sobre como funciona el teclado y su respectivo codigo en ccs, a lo referente a la pantalla LCD si utilizas el compilador pcwh no creo que tengas muchos problemas ya que incluye un driver para el control de la misma, de todas formas te dejo mi codigo en ccs y si necesitas una explicación solo avisa y con gusto la posteare.

http://conket.com/modules.php?name=Sections&op=viewarticle&artid=39

Codigo:

#include "18f452.h"
#fuses HS, NOWDT,NOPROTECT, PUT, BROWNOUT, NOLVP
#use Delay(Clock=20000000)
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)
#include <bootloader.h>

int bitcount=11;
int data=0;

unsigned char const unshifted[68][2] = {
0x0d,9,
0x0e,"º",
0x15,"q",
0x16,"1",
0x1a,"z",
0x1b,"s",
0x1c,"a",
0x1d,"w",
0x1e,"2",
0x21,"c",
0x22,"x",
0x23,"d",
0x24,"e",
0x25,"4",
0x26,"3",
0x29," ",
0x2a,"v",
0x2b,"f",
0x2c,"t",
0x2d,"r",
0x2e,"5",
0x31,"n",
0x32,"b",
0x33,"h",
0x34,"g",
0x35,"y",
0x36,"6",
0x39,",",
0x3a,"m",
0x3b,"j",
0x3c,"u",
0x3d,"7",
0x3e,"8",
0x41,",",
0x42,"k",
0x43,"i",
0x44,"o",
0x45,"0",
0x46,"9",
0x49,".",
0x4a,"-",
0x4b,"l",
0x4c,"ñ",
0x4d,"p",
0x4e,""",
0x52,"´",
0x54,"`",
0x55,"¡",
0x5a,13,
0x5b,"+",
0x5d,"ç",
0x61,"<",
0x66,8,
0x69,"1",
0x6b,"4",
0x6c,"7",
0x70,"0",
0x71,".",
0x72,"2",
0x73,"5",
0x74,"6",
0x75,"8",
0x79,"+",
0x7a,"3",
0x7b,"-",
0x7c,"*",
0x7d,"9",
0,0
};

unsigned char const shifted[68][2] = {
0x0d,9,
0x0e,"ª",
0x15,"Q",
0x16,"!",
0x1a,"Z",
0x1b,"S",
0x1c,"A",
0x1d,"W",
0x1e,""",
0x21,"C",
0x22,"X",
0x23,"D",
0x24,"E",
0x25,"$",
0x26,"·",
0x29," ",
0x2a,"V",
0x2b,"F",
0x2c,"T",
0x2d,"R",
0x2e,"%",
0x31,"N",
0x32,"B",
0x33,"H",
0x34,"G",
0x35,"Y",
0x36,"&",
0x39,"L",
0x3a,"M",
0x3b,"J",
0x3c,"U",
0x3d,"/",
0x3e,"(",
0x41,";",
0x42,"K",
0x43,"I",
0x44,"O",
0x45,"=",
0x46,")",
0x49,":",
0x4a,"_",
0x4b,"L",
0x4c,"Ñ",
0x4d,"P",
0x4e,"?",
0x52,"¨",
0x54,"^",
0x55,"¿",
0x5a,13,
0x5b,"*",
0x5d,"Ç",
0x61,">",
0x66,8,
0x69,"1",
0x6b,"4",
0x6c,"7",
0x70,"0",
0x71,".",
0x72,"2",
0x73,"5",
0x74,"6",
0x75,"8",
0x79,"+",
0x7a,"3",
0x7b,"-",
0x7c,"*",
0x7d,"9",
0,0
};

void decode(unsigned char sc);

#int_ext
void int_ext_isr(void)
{
   if(bitcount < 11 && bitcount > 2)
   {
        data = (data >> 1);
        if( input(PIN_B7) == 1)
          data = data | 0x80;
   }
   if(--bitcount == 0)
   {
        decode(data);
        data = 0;
        bitcount = 11;
   }
}

void main(void)
{
   set_tris_b(0xff);
   printf("
INTERFACE DE TECLADO v1.0"Giño;
   ext_int_edge(H_TO_L);
   enable_interrupts(INT_EXT);
   enable_interrupts(GLOBAL);

   while(1)
   {
   }
}

void decode(unsigned char sc)
{
   static unsigned char is_up=0, shift = 0;
   int i=0;                              

   //-------- El último dato recibido fue el identificador de Up-Key
   if (!is_up)
      {
         switch (sc)
            {
            //-------- Identificador de Up-Key
               case 0xF0 :
                  is_up = 1;
                  break;
               //-------- SHIFT Izquierdo
               case 0x12 :
                  shift = 1;
                  break;
               //-------- SHIFT Derecho
               case 0x59 :
                  shift = 1;
                  break;
               //-------- ENTER
               case 0x5A :
                  printf("
"Giño;
                  break;
               default:
                  if(!shift)
                     {
                        for(i = 0; i<=68; i++)
                        {
                           if (unshifted[0] == sc)
                           {
                              printf("%c", unshifted[1]);
                           }
                        }
                     }
                  else
                    {
                        for(i = 0; i<=68; i++)
                        {
                           if (shifted[0] == sc)
                           {
                               printf("%c", shifted[1]);
                           }
                        }
                     }
                 break;
            }
     }
     else
         {
         //-------- No se permiten 2 0xF0 en una fila
         is_up = 0;
         switch (sc)
            {
               //-------- SHIFT Izquierdo
               case 0x12 :
                  shift = 0;
                  break;
               //-------- SHIFT Derecho
               case 0x59 :
                  shift = 0;
                  break;
            }
         }
}

Microcarsil