#include <p18f4550.h>
#include <stdio.h>
#include <delays.h>

#pragma config PLLDIV =10
#pragma config CPUDIV = OSC1_PLL2
#pragma config USBDIV = 2
#pragma config FOSC = HS
#pragma config FCMEN = OFF
#pragma config IESO = OFF
#pragma config PWRT = OFF
#pragma config WDT = OFF
#pragma config MCLRE = OFF
#pragma config LVP = OFF
#pragma config ICPRT = OFF
 
#define PIN_RS LATBbits.LATB1
#define PIN_RW LATBbits.LATB0
#define PIN_E LATBbits.LATB2


unsigned int (*putc_fn)( int );	
unsigned int GetADvalue (void); 
void InitAD (void);
void procIni(void);
void LCDIni(void);
void delay_ms(unsigned int n);
void send_nibble(unsigned char nibble);
void send_command_byte(unsigned char byte);
void send_data_byte(unsigned char byte);
void LCDstr(unsigned char ch );
unsigned int szamol;
unsigned int poti;
unsigned int *p;
int n;  
int main()
{

		InitAD();
		poti = GetADvalue();
		double szam;
		szam=12*4;
		procIni();
		LCDIni();   
		putc_fn = LCDstr;
		send_command_byte(0x02);		//	első sor
		printf("A\D=%d",poti);			//	decimálisan kiírja AD-t.
		send_command_byte(0xC0);		// második sor
		printf("szam=%d"szam);			// szam értékét írja.

	while (1){}
}		

void procIni(void){
	UTRDIS = 1;								// USB kikapcsolása 1
	USBEN = 0;								// USB kikapcsolása 2
    TRISD = 0b00000000; 					// Set RD0-7 as digital outputs
    TRISB = 0b00000000; 
}



void LCDIni(void)							// LCD-t feléleszteni
	{
    PIN_RW = 0;
    PIN_RS = 0;
    PIN_E = 1;
    														
    delay_ms(16);											    // must be more than 15ms
    send_nibble(0b0011);									// must be more than 4.1ms
    send_nibble(0b0011);										// must be more than 100us
    send_nibble(0b0011);									// must be more than 4.1ms
    send_nibble(0b0010); 										// select 4-bit mode
     
    												// Display settings
    send_command_byte(0b00101000); 								// N=0 : 2 lines (half lines!), F=0 : 5x7 font
    send_command_byte(0b00001000); 								// Display: display off, cursor off, blink off
    send_command_byte(0b00000001); 								// Clear display
    send_command_byte(0b00000110); 								// Set entry mode: ID=1, S=0
    send_command_byte(0b00001111); 								// kurzor villog
      
}

void delay_ms (unsigned int n)
	{
  while(n--) _delay(250);
	}
 															
void send_nibble(unsigned char nibble)
	{   										// Set RD0-3 without affecting RD4-7
    LATD = (LATD & 0xF0) + nibble;
	delay_ms(4);   									 // Note: data is latched on falling edge of pin E
    PIN_E = 0;
    delay_ms(4);
    PIN_E = 1;
    delay_ms(5); // Enough time even for slowest command
	}
											// Send a command byte (i.e. with pin RS alacsony)
void send_command_byte(unsigned char byte)
	{
    PIN_RS = 0;
    send_nibble(byte >> 4);
    send_nibble(byte & 0xF);
	}
	 
											// Send a data byte (i.e. with pin RS magas)
void send_data_byte(unsigned char byte)
	{		
    PIN_RS = 1;
    send_nibble(byte >> 4);
    send_nibble(byte & 0xF);
	}

void LCDstr(unsigned char ch )
	{
send_data_byte( ch );
	}

void putch( unsigned char ch )
  {
   (*putc_fn) (ch);
 }
void InitAD (void)				// PIC A/D 0-tól 255-ig számol így.
	{
	ADCON0 = 0b00000001;
	ADCON1 = 0b00001110;
	ADCON2 = 0b00000001;
	}
unsigned int GetADvalue (void)
	{
	ADCON0bits.GO = 1;
	while(ADCON0bits.GO);
	return(ADRESH);

	}