Soy bastante nuevo en la programación de microcontroladores PIC, pero me estoy quedando atrapado en él y me encanta. Hoy mi pequeño proyecto era hacer que un número de pantalla de 7 segmentos contara de 0 a 9, multiplexando cada segmento a medida que los números progresaban.
Terminé con este enorme trozo de código. Ahora, como soy bastante nuevo en esto, estoy 100% seguro de que hay una mejor manera de hacer que una pantalla de 7 segmentos cuente, utilizando multiplexación, porque simplemente atascé lo que sabía. Tengo temporizadores y bucles y cosas idk por todo el lugar, aunque funciona. Me encantaría poner todo en carpetas, hacerlo limpio y asegurarme de que mi código sea tan eficiente como sea posible (¡y no tener la función declarada como implícita warnigs en la compilación)
¡Por favor, ayuda a un hermano!
Gracias.
Aquí es cómo se veía main.c:
(definiciones.h contiene _XTAL_FREQ y PORTbits, y config.h contiene bits de configuración)
#include <xc.h>
#include "config.h"
#include "definitions.h"
void delay(void)
{
INTCONbits.T0IF = 0; //Clear the Timer 0 interrupt flag
TMR0 = 0b11111010;
INTCONbits.T0IE = 1; //Enable the Timer 0 interrupt
while(INTCONbits.T0IF == 0) //Wait for the interrupt to occur. This
{ //happens when the TMR0 register rolls over.
NOP();
}
}
int main(void)
{
TRISD=0x00;
OPTION_REGbits.PSA = 0; //Prescaler assigned to Timer 0 (other option is to
//the Watchdog timer (WDT))
OPTION_REGbits.PS = 0b111; //Set the prescaler to 1:256
OPTION_REGbits.T0CS = 0; //Use the instruction clock (Fcy/4) as the timer
//clock. Other option is an external oscillator
//or clock on the T0CKI pin.
while(1)
{
no0();
__delay_ms(1);
no1();
__delay_ms(1);
no2();
__delay_ms(1);
no3();
__delay_ms(1);
no4();
__delay_ms(1);
no5();
__delay_ms(1);
no6();
__delay_ms(1);
no7();
__delay_ms(1);
no8();
__delay_ms(1);
no9();
__delay_ms(1);
}
}
int no0()
{
unsigned int a;
for(a=0;a<100;a++)
{
SEG1=1;
SEG2=0;
SEG3=0;
SEG4=0;
SEG5=0;
SEG6=0;
SEG7=0;
delay();
SEG1=0;
SEG2=1;
SEG3=0;
SEG4=0;
SEG5=0;
SEG6=0;
SEG7=0;
delay();
SEG1=0;
SEG2=0;
SEG3=1;
SEG4=0;
SEG5=0;
SEG6=0;
SEG7=0;
delay();
SEG1=0;
SEG2=0;
SEG3=0;
SEG4=0;
SEG5=1;
SEG6=0;
SEG7=0;
delay();
SEG1=0;
SEG2=0;
SEG3=0;
SEG4=0;
SEG5=0;
SEG6=1;
SEG7=0;
delay();
SEG1=0;
SEG2=0;
SEG3=0;
SEG4=0;
SEG5=0;
SEG6=0;
SEG7=1;
delay();
}
}
int no1()
{
unsigned int b;
for(b=0;b<300;b++)
{
SEG1=0;
SEG2=0;
SEG3=1;
SEG4=0;
SEG5=0;
SEG6=0;
SEG7=0;
delay();
SEG1=0;
SEG2=0;
SEG3=0;
SEG4=0;
SEG5=0;
SEG6=1;
SEG7=0;
delay();
}
}
int no2()
{
unsigned int c;
for(c=0;c<120;c++)
{
SEG1=1;
SEG2=0;
SEG3=0;
SEG4=0;
SEG5=0;
SEG6=0;
SEG7=0;
delay();
SEG1=0;
SEG2=0;
SEG3=1;
SEG4=0;
SEG5=0;
SEG6=0;
SEG7=0;
delay();
SEG1=0;
SEG2=0;
SEG3=0;
SEG4=1;
SEG5=0;
SEG6=0;
SEG7=0;
delay();
SEG1=0;
SEG2=0;
SEG3=0;
SEG4=0;
SEG5=1;
SEG6=0;
SEG7=0;
delay();
SEG1=0;
SEG2=0;
SEG3=0;
SEG4=0;
SEG5=0;
SEG6=0;
SEG7=1;
delay();
}
}
int no3()
{
unsigned int d;
for(d=0;d<120;d++)
{
SEG1=1;
SEG2=0;
SEG3=0;
SEG4=0;
SEG5=0;
SEG6=0;
SEG7=0;
delay();
SEG1=0;
SEG2=0;
SEG3=1;
SEG4=0;
SEG5=0;
SEG6=0;
SEG7=0;
delay();
SEG1=0;
SEG2=0;
SEG3=0;
SEG4=1;
SEG5=0;
SEG6=0;
SEG7=0;
delay();
SEG1=0;
SEG2=0;
SEG3=0;
SEG4=0;
SEG5=0;
SEG6=1;
SEG7=0;
delay();
SEG1=0;
SEG2=0;
SEG3=0;
SEG4=0;
SEG5=0;
SEG6=0;
SEG7=1;
delay();
}
}
int no4()
{
unsigned int e;
for(e=0;e<150;e++)
{
SEG1=0;
SEG2=1;
SEG3=0;
SEG4=0;
SEG5=0;
SEG6=0;
SEG7=0;
delay();
SEG1=0;
SEG2=0;
SEG3=1;
SEG4=0;
SEG5=0;
SEG6=0;
SEG7=0;
delay();
SEG1=0;
SEG2=0;
SEG3=0;
SEG4=1;
SEG5=0;
SEG6=0;
SEG7=0;
delay();
SEG1=0;
SEG2=0;
SEG3=0;
SEG4=0;
SEG5=0;
SEG6=1;
SEG7=0;
delay();
}
}
int no5()
{
unsigned int f;
for(f=0;f<120;f++)
{
SEG1=1;
SEG2=0;
SEG3=0;
SEG4=0;
SEG5=0;
SEG6=0;
SEG7=0;
delay();
SEG1=0;
SEG2=1;
SEG3=0;
SEG4=0;
SEG5=0;
SEG6=0;
SEG7=0;
delay();
SEG1=0;
SEG2=0;
SEG3=0;
SEG4=1;
SEG5=0;
SEG6=0;
SEG7=0;
delay();
SEG1=0;
SEG2=0;
SEG3=0;
SEG4=0;
SEG5=0;
SEG6=1;
SEG7=0;
delay();
SEG1=0;
SEG2=0;
SEG3=0;
SEG4=0;
SEG5=0;
SEG6=0;
SEG7=1;
delay();
}
}
int no6()
{
unsigned int g;
for(g=0;g<100;g++)
{
SEG1=1;
SEG2=0;
SEG3=0;
SEG4=0;
SEG5=0;
SEG6=0;
SEG7=0;
delay();
SEG1=0;
SEG2=1;
SEG3=0;
SEG4=0;
SEG5=0;
SEG6=0;
SEG7=0;
delay();
SEG1=0;
SEG2=0;
SEG3=0;
SEG4=1;
SEG5=0;
SEG6=0;
SEG7=0;
delay();
SEG1=0;
SEG2=0;
SEG3=0;
SEG4=0;
SEG5=1;
SEG6=0;
SEG7=0;
delay();
SEG1=0;
SEG2=0;
SEG3=0;
SEG4=0;
SEG5=0;
SEG6=1;
SEG7=0;
delay();
SEG1=0;
SEG2=0;
SEG3=0;
SEG4=0;
SEG5=0;
SEG6=0;
SEG7=1;
delay();
}
}
int no7()
{
unsigned int h;
for(h=0;h<200;h++)
{
SEG1=1;
SEG2=0;
SEG3=0;
SEG4=0;
SEG5=0;
SEG6=0;
SEG7=0;
delay();
SEG1=0;
SEG2=0;
SEG3=1;
SEG4=0;
SEG5=0;
SEG6=0;
SEG7=0;
delay();
SEG1=0;
SEG2=0;
SEG3=0;
SEG4=0;
SEG5=0;
SEG6=1;
SEG7=0;
delay();
}
}
int no8()
{
unsigned int i;
for(i=0;i<86;i++)
{
SEG1=1;
SEG2=0;
SEG3=0;
SEG4=0;
SEG5=0;
SEG6=0;
SEG7=0;
delay();
SEG1=0;
SEG2=1;
SEG3=0;
SEG4=0;
SEG5=0;
SEG6=0;
SEG7=0;
delay();
SEG1=0;
SEG2=0;
SEG3=1;
SEG4=0;
SEG5=0;
SEG6=0;
SEG7=0;
delay();
SEG1=0;
SEG2=0;
SEG3=0;
SEG4=1;
SEG5=0;
SEG6=0;
SEG7=0;
delay();
SEG1=0;
SEG2=0;
SEG3=0;
SEG4=0;
SEG5=1;
SEG6=0;
SEG7=0;
delay();
SEG1=0;
SEG2=0;
SEG3=0;
SEG4=0;
SEG5=0;
SEG6=1;
SEG7=0;
delay();
SEG1=0;
SEG2=0;
SEG3=0;
SEG4=0;
SEG5=0;
SEG6=0;
SEG7=1;
delay();
}
}
int no9()
{
unsigned int j;
for(j=0;j<100;j++)
{
SEG1=1;
SEG2=0;
SEG3=0;
SEG4=0;
SEG5=0;
SEG6=0;
SEG7=0;
delay();
SEG1=0;
SEG2=1;
SEG3=0;
SEG4=0;
SEG5=0;
SEG6=0;
SEG7=0;
delay();
SEG1=0;
SEG2=0;
SEG3=1;
SEG4=0;
SEG5=0;
SEG6=0;
SEG7=0;
delay();
SEG1=0;
SEG2=0;
SEG3=0;
SEG4=1;
SEG5=0;
SEG6=0;
SEG7=0;
delay();
SEG1=0;
SEG2=0;
SEG3=0;
SEG4=0;
SEG5=0;
SEG6=1;
SEG7=0;
delay();
SEG1=0;
SEG2=0;
SEG3=0;
SEG4=0;
SEG5=0;
SEG6=0;
SEG7=1;
delay();
}
}