#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;
uint8_t Valor;
unsigned int Desplazamiento;
bool DatosEntrandoMatriz1;
bool DatosSaliendoMatriz1;
bool DatosEntrandoMatriz2;
bool DatosSaliendoMatriz2;
bool Entrando;
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};
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
Valor = 5;
Desplazamiento = 0;
Entrando = true;
}
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() {
Serial.print("Imprimiendo número: ");
Serial.println(Valor);
LimpiarPantalla();
ImprimirNumeroEnMatrizLed(Valor,Desplazamiento);
if(Desplazamiento >= 8){ //Cada matriz tiene el mismo desplazamiento
Desplazamiento = 1;
Entrando ^= 1;
}else{
Desplazamiento++;
}
delay(500);
}
void ComunicarConMax7219(uint8_t Registro,uint8_t Dato, unsigned int Desplazamiento){
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
//Primera matriz
SPI.transfer(Registro);
if(Entrando){
SPI.transfer(Dato>>Desplazamiento);
}else{
SPI.transfer(Dato<<(8-Desplazamiento));
}
//Segunda matriz
SPI.transfer(Registro);
if(Entrando){
SPI.transfer(Dato<<(8-Desplazamiento));
}else{
SPI.transfer(Dato>>Desplazamiento);
}
digitalWrite(CS_PIN,HIGH); //Fin de la comunicación
}
void ImprimirNumeroEnMatrizLed(uint8_t Valor, unsigned int Desplazamiento){
int i;
for(i = 0; i < 7; i++){
ComunicarConMax7219(i+1,ArregloFilasNumero5[i],Desplazamiento);
}
}
void LimpiarPantalla(){
for(int Fila = 1; Fila <=7; Fila++){
ComunicarConMax7219(Fila,0,0);
//delay(100);
}
}
//Comunicación SPI con la pantalla
Loading
esp32-s3-devkitc-1
esp32-s3-devkitc-1