AllDigital
'---------------------------------------------
'valtozok
'---------------------------------------------
Dim menu As Byte
Dim f1 As Word
Dim f2 As Word
Dim f3 As Word
Dim ad_ossz As Word
Dim ad_egy As Word
Dim i As Byte
'---------------------------------------------
'Hardver inizializalasa
'---------------------------------------------
TRISB = 0xff  'portb bemenet
OPTION_REG.7 = 0  'portb felhuzo ell. bekapcs
'---------------------------------------------
'LCD beallitasok
'---------------------------------------------
Define LCD_BITS = 8
Define LCD_DREG = PORTD
Define LCD_RSREG = PORTC
Define LCD_RSBIT = 0
Define LCD_EREG = PORTC
Define LCD_EBIT = 1
Lcdinit
'--------------------------------------------
'SPI beallitasok (digit potikhoz)
'--------------------------------------------
'az mcp41100 max frekije 5.6mhz
TRISC = %00010000  'portc.4 bemenet a tobbi kimenet
SSPSTAT = 0
SSPCON = %00100001  'freki=pic/16 ,spi master,starndard piclab
'----------------------------------------------
'A/D beallitasa
'----------------------------------------------
Define ADC_CLOCK = 3
Define ADC_SAMPLEUS = 50
TRISA = 0xff  'porta bemenet
ADCON1 = 0
'----------------------------------------------
'Tenyleges program kezdet
'----------------------------------------------
Lcdout "REZGES MERES"
Lcdcmdout LcdLine2Home
Lcdout "v0.1"

menu = 1
fociklus:
'gombok allapotanak lekerdezese
If PORTB.0 = 0 Then
	Lcdcmdout LcdClear
	'kovetkezo menure lep
	Select Case menu
	Case 1
		menu = 2
		Lcdout "Freki1"
		Lcdcmdout LcdLine2Home
		Lcdout #f1
		
	Case 2
		menu = 3
		Lcdout "Freki2"
		Lcdcmdout LcdLine2Home
		Lcdout #f2
		
	Case 3
		menu = 4
		Lcdout "Freki3"
		Lcdcmdout LcdLine2Home
		Lcdout #f3
		
	Case Else
		menu = 1
		Lcdout "Meres"

	EndSelect
	WaitMs 500
Endif
If PORTB.1 = 0 Then
	Select Case menu
	Case 2
		f1 = f1 + 1
		Lcdcmdout LcdLine2Clear
		Lcdcmdout LcdLine2Home
		Lcdout #f1
	Case 3
		f2 = f2 + 1
		Lcdcmdout LcdLine2Clear
		Lcdcmdout LcdLine2Home
		Lcdout #f2
	Case 4
		f3 = f3 + 1
		Lcdcmdout LcdLine2Clear
		Lcdcmdout LcdLine2Home
		Lcdout #f3
	Case Else
		'meres
		Call meres()

	EndSelect
	WaitMs 200
Endif
If PORTB.2 = 0 Then
	Select Case menu
	Case 2
		f1 = f1 - 1
		Lcdcmdout LcdLine2Clear
		Lcdcmdout LcdLine2Home
		Lcdout #f1
	Case 3
		f2 = f2 - 1
		Lcdcmdout LcdLine2Clear
		Lcdcmdout LcdLine2Home
		Lcdout #f2
	Case 4
		f3 = f3 - 1
		Lcdcmdout LcdLine2Clear
		Lcdcmdout LcdLine2Home
		Lcdout #f3
	Case Else
		'meres
		Call meres()
	EndSelect
	WaitMs 200
Endif

Goto fociklus
End                                               
'-------------------------------------------------------
'Merest vegzo alprogram
'-------------------------------------------------------
Proc meres()
'---eloszor kiirjuk a digitalis pitoknak az erteket
'1. digit potinak ertek
PORTC.2 = 0  'digitpoti1 kivalasztasa
SSPBUF = 0xf1  'ertek kiirasa
While PIR1.SSPIF = 0
	'itt addig koroz amig nincs kiirva az ertek spi-n
Wend
PIR1.SSPIF = 0  'megszakitas torlese
PORTC.2 = 1  'digit poti ne legyen kivalaszva

'2. digit potinak ertek
PORTC.6 = 0
SSPBUF = 0xf2
While PIR1.SSPIF = 0
Wend
PIR1.SSPIF = 0  'megszakitas torlese
PORTC.6 = 1  'digit poti ne legyen kivalaszva

'3. digit potinak ertek
PORTC.7 = 0
SSPBUF = 0xf3
While PIR1.SSPIF = 0
Wend
PIR1.SSPIF = 0  'megszakitas torlese
PORTC.7 = 1  'digit poti ne legyen kivalaszva

'---analog ertek olvasasa
'egy olvasas 10bites ertek (1024) 10 mintat veszunk 10ms-onkent es atlagoljuk
ad_ossz = 0
For i = 0 To 9
	Adcin 0, ad_egy  'an0-rol olvasas ad_egy-be
	ad_ossz = ad_ossz + ad_egy  'hozzaadjuk az elozo ertekhez
	WaitMs 10
Next i
ad_ossz = ad_ossz / 10
'---kiirjuk az erteket az lcd-re
Lcdcmdout LcdLine2Clear
Lcdcmdout LcdLine2Home
Lcdout #ad_ossz

Return                                            

