Advertisement
Villalba2006

POST_21

Nov 24th, 2016
18,809
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 6.85 KB | None | 0 0
  1. /*  TITULO: Contador ascendente/descendente con display de 7 segmentos.
  2.  
  3.     AUTOR:
  4.    
  5.     MARIANO DEL CAMPO GARCÍA (@2016) --> INGENIERO TÉCNICO INDUSTRIAL ESPECIALIDAD ELECTRÓNICA
  6.     - FACEBOOK: https://www.facebook.com/mariano.delcampogarcia
  7.     - TWITTER: https://twitter.com/MarianoCampoGa
  8.     - CORREO: marianodc83@gmail.com
  9.    
  10.    
  11.     DESCRIPCIÓN DEL PROGRAMA
  12.  
  13.     Con este programa controlamos un conteo ascendente/descendente (del 0 al 9 y viceversa) mediante
  14.     2 pulsadores, y visualizamos el número en el que estamos a través de un display de 7 segmentos.
  15.    
  16.  
  17.     ESQUEMA DE CONEXION
  18.    
  19.                                       +-----+
  20.          +----[PWR]-------------------| USB |--+
  21.          |                            +-----+  |
  22.          |         GND/RST2  [ ][ ]            |
  23.          |       MOSI2/SCK2  [ ][ ]  A5/SCL[ ] |  
  24.          |          5V/MISO2 [ ][ ]  A4/SDA[ ] |  
  25.          |                             AREF[ ] |
  26.          |                              GND[ ] |
  27.          | [ ]N/C                    SCK/13[ ] |   Terminal "g" del display
  28.          | [ ]IOREF                 MISO/12[ ] |   Terminal "f" del display
  29.          | [ ]RST                   MOSI/11[ ]~|   Terminal "e" del display
  30.          | [ ]3V3    +---+               10[ ]~|   Terminal "d" del display
  31.          | [ ]5v    -| A |-               9[ ]~|   Terminal "c" del display
  32.          | [ ]GND   -| R |-               8[ ] |   Terminal "b" del display
  33.          | [ ]GND   -| D |-                    |
  34.          | [ ]Vin   -| U |-               7[ ] |   Terminal "a" del display
  35.          |          -| I |-               6[ ]~|   PA(I)
  36.          | [ ]A0    -| N |-               5[ ]~|   PA(D)
  37.          | [ ]A1    -| O |-               4[ ] |  
  38.          | [ ]A2     +---+           INT1/3[ ]~|  
  39.          | [ ]A3                     INT0/2[ ] |  
  40.          | [ ]A4/SDA  RST SCK MISO     TX>1[ ] |  
  41.          | [ ]A5/SCL  [ ] [ ] [ ]      RX<0[ ] |  
  42.          |            [ ] [ ] [ ]              |
  43.          |  UNO_R3    GND MOSI 5V  ____________/
  44.           \_______________________/
  45.  
  46.   NOTAS:
  47.     - Los pulsadores suelen tener dos pines, que vamos a denominar PA y PB (si es de 4 sólo usamos 2 de ellos)
  48.        - pulsadorIncremento --> Terminales PA(I) y PB(I).
  49.        - pulsadorDecremento --> Terminales PA(D) y PB(D).
  50.     - Conexión PULL-DOWN de los pulsadores.
  51.        - PB(I) y PB(D) conectados a VCC.
  52.        - PA(I) y PA(D) conectados a GND a través de una R=10K omhs (cada uno con su resistencia por separado).  
  53.     - El terminal "com" del display conectado a GND a través de una R=220 ohms
  54. */
  55.  
  56.   const int pulsadorIncremento = 6; // Pin digital para el pulsador de incremento
  57.   const int pulsadorDecremento = 5; // Pin digital para el pulsador de decremento
  58.   const int tiempoAntirrebote = 10; // Variable para almacenar el tiempo antirrebote
  59.  
  60.   // Variables necesarias para los cálculos internos
  61.   int cuenta = 0;
  62.   int estadoPulsadorIncremento;
  63.   int estadoPulsadorAnteriorIncremento;
  64.   int estadoPulsadorDecremento;
  65.   int estadoPulsadorAnteriorDecremento;
  66.  
  67.   // Función antirrebote
  68.   boolean antirrebote(int pin)
  69.   {
  70.     int contador = 0;
  71.     boolean estado;
  72.     boolean estadoAnterior;
  73.    
  74.     do
  75.     {
  76.       estado = digitalRead(pin);
  77.       if(estado != estadoAnterior)
  78.       {
  79.         contador = 0;
  80.         estadoAnterior = estado;
  81.       }
  82.       else
  83.       {
  84.         contador = contador+ 1;
  85.       }
  86.       delay(1);
  87.     } while(contador < tiempoAntirrebote);
  88.    
  89.     return estado;
  90.   }
  91.  
  92.    // Función del display: Se reciben 7 variables y se asignan a cada una de las salidas
  93.   void display (int a, int b, int c, int d, int e, int f, int g)
  94.   {
  95.     digitalWrite (7,a);  
  96.     digitalWrite (8,b);  
  97.     digitalWrite (9,c);
  98.     digitalWrite (10,d);
  99.     digitalWrite (11,e);
  100.     digitalWrite (12,f);
  101.     digitalWrite (13,g);
  102.   }
  103.  
  104.   // Función que actualiza el número que aparece en el display de 7 segmentos                
  105.   void actualizarNumero()
  106.   {
  107.     switch(cuenta){
  108.       case 0:
  109.         display (1,1,1,1,1,1,0); // Número "0"
  110.         break;
  111.       case 1:
  112.         display (0,1,1,0,0,0,0); // Número "1"
  113.         break;
  114.       case 2:
  115.         display (1,1,0,1,1,0,1); // Número "2"
  116.         break;
  117.       case 3:
  118.         display (1,1,1,1,0,0,1); // Número "3"
  119.         break;
  120.       case 4:
  121.         display (0,1,1,0,0,1,1); // Número "4"
  122.         break;
  123.       case 5:
  124.         display (1,0,1,1,0,1,1); // Número "5"
  125.         break;
  126.       case 6:
  127.         display (1,0,1,1,1,1,1); // Número "6"
  128.         break;
  129.       case 7:
  130.         display (1,1,1,0,0,0,0); // Número "7"
  131.         break;
  132.       case 8:
  133.         display (1,1,1,1,1,1,1); // Número "8"
  134.         break;
  135.       case 9:
  136.         display (1,1,1,0,0,1,1); // Número "9"
  137.         break;
  138.     }
  139.   }
  140.    
  141.  
  142.   void setup()
  143.   {
  144.     // Asignación de los pines digitales para el display de 7 segmentos como salidas
  145.     pinMode(7, OUTPUT);
  146.     pinMode(8, OUTPUT);
  147.     pinMode(9, OUTPUT);
  148.     pinMode(10, OUTPUT);
  149.     pinMode(11, OUTPUT);
  150.     pinMode(12, OUTPUT);
  151.     pinMode(13, OUTPUT);
  152.  
  153.     // Asignación de los pines digitales para los pulsadores como entradas
  154.     pinMode(pulsadorIncremento, INPUT);
  155.     pinMode(pulsadorDecremento, INPUT);
  156.   }
  157.  
  158.  
  159.   void loop()
  160.   {  
  161.     // Leemos el estado del pulsador de incremento
  162.     estadoPulsadorIncremento = digitalRead(pulsadorIncremento);    
  163.     // Si hay un cambio en el estado del pulsador de incremento
  164.     if(estadoPulsadorIncremento != estadoPulsadorAnteriorIncremento)
  165.     {
  166.       // y si se ha eliminado ya el rebote del pulsador de incremento
  167.       if(antirrebote(pulsadorIncremento))
  168.       {
  169.         // Se incrementa la cuenta en una unidad
  170.         cuenta++;
  171.         // Si la cuenta es mayor que 9, permanece en 9.
  172.         if(cuenta > 9)
  173.         {
  174.           cuenta = 9;
  175.         }
  176.       }
  177.     }
  178.     // Actualizamos el estado anterior del pulsador de incremento    
  179.     estadoPulsadorAnteriorIncremento = estadoPulsadorIncremento;
  180.  
  181.     // Leemos el estado del pulsador de decremento
  182.     estadoPulsadorDecremento = digitalRead(pulsadorDecremento);
  183.      // Si hay un cambio en el estado del pulsador de decremento
  184.     if(estadoPulsadorDecremento != estadoPulsadorAnteriorDecremento)
  185.     {
  186.       // y si se ha eliminado ya el rebote del pulsador de decremento
  187.       if(antirrebote(pulsadorDecremento))
  188.       {
  189.         // Se decrementa la cuenta en una unidad
  190.         cuenta--;
  191.         // Si la cuenta es menor que 0, permanece en 0.
  192.         if(cuenta < 0)
  193.         {
  194.           cuenta = 0;
  195.         }
  196.       }
  197.     }
  198.     // Actualizamos el estado anterior del pulsador de decremento      
  199.     estadoPulsadorAnteriorDecremento = estadoPulsadorDecremento;
  200.    
  201.     // Actualizamos el número que aparece en el display de 7 segmentos  
  202.     actualizarNumero();
  203.   }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement