#include <16F628A.h>
#FUSES NOWDT //No Watch Dog Timer
#FUSES XT //Crystal osc <= 4mhz for PCM/PCH , 3mhz to 10 mhz for PCD
#FUSES NOBROWNOUT //No brownout reset
#FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#use delay(clock=4000000)
#rom 0x2100 ={0,0,0,0}
#define LCD_ENABLE_PIN PIN_B1
#define LCD_RS_PIN PIN_B2
#define LCD_RW_PIN PIN_B3
#define LCD_DATA4 PIN_B4
#define LCD_DATA5 PIN_B5
#define LCD_DATA6 PIN_B6
#define LCD_DATA7 PIN_B7
#include <lcd.c>
#include <internal_eeprom.c>
int32 A = 0;
int1 boton = false, T_mSeg = false;
#int_TIMER1
void TIMER1_isr(void)
{
T_mSeg = true;
}
void main()
{
char y=1; // indice columnas
signed char x=16; // indice filas
setup_timer_1(T1_INTERNAL|T1_DIV_BY_4); //262 ms overflow
enable_interrupts(INT_TIMER1);
enable_interrupts(GLOBAL);
lcd_init(); // Inicia LCD
lcd_putc("Inicializando el\n"); // Saca texto
lcd_putc("Equipo Aguarde "); // Saca texto
delay_ms(1000); // Retardo
lcd_putc("\f"); // Limpia pantalla
A = read_int32_eeprom(0x00); // Lee contador de la EEPROM
while(TRUE)
{
lcd_gotoxy(x,y); // cursor para escribir mensaje
lcd_putc("kapotik.kapotik.kapotik.kapotik"); // muestra por pantalla el mensaje
if(T_mSeg) // Si pasaron 262 mSeg. aprox...
{
x--; // decremento indice de filas
if(x<-31) // ¿ya se ha mostrado mensaje entero por 1ºfila?
{
x=16; // decremento indice columnas
}
lcd_gotoxy(1,1); // Borro solamente la primera línea del LCD
lcd_putc(" ");
T_mSeg = false; // Desactivo la bandera
}
if(!input(pin_A0) && !boton) // Pregunta si RA0 es cero
{
A++; // Incremento el conteo
boton = true;
write_int32_eeprom(0x00, A);
delay_ms(50);
}
if(input(pin_A0))
boton = false; // Al soltar el Boton...
if(A>=9999999) // Preguto si A es mayor o igual a 9999999,
{ // cuando sea igual iguala "A" a cero
A=0;
}
lcd_gotoxy(1,2); // Acomoda cursor LCD
printf(lcd_putc
, "valor %Lu ", A
); // Imprime 16 espacios en el LCD }
}