#include <htc.h>

#ifndef _XTAL_FREQ					//órajelfrekvencia beállítása
#define	_XTAL_FREQ 4000000	//4MHz
#endif

/* PORTB0 ---- 0.számjegy
	 PORTB1 ---- 1.számjegy
	 PORTB2 ---- 2.számjegy
	 PORTB3 ---- 3.számjegy
	 
	 PORTD			7.	6.	5.	4.	3.	2.	1.	0.
	 Szegmens		DP	g		f		e		d		c		b		a

  										 0		1		 2		3		 4		5		 6		7		 8		9     */
unsigned char kiir[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};	
unsigned char egyes;
unsigned char tizes;
unsigned char adc_mert;
unsigned char a,b;

void main()
{
	TRISA=0xFF;						//PORTA bemenet
	TRISB=0x00;						//PORTB kimenet ide vannak kötve a kijelzőt kapcsolgató tranzisztorok
	TRISD=0x00;						//PORTD kimenet ide vannak kötve a kijelző szegmensei
	OPTION_REG=0x00;			//előosztás és TIMER0 beállítása 
	ADCON1=0x02;					//mért érték rendezése ADREH-ba, analóg bemenet kiválasztása, VREF+=VCC, VREF-=VSS
	ADCON0=0x41;					//analóg bemenet kiválasztása, átalakító bekapcsolása
	
	T0IE=1;								//TIMER0 megszakítás engedélyezése
	ei();									//globális megszakítások engedélyezése
// analóg digitális és mérés eredményének átalakítása				
	while(1)							//végtelen ciklus
	{	
		GO=1;								//AD konverzió elindítása
		__delay_us(50);			//TAD várakozás
		if(GO_DONE==0)			//AD konverzió vége
		adc_mert=ADRESH/5;	//mérés eredményének átalakítása
		a=adc_mert%10;			//egyesek 
		b=adc_mert/10;			//tizese
		
		egyes=kiir[a];
		tizes=kiir[b];
	}	
}	

//számok kijelzése 

void interrupt tc_int(void)	//megszakítás
{
	static unsigned char kijelzo=0;
	T0IF=0;		//TIMER0 túlcsordulást jelző bit melynek hatására létrejön a megszakítás
						//szoftveresen kell törölni
	switch(kijelzo)	//kijelzo változó figyelése
	{
		case 0: PORTB=0x01;		//kijelzo 0
						PORTD=0xC6;		//az első számjegyre C kiírása
						break;				//kilép a switch utasításból
						
		case 1: PORTB<<=1;		//kijelzo 1
						PORTD=0x9C;		//a második számjegyre ° kiírása
						break;				//kilép a switch utasításból
						
		case 2: PORTB<<=1;		//kijelzo 2
						PORTD=egyes;	//a harmadik számjegyre az egyesek kiiratása
						break;				//kilép a switch utasításból
					
		case 3: PORTB<<=1;		//kijelzo 3
						PORTD=tizes;	//a negyedik számjegyre a tizesek kiiratása
						break;				//kilép a switch utasításból
	}
	kijelzo++;							//kijelzo növelése eggyel
	if(kijelzo==4)					//ha a kijelzo változó 4 lesz
		kijelzo=0;						//akkor kinullázzuk
}													//program vége
