************************************************************************** * LCD display routines / Chris Burian & Raymond Yeung * * This set of routines is for writing to the LCD display system. ************************************************************************** SPICFG EQU %01010000 ; SPI Config byte * Enable and setup SPI LDAA #%00111000 ; Set up I/O port D correctly for STAA DDRD ; use with SPI. LDAA #SPICFG ; Configure SPI port. STAA SPCR ************************************************************************** * SER_OUT * * Transmits byte in Acc A out the SPI port. ************************************************************************** SER_OUT: LDAB SPSR LDAB SPDR STAA SPDR ; Xmit byte in ACC A WT: LDAB SPSR ; Check SPI status register ANDB #$80 ; Wait for SPI to finish operation BEQ WT ; LDAB SPDR RTS ************************************************************************** * LCD_OUT * * Transmits byte in Acc A to LCD display. ************************************************************************** LCD_OUT: JSR SER_OUT ; Setup input lines ORAA #%00001000 ; Set bit 3 (enable) JSR SER_OUT ANDA #%11110111 ; Clear bit 3 (enable) JSR SER_OUT RTS ************************************************************************** * HOME * * Homes cursor ************************************************************************** HOME: PSHA PSHX LDAA #%10000000 JSR COM_OUT LDX #!21 ; Need 40 us delay. JSR COM_WT PULX PULA RTS ************************************************************************** * CLR_SCR * * Clears screen ************************************************************************** CLR_SCR:PSHA PSHX LDAA #%00000001 JSR COM_OUT LDX #!821 ; Need 1.64 ms delay. JSR COM_WT PULX PULA RTS ************************************************************************** * STR_OUT * * Transmits string (whose pointer is in X) to LCD display. ************************************************************************** STR_OUT:PSHA STR_LP: LDAA 0,X CMPA #0 ; COMPARE IT TO ZERO BYTE BEQ STR_END ; LOOP IF NOT AT THE END OF STRING JSR CHAR_OUT INX JMP STR_LP STR_END:PULA RTS ************************************************************************** * CHAR_OUT * * Transmits byte to LCD display. ************************************************************************** CHAR_OUT: PSHA ; Save A ANDA #%11110000 ; Selects high nibble ORAA #%00000100 ; Sets data mode JSR LCD_OUT PULA LSLA ; Lower nibble -> higher nibble LSLA LSLA LSLA ANDA #%11110000 ; Selects high nibble ORAA #%00000100 ; Sets data mode JSR LCD_OUT LDAB #!21 LCD_WT: DECB BNE LCD_WT RTS ************************************************************************** * COM_OUT * * Transmits command byte in Acc A to LCD display. ************************************************************************** COM_OUT: PSHA ; Save A ANDA #%11110000 ; Selects high nibble ORAA #%00000000 ; Sets command mode JSR LCD_OUT PULA LSLA ; Lower nibble -> higher nibble LSLA LSLA LSLA ANDA #%11110000 ; Selects high nibble ORAA #%00000000 ; Sets command mode JSR LCD_OUT RTS ************************************************************************** * COM_WT * * Delay loop. uS = 1.5 * X ************************************************************************** COM_WT: DEX BNE COM_WT RTS ************************************************************************** * INIT_LCD * * Initializes LCD display. ************************************************************************** INIT_LCD: LDX #!7501 ; Need 15ms after power-up. JSR COM_WT LDAA #%00110000 ; Attention! JSR LCD_OUT LDX #!2051 ; Need 4.1 ms delay. JSR COM_WT LDAA #%00110000 ; Attention! JSR LCD_OUT LDX #!51 ; Need 100 us delay. JSR COM_WT LDAA #%00110000 ; Attention! JSR LCD_OUT LDX #!2051 ; Need 4.1 ms delay. JSR COM_WT LDAA #%00100000 ; Sets 4 bit mode JSR LCD_OUT LDX #!21 ; Need 40 us delay. JSR COM_WT LDAA #%00100000 ; 4 bit, 1 line, 5x8 font JSR COM_OUT LDX #!21 ; Need 40 us delay. JSR COM_WT LDAA #%00000001 ; Clear screen JSR COM_OUT LDX #!821 ; Need 1.64 ms delay. JSR COM_WT LDAA #%00000110 ; Inc cursor, no shift JSR COM_OUT LDX #!21 ; Need 40 us delay. JSR COM_WT LDAA #%00001100 ; Display on, cursor off, blink off JSR COM_OUT LDX #!21 ; Need 40 us delay. JSR COM_WT RTS