PIC 4 bit 16x2 Hitachi LCD driver

(author unknown)


NEW!

; (This code is not mine, except for the delays, I just added this comments)
;
;Connection is like this:
;
; PIC LCD
; -------------
; RBO E
; RB1 RS
; RB2 RW
; RB3 --
; RB4 D4
; RB5 D5
; RB6 D6
; RB7 D7
;
; (RB0-RB7: PIC PINS 6-13 RESPECTIVELY)
; (E, RS, RW, D4-D7: LCD PINS 6, 4, 7, 10-14 RESPECTIVELY)
;
; MAKE SURE YOU CONNECT THE CONTRAST POT (10K) TO PIN 3
; POWER IS 1: GND, 2: +5V
; 
; 
; the subroutine DELAY seems to be the same as DELAY_MS, at least it works if you change all 'delay' to 'delay_ms'
; here's the Q&D delay I use (1ms for 4MHz XT):
;
;
; delays
	cblock 0x0D
	d1
	d2
	bit_tmp
	msres
	endc
	
delay_ms
	movwf msres
dl3	decfsz msres, f
	goto dl
	return
dl			;993 cycles
	movlw	0xC6
	movwf	d1
	movlw	0x01
	movwf	d2
delay_ms_0
	decfsz	d1, f
	goto	$+2
	decfsz	d2, f
	goto	delay_ms_0
			;3 cycles
	nop
	goto	dl3
;lcd routines
	cblock	0x2A
		lcd_shadow,lcd_tmp,lcda,lcd_char
	endc
#define lcd_port	PORTB
#define lcd_enable	lcd_shadow,0
#define	lcd_rs		lcd_shadow,1
#define	lcd_rw		lcd_shadow,2
;------------------------------
lcd_uport macro
	movf	lcd_shadow,w
	movwf	lcd_port
	endm
;------------------------------
;strobe lcd enable
lcd_strobe:
	movlw	.20
	call	delay
	bsf	lcd_enable
	lcd_uport
	movlw	.20
	call	delay
	movf	lcd_port,w
	andlw	0xF0
	movwf	lcd_tmp
	bcf	lcd_enable
	lcd_uport
	swapf	lcd_tmp,w
	return
;------------------------------
lcd_send_nibble:
	movwf	lcd_tmp
	movlw	0x0F
	andwf	lcd_tmp,f
	andwf	lcd_shadow,f
	swapf	lcd_tmp,w
	iorwf	lcd_shadow,f
	lcd_uport
	goto	lcd_strobe
	
;------------------------------
lcd_read_byte:
	movlw	0xF0
	tris	lcd_port
	bsf	lcd_rw
	lcd_uport
	call	lcd_strobe
	movwf	lcda
	swapf	lcda,f	
	call	lcd_strobe
	iorwf	lcda,f
	movlw	0
	tris	lcd_port
	bcf	lcd_rw
	movf	lcda,w
	return
;------------------------------
#define	sv_addr		bit_tmp,0
lcd_putc:
	bsf	lcd_rs
lcd_send_byte:
	movwf	lcd_char		
	bcf	sv_addr
	btfsc	lcd_rs
	 bsf	sv_addr
	bcf	lcd_rs
sb0	call	lcd_read_byte		;wait until not lcd busy
	andlw	B'10000000'
	skpz
	 goto	sb0
	bcf	lcd_rw	
	bcf	lcd_rs
	btfsc	sv_addr
	 bsf	lcd_rs
	swapf	lcd_char,w
	call	lcd_send_nibble	
	movf	lcd_char,w
	goto	lcd_send_nibble	
;------------------------------
lcd_init:
	movlw	0
	tris	lcd_port
	clrf	lcd_shadow
	lcd_uport
	
	movlw	.50
	call	delay_ms
	movlw	3
	movwf	lcda
	bcf	lcd_rs
lcdi0	movlw	3
	call	lcd_send_nibble
	movlw	.15
	call	delay_ms
	decfsz	lcda,f
	 goto	lcdi0
 movlw .2
	call	lcd_send_nibble
	movlw	B'00101000'		;function set
	call	lcd_send_byte		;4 bit,1/6 duty,5x8
	movlw	B'00001000'		;display off,cursor off, blink off
	call	lcd_send_byte
 movlw B'00000001'		;clear screen cursor home
	call	lcd_send_byte
	movlw	B'00000110'		;Increment cursor, don't shift screen
	call	lcd_send_byte
	movlw	B'00001111'		;display on,cursor on, blink on
	call	lcd_send_byte
	return
;------------------------------
;lcd_gotoxy
; input W = YYXXXXXX
; 76543210
;
; Y address
; --- -------
; 00 0
; 01 0x40
; 10 20 
; 11 0x40+20
xy_loc	macro	x, y
	movlw	(y << 6) | (x & B'00111111')
	call	lcd_gotoxy
	endm
lcd_gotoxy:
	movwf	lcd_tmp
	andlw	B'00111111'
	btfsc	lcd_tmp,6
	 addlw	0x40
	btfsc	lcd_tmp,7
	 addlw	.20
	iorlw	B'10000000'
	bcf	lcd_rs
	goto	lcd_send_byte
;------------------------------
lcd_cursor_off:
	bcf	lcd_rs
	movlw	B'00001100'		;display on,cursor off, blink off
	goto	lcd_send_byte
;------------------------------
lcd_cursor_on:
	bcf	lcd_rs
	movlw	B'00001111'		;display on,cursor on, blink on
	goto	lcd_send_byte

file: /Techref/microchip/4bitlcd.htm, 4KB, , updated: 2009年10月1日 10:39, local time: 2025年9月5日 04:26,
40.74.122.252:LOG IN

©2025 These pages are served without commercial sponsorship. (No popup ads, etc...).Bandwidth abuse increases hosting cost forcing sponsorship or shutdown. This server aggressively defends against automated copying for any reason including offline viewing, duplication, etc... Please respect this requirement and DO NOT RIP THIS SITE. Questions?
Please DO link to this page! Digg it! / MAKE!

<A HREF="http://techref.massmind.org/techref/microchip/4bitlcd.htm"> PIC 4 bit 16x2 Hitachi LCD driver</A>

After you find an appropriate page, you are invited to your to this massmind site! (posts will be visible only to you before review) Just type a nice message (short messages are blocked as spam) in the box and press the Post button. (HTML welcomed, but not the <A tag: Instead, use the link box to link to another page. A tutorial is available Members can login to post directly, become page editors, and be credited for their posts.


Link? Put it here:
if you want a response, please enter your email address:
Attn spammers: All posts are reviewed before being made visible to anyone other than the poster.
Did you find what you needed?

Welcome to massmind.org!

Welcome to techref.massmind.org!

.

AltStyle によって変換されたページ (->オリジナル) /