;LCD-ROUTINE ;FÜR LCD T6963C mit 240*128 16Zeilen a 40 Zeichen ;Angesteuert mit ATMEGA8535 4MHz/8Mhz ;PORTC = DatenPort ;PORTD0 = /RD ;PORTD1 = /WR ;PORTD2 = /CE ;PORTD3 = C/D ;PORTD4 = RESET ;PORTD5 = FS .include "m8535def.inc" .DEF temp = r16 .DEF temp1 = r20 .DEF A = r17 .DEF H = r18 ;Text Home Adresse .DEF L = r19 .DEF B = r24 .DEF C = r25 .EQU TXHOME =0x40 ;set TXT HOME ADD .EQU TXAREA =0x41 ;set TXT AEREA .EQU GRHOME =0x42 ;set GR HM ADD .EQU GRAREA =0x43 ;set GR AREA .EQU OFFSET =0x22 ;set OFFSET ADD .EQU ADPSET =0x24 ;set ADD PTR .EQU AWRON =0xB0 ;set AUTO WRITE MODE .EQU AWROFF =0xB2 ;Reset AUTO Write Mode .EQU CMDP =0x01 ;CMD Port .EQU DP =0x00 ;DATA Port .EQU Stack =0x9FF ;Stack Pointer .EQU SpaltenL=0x38 ;Anzahl Spalten hier 40 .EQU SpaltenH=0x00 ;Anzahl Spalten .EQU ReihenL =0x10 ;Anzahl Reihen hier 16 .EQU ReihenH =0x00 ;Anzahl Spalten47 .EQU ZeichenH =0x02 .EQU ZeichenL =0x80 ;Anzahl Zeichen Gesamt (ReihexSpalte 640Zeichen) ;Ausgänge festlegen CLR temp ;PORTA als OUT DDRA,temp ;Eingang setzen SER temp ;PORTC und PORTD OUT DDRC,temp ;als Ausgang OUT DDRD,temp ;setzen OUT DDRB,temp ;Zum Zähler überwachen ;StackPointer initialisieren LDI temp,HIGH(RAMEND) OUT SPH,temp LDI temp,LOW(RAMEND) OUT SPL,temp MAIN: CLR temp OUT PORTC,temp LDI temp,0b00110000 ;RESET und FS auf HIGH setzen OUT PORTD,temp RCALL ZEIT ;Kurz warten RCALL INIT ;Display Initiieren RCALL CLEAR ;Display loeschen MAIN2: RJMP MAIN2 ;**** Initialisieren des Displays **** INIT: ;Setzen des Betriebsmodus Positiv/Negativ LDI A,0x80 RCALL CMD ;Setzen der Text Home Adresse LDI L,0x00 LDI H,0x00 RCALL DT2 LDI A,TXHOME RCALL CMD ;Setzen der Grafik Home Adresse LDI L,0x00 LDI H,0x02 RCALL DT2 LDI A,GRHOME RCALL CMD ;Setzen der Text Area LDI L,SpaltenL ;Setzen der Zeichen des Displays pro Zeile LDI H,SpaltenH ;hier 0x0038 20 Zeichen RCALL DT2 LDI A,TXAREA RCALL CMD ;Setzen der Grafik Area LDI L,SpaltenL ;Setzen der Zeichen des Displays pro Zeile LDI H,SpaltenH ;hier 0x0038 20 Zeichen RCALL DT2 LDI A,GRAREA RCALL CMD ;Setzen des Offset Registers LDI L,0x02 LDI H,0x00 RCALL DT2 LDI A,OFFSET RCALL CMD ;Setzen og Text oder Grafik Modus LDI A,0x97 ;HIer Text Modus EIN Cursor Blinkend! RCALL CMD ;Setzen eines Address Pointers auf dem Display LDI L,0x00 LDI H,0x00 RCALL DT2 LDI A,ADPSET RCALL CMD ;**** Befehle zum senden von Daten und Befehlen **** STATUS: ;Prüfen ob das Display bereit ist CLR temp ;Port C als Eingang OUT DDRC,temp STATUS2: LDI temp,0b0111010 ;Write Befehl an Display senden OUT PORTD,temp NOP ;Kurz warten bis Befehl angekommen IN temp,PORTC ; RCALL ZEIT SBI PORTD,2 ; RCALL ZEIT ANDI temp,0x03 CPI temp, 0x03 BRNE STATUS2 RET CMD: ;Befehle senden RCALL STATUS SER temp ;Port C als Ausgang OUT DDRC,temp OUT PORTC,A LDI temp,0b00111001 ;Lese den Befehl am Datenbus OUT PORTD,temp NOP SBI PORTD,2 RET DT1: ;1Byte Daten senden RCALL STATUS SER temp OUT DDRC,temp OUT PORTC,A LDI temp,0b00110001 ;Lese das Datenbyte am Datenbus OUT PORTD,temp NOP SBI PORTD,2 RET DT2: ;2Byte Daten Lower Byte senden RCALL STATUS SER temp OUT DDRC,temp OUT PORTC,L LDI temp,0b00110001 ;Lese das Datenbyte am Datenbus OUT PORTD,temp SBI PORTD,2 NOP DT21: ;2Byten Daten Higher Byte senden RCALL STATUS SER temp OUT DDRC,temp OUT PORTC,H LDI temp,0b00110001 ;Lese das Datenbyte am Datenbus OUT PORTD,temp NOP SBI PORTD,2 RET ADT: ;AutoWrite Folge CLR temp ;Port C als Eingang OUT DDRC,temp LDI temp,0b00111010 ;Write Befehl an Display senden OUT PORTD,temp NOP ;Kurz warten bis Befehl angekommen ADT2: IN temp,PORTC ANDI temp,0x08 CPI temp, 0x08 BRNE ADT2 RET SER TEMP ;Port C Als Ausgang OUT DDRC,temp OUT PORTC,A LDI temp,0b00111001 ;Lese den Befehl am Datenbus OUT PORTD,temp NOP SBI PORTD,2 RET ;**** Löschen des Displays **** CLEAR: ;Lösche Bildschirm LDI A,AWRON ;Setzen Autowrite RCALL CMD LDI B,ZeichenH LDI C,ZeichenL ;Setzen Anzahl der gesamten Text-Zeichen TXCR: LDI A,0x00 RCALL ADT ;Display Loeschen mit Hilfe von Lauter Leerzeichen DEC C BRNE TXCR DEC B BRNE TXCR LDI A,AWROFF ;Auto Write Aus RCALL CMD RET ;**** Zeitschleife **** ZEIT: LDI temp,0x55 LDI temp1,0x55 ;Setzen Anzahl der gesamten Text-Zeichen ZEIT1: DEC temp BRNE Zeit1 DEC temp1 OUT PORTB,temp1 BRNE Zeit1 RET