FRDM-KL46Z_Barrido_Display

Dependencies:   TSI mbed

Files at this revision

API Documentation at this revision

Comitter:
Antulius
Date:
Thu Jun 27 18:57:00 2019 +0000
Parent:
6:333a2763ad29
Commit message:
FRDM-KL46Z_Barrido_Display

Changed in this revision

main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed.bld Show diff for this revision Revisions of this file
mbed.lib Show annotated file Show diff for this revision Revisions of this file
diff -r 333a2763ad29 -r e74aed8c8ee8 main.cpp
--- a/main.cpp	Tue Apr 02 19:26:46 2019 +0000
+++ b/main.cpp	Thu Jun 27 18:57:00 2019 +0000
@@ -1,13 +1,15 @@
 /* ###########################################################################
 **    Archivo        : main.c
-**    Proyecto       : FRDM-KL46Z_Plantilla
+**    Proyecto       : FRDM-KL46Z_Barrido_Teclado
 **    Procesador     : MKL46Z256VLL4
 **    Herramienta    : Mbed
 **    Version        : Driver 01.01
 **    Compilador     : GNU C Compiler
 **    Fecha/Hora     : 14-07-2015, 11:48, # CodeGen: 0
 **    Descripción    :
-**         Este proyecto hace...
+**         Este proyecto realiza el Barrido de un Dispal de 7 Segmentos y cuatro 
+**         dígitos y al mismo tiempo lee un Teclado mMtricial de 4x4 y obtine el
+**         el valor y estado de cada una de las teclas.
 **         This module contains user's application code.
 **   Componentes     : GPIO, Timer, etc .
 **   Configuraciones : Includes, Stacks y Drivers externos
@@ -31,41 +33,119 @@
 ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
 */
 #include "mbed.h"
-#include "TSISensor.h"
-
+#include "MKL46Z4.h"
+//#include "TSISensor.h"
 /*
 :...............................................................................
 :  Definiciones
 :...............................................................................
 */
-
+#define     on              0           // Estado para boton presionado
+#define     off             1           // Estado para boton sin presionar
+#define     hold            2           // Estado para boton mantenido
+#define     release         3           // Estado para boton liberado
+#define     TRUE            1
+#define     FALSE           0
+#define     Ticker_Period   1000        // Periodo de Tiempo del Ticker (us)
+#define     Rate_Period     2           // Tiempo de Encendido de los Digitos (ms)
+#define     Scan_Time       2           // Tiempo de Barrido del Display (ms)
+#define     Shift_Time      2           // Tiempo de corrimiento  (x Counter_Time)
+#define     Counter_Time    100         // Tiempo de counter (ms)
+#define     String_Size     20          // Tamaño del Buffer de Caracteres
+#define     Digit_Null      0xFF        // Valor para apagar los Segmentos 
+#define     Degree_Symbol   0x0F        // Valor para el Símbolo de Grados
+#define     DO2             0.0078125            // 128 Hz      (Escala Filosófica)
+#define     DOs2            0.0073740180703125   // 136 Hz
+#define     RE2             0.006960146234375    // 144 Hz
+#define     REs2            0.0065695032421875   // 152 Hz
+#define     MI2             0.006200785359375    // 161 Hz
+#define     FA2             0.005852762015625    // 171 Hz
+#define     FAs2            0.0055242717265625   // 181 Hz
+#define     SOL2            0.0052142181796875   // 192 Hz
+#define     SOLs2           0.0049215666015625   // 203 Hz
+#define     LA2             0.004645340296875    // 215 Hz
+#define     LAs2            0.004384617375       // 228 Hz
+#define     SI2             0.0041385277109375   // 242 Hz
+#define     DO3             0.00390625           // 256 Hz
+#define     DOs3            0.00368700903515625  // 271 Hz
+#define     RE3             0.0034800731171875   // 287 Hz
+#define     REs3            0.00328475162109375  // 304 Hz
+#define     MI3             0.0031003926796875   // 323 Hz
+#define     FA3             0.0029263810078125   // 342 Hz
+#define     FAs3            0.0055242717265625   // 362 Hz
+#define     SOL3            0.00260710908984375  // 384 Hz
+#define     SOLs3           0.00246078330078125  // 406 Hz
+#define     LA3             0.0023226701484375   // 431 Hz
+#define     LAs3            0.0021923086875      // 456 Hz
+#define     SI3             0.00206926385546875  // 483 Hz
+#define     DO4             0.00390625           // 512 Hz
+#define     DOs4            0.001843504517578125 // 542 Hz
+#define     RE4             0.00174003655859375  // 575 Hz
+#define     REs4            0.001642375810546875 // 609 Hz
+#define     MI4             0.00155019633984375  // 645 Hz
+#define     FA4             0.00146319050390625  // 683 Hz
+#define     FAs4            0.001381067931640625 // 724 Hz
+#define     SOL4            0.001303554544921875 // 767 Hz
+#define     SOLs4           0.001230391650390625 // 813 Hz
+#define     LA4             0.00116133507421875  // 861 Hz
+#define     LAs4            0.00109615434375     // 912 Hz
+#define     SI4             0.001034631927734375 // 966 Hz
+#define     DO5             0.001953125          // 1024 Hz
 /*
 +-------------------------------------------------------------------------------
 |  Configuración de Puertos 
 +-------------------------------------------------------------------------------
 */
