Contenido del curso

Actividad 23

 

Ejercicio Display

En esta actividad se debe mostrar por un display de 7 segmentos el número almacenado en una variable. El display puede ser tanto de ánodo común como de cátodo común. Para modificar la variable, se dispondrá de un botón. Si se pulsa el botón, se debe incrementar el valor de la variable en uno. Se debe disponer de un segundo botón para cambiar el digito mostrado en el display. Si se pulsa el segundo botón se debe cambiar el digito encendido en el display. Si el valor de la cuenta sube del numero 9 se debe continuar en el número 0. A continuación se muestra el circuito que se debe utilizar.


// Definir pines de los botones
#define bot_num 10
#define bot_pos 11

// Definir pines del display 7 segmentos
#define pin_a 2
#define pin_b 3
#define pin_c 4
#define pin_d 5
#define pin_e 6
#define pin_f 7
#define pin_g 8
#define pin_DP 9

// Definir pines de cada digito del display 7 segmentos
#define N1 A0
#define N2 A1
#define N3 A2
#define N4 A3

// Variable almacen para guardar que leds se deben encender para
// formar cada numero en el display 7 segmentos
const bool Digito[10][8] =
   {
     { 1, 1, 1, 1, 1, 1, 0, 0 },    // 0
     { 0, 1, 1, 0, 0, 0, 0, 0 },    // 1
     { 1, 1, 0, 1, 1, 0, 1, 0 },    // 2
     { 1, 1, 1, 1, 0, 0, 1, 0 },    // 3
     { 0, 1, 1, 0, 0, 1, 1, 0 },    // 4
     { 1, 0, 1, 1, 0, 1, 1, 0 },    // 5
     { 1, 0, 1, 1, 1, 1, 1, 0 },    // 6
     { 1, 1, 1, 0, 0, 0, 0, 0 },    // 7
     { 1, 1, 1, 1, 1, 1, 1, 0 },    // 8
     { 1, 1, 1, 0, 0, 1, 1, 0 }     // 9
   };

// Creación de variables para almacenar el numero y la posición
int numero = 0;
int pos = 0;

// Función que encienda y/o apague los leds dependiendo del numero
void sacar_num(bool dig[8]){
  digitalWrite(pin_a, dig[0]);
  digitalWrite(pin_b, dig[1]);
  digitalWrite(pin_c, dig[2]);
  digitalWrite(pin_d, dig[3]);
  digitalWrite(pin_e, dig[4]);
  digitalWrite(pin_f, dig[5]);
  digitalWrite(pin_g, dig[6]);
  digitalWrite(pin_DP, dig[7]);
}

void setup() {
  // Se configuran los pines de los pulsadores
  pinMode(bot_num, INPUT);
  pinMode(bot_pos, INPUT);
  // Se configuran los pines del display 7 segmentos
  pinMode(pin_a, OUTPUT);
  pinMode(pin_b, OUTPUT);
  pinMode(pin_c, OUTPUT);
  pinMode(pin_d, OUTPUT);
  pinMode(pin_e, OUTPUT);
  pinMode(pin_f, OUTPUT);
  pinMode(pin_g, OUTPUT);
  pinMode(pin_DP, OUTPUT);
  // Se configuran los pines de selección de dígito
  pinMode(N1, OUTPUT);
  pinMode(N2, OUTPUT);
  pinMode(N3, OUTPUT);
  pinMode(N4, OUTPUT);
}

void loop() {
  // Si se pulsa el boton de contar, incrementar la cuenta
  if(digitalRead(bot_num) == HIGH){
    numero++;
  }
  // Si se pulsa el boton de posicioón, incrementar la posición
  if(digitalRead(bot_pos) == HIGH){
    pos++;
  }
  // Si el número llega a 10, reiniciar el contador
  if(numero >= 10){
    numero = 0;
  }
  // Si la posición llega a 4, reiniciar la posición
  if(pos >= 4){
    pos = 0;
  }
  // Mostrar en display de 7 segmentos el numero
  switch(numero){
    case 0:
      sacar_num(Digito[0]);   // Mostrar un 0
      break;
    case 1:
      sacar_num(Digito[1]);   // Mostrar un 1
      break;
    case 2:
      sacar_num(Digito[2]);   // Mostrar un 2
      break;
    case 3:
      sacar_num(Digito[3]);   // Mostrar un 3
      break;
    case 4:
      sacar_num(Digito[4]);   // Mostrar un 4
      break;
    case 5:
      sacar_num(Digito[5]);   // Mostrar un 5
      break;
    case 6:
      sacar_num(Digito[6]);   // Mostrar un 6
      break;
    case 7:
      sacar_num(Digito[7]);   // Mostrar un 7
      break;
    case 8:
      sacar_num(Digito[8]);   // Mostrar un 8
      break;
    case 9:
      sacar_num(Digito[9]);   // Mostrar un 9
      break;
  }
  // Encender el digito dependiendo del valor de posición
  switch(pos){
    case 0:
      digitalWrite(N1, LOW);
      digitalWrite(N2, HIGH);
      digitalWrite(N3, HIGH);
      digitalWrite(N4, HIGH);
      break;
    case 1:
      digitalWrite(N1, HIGH);
      digitalWrite(N2, LOW);
      digitalWrite(N3, HIGH);
      digitalWrite(N4, HIGH);
      break;
    case 2:
      digitalWrite(N1, HIGH);
      digitalWrite(N2, HIGH);
      digitalWrite(N3, LOW);
      digitalWrite(N4, HIGH);
      break;
    case 3:
      digitalWrite(N1, HIGH);
      digitalWrite(N2, HIGH);
      digitalWrite(N3, HIGH);
      digitalWrite(N4, LOW);
      break;
  }
}
Actualmente no está disponible la solución a la actividad en Bloques.
Vistas
12 Número de vistas
12 Vistas de miembros
0 Vistas públicas
Acciones
0 Gustos
0 No me gusta
0 Comentarios
Compartir en redes sociales
Compartir enlace
Compartir por correo

Por favor iniciar sesión para compartir esto webpage por correo.