STM32F103C8_Barrido_Display Barrido de un Display de Ánodo Común

Dependencies:   mbed

Revision:
2:49e089d4d1ac
Parent:
1:dc2ae76df12d
--- a/main.cpp	Fri Jun 28 19:32:38 2019 +0000
+++ b/main.cpp	Wed Nov 13 00:51:19 2019 +0000
@@ -1,6 +1,6 @@
 /* ###########################################################################
 **    Archivo        : main.c
-**    Proyecto       : STM32-F103C8_Plantilla
+**    Proyecto       : STM32-F103C8_Barrido_Teclado
 **    Procesador     : STM32F103C8
 **    Herramienta    : Mbed
 **    Version        : Driver 01.01
@@ -30,12 +30,8 @@
 :  Includes
 ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
 */
+#include "stm32f103c8t6.h"
 #include "mbed.h"
-#include "stm32f103c8t6.h"
-//#include "stm32f10x.h"
-#include "PinNames.h"
-//#include "SysClockConf.h"
-//#include "AnalogIn.h"
 //#include "Led_RGB.h"
 //#include "Serial.h"
 //#include "stdio.h"
@@ -101,24 +97,25 @@
 |  Configuración de Puertos 
 +-------------------------------------------------------------------------------
 */
-BusIn       Renglones (PA_8, PA_9, PA_10, PA_11);      // Definición para los Renglones
-
-BusOut      Anodos    (PB_6, PB_7, PB_8, PB_9);    // Definición para los Ánodos
+BusIn       Renglones (PA_8, PA_9, PA_10, PA_11);   // Definición para los Renglones
+BusOut      Anodos    (PB_6, PB_7, PB_8, PB_9);     // Definición para los Ánodos
 BusOut      Catodos   (PA_0, PA_1,PA_2,PA_3,PA_4,PA_5,PA_6,PA_7);    // Definición para los Cätodos
-DigitalOut  Green_Led (PC_11);            // Led de Actividad del Programa
-DigitalOut  Red_Led   (PB_11);           // Led de Actividad del Programa
-PwmOut      Buzzer    (PB_13);           // Salida del Buzzer
-Ticker      Barrido; 
-Serial      Terminal(USBTX, USBRX);           //activa la Terminal a traves del Puerto USB
+DigitalOut  Led_Verde (PC_11);          // Led de Actividad del Programa
+DigitalOut  Led_Rojo  (PB_11);          // Led de Actividad del Programa
+PwmOut      Buzzer    (PB_13);          // Salida del Buzzer
+Ticker      Barrido;                    // Interrupción por el Temporizador
+// *****    Host PC Terminal Communication channels
+Serial      Terminal (PA_2, PA_3);           // Inicializa la comunicación serial a la PC (Tx,Rx)
+//Serial      Terminal(USBTX, USBRX);     // Activa la Terminal a traves del Puerto USB
 /*
 +-------------------------------------------------------------------------------
 |  Variables Globales de Usuario 
 +-------------------------------------------------------------------------------
 */
 uint16_t Rate=1000;