+BusIn       Renglones (PTC8, PTC9, PTC10, PTC11);      // Definición para los Renglones
 
+BusOut      Anodos    (PTA14, PTA15, PTA16, PTA17);    // Definición para los Ánodos
+BusOut      Catodos   (PTE16, PTE17,PTE18,PTE19,PTE20,PTE21,PTE22,PTE23);    // Definición para los Cätodos
+DigitalOut  Green_Led (PTD5);            // Led de Actividad del Programa
+DigitalOut  Red_Led   (PTE29);           // Led de Actividad del Programa
+PwmOut      Buzzer    (PTE31);           // Salida del Buzzer
+Ticker      Barrido; 
+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};
+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};
+uint8_t  Tecla[]={1,2,3,10,4,5,6,11,7,8,9,12,75,0,74,13};
+uint8_t  Boton[]={1,1,1,1, 1,1,1,1, 1,1,1,1, 1,1,1,1};
+uint8_t  Boton_Ant[]={1,1,1,1, 1,1,1,1, 1,1,1,1, 1,1,1,1};
+uint8_t  Edo_Boton[]={off,off,off,off, off,off,off,off, off,off,off,off, off,off,off,off};
+uint8_t  Renglon[]={0,0,0,0};
+uint8_t  punto_decimal=0;   //Posición del punto decimal: 0=sin punto, 1=unidades, 2=decenas, 3=centemas 4=millares,  
+uint8_t  cont_1ms;
+uint8_t  cont_10ms;
+uint8_t  cont_100ms;
+uint8_t  cont_1s;
+uint8_t  scan_rate=25;
+uint8_t  shift_rate=0;
+uint16_t counter=250;
+uint8_t  i=0;
+uint8_t  j=0;
+uint8_t  valor=0;
+uint8_t  nchar=0;
+bool     flag1=FALSE;
+bool     flag2=FALSE;
+bool     Blinking=FALSE;
+bool     mode=0;
 
 /*
 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-|  Definición de Vectores de Interrupción
+|  Definición de Funciones Prototipo y Rutinas de los Vectores de Interrupción
 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 */
-
-/* END Events */        // Rutinas de Atención a Interrupciones
-
-/*
-________________________________________________________________________________
-|
-|  Funciones Prototipo
-|_______________________________________________________________________________
-*/
-                // Las Funciones Prototipo van aquí !
+void Barrido_OnInterrupt(void);  
+void Buzzer_SetPeriodMode(float Periodo,bool Estado);
 /*
 #===============================================================================
 |
@@ -75,9 +155,367 @@
 */
 int main()
 {
-                // Inicialización de variables, puertos e interrupciones
+                        // Inicialización de variables, puertos e interrupciones
+  Terminal.baud(115200);                    // Establece la velocidad de Transmisión de la Terminal
+  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í !!!
+    {                   //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
+            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]) 
+            {
+                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
+                {
+                    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
+        } 
     }
 }
