STM32F103C8_Barrido_Display Barrido de un Display de Ánodo Común

Dependencies:   mbed

Files at this revision

API Documentation at this revision

Comitter:
Antulius
Date:
Wed Nov 13 00:51:19 2019 +0000
Parent:
1:dc2ae76df12d
Commit message:
barrido del teclado

Changed in this revision

PinNames.h Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
--- a/PinNames.h	Fri Jun 28 19:32:38 2019 +0000
+++ b/PinNames.h	Wed Nov 13 00:51:19 2019 +0000
@@ -38,6 +38,51 @@
 extern "C" {
 #endif
 
+//UART to AMB8826
+#define TXD1      PA_9
+#define RXD1      PA_10
+#define CTS1      PA_11
+int baudRate = 115200;
+
+//UART to Silicon Labs CP210x
+#define TXD2      PA_2
+#define RXD2      PA_3
+
+//UART to FTDI
+#define TXD3      PB_10
+#define RXD3      PB_11
+
+//I2C
+#define I2C1_SCL  PB_6
+#define I2C1_SDA  PB_7
+
+#define I2C2_SCL  PB_10
+#define I2C2_SDA  PB_11
+
+//SPI
+#define SPI1_MOSI PA_7
+#define SPI1_MISO PA_6
+#define SPI1_SCLK PA_5
+#define SPI1_NSS1 PA_4
+#define SDsel     PA_4
+
+#define SPI2_MOSI PB_15
+#define SPI2_MISO PB_14
+#define SPI2_SCLK PB_13
+#define SPI2_NSS2 PB_12
+
+//CAN
+#define CAN1_RX   PA_11
+#define CAN1_TX   PA_12
+
+//USB   CDC
+#define USB_POS   PA_12
+#define USB_NEG   PA_11
+
+//ADC
+#define Uin       PA_1
+#define Ubatt     PA_0
+
 typedef enum {
     // Not connected
     NC = (int)0xFFFFFFFF,
@@ -139,13 +184,14 @@
     USBRX       = PA_11,
     CANRX       = PB_8,    
     CANTX       = PB_9,
-    I2C_SCL     = PB_8,
-    I2C_SDA     = PB_9,
+    I2C_SCL     = PB_6,
+    I2C_SDA     = PB_7,
     SPI_MOSI    = PA_7,
     SPI_MISO    = PA_6,
     SPI_SCK     = PA_5,
-    SPI_CS      = PB_6,
-    PWM_OUT     = PB_3
+    SPI_CS      = PA_4,
+    TRACE_SWO   = PB_3,
+    SWO         = PB_3
 } PinName;
 
 #ifdef __cplusplus
--- 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