; ******************************************************************************
;   Kijez? vezérlése a táblázatokkal együtt
;  PAGE3
; ******************************************************************************  

	org 1800

;====================== els? sor bal oldalon ===================================	

	

TXT
 
    
    
GLCDKEP   
  ;*********************GRAFIKUS OLDAL SZERKESZTÉSE************************
  
  ;======================= ELS? BLOKK =====================================
  
    SETB			    ;JOBB OLDALI MODUL
    movlw	0x40		    ;ELS? X  CÍM
    movwf	var2
    movlw	0xB8		    ;ELS? Y  CÍM
    movwf	var3
    movlw	0X41		    ;HÁNY BITOSZLOP HEXÁBAN
    movwf	var4
    movlw	0x00		    ;BELS? SZÁMLÁLÓ KEZD?ÉRTÉK
    movwf	var1
    clrf	W_TEMP
msg1
    CALL    LCDB_ON		    ;JOBB OLDALI LCD BEKAPCSOLÁSA
    CALL    POZ			    ;ÍRÁSI POZÍCIÓ BETÖLTÉSE var2,var3
    movfw   var1
    
    CALL    Kep2			    ;MELYIK T?MBOT
   
    decf    var4,f		    ;UTOLSÓ BITOSZLOP IS MEGVOLT AKKOR KILÉP
    BTFSC   STATUS, Z
    goto    exit1		    ;KILÉPÉS
    CALL    EnviaCarGLCD	    ;KIÍRÁS
    incf    var1		    ;VÁLTOZÓK NÖVELÉSE
    incf    var2
    GOTO    msg1    
    
exit1				    ;ELS? TÖMB KIÍRÁSA KÉSZ
    
;================================ MÁSODIK BLOKK ================================    
    SETB			    ;JOBB OLDALI MODUL

  
    movlw	0x40		    ;ELS? X  CÍM
    movwf	var2
    movlw	0xB9		    ;MÁSODIK SOR Y  CÍM
    movwf	var3
    movlw	0X41		    ;HÁNY BITOSZLOP HEXÁBAN
    movwf	var4
    movlw	0x00		    ;BELS? SZÁMLÁLÓ KEZD?ÉRTÉK
    clrf	var1
    clrf	W_TEMP
msg2
    CALL    LCDB_ON		    ;JOBB OLDALI LCD BEKAPCSOLÁSA
    CALL    POZ			    ;ÍRÁSI POZÍCIÓ BETÖLTÉSE var2,var3
    movfw   var1
    CALL    Kep2			    ;MELYIK T?MBOT
    decf    var4,f		    ;UTOLSÓ BITOSZLOP IS MEGVOLT AKKOR KILÉP
    BTFSC   STATUS, Z
    goto    exit2		    ;KILÉPÉS
    CALL    EnviaCarGLCD	    ;KIÍRÁS
    incf    var1		    ;VÁLTOZÓK NÖVELÉSE
    incf    var2
    GOTO    msg1    
    
exit2				    ;ELS? TÖMB KIÍRÁSA KÉSZ
    return
    
 ;****************************** LCD VEZÉRLÉS *****************************
 
initGRLCD
	BANK1
	clrf	DATA_TS			;DATA_PT DATA port mind kimenet
	clrf	CNTRL_TS		;CNTRL_PT kontroll port mind kimenet
	BANK0
	bcf	CNTRL_PT,RST		; 5      XX0XXXXX
	bcf	CNTRL_PT,CSA		; 0      XX0XXXX0
	bcf	CNTRL_PT,CSB		; 1      XX0XXX00
	bcf	CNTRL_PT,EN		; 4      XX00XX00
	bcf	CNTRL_PT,RS		; 2      XX00X000
	bcf	CNTRL_PT,RW		; 3      XX000000
	bsf	CNTRL_PT,RST		;        XX100000
	
	call	delay1ms
	return

;===========================================================================	
LCDA_ON
	SETA				; Bal blokk kiválasztva
	call	delay1ms
	movlw	0x3F			; Display ON prancskód
	call	EnviaCmdGLCD		; Parancs kadása
	Return
;============================================================================
LCDB_ON
	SETB				; Jobb blokk kiválasztva
	call	delay1ms
	movlw	0x3F			; Display ON prancskód
	call	EnviaCmdGLCD		; Parancs kadása
	Return	
;============================================================================
	
POZ
	movfw	var3			; Függ?leges pozíció B8 tól BF ig
	call	SetY			; Beírás az LCD be
	movfw	var2			; vízszintes pozíció 40 t?l 7F ig
	call	SetX			; beírás az LCD-be
	movlw	0xC0			;  set display start line to 0
	call	SetLS			;start line set
	return
	
;========================= LCD foglaltság teszt ================================
TestBusyGLCD
	banksel	DATA_TS
	movlw	0xFF			;DATA_PT mind bemenet
	movwf	DATA_TS
	banksel	DATA_PT			;DATA_PT mind bemenet
	
	bcf     CNTRL_PT,RS		;LCD státuszsor kiválasztása
	bsf     CNTRL_PT,RW		;LCD státuszsor kiválasztása
	call	STROBE_EN		;LCD státuszsor kiválasztása
	
	btfsc   DATA_PT,BUSY		;Foglalt bit tesztelése
	goto    TestBusyGLCD		;Foglalt ugrás el?r?l
	bcf     CNTRL_PT,RW
	banksel	DATA_TS
	clrf	DATA_TS			;DATA_PT mind kimenet
	banksel	DATA_PT			
	clrf	DATA_PT
	return