-//             Offset:  0    1    2    3    4    5    6    7    8    9   10    11  12   13   14   15   16   17   18   19   20   21  22    23   24   25   26   27   28   29   30   31   32   33   34   35   36   37   38   39   40   41   42   43   44   45   46   47  48  49  50  51 52  53  54  55  56   57   58   59   60   61   62   63   64   65   66   67   68   69   70   71   72   73   74   75   76   77   78   79   80   81   82   83  84   85   86
-//                      0    1    2    3    4    5    6    7    8    9    A     b   C    d    E    f    G    h    I    j    K    L   M     n    o    P    q    r    S    t    u    V    W    X    y    Z  null  a    e    +o  +/c   c    /c   +u   +n   [    ]    °     ^    ¬  + >   ^   / v   <    v    >                                            /_   -    _    =    /=   ==   ¬_   ii   #   /#     J   /J   -J   -/J  -J  -/J   |    ||   +    /+ null         !  "   #   $  %   &   '   (    )   *   +   -   .   /   :   ;   <   >   ?   @
-uint8_t  Segmentos[]={0x81,0xE7,0x49,0x43,0x27,0x13,0x11,0xC7,0x01,0x03,0x05,0x31,0x99,0x61,0x19,0x1D,0x91,0x35,0xBD,0xB3,0x2D,0xB9,0x85,0x75,0x71,0x0D,0x07,0x3D,0x13,0x39,0xF1,0xE1,0xA1,0x25,0x37,0x49,0xFF,0xBE,0xF6,0x0F,0x8F,0x4F,0x2F,0x1F,0x0F,0x13,0x01,0x7F,0x7D,0x7B,0x79,0x75,0x73,0x71,0x70,0x99,0xC3,0x3F,0x9F,0xCF,0x6F,0x7D,0xF9,0xF3,0xD7,0xF7,0xDF,0x7F,0xFB,0x5F,0x7B,0x5B,0xBD,0xF5,0x6D,0x37,0xE3,0xB9,0x9D,0x7C,0xE7,0xBD,0xCa,0x00};
+//             Offset:  0    1    2    3    4    5    6    7    8    9   10    11  12   13   14   15   16   17   18   19   20   21  22    23   24   25   26   27   28   29   30   31   32   33   34   35   36   37   38   39   40   41   42   43   44   45   46   47  48   49   50   51   52   53   54   55   56   57   58   59   60   61   62   63   64   65   66   67   68   69   70   71   72   73   74   75   76   77   78   79   80   81   82   83   84   85   86   87   88   89   90   91  92
+//Caracter a Desplegar: 0    1    2    3    4    5    6    7    8    9    A     b   C    d    E    f    G    h    I    j    K    L   M     n    o    P    q    r    S    t    u    V    W    X    y    Z  space a    e    /e   @    ñ    [    ]    U    /U   /_   -    _   _/_  /=   =   ==    °   +/c   +n   +/c  +u   o    c    n    /c   u    ^    ¬   + >   ^   / v   <    v    >   i    +i   /i   +/i  ii   +ii  #   /#    J    /J   -J   -/J  |    ||     |  +    /+   F    +F   /F   +/F  null         !  "   #   $  %   &   '   (    )   *   +   -   .   /   :   ;   <   >   ?   @
+uint8_t  Segmentos[]={0x81,0xE7,0x49,0x43,0x27,0x13,0x11,0xC7,0x01,0x03,0x05,0x31,0x99,0x61,0x19,0x1D,0x91,0x35,0xBD,0xE3,0x2D,0xB9,0x85,0x75,0x71,0x0D,0x07,0x7D,0x13,0x39,0xF1,0xB1,0xA1,0x25,0x23,0x49,0xFF,0x41,0x09,0x03,0x11,0x55,0x99,0xC3,0xA1,0x85,0xDF,0x7F,0xFB,0xDB,0x7B,0x5F,0x5B,0x0F,0x1F,0x8F,0x4F,0x2F,0x71,0x79,0x75,0x73,0xF1,0x3F,0x9F,0xCF,0x6F,0x7D,0xF9,0xF3,0x77,0xFD,0xBF,0xF7,0xEF,0xF5,0xAF,0x6D,0x37,0xE3,0xB9,0x9D,0xC7,0xBD,0xA5,0xE7,0x3D,0x67,0x1D,0x47,0x63,0x39,0x00};
 uint8_t  Digitos[]={0x08,0x04,0x02,0x01,0x00,0x0F};     // Millares, Centenas, Decenas, Unidades, Apagados, Encendidos
 uint8_t  Numeros[]={1,0,2,4};
 uint8_t  Cadena[]={33,0,21,10,36,14,28,18,22,36,35,10,12,10,29,14,23,12,24,36,36};
