#include "C:\PIC\16f819-1\C LCD\LCD Driver.h"
  #include <stdio.h>
  #include <stddef.h>
  #include <stdlib.h>
  #include <string.h>

#use delay (clock=8000000)
#fuses PUT,NOWDT,NOBROWNOUT,NOPROTECT,NOMCLR,INTRC_IO
#int_TIMER1
TIMER1_isr() 
{
   clear_interrupt(int_timer1);
   return(0);
}

void Clock_LCD()
{
   output_bit(PIN_A1, 1);
   delay_us(275);
   output_bit(PIN_A1, 0);
}

void LCD_cmd()
{
   output_bit(PIN_A0, 0);
   Clock_LCD();
}

void Clear_LCD()
{
   output_b(0x01);
   LCD_cmd();
   delay_ms(200);
}

void Enable_LCD()
{
   output_b(0x0e);
   LCD_cmd();
}

void LCD_char_out(char character)
{
   output_bit(PIN_A0, 1);
   output_b(character);
   Clock_LCD();
}

void Print_LCD(char *string)
{
   char *i;
   
   i = string;
   while(*i != 0)
   {
      LCD_char_out(*i);
      i++;
   }
}

void Position_LCD(int line, int offset)
{
   int _offset;
   
   switch(line)
   {
   case 0 : _offset = 0;
            break;
   case 1 : _offset = 0x40;
            break;
   case 2 : _offset = 0x14;
            break;
   case 3 : _offset = 0x54;
            break;
   }
   _offset += offset;
   _offset |= 0x80;
   output_b(_offset);
   LCD_cmd();
}

void Set_8bit_LCD()
{
   output_b(0x38);
   LCD_cmd();
}

void init_LCD()
{
	char string[32];

   delay_ms(15);
   Set_8bit_LCD();
   delay_ms(5);
   Set_8bit_LCD();
   delay_us(100);
   Enable_LCD();
   Clear_LCD();
    strcpy(string, " LCD Driver Ver 1.0");
	Position_LCD(1,0);
	Print_LCD(string);
    strcpy(string, " Copyright (C) 2007");
	Position_LCD(2,0);
	Print_LCD(string);
    strcpy(string, "    CyberDefense");
	Position_LCD(3,0);
	Print_LCD(string);
	delay_ms(10000);
	Clear_LCD();
}


void main()
{
   char string[16];
   int i;
	int32 j;
	int32 iterations;

//   port_a_pullups(FALSE);
   setup_adc_ports(NO_ANALOGS);

   setup_adc(ADC_OFF);
   setup_spi(FALSE);
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
   setup_timer_1(T1_INTERNAL|T1_DIV_BY_8);
   setup_timer_2(T2_DISABLED,0,1);
   setup_oscillator(OSC_8MHZ);
#use fast_io(A)
#use fast_io(B)
   set_tris_a(0);
   set_tris_b(0);
   enable_interrupts(INT_TIMER1);
   enable_interrupts(GLOBAL);
   setup_oscillator(OSC_8MHZ);

   // TODO: USER CODE!!
   init_LCD();
   strcpy(string, "Iterations: ");
	Position_LCD(0,0);
	Print_LCD(string);
	j = 0;
	iterations = 0;
   	i = 0;
 while(1)
	{ 
		if(j == 0)
		{
			iterations ++;
			Position_LCD(0,12);
			sprintf(string, "%Lu", iterations);
			Print_LCD(string);
		}
	   	Position_LCD((i%3)+1,0);
		sprintf(string, "%Lu", j);
		Print_LCD(string);
		j++;
		i++;
	}
}