+/* END main() */
+/*
+................................................................................
+:  Rutinas de los Vectores de Interrupción
+................................................................................
+*/
+void Barrido_OnInterrupt(void)              // Rutina de Atención al Ticker
+{
+    cont_1ms++;
+    scan_rate++;
+    counter--;
+    if(!scan_rate)                  // Se terminó el tiempo de barrido 
+    {
+        scan_rate=Rate_Period;      // Restablece el tiempo de barrido? 
+        flag1=TRUE;                 // Enciende la bandera para las rutinas de despliege y teclado 
+    }        
+    if (cont_1ms>=10)
+    {
+        cont_10ms++;
+        cont_1ms=0;
+    }      
+    if (cont_10ms>=10)
+    {
+        cont_100ms++;
+        cont_10ms=0;
+    }    
+    if (cont_100ms>=10)
+    {
+        cont_1s++;
+        cont_100ms=0;
+    }    
+    if (cont_1s>=10) 
+    {
+        cont_1s=0;
+    }
+    if (!counter)                   // Se terminó de contar? 
+    {
+        counter=500;                // Restablece el contador
+        Blinking= !Blinking;        // Parpadeo
+        shift_rate --;              // Decrementa el tiempo del corrimiento
+        flag2=TRUE;                 // Prende la bandera para realizar un desplazamiento         
+    }
+    if (!shift_rate)                // Se terminó el tiempo de corrimiento? 
+    {    
+        mode=!mode;                 // Tiempo entre desplazamientos del mensaje
+        shift_rate = Shift_Time;    // Restablece el tiempo de los corrimientos
+    }
+}   
+/* END Events */
+
+/*
+________________________________________________________________________________
+|
+|  Funciones Prototipo
+|_______________________________________________________________________________
+*/
+                // Las Funciones Prototipo van aquí !
+void Buzzer_SetPeriodMode(float Periodo,bool Estado)
+{
+    Buzzer.period(Periodo);
+    Buzzer.pulsewidth(Periodo/2);
+    if (Estado==1)Buzzer=0.5; 
+    if (Estado==0)Buzzer=0.0; 
+}
+                
+/* END Routines */ 
+
+/* END program */ 
+/*+------------------------------------------------------------------------------------
+*+ Descripción del Display de 7 Segmentos de Anodos Comunes en modo multiplexado
+*+-------------------------------------------------------------------------------------
+*+                            13 12 11 10  9  8
+*+                             |  |  |  |  |  |                         
+*+                             |  |  |  |  |  |  
+*+               --------------------------------------------------
+*+              |               A  a  f  A  A  b                   |
+*+              |               4        3  2                      |
+*+              |  ______________________________________________  |             
+*+              | |       ____      ____      _____     _____    | |
+*+              | |     /     /   /     /    /     /   /     /   | |
+*+              | |    /____ /   /____ / .  /____ /   /____ /    | |
+*+              | |   /     /   /     / .  /     /   /     /     | |
+*+              | |  /____ /.  /_____/ .  /____ /.  /____ /.     | |
+*+              | |                                              | |
+*+              | |______________________________________________| |
+*+              |                                                  |
+*+              |                              A                   |
+*+              |               e  d  p  c  g  1                   |
+*+               --------------------------------------------------
+*+                              |  |  |  |  |  |  |                       
+*+                              |  |  |  |  |  |  |
+*+                              1  2  3  4  5  6  7                                  
+*+
+*+                              Display: HS410561K-D30
+*+
+*+
+*+                            13 12 11 10  9  8
+*+                             |  |  |  |  |  |                         
+*+                             |  |  |  |  |  |  
+*+               --------------------------------------------------
+*+              |               A  g  f  p  a  b                   |
+*+              |               4                                  |
+*+              |  ______________________________________________  |             
+*+              | |       ____      ____      _____     _____    | |
+*+              | |     /     /   /     /    /     /   /     /   | |
+*+              | |    /____ /   /____ / .  /____ /   /____ /    | |
+*+              | |   /     /   /     / .  /     /   /     /     | |
+*+              | |  /____ /.  /_____/    /____ /.  /____ /.     | |
+*+              | |                                              | |
+*+              | |______________________________________________| |
+*+              |                                                  |
+*+              |                  A  A        A                   |
+*+              |               e  3  2  c  d  1                   |
+*+               --------------------------------------------------
+*+                              |  |  |  |  |  |  |                       
+*+                              |  |  |  |  |  |  |
+*+                              1  2  3  4  5  6  7                                  
+*+
+*+                               Display: BQ-M544RE
+*+
+*+
+*+                            16 15 14 13    11 
+*+                             |  |  |  |    |                           
+*+                             |  |  |  |    |    
+*+               --------------------------------------------------
+*+              |              b  g  a  c    f                     |
+*+              |                                                  |
+*+              |  ______________________________________________  |             
+*+              | |       ____      ____      _____  .  _____    | |
+*+              | |     /     /   /     /    /     /   /     /   | |
+*+              | |    /____ /   /____ / .  /____ /   /____ /    | |
+*+              | |   /     /   /     / .  /     /   /     /     | |
+*+              | |  /____ /.  /_____/ .  /____ /.  /____ /.     | |
+*+              | |                                              | |
+*+              | |______________________________________________| |
+*+              |                                                  |
+*+              |               A  A     A     A     A             |
+*+              |               4  3  3  p  e  2  p  1             |
+*+               --------------------------------------------------
+*+                              |  |  |  |  |  |  |  |                      
+*+                              |  |  |  |  |  |  |  |
+*+                              1  2  3  4  5  6  7  8                                  
+*+
+*+                              Display: KEM-3942BSR
+*+
++*
+*+
+*+                            12 11 10  9  8  7
+*+                             |  |  |  |  |  |                         
+*+                             |  |  |  |  |  |  
+*+               --------------------------------------------------
+*+              |              A  a  f  A  A  b                    |
+*+              |              4        3  2                       |
+*+              |  ______________________________________________  |             
+*+              | |       ____      ____      _____     _____    | |
+*+              | |     /     /   /     /    /     /   /     /   | |
+*+              | |    /____ /   /____ / .  /____ /   /____ /    | |
+*+              | |   /     /   /     / .  /     /   /     /     | |
+*+              | |  /____ /.  /_____/ .  /____ /.  /____ /.     | |
+*+              | |                                              | |
+*+              | |______________________________________________| |
+*+              |                                                  |
+*+              |                              A                   |
+*+              |               e  d  p  c  g  1                   |
+*+               --------------------------------------------------
+*+                              |  |  |  |  |  |                        
+*+                              |  |  |  |  |  |  
+*+                              1  2  3  4  5  6                                    
+*+
+*+                              Display: FYQ-2841BH
+*+
+*+
+*+                      PTA17 PTA16 PTA15 PTA14 
+*+                        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
+*+            a
+*+         ______         g     f     a     b       c     d     e     p       
+*+        /     /         1     0     0     0       1     0     0     0      0    0x81      0
+*+     f /  g  / b        1     1     0     1       1     1     1     0      1    0xE7      1
+*+      /_____/           1     0     1     1       0     1     0     0      2    0x49      2
+*+     /     /            1     0     0     1       0     1     0     0      3    0x43      3
+*+  e /     / c           1     1     0     1       0     0     1     0      4    0x27      4
+*+   /_____/ .            1     0     0     1       0     0     0     1      5    0x13      5
+*+      d    p            1     0     0     0       0     0     0     1      6    0x11      6
+*+                        1     1     0     1       1     1     0     0      7    0xC7      7
+*+                        1     0     0     0       0     0     0     0      8    0x01      8
+*+                        1     0     0     1       0     0     0     0      9    0x03      9
+*+                        1     1     0     0       0     0     0     0      A    0x05      10
+*+                        1     0     0     0       0     0     1     1      b    0x31      11
+*+                        1     0     1     0       1     0     0     1      C    0x99      12
+*+                        1     0     0     0       0     1     1     0      d    0x61      13
+*+                        1     0     1     0       0     0     0     1      E    0x19      14
+*+                        1     1     1     0       0     0     0     1      f    0x1D      15
+*+                        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     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
+*+                        1     1     0     0       0     1     1     1      n    0x75      23
+*+                        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     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     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     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       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
+*+                        1     0     0     1       0     1     1     1     /c    0x97      41
+*+                        1     1     1     1       0     0     1     0    + u    0xF2      42
+*+                        1     1     1     1       1     0     0     0    + n    0xF8      43
+*+                        1     0     1     0       1     0     0     1      [    0xA9      44
+*+                        1     0     0     1       1     1     0     0      ]    0x9C      45
+*+                        1     1     1     1       0     0     0     0      °    0xF0      46
+*+                        1     1     1     1       1     1     0     0      ¬    0xFC      47
+*+                        1     1     1     1       0     1     1     0    + >    0xF6      48
+*+                        1     1     1     0       0     1     1     1     ^     0xE7      49
+*+                        1     0     1     0       1     1     1     1    / <    0xAF      50
+*+                        1     0     0     1       1     1     1     1    / v    0x9F      51
+*+                        1     1     0     1       0     1     1     1      >    0xD7      52
+*+                        1     1     1     1       0     0     1     1      v    0xF3      53
+*+                        1     1     1     1       1     0     0     1      <    0xF9      54
+*+                        1     1     1     1       1     1     0     1    / _    0xBF      55
+*+                        1     1     1     1       0     1     1     1      -    0xF7      56
+*+                        1     0     1     1       1     1     1     1      _    0xFD      57
+*+                        1     1     1     1       0     1     0     1      =    0xF5      58
+*+                        1     0     1     1       0     1     1     1    / =    0xB7      59
+*+                        1     0     1     1       0     1     0     1     ==    0xB5      60
+*+                        1     0     1     1       1     1     0     1     _¬    0xBD      61
+*+                        1     1     0     0       1     1     1     1     ii    0xCF      62
+*+                        1     1     1     1       1     0     1     0      #    0xFA      63
+*+                        1     0     0     1       1     1     1     0      j    0x9E      64
+*+                        1     1     0     1       1     1     0     0     /j    0xDC      65
+*+                        1     1     1     0       1     0     0     1    - j    0xE9      66
+*+                        1     0     1     0       1     0     1     1    -/j    0xAB      67
+*+                        1     0     0     0       1     1     1     0    - J    0x8E      68
+*+                        1     1     0     1       1     0     0     0    -/J    0xD8      69
+*+                        1     1     1     0       1     0     1     1     |     0xEB      70
+*+                        1     1     0     0       1     0     1     0     ||    0xCA      71
+*+                        1     1     0     1       0     1     1     0      +    0xD6      72
+*+                        1     1     1     0       0     0     1     1     /+    0xE3      73
+*+                        1     0     0     1       1     0     1     1  espacio  0xFF      74
+*+
+*+ 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
+:
+:                  C1       C2        C3        C4
+:                  |         |         |        |
+:                  |         |         |        |
+:                  | 1       |  2      | 3      | F1
+:            R1 __/ ________/ ________/ ________/
+:                  |         |         |         |
+:                  | 4       |  5      | 6      | F2
+:            R2 __/ ________/ ________/ ________/
+:                  |         |         |         |
+:                  | 7       |  8      | 9      | F3
+:            R3 __/ ________/ ________/ ________/
+:                  |         |         |         |
+:                  | *       |  0      | #      | F4
+:            R4 __/ ________/ ________/ ________/
+:
+:
+:            Función: REN1 REN2 REN3 REN4 COL1 COL2 COL3 COL4
+:                Pin:  1    2    3    4    5    6    7    8
+.......................................................................................... */
+/* END Mbed */
\ No newline at end of file
diff -r 333a2763ad29 -r e74aed8c8ee8 mbed.bld
--- a/mbed.bld	Tue Apr 02 19:26:46 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1 +0,0 @@
-http://mbed.org/users/mbed_official/code/mbed/builds/b3110cd2dd17
\ No newline at end of file
diff -r 333a2763ad29 -r e74aed8c8ee8 mbed.lib
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed.lib	Thu Jun 27 18:57:00 2019 +0000
@@ -0,0 +1,1 @@
+https://os.mbed.com/users/ebrus/code/mbed/#6bc4ac881c8e