@@ -161,84 +158,130 @@
 int main()
 {
                         // Inicialización de variables, puertos e interrupciones
-  Terminal.baud(115200);                    // Establece la velocidad de Transmisión de la Terminal
+  confSysClock();       // Configure system clock (72MHz HSE clock, 48MHz USB clock)                                               
   Barrido.attach_us(&Barrido_OnInterrupt, Ticker_Period);   // Periodo de Interrupción del Timer = 1ms (Ticker_Period=1000)
-  Renglones.mode(PullUp);                   // Habilita los Pull-Up's de las entradas
-    while (true) 
-    {                   //El Programa principal está aquí !!!
-        nchar=0;                            // Inicializa el contador de caracteres a desplegar   
-        if (flag1==TRUE)
+  Renglones.mode(PullUp);   // Habilita los Pull-Up's de las entradas de los renglones
+  Terminal.baud(115200);    // Establece la velocidad de Transmisión de la Terminal
+  Terminal.printf("\e[2J");                       // Clear Screen  
+  Terminal.printf(" System is Wake Up!.\n\r");    // e inicia la  comunicación serial
+  Terminal.printf ("\t\e[1;37;41mInstituto Politecnico Nacional\e[0m\n\r");
+  Terminal.printf ("\e[1;37;42mESCUELA SUPERIOR DE INGENIERIA MECANICA Y ELECTRICA\e[0m\n\r\v");
+  Terminal.printf ("\t\e[1;34;40mBarrido \e[1;37;40mdel \e[1;31;40mDisplay \e[1;33;40mde \e[1;32;40m7 Segmentos\e[0m \e[1;35;40my \e[1;36;40mTeclado \n\r\v\v\e[0m");
+  while (TRUE) 
+  {                   //El Programa principal está aquí !!!      
+    nchar=0;                            // Inicializa el contador de caracteres a desplegar   
+    if (flag1==TRUE)
+      {
+//        Buzzer_SetPeriodMode(LA4,FALSE);// Apaga el Buzzer            
+//        Buzzer=off;                     // Apaga el Buzzer
+            //------------------ Barrido de los Digitos ------------------------
+        Anodos=Digitos[4];              // Apaga todos los Digitos (Evita fantasmas)   
+        Catodos=Segmentos[Numeros[i]];  // Escribe los segmentos del Dígito
+        if (i==4-punto_decimal) Catodos=(Segmentos[Numeros[i]]& 0xFE); // Enciende el punto decimal 
+        Anodos=Digitos[i];              // Activa el Dígito/columna  
+            //------------------ Barrido del Teclado ---------------------------                         
+        valor=Renglones;                // Lee los renglones. Posibles valores: 0xFF,0xFE,0xFD,0xFB,0xF7
+        if (valor==0x0E)
+        {
+          if (i==0) printf ("Tecla=1\r");  
+          if (i==1) printf ("Tecla=2\r");
+          if (i==2) printf ("Tecla=3\r");  
+          if (i==3) printf ("Tecla=F1\r");
+        }
+        if (valor==0x0D)
+        {
+          if (i==0) printf ("Tecla=4\r");  
+          if (i==1) printf ("Tecla=5\r");
+          if (i==2) printf ("Tecla=6\r");  
+          if (i==3) printf ("Tecla=F2\r");
+        }        
+        if (valor==0x0B)
+        {
+          if (i==0) printf ("Tecla=7\r");  
+          if (i==1) printf ("Tecla=8\r");
+          if (i==2) printf ("Tecla=9\r");  
+          if (i==3) printf ("Tecla=F3\r");
+        }
+        if (valor==0x07)
+        {
+          if (i==0) printf ("Tecla=*\r");  
+          if (i==1) printf ("Tecla=0\r");
+          if (i==2) printf ("Tecla=#\r");  
+          if (i==3) printf ("Tecla=F4\r");
+        }        
+        if (valor==0x0F)
         {
-            Buzzer_SetPeriodMode(LA4,FALSE);// Apaga el Buzzer            
-            Buzzer=off;                     // Apaga el Buzzer
-            Anodos=Digitos[4];              // Apaga todos los Digitos (Evita fantasmas)   
-            Catodos=Segmentos[Numeros[i]];  // Escribe los segmentos del Dígito
-            if (i==4-punto_decimal) Catodos=(Segmentos[Numeros[i]]& 0xFE); // Enciende el punto decimal 
-            Anodos=Digitos[i];              // Activa el Dígito/columna                   
-            valor=Renglones;                // Lee los renglones
-            Renglon[i]=(valor>>i)&1;        // Obtiene el valor de cada bit del renglón 
-            Boton[i+j]=Renglon[i];          // Llena el renglon-columna correspondiente
-            if (Boton[i+j]==1)
-            {
-            Buzzer_SetPeriodMode(DO5,TRUE); // Selecciona Tono y lo habilita
-            Buzzer=on;                      // Enciende el Buzzer
-            }
-            if ( Boton[i+j] &&  Boton_Ant[i+j]) 
-            {
-                Edo_Boton[i+j]= off;        // El Botón está Apagado
-            }   
-            if (!Boton[i+j] &&  Boton_Ant[i+j]) 
-            {
-                Edo_Boton[i+j]= on;         // El Botón está Encendido
-            }  
-            if (!Boton[i+j] && !Boton_Ant[i+j]) 
-            {
-                Edo_Boton[i+j]= hold;       // El Botón está Presionado
-            } 
-            if ( Boton[i+j] && !Boton_Ant[i+j]) 
+          if (i==0) printf ("Tecla=H\r");  
+          if (i==1) printf ("Tecla=O\r");
+          if (i==2) printf ("Tecla=L\r");  
+          if (i==3) printf ("Tecla=A\r");
+        }        
+         
+//        Renglon[i]=(valor>>i)&1;        // Obtiene el valor de cada bit del renglón 
+//        Boton[i+j]=Renglon[i];          // Llena el renglon-columna correspondiente
+        Terminal.printf("Tecla Oprimida: %c\r",valor);              
+/*        if (Boton[i+j]==1)
+        {
+//          Buzzer_SetPeriodMode(DO5,TRUE); // Selecciona Tono y lo habilita
+//          Buzzer=on;                      // Enciende el Buzzer
+        }
+        if ( Boton[i+j] &&  Boton_Ant[i+j]) 
+        {
+          Edo_Boton[i+j]= off;          // El Botón está Apagado
+        }   
+        if (!Boton[i+j] &&  Boton_Ant[i+j]) 
+        {
+          Edo_Boton[i+j]= on;           // El Botón está Encendido
+        }  
+        if (!Boton[i+j] && !Boton_Ant[i+j]) 
+        {
+           Edo_Boton[i+j]= hold;        // El Botón está Presionado
+        } 
+        if ( Boton[i+j] && !Boton_Ant[i+j]) 
+        {
+           Edo_Boton[i+j]= release;     // El Botón está Liberado
+        } 
+        Boton_Ant[i+j]=Boton[i+j];      // Actualiza el valor del botón anterior
+        if (valor != 0xFF)
+        {
+           Numeros[0]= Digit_Null;      // Millares
+           Numeros[1]= Digit_Null;      // Centenas
+           Numeros[2]= Digit_Null;      // Decenas
+           Numeros[3]= Tecla[i+j];      // Unidades
+           mode=2;
+        }    
+*/
+        i++;                            // Incrementa la columna
+        if (i==4)                       // Se terminó de barrer las columnas?  
+        {
+          i=0;                          // Reinicia las columnas
+          j=j+4;                        // Brinca al siguiente renglón
+          if (j==16) j=0;               // Se terminó de barrer los renglones? Reinicia los renglones
+          
+          if (mode==1)                  // Se va a desplegar un mensaje?
+          {
+            Numeros[i]=Cadena[i+nchar]; // Cargamos 4 caracteres en el buffer de despliege
+            if (nchar >= String_Size) nchar=0;   // Restablece el contador de caractres
+          }
+            if (mode==2)                // Se va a desplegar un el valor de la botonera
             {
-                Edo_Boton[i+j]= release;    // El Botón está Liberado
-            } 
-            Boton_Ant[i+j]=Boton[i+j];      // Actualiza el valor del botón anterior
-            if (valor != 0xFF)
-            {
-                Numeros[0]= Digit_Null;     // Millares
-                Numeros[1]= Digit_Null;     // Centenas
-                Numeros[2]= Digit_Null;     // Decenas
-                Numeros[3]= Tecla[i+j];     // Unidades
-                mode=2;
-            }    
-            i++;                            // Incrementa la columna
-            if (i==4)                       // Se terminó de barrer las columnas?  
-            {
-                i=0;                        // Reinicia las columnas
-                j=j+4;                      // Brinca al siguiente renglón
-                if (j==16) j=0;             // Se terminó de barrer los renglones? Reinicia los renglones 
+              if ( Blinking==1) punto_decimal=3;  // Activa los puntos del Reloj
+              if ( Blinking==0) punto_decimal=0;  // Desactiva los puntos del Reloj
+              if (i==4-punto_decimal)
+              Catodos=Segmentos[Numeros[i]&0xFE];  // Enciende el punto decimal 
+              Terminal.printf("Tecla Oprimida: %c\r",valor);                   
+            }
+            Led_Rojo=!Led_Rojo;         // Parpadeo del Led Rojo
+        }
                 
-                if (mode==1)                // Se va a desplegar un mensaje?
-                {
-                    Numeros[i]=Cadena[i+nchar]; // Cargamos 4 caracteres en el buffer de despliege
-                    if (nchar >= String_Size) nchar=0;   // Restablece el contador de caractres
-                }
-                if (mode==2)                // Se va a desplegar un el valor de la botonera
-                {
-                    if ( Blinking==1) punto_decimal=3;  // Activa los puntos del Reloj
-                    if ( Blinking==0) punto_decimal=0;  // Desactiva los puntos del Reloj
-                    if (i==4-punto_decimal)
-                    Catodos=Segmentos[Numeros[i]&0xFE];  // Enciende el punto decimal 
-                    Terminal.printf("Tecla Oprimida: %c",valor);                   
-                }
-                Red_Led=!Red_Led;           // Parpadeo del Led Rojo
-            }
-                
-            flag1=FALSE;                    // Apaga la Bandera 1
-        }    
-        if (flag2==TRUE)                    // Está puesta la Bandera 2?
-        {
-            Green_Led=!Green_Led;           // Parpadeo del Led Verde
-            flag2=FALSE;                    // Apaga la Bandera 2
-        } 
-    }
+        flag1=FALSE;                    // Apaga la Bandera 1
+    }    
+    if (flag2==TRUE)                    // Está puesta la Bandera 2?
+    {
+      Led_Verde=!Led_Verde;             // Parpadeo del Led Verde
+      flag2=FALSE;                      // Apaga la Bandera 2
+    } 
+  }
 }
 /* END main() */
 /*
@@ -246,11 +289,11 @@
 :  Rutinas de los Vectores de Interrupción
 ................................................................................
 */
