STM32F103C8_Barrido_Display Barrido de un Display de Ánodo Común

Dependencies:   mbed

Revision:
1:dc2ae76df12d
Parent:
0:9f7581d1af6f
--- a/main.cpp	Wed Jun 26 18:54:11 2019 +0000
+++ b/main.cpp	Fri Jun 28 19:32:38 2019 +0000
@@ -45,44 +45,112 @@
 :  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 Ticker_Rate     1000            // Periodo de interrupción (us)
+#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 
 +-------------------------------------------------------------------------------
 */
-//confSysClock();     // Configure system clock (72MHz HSE clock, 48MHz USB clock)
-Ticker      TimerInt;               // Inicializa la Interrupción por Timer
-DigitalOut  led_monitor(LED1);      // Inicializa el LED Monitor
-DigitalOut  led_testigo(PA_1);      // Inicializa el LED Testigo
-Serial      terminal(PA_2, PA_3);   // Inicializa la Comunicación Serial a la PC
-PwmOut      servo(PA_7);            // Inicializa el PWM
-AnalogIn    sensor1 (PB_0);         // Inicializa Canal Analógico para sensor 1
+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
 /*
 +-------------------------------------------------------------------------------
 |  Variables Globales de Usuario 
 +-------------------------------------------------------------------------------
 */
-uint16_t Rate=Ticker_Rate/2;        // Velocidad de barrido (500us = 0.5ms)
-uint16_t counter=250;               // Cuenta inicial de 250us
-/* END variables */
+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 Funciones Prototipo y Rutinas de los Vectores de Interrupción
 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 */
-        // Las Definiciones de Funciones Prototipo 
-        // y Apuntadores a Vectores de Interrupciones van aquí !
-void TimerInt_OnInterrupt(void);  
-void Blinking_Led(void);
-/* END prototypes */
-
-/* END definitions */  
+void Barrido_OnInterrupt(void);  
+void Buzzer_SetPeriodMode(float Periodo,bool Estado);
 /*
 #===============================================================================
 |
@@ -90,40 +158,138 @@
 |
 #=============================================================================== 
 */
-int main()          
-{                           // Inicialización de variables, puertos e interrupciones
-confSysClock();             // Inicialización del Sistema, Configure system clock (72MHz HSE clock, 48MHz USB clock)
-TimerInt.attach_us(&TimerInt_OnInterrupt, Ticker_Rate);   // Le asigna el periodo de interrupción de 1ms (Ticker_Rate=1000)
-
-terminal.baud(115200);      // Se configura la velocidad de transmisión e inicia la comunicación serial.    
-terminal.printf(" System is Wake Up!.\n\r"); 
-
-    while (true)                // El Lazo del Programa principal está aquí !!!
-    {
-        Blinking_Led();             // Parapadeo del LED por Software
-        servo = sensor1.read();       // 
-        terminal.printf("Blink \r\n");                           
+int main()
+{
+                        // 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í !!!
+        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 */
-
+/* END main() */
 /*
 ................................................................................
 :  Rutinas de los Vectores de Interrupción
 ................................................................................
 */
-                // Las Rutinas de Atención a Interrupciones van aquí !
-void TimerInt_OnInterrupt()          // Rutina de Atención al Ticker
+void Barrido_OnInterrupt(void)              // Rutina de Atención al Ticker
 {
-    counter--;                      // Aquí va la Rutina de Servicio !
-    if (!counter)
+    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)
     {
-        terminal.printf("Counter Finish! \r\n");
-        led_monitor = !led_monitor; // Parapadeo del LED por Interrupción (LED Toggled)
-        counter = Rate;           // Restablece el contador, Le asigna el periodo de 0.5ms (Rate=500)
-    } 
-}
-/* END Events */   
+        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 */
+
 /*
 ________________________________________________________________________________
 |
@@ -131,68 +297,232 @@
 |_______________________________________________________________________________
 */
                 // Las Funciones Prototipo van aquí !
-void Blinking_Led()             // Software Blinking routine for LED 
+void Buzzer_SetPeriodMode(float Periodo,bool Estado)
 {
-        // The on-board LED is connected, via a resistor, to +3.3V (not to GND). 
-        // So to turn the LED on or off we have to set it to 0 or 1 respectively
-    led_testigo = 1;        // turn the LED on (using Positive Logic)
-    wait_ms(200);           // 200 millisecond
-    led_testigo = 0;        // turn the LED off (using Positive Logic)
-    wait_ms(1000);          // 1000 millisecond
+    Buzzer.period(Periodo);
+    Buzzer.pulsewidth(Periodo/2);
+    if (Estado==1)Buzzer=0.5; 
+    if (Estado==0)Buzzer=0.0; 
 }
-/* END functions */    
                 
-/* END program */
+/* END Routines */ 
 
-/*+-----------------------------------------------------------------------------       
-*+  Conexión al Led Testigo:
-*+ 
-*+  Los leds se pueden conectar a cualquier pin que se declare como DigitalOut. 
-*+  El dispositivo puede drenar hasta 20ma por todas sus salidas a un voltaje de 
-*+  3.3V, pero se recomienda no exceder de 1mA por salida.
-*+  Esto se logra poniendo una resistencia limitadora de mínimo 330 Ohms.
+/* 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
 *+  
-*+    3.3V o 5V
-*+       O
-*+       |
-*+       |
-*+       /
-*+       \   1K
-*+       /
-*+       \                         UTILIZANDO LÓGICA NEGATIVA
-*+       |
-*+    ___|___
-*+    \      /
-*+     \    /
-*+      \  /
-*+     __\/__
-*+       |
-*+       |__________________________  PIN (Digital Out)
+*+     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
 *+
-*+      
-*+      
-*+       
-*+                    1K
-*+                   
-*+        _________/\  /\  /\  _____    PIN (Digital Out)
-*+       |           \/  \/  \/
-*+       |      
-*+       |
-*+    ___|___
-*+    \      /
-*+     \    /
-*+      \  /                       UTILIZANDO LÓGICA POSITIVA
-*+     __\/__
-*+       |
-*+       |
-*+       |
-*+    ___|___
-*+     _____
-*+      ___
-*+       _
+*+ 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" 
 *+
-*+      GND
-*+
+*+---------------------------------------------------------------------------------------- */
+/*........................................................................................
+:
+:                   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
+.......................................................................................... 
 *+----------------------------------------------------------------------------*
 *+
 *+   Powered by
@@ -204,5 +534,5 @@
 *+
 *+  Welcome to The Beaners Proyect Community!                   
 *+----------------------------------------------------------------------------*/
-
+/* END Mbed */
 /* END Mbed */ 
\ No newline at end of file