martes, 20 de diciembre de 2016

contador con 4 displays de 7 segmentos

TEMA: Contador con 4 displays de 7 segmentos.
Contador con 4 displays de 7 segmentos.
Multiplexado







// Formacion de los numeros  del 0 al 9 en el display de 7 segmentos
// 0 => -FEDCBA
// 1 => - - - -CB-
// 2 => G-ED-BA
// 3 => G--DCBA
// 4 => GF--CB-
// 5 => GF-DC-A
// 6 => GFEDC-A
// 7 => ----CBA
// 8 => GFEDCBA
// 9 => GF-DCBA

// Asignamos los puertos digitales en Arduino
// Estos corresponde a cada segmento del display
#define A 2   // el puerto 2 está asignado para en segmento A del display
#define B// el puerto 3 está asignado para en segmento B del display
#define C//  el puerto 4 está asignado para en segmento C del display
#define D// el puerto 5 esta asignado para en segmento D del display
#define E 6   // el puerto 6 esta asignado para en segmento E del display
#define F 7   // el puerto 7 esta asignado para en segmento F del display
#define G// el puerto 8 esta asignado para en segmento G del display


// Asignacion de los pines donde están conectados los cátodos
#define  catodocomun1      9
#define  catodocomun2     10
#define  catodocomun3     11
#define  catodocomun4     12

// Dos pulsadores conectados a los  pins 14 and 15
#define BTN1 14
#define BTN2 15

//Estado para pulsadores
int estadobtn1 = 0; //creamos una variable para el estado del botón1 y lo iniciamos acero
int estadobtn2 = 0; //creamos una variable para el estado del botón2 y lo iniciamos acero


//  Secuencia para los Pins  A B C D E F G,
// Creamos un vector de 7 elementos  y le asignamos los pines de cada segmento
//El tipo de dato que maneja el vector es tipo entero (int)
//El nombre del vector se llama segmentos
const  int segmentos[7] = { 2, 3, 4, 5, 6, 7, 8 };

// Creamos un vector  de 10 elementos que corresponde a los números que va mostrar
// El tipo de dato que maneja el vector es binario (byte)
const byte numbers[10] = { 0b0111111, 0b0000110, 0b1011011, 0b1001111, 0b1100110, 0b1101101, 0b1111101, 0b0000111, 0b1111111, 0b1101111};

int digit1 = 0; // creamos 4 variables para el estado de c/u displays.Iniciamos en cero
int digit2 = 0;
int digit3 = 0;
int digit4 = 0;
int count = 0;//creamos una variable contadora, la inicializamos en cero
int val;
void setup() {
  pinMode(A, OUTPUT);
  pinMode(B, OUTPUT);
  pinMode(C, OUTPUT);
  pinMode(D, OUTPUT);
  pinMode(E, OUTPUT);
  pinMode(F, OUTPUT);
  pinMode(G, OUTPUT);
  pinMode(BTN1, INPUT);
  pinMode(BTN2, INPUT);
  digitalWrite(BTN1, HIGH); // activa RPA
  digitalWrite(BTN2, HIGH); // activa RPA
  pinMode(catodocomun1, OUTPUT);
  pinMode(catodocomun2, OUTPUT);
  pinMode(catodocomun3, OUTPUT);
  pinMode(catodocomun4, OUTPUT);
  
} //cerrando  la  configuración de puertos

void loop() {
  val = digitalRead(BTN1); // lee el valor de entrada y almacénlo en val
  if (val != estadobtn1) // el estado de botón ha cambiado!
  {
    if (val == LOW) // compruebe si el botón es presionado
    {
      count++;
      count %= 10000;
    }
  }
  estadobtn1=val;

  val = digitalRead(BTN2); // lee el valor de entrada y almacénlo en val
  if (val != estadobtn2) // el estado de botón ha cambiado!
  {
    if (val == LOW) // compruebe si el botón es presionado
    {
      if (count == 0)
    {
      count=9999;
    } else {
      count--;
      }
    }
    estadobtn2=val;
  }
// display number
digit1=count / 1000;
digit2=(count - (digit1 * 1000)) / 100;
digit3=(count - (digit1*1000) - (digit2*100)) / 10;
digit4=count % 10;

  lightDigit1(numbers[digit1]);
  delay(2);
  lightDigit2(numbers[digit2]);
  delay(2);
  lightDigit3(numbers[digit3]);
  delay(2);
  lightDigit4(numbers[digit4]);
  delay(2);
}

void lightDigit1(byte number) {
  digitalWrite(catodocomun1, LOW);
  digitalWrite(catodocomun2, HIGH);
  digitalWrite(catodocomun3, HIGH);
  digitalWrite(catodocomun4, HIGH);
  lightSegments(number);
}

void lightDigit2(byte number) {
  digitalWrite(catodocomun1, HIGH);
  digitalWrite(catodocomun2, LOW);
  digitalWrite(catodocomun3, HIGH);
  digitalWrite(catodocomun4, HIGH);
  lightSegments(number);
}

void lightDigit3(byte number) {
  digitalWrite(catodocomun1, HIGH);
  digitalWrite(catodocomun2, HIGH);
  digitalWrite(catodocomun3, LOW);
  digitalWrite(catodocomun4, HIGH);
  lightSegments(number);
}

void lightDigit4(byte number) {
  digitalWrite(catodocomun1, HIGH);
  digitalWrite(catodocomun2, HIGH);
  digitalWrite(catodocomun3, HIGH);
  digitalWrite(catodocomun4, LOW);
  lightSegments(number);
}

void lightSegments(byte number) {
  for (int i = 0; i < 7; i++) {
    int bit = bitRead(number, i);
    digitalWrite(segs[i], bit);
  }

}

No hay comentarios:

Publicar un comentario