-void Barrido_OnInterrupt(void)              // Rutina de Atención al Ticker
+void Barrido_OnInterrupt()          // Rutina de Atención al Ticker
 {
-    cont_1ms++;
-    scan_rate++;
-    counter--;
+    cont_1ms++;                     // Incrmenta el contador de milisegundos
+    scan_rate--;                    // Decrementa el tiempo de  despliege
+    counter--;                      // Decrementa el contador de eventos
     if(!scan_rate)                  // Se terminó el tiempo de barrido 
     {
         scan_rate=Rate_Period;      // Restablece el tiempo de barrido? 
@@ -308,9 +351,49 @@
 /* END Routines */ 
 
 /* END program */ 
-/*+------------------------------------------------------------------------------------
+/*+-----------------------------------------------------------------------------
+*+        CD4041   Quad Buffer/Inverter 
+*+------------------------------------------------------------------------------
+*+
+*+             |\    1
+*+             | \-------  A1
+*+          3  |  \
+*+ PB_12  -----|   >
+*+             |  /  2
+*+             | /o------ COL1
+*+             |/
+*+
+*+
+*+             |\    8
+*+             | \-------  A2
+*+          10 |  \
+*+ PB_13  -----|   >
+*+             |  /  9
+*+             | /o------ COL2
+*+             |/
+*+
+*+
+*+             |\    4
+*+             | \-------  A3
+*+          6  |  \
+*+ PB_14  -----|   >
+*+             |  /  5
+*+             | /o------ COL3
+*+             |/
+*+
+*+
+*+
+*+             |\    11
+*+             | \-------  A4
+*+          13 |  \
+*+ PB_15  -----|   >
+*+             |  /  12
+*+             | /o------ COL4
+*+             |/
+*+
+*+------------------------------------------------------------------------------
 *+ Descripción del Display de 7 Segmentos de Anodos Comunes en modo multiplexado
-*+-------------------------------------------------------------------------------------
+*+------------------------------------------------------------------------------
 *+                            13 12 11 10  9  8
 *+                             |  |  |  |  |  |                         
 *+                             |  |  |  |  |  |  
@@ -361,6 +444,33 @@
 *+                               Display: BQ-M544RE
 *+
 *+
+*+                            12 11  10 9  8  7
+*+                             |  |  |  |  |  |                           
+*+                             |  |  |  |  |  |    
+*+               --------------------------------------------------
+*+              |              A  a  f  A  A  b                    |
+*+              |              4        3  2                       |
+*+              |  ______________________________________________  |             
+*+              | |       ____      ____      _____  .  _____    | |
+*+              | |     /     /   /     /    /     /   /     /   | |
+*+              | |    /____ /   /____ / .  /____ /   /____ /    | |
+*+              | |   /     /   /     / .  /     /   /     /     | |
+*+              | |  /____ /.  /_____/ .  /____ /.  /____ /.     | |
+*+              | |                                              | |
+*+              | |______________________________________________| |
+*+              |                                                  |
+*+              |                     A        A                   |
+*+              |               e  d  p  c  g  1                   |
+*+               --------------------------------------------------
+*+                              |  |  |  |  |  |  
+*+                              |  |  |  |  |  |             p1 = g
+*+                              1  2  3  4  5  6             p2 = c             
+*+                                                           p3 = d
+*+                              Display: HS-5463BS           p4 = e
+*+                              Cátodo Común                 pu = b
+*+                                                           pd = f
+*+
+*+
 *+                            16 15 14 13    11 
 *+                             |  |  |  |    |                           
 *+                             |  |  |  |    |    
@@ -377,7 +487,7 @@
 *+              | |______________________________________________| |
 *+              |                                                  |
 *+              |               A  A     A     A     A             |
-*+              |               4  3  3  p  e  2  p  1             |
+*+              |               4  3  d  p  e  2  p  1             |
 *+               --------------------------------------------------
 *+                              |  |  |  |  |  |  |  |                      
 *+                              |  |  |  |  |  |  |  |
@@ -412,12 +522,14 @@
 *+                              Display: FYQ-2841BH
 *+
 *+
-*+                      PTA17 PTA16 PTA15 PTA14 
+*+       FRDM-KL46Z     PTA17 PTA16 PTA15 PTA14
+*+      STM32-F103C8    PB_15 PB_14 PB_13 PB_12
 *+                        A4    A3    A2    A1
 *+                       Mill  Cent  Dec   Uni
 *+  
-*+     FRDM_KL25Z       PTE23 PTE22 PTE21 PTE20   PTE5  PTE4  PTE3  PTE2     #    Hex
-*+     FRDM-KL46Z       PTE23 PTE22 PTE21 PTE20   PTE19 PTE18 PTE17 PTE16    #    Hex        Offset
+*+     FRDM_KL25Z       PTE23 PTE22 PTE21 PTE20   PTE5  PTE4  PTE3  PTE2     #    Hex     Offset
+*+     FRDM-KL46Z       PTE23 PTE22 PTE21 PTE20   PTE19 PTE18 PTE17 PTE16    #    Hex     Offset
+*+     STM32-F103C8      PA_8  PA_9 PA_10 PA_11   PA_12 PA_15  PB_3  PB_4    #    Hex     Offset
 *+            a
 *+         ______         g     f     a     b       c     d     e     p       
 *+        /     /         1     0     0     0       1     0     0     0      0    0x81      0
@@ -439,7 +551,7 @@
 *+                        1     0     0     0       1     0     0     1      G    0x91      16
 *+                        1     1     0     0       0     0     1     1      h    0x35      17
 *+                        1     1     0     1       1     1     1     1      i    0xBD      18
-*+                        1     0     0     0       1     1     1     0      J    0xB3      19
+*+                        1     0     0     0       1     1     1     0      J    0xE3      19
 *+                        1     0     1     0       0     0     1     0      k    0x2D      20
 *+                        1     0     1     0       1     0     1     1      L    0xB9      21
 *+                        1     1     0     0       1     0     0     0      M    0x85      22
@@ -447,17 +559,33 @@
 *+                        1     0     0     0       0     1     1     1      o    0x71      24
 *+                        1     1     1     0       0     0     0     0      P    0x0D      25
 *+                        1     1     0     1       0     0     0     0      q    0x07      26
-*+                        1     1     1     0       0     1     1     1      r    0x3D      27
+*+                        1     1     1     0       0     1     1     1      r    0x7D      27
 *+                        1     0     0     1       0     0     0     1      s    0x13      28
 *+                        1     0     1     0       0     0     1     1      t    0x39      29
 *+                        1     0     0     0       1     1     1     1      u    0xF1      30
-*+                        1     0     0     0       1     0     1     1      V    0xE1      31
+*+                        1     0     0     0       1     0     1     1      V    0xB1      31
 *+                        1     0     0     0       1     0     1     0      w    0xA1      32
 *+                        1     1     0     0       1     0     1     0      X    0x25      33
-*+                        1     0     0     1       0     0     1     0      y    0x37      34
+*+                        1     0     0     1       0     0     1     0      y    0x23      34
 *+                        1     0     1     0       1     1     0     0      Z    0x49      35
-*+                        1     0     0     0       0     1     0     0      a    0x84      36
-*+                        1     0     1     0       0     0     0     0      e    0xA0      37
+*+                        1     1     1     1       1     1     1     1   space   0xFF      36
+*+                        0     1     0     0       0     0     0     1      a    0x41      37
+*+                        0     0     0     0       1     0     0     1      e    0x09      38
+*+                        0     0     0     0       0     0     1     1     /e    0x03      39
+*+                        0     0     0     1       0     0     0     1      @    0x11      40
+*+                        0     1     0     1       0     1     0     1      ñ    0x55      41
+*+                        1     0     0     1       1     0     0     1      [    0x99      42
+*+                        0     0     0     0       1     0     0     1      ]    0xC3      43
+*+                        1     0     1     0       0     0     0     1      U    0xA1      44
+*+                        1     0     0     0       0     1     0     1     /U    0x85      45
+*+                        1     1     0     1       1     1     1     1     /_    0xDF      46
+*+                        0     1     1     1       1     1     1     1      -    0x7F      47
+*+                        1     1     1     1       1     0     1     1      _    0xFB      48
+*+                        1     1     0     1       1     0     1     1    _/_    0xDB      49
+*+                        0     1     1     1       1     0     1     1     /=    0x7B      50
+*+                        0     1     0     1       1     1     1     1      =    0x5F      51
+*+                        0     1     0     1       1     0     1     1     ==    0x5B      52
+*+                        0     0     0     0       1     1     1     1      °    0x0F      53
 *+                        1     1     1     1       0     0     0     1    + c    0xF1      38
 *+                        1     1     1     1       0     1     0     0    +/c    0xF4      39
 *+                        1     0     1     0       0     1     1     1      c    0xA7      40
@@ -499,10 +627,10 @@
 *+ Nota: Cada dígito se activa al hacer la señal A correspondiente en "alto"
 *+       y enviar las señales de los segmentos que se desean encender en "bajo" 
 *+
-*+---------------------------------------------------------------------------------------- */
-/*........................................................................................
+*+----------------------------------------------------------------------------*/
+/*..............................................................................
 :
-:                   TECLADO MATRICIAL DE 4X4
+:               TECLADO MATRICIAL DE 4X4 DE MEMBRANA
 :
 :                  C1       C2        C3        C4
 :                  |         |         |        |
@@ -522,8 +650,29 @@
 :
 :            Función: REN1 REN2 REN3 REN4 COL1 COL2 COL3 COL4
 :                Pin:  1    2    3    4    5    6    7    8
-.......................................................................................... 
-*+----------------------------------------------------------------------------*
+................................................................................
+:
+:             TECLADO MATRICIAL DE 4X4 DE PUSH BOTTONS
+:
+:                  C1       C2        C3        C4
+:                  |         |         |        |
+:                  |         |         |        |
+:                  | S1      |  S2     | S3     | S4
+:            R1 __/ ________/ ________/ ________/
+:                  |         |         |         |
+:                  | S5      |  S6     | S7      | S8
+:            R2 __/ ________/ ________/ ________/
+:                  |         |         |         |
+:                  | S9      |  S10    | S11    | S12
+:            R3 __/ ________/ ________/ ________/
+:                  |         |         |         |
+:                  | S13     |  S14    | S15     | S16
+:            R4 __/ ________/ ________/ ________/
+:
+:
+:            Función: COL1 COL2 COL3 REN4 REN1 REN2 REN3 REN4
+:                Pin:  1    2    3    4    5    6    7    8
+**+----------------------------------------------------------------------------*
 *+
 *+   Powered by
 *+
@@ -534,5 +683,5 @@
 *+
 *+  Welcome to The Beaners Proyect Community!                   
 *+----------------------------------------------------------------------------*/
-/* END Mbed */
+/* END Documentation */
 /* END Mbed */ 
\ No newline at end of file