 LIST  P=16F887 ;PROCESSZOR DEFINICIO 
 #INCLUDE <C:\Program Files (x86)\Microchip\MPASM Suite\P16F887.INC> ;A SZUKSEGES INCLUDE FAJL 
      ERRORLEVEL 0,-302        ; elnyomja a bank-váltás üzeneteit
    __CONFIG _CONFIG1, (_LVP_OFF & _FCMEN_OFF & _IESO_OFF & _BOR_OFF & _MCLRE_OFF & _WDT_OFF & _HS_OSC) ; 0x20D2 HEX formában
	__CONFIG _CONFIG2, (_WRT_OFF)

;	INCLUDE	HEADER.INC

	CBLOCK	0X20
		GOMB
		KEY
		T1
		T2
		T3
		T4
		BI_KOD
		BI_KOD_A
		BI_KOD_F
		BI_TEMP
		BI_MINUSZ
		BO_TEMP
		BO_C
		BO_D
		
	ENDC
	
#DEFINE	SOR1		PORTB,0	
#DEFINE SOR2		PORTB,1
#DEFINE	SOR3		PORTB,2
#DEFINE	SOR4		PORTB,3
#DEFINE	OSZLOP1		PORTB,4
#DEFINE	OSZLOP2		PORTB,5
#DEFINE	OSZLOP3		PORTB,6
#DEFINE	OSZLOP4		PORTB,7

	ORG	0X00
	
	
INI_MAIN
	BSF		STATUS,RP0			; Az ANSEL és ANSELH a 3. bankban van
	BSF		STATUS,RP1
	CLRF	ANSEL				; Minden port digitális
	CLRF	ANSELH	
	BCF		STATUS,RP1			; Vissza az 1. bankhoz
	CLRF	TRISA				; Kimenet A, C, és D portok
	CLRF	TRISC
	CLRF	TRISD
	MOVLW	B'11111111'	
	MOVWF	TRISB				; PORTB alsó bájt (sorok), felső bájt (oszlopok)
	BCF		OPTION_REG,NOT_RBPU	; Felhúzó ellenállások bekapcsolása
	BCF		STATUS,RP0			; Bank 0.
START
	CLRF	PORTC
	CLRF	PORTD
	CLRF	GOMB
	CLRF	KEY
	CLRF	PORTB
	CALL	SCAN
	MOVF	KEY,W
	SUBLW	0XFF
	BTFSC	STATUS,Z
	GOTO	START				; Ha nincs gomb lenyomva, újra kezdi
	CALL	KIJELEZ				; A táblázatból kiolvasott kód alapján bekapcsolom a LED-et
	CALL	BEMENETRE			; Visszaállítom a PORTB-t bemenetre
	GOTO	START				
KIJELEZ
	CALL	TABLAZAT			
	MOVWF	BI_KOD
	CALL	S_LEDCOD			
	CALL	KESLELTET_1			; Kis idő után a bekapcsolt LED elalszik.
	RETURN
SCAN		
	CLRF	GOMB
	BSF		STATUS,RP0
	MOVLW	B'11101111'
	MOVWF	TRISB
	BCF		STATUS,RP0
	BCF		OSZLOP1
	CALL	SORTESZT
	MOVF	KEY,W
	SUBLW	0XFF
	BTFSS	STATUS,Z
	RETURN
	BSF		STATUS,RP0
	MOVLW	B'11011111'
	MOVWF	TRISB
	BSF		WPUB,4
	BCF		STATUS,RP0
	CLRF	PORTB
	BCF		OSZLOP2
	CALL	SORTESZT
	MOVF	KEY,W
	SUBLW	0XFF
	BTFSS	STATUS,Z
	RETURN
	BSF		STATUS,RP0
	MOVLW	B'10111111'
	MOVWF	TRISB
	BSF		WPUB,5
	BCF		STATUS,RP0
	BCF		OSZLOP3
	CALL	SORTESZT
	MOVF	KEY,W
	SUBLW	0XFF
	BTFSS	STATUS,Z
	RETURN
	BSF		STATUS,RP0
	MOVLW	B'01111111'
	MOVWF	TRISB
	BSF		WPUB,6
	BCF		STATUS,RP0
	BCF		OSZLOP4
	CALL	SORTESZT
	RETURN
SORTESZT		
	BTFSS	SOR1
	GOTO	LENYOMVA
	INCF	GOMB,F
	BTFSS	SOR2
	GOTO	LENYOMVA
	INCF	GOMB,F
	BTFSS	SOR3
	GOTO	LENYOMVA
	INCF	GOMB,F
	BTFSS	SOR4
	GOTO	LENYOMVA
	INCF	GOMB,F
	MOVLW	0XFF
	MOVWF	KEY
	RETURN
LENYOMVA		
	MOVF	PORTB,W
	MOVWF	KEY
	RETURN
BEMENETRE		
	BSF		STATUS,RP0
	MOVLW	0XFF
	MOVWF	TRISB
	BCF		OPTION_REG,NOT_RBPU	; Felhúzó ellenállások bekapcsolása
	BCF		STATUS,RP0
	RETURN
	
TABLAZAT ;GOMB változó adja meg a kiolvasandó érték sorszámát
	MOVF	GOMB,W
	ADDWF   PCL, F		; ADATTÁBLA A BITMINTÁNAK
	RETLW   D'64'		;1
	RETLW   D'48'		;4
	RETLW   D'32'		;7
	RETLW   D'16'		;*
    RETLW   D'65'		;2
    RETLW   D'49'		;5
    RETLW   D'33'		;8
    RETLW   D'17'		;0
    RETLW   D'66'		;3
    RETLW   D'50'		;6
    RETLW   D'34'		;9
    RETLW   D'18'		;#
    RETLW   D'67'		;A
    RETLW   D'51'		;B
    RETLW   D'35'		;C
    RETLW   D'19'		;D
	
	INCLUDE	LEDKOD.INC
	INCLUDE VÁRAKOZIK.INC		
	END
		