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 3 // el puerto 3 está asignado para
en segmento B del display
#define C 4 //
el puerto 4 está asignado para en segmento C del display
#define D 5 // 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 8
// 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