#include <16f877a.h>
#use delay (clock=20M)
#include "stdio.h"
#include "stdlib.h"
#define LCD_ENABLE_PIN PIN_B0
#define LCD_RS_PIN PIN_B1
#define LCD_RW_PIN PIN_B2
#define LCD_DATA4 PIN_B4
#define LCD_DATA5 PIN_B5
#define LCD_DATA6 PIN_B6
#define LCD_DATA7 PIN_B7
#include <lcd.c>
#DEFINE start pin_c0
#define reset pin_c1
unsigned int contador=0;
unsigned int1 memoria=0;
char binario[10];
char hexadecimal[10];
void main()
{
   lcd_init();
   while(TRUE)
   {

itoa(contador,2,binario);
itoa(contador,16,hexadecimal);
lcd_gotoxy(1,1);
printf(lcd_putc, "D:");
printf(lcd_putc,"%u", contador);
printf(lcd_putc, " B:");
printf(lcd_putc,"%s", binario);
lcd_gotoxy(1,2);
printf(lcd_putc, "Hex:");
printf(lcd_putc,"%s", hexadecimal);
   if(input(start)==0 && contador==0){
   memoria = 1;
   }
  if(contador>1){
   if(input(start)==0 && memoria == 1){
   delay_ms(500);
   memoria = 0;
   }
   if(memoria==0 && input(start)==0){
   delay_ms(500);
   memoria=1;
   }
  }
   
 if(memoria==1){  
contador++;
delay_ms(470);
 }
 if(input(reset)==0){
lcd_gotoxy(1,1);
printf(lcd_putc, "D:");
printf(lcd_putc,"   ");
printf(lcd_putc, " B:");
printf(lcd_putc,"         ");
lcd_gotoxy(1,2);
printf(lcd_putc, "Hex:");
printf(lcd_putc,"  ");
contador = 0;
delay_ms(250);
 memoria = 0;
 }
output_d(contador);
 if (contador>=255){
lcd_gotoxy(1,1);
printf(lcd_putc, "D:");
printf(lcd_putc,"   ");
printf(lcd_putc, " B:");
printf(lcd_putc,"        ");
lcd_gotoxy(1,2);
printf(lcd_putc, "Hex:");
printf(lcd_putc,"  ");
contador = 0;
delay_ms(250);

 }
   }

}
