Take 10K potentiometer to control the contrast. Tie pin 1 to Vcc, pin 2 to LCD contrast pin and 3 to ground. Adjust until you could hardly see the pixels. You probably used these init code already.. If you don't here they are. Keypad code below too. lcd_ctrl equ %00010000 ;Port S bit 4 = 0 - Instruction in lcd_data equ %00010000 ;Port S bit 4 = 1 - Data in lcd_enable equ %10000000 ;Port S bit 7 - enable BL EQU $20 us22 equ 175 us11 equ 88 us1 equ 8 ms100 equ $61a8 ms1 equ $9c3 TEN equ $80 ; Memory Allocation ;disp_buffer ds 32 ;display buffer (2 lines of 16 chars) ;disp_ptr ds 2 ;pointer to display buffer ;disp_flag ds 1 ;1 = update; 0 = home; -1 = done ;drow_var ds 1 ;temp ds 1 ;lcd_state ds 2 ;--------------------------------- -------- ; Display Initialization ; ---------------------- disp_init ;Initialize PORTS bclr PORTS,%10010000 bset DDRS,%10010000 ;Set direction for lcd control and enabe clr drow_var clr disp_flag ;Initialize PORTJ movb #$ff,DDRJ ;Bit 7->0 of PORTJ are Output movb #$00,PORTJ bclr PORTS,lcd_enable bclr PORTS,lcd_ctrl ;Set Port S bit 4 to zero movb TMSK2,temp bset TSCR,$B0 ;enable the timer sysem. set for fast flag clears bset TIOS,%01 ;enable timer channel 0 as an output compare. movb #$5,TMSK2 ;set the prescaler to /32 ldd #ms1*$0f ;15 millisecond delay addd TCNT std TC0 brclr TFLG1,$01,* movb #%00110000,PORTJ ;8 data bits, 2 display lines, 0 jsr toggle_lcd_ctrl ; bset PORTS,lcd_enable ; ldy #10000 ;lp1 ; dbne y,lp1 ; bclr PORTS,lcd_enable movb #$00,TMSK2 ;set the prescaler to /1 ldd #us1*4 ;40 microsecond delay addd TCNT std TC0 brclr TFLG1,$01,* movb #%00111000,PORTJ ;8 data bits, 2 display lines, 0 jsr toggle_lcd_ctrl ldd #us1*4 ;40 microsecond delay addd TCNT std TC0 brclr TFLG1,$01,* movb #%1100,PORTJ ;display on, cursor off, blink off jsr toggle_lcd_ctrl ldd #us1*100 ;100 microsecond delay addd TCNT std TC0 brclr TFLG1,$01,* movb #%1,PORTJ ;Clear display and return cursor to home jsr toggle_lcd_ctrl ldd #us1*4 ;40 microsecond delay addd TCNT std TC0 brclr TFLG1,$01,* movb #%01000000,PORTJ jsr toggle_lcd_ctrl ldd #us1*4 ;40 microsecond delay addd TCNT std TC0 brclr TFLG1,$01,* ldx #cgram_table ldab #CGRAM_LEN jsr line_update movb #%10000000,PORTJ jsr toggle_lcd_ctrl ldd #us1*4 ;40 microsecond delay addd TCNT std TC0 brclr TFLG1,$01,* movb temp,TMSK2 ;set the prescaler to original parameters ldx #disp_menu1 stx lcd_state movb #0,drow_var jsr drow ldx #Testing1 jsr dstr movb #1,drow_var jsr drow ldx #Testing2 jsr dstr ldx #_1SECOND*3 stx lcd_timer movb #0,drow_var jsr drow ldx #Testing1 jsr dstr movb #1,drow_var jsr drow ldx #Testing2 jsr dstr rts toggle_lcd_ctrl bclr PORTS,lcd_ctrl nop nop nop nop nop nop bset PORTS,lcd_enable nop nop nop nop nop nop bclr PORTS,lcd_enable nop nop nop rts toggle_lcd_data bset PORTS,lcd_data nop nop nop nop nop nop bset PORTS,lcd_enable nop nop nop nop nop nop bclr PORTS,lcd_enable nop nop nop Keypad code??? You probably have these too *--------------------------------- -------- keypad_press ldaa keypad_flag beq check_p10 ldaa keypad_var *do what you need to do here jsr SB1 ;Data is in Reg A, display keypress to sci clr keypad_flag ;Keypad interrupt is enabled in Real Time Int. check_p10 rts keypad_init ldy #REG ldaa #$f0 staa DDRC,y ;Initialize portc staa PORTC,y ;Disable keypad int. until ready clr keypad_flag ldaa #3 ;Enable keypad int when this timer is clear staa keypad_timer rts keypad_int ldy #REG jsr key_init_int next_keypad10 dec keypad_counter beq next_key10 jsr check_next_pad brset PORTC,y,%0001,next_keypad10 ;Check next pad ldx #keypad_table0 ;Get keypad value jsr get_keypad_val ;Reg b has keypad value stab keypad_var ldaa #1 staa keypad_flag ;set flag for valid keypress ldaa #$FF ;Disable keypad until present press is service staa PORTC,y ldaa #30 ; staa keypad_timer ;Delay before next keypad interrupt bra kp_exit10 next_key10 jsr key_init_int next_keypad20 dec keypad_counter beq next_key20 jsr check_next_pad brset PORTC,y,%0010,next_keypad20 ;Check next pad ldx #keypad_table1 ;Get keypad value jsr get_keypad_val ;Reg b has keypad value stab keypad_var ldaa #1 staa keypad_flag ;set flag for valid keypress ldaa #$FF ;Disable keypad until present press is service staa PORTC,y ldaa #30 ; staa keypad_timer ;Delay before next keypad interrupt bra kp_exit10 next_key20 jsr key_init_int next_keypad30 dec keypad_counter beq next_key30 jsr check_next_pad brset PORTC,y,%0100,next_keypad30 ;Check next pad ldx #keypad_table2 ;Get keypad value jsr get_keypad_val ;Reg b has keypad value stab keypad_var ldaa #1 staa keypad_flag ;set flag for valid keypress ldaa #$FF ;Disable keypad until present press is service ldy #REG staa PORTC,y ldaa #30 ; staa keypad_timer ;Delay before next keypad interrupt bra kp_exit10 next_key30 jsr key_init_int next_keypad40 dec keypad_counter beq kp_exit jsr check_next_pad brset PORTC,y,%1000,next_keypad40 ;Check next pad ldx #keypad_table3 ;Get keypad value jsr get_keypad_val ;Reg b has keypad value stab keypad_var ldaa #1 staa keypad_flag ;set flag for valid keypress ldaa #$FF ;Disable keypad until present press is service staa PORTC,y ldaa #30 ;Delay before next keypad interrupt staa keypad_timer bra kp_exit10 kp_exit clr keypad_flag kp_exit10 rti key_init_int ldab #%11110111 stab keypad_temp ldaa #5 staa keypad_counter rts check_next_pad ldy #REG ldab keypad_temp lslb stab PORTC,y stab keypad_temp rts get_keypad_val ldab keypad_temp lsrb lsrb lsrb lsrb comb andb #$0f ;clear high nibbles abx ldab 0,x rts keypad_table0 fcc '?' fcc '1' ;ok fcc '2' fcc '?' fcc '3' fcc '?' fcc '?' fcc '?' keypad_table1 fcc 'A' ;ok fcc '4' ;ok fcc '5' fcc '?' fcc '6' fcc '?' fcc '?' fcc '?' keypad_table2 fcc 'B' ;ok fcc '7' ;ok fcc '8' fcc '*' fcc '9' fcc '?' fcc '?' fcc '?' keypad_table3 fcc 'C' ;ok fcc '*' ;ok fcc '0' fcc '?' fcc '#' fcc '?' fcc '?' fcc '?' fcc 'D' |