//No funcional, se obtuvo la idea para no utilizar una variable de desplazamiento
#include <SPI.h>
const uint8_t CS_PIN = 10;
const uint8_t MOSI_PIN = 11;
const uint8_t MISO_PIN = 13; //Solo es necesario para la configuración SPI, la pantalla no devuelve datos
const uint8_t SCK_PIN = 12;
//Definición de registros de la matriz led
const uint8_t MAX7219_REG_NOOP = 0x00;
const uint8_t MAX7219_REG_DIGIT0 = 0x01;
const uint8_t MAX7219_REG_DIGIT1 = 0x02;
const uint8_t MAX7219_REG_DIGIT2 = 0x03;
const uint8_t MAX7219_REG_DIGIT3 = 0x04;
const uint8_t MAX7219_REG_DIGIT4 = 0x05;
const uint8_t MAX7219_REG_DIGIT5 = 0x06;
const uint8_t MAX7219_REG_DIGIT6 = 0x07;
const uint8_t MAX7219_REG_DIGIT7 = 0x08;
const uint8_t MAX7219_REG_DECODE_MODE = 0x09;
const uint8_t MAX7219_REG_INTENSITY = 0x0A;
const uint8_t MAX7219_REG_SCAN_LIMIT = 0x0B;
const uint8_t MAX7219_REG_SHUTDOWN = 0x0C;
const uint8_t MAX7219_REG_DISPLAY_TEST = 0x0F;
const uint8_t ArregloFilasNumero1[7] = {0x04, 0x06, 0x05, 0x04, 0x04, 0x04, 0x04};
const uint8_t ArregloFilasNumero2[7] = {0x06, 0x09, 0x08, 0x04, 0x02, 0x01, 0x0F};
const uint8_t ArregloFilasNumero3[7] = {0x07, 0x08, 0x08, 0x06, 0x08, 0x08, 0x07};
const uint8_t ArregloFilasNumero4[7] = {0x09, 0x09, 0x09, 0x0F, 0x08, 0x08, 0x08};
const uint8_t ArregloFilasNumero5[7] = {0x0F, 0x01, 0x01, 0x07, 0x08, 0x08, 0x07};
const uint8_t ArregloFilasNumero6[7] = {0x06, 0x09, 0x01, 0x07, 0x09, 0x09, 0x06};
const uint8_t ArregloFilasNumero7[7] = {0x0F, 0x08, 0x04, 0x04, 0x04, 0x02, 0x01};
const uint8_t ArregloFilasNumero8[7] = {0x06, 0x09, 0x09, 0x06, 0x09, 0x09, 0x06};
const uint8_t ArregloFilasNumero9[7] = {0x06, 0x09, 0x09, 0x0E, 0x08, 0x08, 0x08};
const uint8_t ArregloFilasNumero0[7] = {0x06, 0x09, 0x09, 0x09, 0x09, 0x09, 0x06};
uint64_t Dato;
uint8_t DatoPrimeraMatriz = 0;
uint8_t DatoSegundaMatriz = 0;
uint8_t DatoTerceraMatriz = 0;
uint8_t DatoCuartaMatriz = 0;
uint8_t DatoQuintaMatriz = 0;
uint8_t DatoPrimeraMatrizAnterior = 0;
uint8_t DatoSegundaMatrizAnterior = 0;
uint8_t DatoTerceraMatrizAnterior = 0;
uint8_t DatoCuartaMatrizAnterior = 0;
uint8_t DatoQuintaMatrizAnterior = 0;
void setup() {
Serial.begin(115200);
SPI.begin(SCK_PIN, MISO_PIN, MOSI_PIN, CS_PIN);
pinMode(CS_PIN, OUTPUT);
digitalWrite(CS_PIN, HIGH);
ConfigurarConMax7219(MAX7219_REG_SCAN_LIMIT, 0x07); //Cuántas filas se utilizan
ConfigurarConMax7219(MAX7219_REG_DECODE_MODE, 0x01); //Módo de representación de los leds, solo binario o decodificador de BCD primero
ConfigurarConMax7219(MAX7219_REG_SHUTDOWN, 0x01); //Se prende la pantalla
ConfigurarConMax7219(MAX7219_REG_INTENSITY, 0x0F); //Brillo de los leds
Dato = ArregloFilasNumero1[i] | ArregloFilasNumero2[i] << 8 | ArregloFilasNumero3[i] << 16 | ArregloFilasNumero4[i] << 32 | | ArregloFilasNumero5[i] << 40;
DatoPrimeraMatrizAnterior = Dato >> 32; //(NParte*CantidadBits)
DatoSegundaMatrizAnterior = Dato >> 24;
DatoTerceraMatrizAnterior = Dato >> 16;
DatoCuartaMatrizAnterior = Dato >> 8;
DatoQuintaMatrizAnterior = Dato;
}
void ConfigurarConMax7219(uint8_t Registro,uint8_t Dato){
digitalWrite(CS_PIN, LOW); //Inicio de la comunicación
//Con SPI.transfer, se envía y recibe datos a la vez. El valor () es el que se envía del maestro al esclavo. Los roles se definen con la inicialización en setup
SPI.transfer(Registro); //Primero se indica la dirección del registro
SPI.transfer(Dato); //Se inidca el dato a mandar al registro
digitalWrite(CS_PIN,HIGH); //Fin de la comunicación
}
void loop() {
ImprimirNumerosEnMatrizLed();
delay(100);
}
void ImprimirNumerosEnMatrizLed(){
int i;
uint64_t Dato;
for(i = 0; i < 7; i++){
ComunicarConMax7219(i+1);
}
}
void ComunicarConMax7219(uint8_t Registro){
//Dato = DatoAnterior >> 1 | DatoQuintaMatrizAnterior <<7; //Valor oculto
DatoPrimeraMatriz = DatoPrimeraMatrizAnterior >> 1 | DatoQuintaMatrizAnterior << 7;
DatoSegundaMatriz = DatoSegundaMatrizAnterior >> 1 | DatoPrimeraMatrizAnterior << 7;
DatoTerceraMatriz = DatoTerceraMatrizAnterior >> 1 | DatoSegundaMatrizAnterior << 7;
DatoCuartaMatriz = DatoCuartaMatrizAnterior >> 1 | DatoTerceraMatrizAnterior << 7;
DatoQuintaMatriz = DatoQuintaMatrizAnterior >> 1 | DatoCuartaMatrizAnterior << 7;
digitalWrite(CS_PIN, LOW); //Inicio de la comunicación
//Primera matriz
SPI.transfer(Registro);
SPI.transfer(DatoPrimeraMatriz);
//Segunda matriz
SPI.transfer(Registro);
SPI.transfer(DatoSegundaMatriz);
digitalWrite(CS_PIN,HIGH); //Fin de la comunicación
//Se actualizan los datos anteriores
DatoPrimeraMatrizAnterior = DatoPrimeraMatriz;
DatoSegundaMatrizAnterior = DatoSegundaMatriz;
DatoTerceraMatrizAnterior = DatoTerceraMatriz;
DatoCuartaMatrizAnterior = DatoCuartaMatriz;
DatoQuintaMatrizAnterior = DatoQuintaMatriz;
}
//Comunicación SPI con la pantalla
Loading
esp32-s3-devkitc-1
esp32-s3-devkitc-1