;******************************************************************************** ; @module LCD-W164B ; @type driver ; @device ELECTRONIC ASSEMBLY - W164B-NLW ; @details ; The LCD must be connected to a W65C22N Interface Chip: ; - IO.RB0-7 -> LCD.D0-7 data lines ; - IO.RA5 -> LCD.RS register select ; - IO.RA6 -> LCD.R/W read/write ; - IO.RA7 -> LCD.E enable ; ; @requires IO: Base Address of IO Chip ; @optparam MEM: Memory address for a runtime variable. Default = $300 ; @depends IO-W65C22N ;******************************************************************************** .ifndef INCLUDE_LCD INCLUDE_LCD = 1 .include "system/system.h65" .scope lcd LCD_IO = IO1 Import lcd,init,clear,print,print_char,_cmd ;******************************************************************************** ; @macro Print a null-terminated string ; @param message: Address of the message ;******************************************************************************** .macro Print message jsr lcd::clear lda #message sta ARG1 jsr lcd::print .endmacro ; PIN MASKS E = %10000000 RW = %01000000 RS = %00100000 ; LCD Instructions (see datasheet for more) CMD_CLEAR = %00000001 ; clear display CMD_ENTRY_MODE = %00000110 ; auto-shift cursor CMD_DISPLAY_ON = %00001111 ; everything on, with blinking cursor CMD_FUNCTION_SET = %00111000 ; 8-bit, 4 lines, 5x7 font CMD_SET_ADDRESS = %10000000 ; or with the address ; LCD Constants LINE1 = $00 LINE2 = $40 LINE3 = $10 LINE4 = $50 CLEAR = %00000000 .ifndef KEEPSCOPE .endscope .endif .endif ; guard