PIC18F4550, botón y código de conteo [cerrado]

-3

Estoy usando PIC18F4550. Tengo algún problema con el conteo. ¿Cómo debo escribir el código cuando presiono el botón en el que se agregó el recuento 1?

este es mi código

#include <P18F4550.h>
#include<xlcd.h>                //built-in LCD library
#include<delays.h>
#define BB PORTBbits.RB0
#pragma config FOSC = XT_XT, PWRT = ON, MCLRE = ON
#pragma config BOR = ON, WDT = OFF, PBADEN = OFF, LVP = OFF
void DelayPORXLCD(void) //15mS delay
{
    Delay1KTCYx(15);
}
void DelayFor18TCY(void) //18 cycle delay
{
    Nop(); Nop(); Nop(); Nop();
    Nop(); Nop(); Nop(); Nop();
    Nop(); Nop(); Nop(); Nop();
    Nop(); Nop(); Nop(); Nop();
    Nop(); Nop();
} 
void DelayXLCD(void) //5mS delay
{
    Delay1KTCYx(5);
}
void main(void)
{
    unsigned char minute [] = "00";
    unsigned int i = 0;
    ADCON1=0x0F;            //PORTA digital
    TRISD=0;                //outputs
    TRISB=0;
    TRISBbits.TRISB0 =1;

    OpenXLCD(EIGHT_BIT & LINES_5X7); //LCD set-up

    while(BusyXLCD( ));
    WriteCmdXLCD(0x0C); //on display, off cursor

    while(BusyXLCD( ));
    SetDDRamAddr(0x82); //character start position

    while(BusyXLCD( ));
    WriteCmdXLCD(SHIFT_DISP_LEFT); //cursor moves right
                              //for each character

    putrsXLCD("Adjust minute");     //string placed in ROM

    SetDDRamAddr(0xC6);
    putsXLCD(minute);

    for(;;)
    {
        if(BB == 0)
        {
             minute++;
        }
    }

}
    
pregunta Yze Lim

1 respuesta

1

No está mostrando el número en la pantalla LCD durante las actualizaciones. Este podría ser uno de varios problemas. Pero puedes intentarlo:

for(;;)   // And empty <for> will loop forever, just like while(True)
{
    if(BB == 0)
    {
         minute++;         // BUG. This variable is a string. See updated answer
         putsXLCD(minute); // Write the updated number to the LCD
    }
}

Con esto todavía tendrás problemas de rebote. Los minutos aumentarán varias veces con solo presionar un botón.

Actualizar

La variable minute debe ser un entero. No puedes hacer matemáticas con cuerdas, solo con números. Así que haz los cálculos en un número y conviértelo en una cadena. Prueba:

unsigned int minute = 0;
char minute_str [5] = "0";

for(;;)   // And empty <for> will loop forever, just like while(True)
{
    if(BB == 0)
    {
        minute++;
        sprintf (minute_str , "%d", minute);
        putsXLCD(minute_str); // Write the updated number to the LCD
    }
}

Parece que todavía necesitas entender algunos conceptos básicos de programación. Intentaría comenzar con algo mucho más simple que un microcontrolador.

    
respondido por el Hein Wessels

Lea otras preguntas en las etiquetas