;****************************** ; L C D S U B R O U T I N E N ;****************************** ; ;*********************** ; L C D _ H _ R E S E T ;*********************** ; ; Hardware Reset des LCD ; (Initialisierung / Software Reset zusätzlich nötig) ; lcd_h_reset pshb psha ldaa #%11111111 ldab #%100 jsr send2shift_reg ; LCD Reset Leitung auf High (=Reset) ldaa #%11111011 ldab #0 jsr send2shift_reg ; und wieder low pula pulb rts ;*********************** ; L C D _ S _ R E S E T ;*********************** ; ; LCD Warmstart - Reset Kommando an LCD Controller senden ; lcd_s_reset pshb psha pshx ldd #0 std lcd_timer ldx #12 lcs_wait_res jsr sci_read ; dex ; bne lcs_wait_res cmpb #$7E ; Reset Poll Char? bne lcs_wait_res ; Nein, dann nochmal lcs_send_zero ldab #00 jsr sci_tx WAIT(50) lcs_wait_ack jsr sci_read cmpb #$7F ; Reset Poll Char? bne lcs_send_zero ; Nein, dann nochmal ldx #12 lcs_wait jsr sci_read dex bne lcs_wait ldab #$7E jsr sci_tx WAIT(100) jsr lcd_clr ; LCD und Display Buffer löschen ; ldab #$78 ; jsr sci_tx ; WAIT(100) ; ldd #LCDDELAY ; std lcd_timer ; clr cpos pulx pula pulb rts ;*************************** ; L C D _ B A C K S P A C E ;*************************** lcd_backspace pshb psha clra ldab cpos ; Cursorposition holen beq lcd_end_bs ; Wenn Cursor auf Pos. 0, nichts tun decb ; Sonst Cursorposition -1 stab cpos ; und wieder speichern addb #$60 ; LCD Kommando für "set Cursor" bauen pshb ; b sichern WLCDTX ; sci_tx, sci_read, wait(lcddelay) WLCDR(LCD_SPACE) ; Space schreiben pulb WLCDTX ; Und Cursor nochmal zurücksetzen lcd_end_bs pula pulb rts ;******************* ; L C D _ C L R ;******************* ; ; Löscht Inhalt des Displays und des Buffers ; ; ; Parameter : none ; ; Ergebnis : none ; ; changed Regs : none ; lcd_clr pshb psha pshx ldab #$78 jsr sci_tx_w jsr sci_read LCDTIME(LCDDELAY*4) clr cpos ; Reset CPOS (Cursor auf Pos. 0 setzen) ldx #dbuf ldd #$2020 std 0,x std 2,x std 4,x std 6,x ; clear Display Buffer (fill with "Space") pulx pula pulb rts ;****************** ; L C D E C H O ;****************** lcd_echo pshb psha jsr sci_rxc ; Daten eingekommen? cmpa #0 bne lce_end ; Nein, dann Ende jsr sci_tx_w ; Ansonsten Echo lce_end pula pulb rts ;******************* ; S A V E _ D B U F ;******************* ; ; Parameter : X - Zieladresse ; save_dbuf pshb psha xgdx ; Zieladresse nach D ldx #9 ; 9 Byte kopieren ( 1* CPOS, 8*Char ) pshx ; -> Bytecount auf Stack ldx #dbuf ; Quelladresse = Displaybuffer nach X jsr mem_trans ; Speicherbereich von (X) nach (D) kopieren pulx pula pulb rts ;************************* ; R E S T O R E _ D B U F ;************************* ; ; Parameter : X - Quelladresse ; restore_dbuf pshb psha jsr lcd_clr ldaa #8 ; 8 Byte kopieren (DBUF) restore_loop ldab 0,x psha pshx jsr pc_char_out ; Zeichen ausgeben und im Display Buffer speichern pulx pula inx ; Adresse erhöhen deca ; Bytecounter -- bne restore_loop ldab 0,x ; CPOS holen stab cpos ; und speichern pula pulb rts