I have a LCD screen which waits for a button press and then starts a timer. One button runs a normal timer and then another button runs a sped up timer. The two problems I have is the button press isnt the best, I can't figure out how to use GPIO interrupts on the PIC16f18877.
My other problem is the LCD screen flickers every two seconds - I thought that maybe the while loop was causing the LCD Screen to reinitialise?
Any help would be appreciated
I put the detection of the button press inside a while loop and the initialisation outside the while loop. Thought this may stop the flicker but it hasn't.
void initialise()
{
OSCCON1 = 0x1EA;
OSCFRQ = 0x02;
Port_Dir_Ini();
Port_Init_State();
Delay(30000);
Eusart_Setup();
Disp_Size(); /* For 20 by 4 LCD digole display only*/
Delay(1000);
LCD_Cursor_Off();
Delay(1000);
LCD_Clear();
Delay(1000);
TMR2_Setup();
LCD_Text_Position_xy (1,0);
Eusart_Transmit("NP269 Sync Test");
LCD_Text_Position_xy (1,3);
Eusart_Transmit("Toggle Relay RL500");
LCD_Text_Position_xy(12,1);
Eusart_Transmit("HH:MM:SS");
}}
int main(void)
{
initialise();
__CONFIG(FOSV_INTRCCLK&WDTE_OFF&MCLRE_OFF&CP_OFF);
while(1)
{
if(!SW102)
{
LCD_Text_Position_xy(1,1);
Eusart_Transmit("HyperSpeed");
for(;;)
{
CLRWDT();
if (TMR2IF)
{
timerValue_ms ++;
TMR2IF = 0;
MILLISECONDS = 1;
HyperClock();
}
}
Relay();
MILLISECONDS = 0;
}
else if(!SW103)
{
LCD_Text_Position_xy(1,1);
Eusart_Transmit("Current");
for(;;)
{
CLRWDT();
if (TMR2IF)
{
timerValue_ms ++;
TMR2IF = 0;
MILLISECONDS = 1;
Clock();
}
}
Relay();
MILLISECONDS = 0;
}
}
//Delay(10000);
}