;======================= LCD törlése adott félképen=============================
	
ClearGLCD
	clrf	var1
	
ClearLoop1
	movlw	.64
	movwf   var2
	movf	var1,W
	call	SetX
	movlw	.0
	call	SetY
	movlw	.0
	call	SetLS
ClearLoop2
	movlw	0x00
	call	EnviaCarGLCD
	decfsz	var2,F
	goto	ClearLoop2
	incf	var1,F
	btfss	var1,3
	goto	ClearLoop1
	return
;========================ADAT KIÍRÁS===========================================
EnviaCarGLCD
	movwf	W_TEMP			;w mentése
	call    TestBusyGLCD		;LCD teszt foglaltság ellenörzése
	movf    W_TEMP,W		;w visszatöltés
	movwf   DATA_PT			;Adat az LCD bemenetén
	bcf     CNTRL_PT,RW		;Irás következik
	bsf     CNTRL_PT,RS		;Irás következik
	call	STROBE_EN		;M?velet végrehajtás
	return
;=======================PARANCS============================================
EnviaCmdGLCD
	movwf   W_TEMP          ;Caracter a ser enviado esta en reg. W
	call    TestBusyGLCD    ;esperar LCD listo
	movf	W_TEMP,W
	movwf   DATA_PT         ;enviar dato al LCD
	bcf     CNTRL_PT,RW     ;Poner LCD en modo escritura
	bcf     CNTRL_PT,RS     ;Poner LCD en modo comando
	call	STROBE_EN
	return
;============================KORDINÁTA_X=======================================
SetX
	andlw	b'01111111'
	iorlw	b'01000000'
	movwf	W_TEMP
	call	TestBusyGLCD
	movf	W_TEMP,W
	movwf	DATA_PT
	banksel	CNTRL_PT
	bcf	CNTRL_PT,RS
	bcf	CNTRL_PT,RW
	call	STROBE_EN
	return
;=============================KORDINÁTA_Y======================================
SetY
	andlw	b'10111111'
	iorlw	b'10111000'
	movwf	W_TEMP
	call	TestBusyGLCD
	movf	W_TEMP,W
	movwf	DATA_PT
	banksel	CNTRL_PT
	bcf	CNTRL_PT,RS
	bcf	CNTRL_PT,RW
	call	STROBE_EN
	return
;==========================START LINE=========================================
SetLS
	andlw	b'11111111'
	iorlw	b'11000000'
	movwf	W_TEMP
	call	TestBusyGLCD
	movf	W_TEMP,W
	movwf	DATA_PT
	banksel	CNTRL_PT
	bcf	CNTRL_PT,RS
	bcf	CNTRL_PT,RW
	call	STROBE_EN
	return
;===================================================================
STROBE_EN
	banksel	CNTRL_PT
	nop
	bsf		CNTRL_PT,EN
	nop
	nop
	nop
	bcf		CNTRL_PT,EN
	nop
	nop
	nop
	return
	
;===================================================================


; ******************** id?zítések   ******************************************

delay1ms	movlw	0xC6				 ; delay 1ms
		movwf	d1
		movlw	0x15				;  *** 1ms = 0X01  ** CHANGED FOE SLOW MO DISPLAY
		movwf	d2
dly1ms		decfsz	d1, f
		goto	dly1msa
		decfsz	d2, f
dly1msa		goto	dly1ms
		nop							
		nop
		nop			
		
		return



delay250	movlw	d'250'				 ; delay 250 ms 
		movwf	d1
dly1		movlw	0xC7
		movwf	d2
		movlw	0x01
		movwf	d3
Delay_0
		decfsz	d2, f
		goto	dly2
		decfsz	d3, f
dly2		 goto	Delay_0
		decfsz	d1	,f
		goto	dly1

			return



delay500	call	delay250			 ; delay 500ms
		call	delay250

			return



delay1sec	call	delay500			 ; delay 1sec
		call	delay500	

			return



delay5sec	call 	delay1sec			 ; delay 5sec
		call 	delay1sec
		call	delay1sec
		call	delay1sec
		call	delay1sec

			return		
	
	
Yes	
	ADDWF	PCL,F
	dt	0x00,0x07,0x08,0x70,0x08,0x07,0x00,0x00 ;89/ --> Y
	dt	0x00,0x38,0x54,0x54,0x54,0x18,0x00,0x00 ;101/ --> e
	dt	0x00,0x48,0x54,0x54,0x54,0x20,0x00,0x00 ;115/ --> s
	dt	0xFF		

	    ORG	    1990
	    
Kep2	
	    
	ADDWF	PCL,F
	dt	0xFF,0x00,0x00,0xFF,0x01,0x01,0x01,0x01 ;89/ --> Y
	dt	0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01 ;101/ --> e
	dt	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ;115/ --> s
	dt	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
	dt	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
	dt	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
	dt	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
	dt	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF


	
kep3	
	dt	0xFF,0x01,0x01,0x01,0x01,0x01,0x01,0x01 ;89/ --> Y
	dt	0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01 ;101/ --> e
	dt	0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01 ;115/ --> s
	dt	0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01	
	dt	0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01
	dt	0x01,0x01,0x01,0x01,0x01,0x01,0xFF,0x01
	dt	0x00,0x7F,0x09,0x09,0x09,0x01,0x00,0x00
	dt	0x01,0xFF,0x01,0x01,0x01,0x01,0x01,0xFF	


	
	end