please dont rip this site
;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
	MOV	W, lcd_shadow
	MOV	lcd_port, W
	endm



;------------------------------
;strobe lcd enable
lcd_strobe:
	MOV	W, #20
	CALL	delay
	SETB	lcd_enable
	lcd_uport
	MOV	W, #20
	CALL	delay

	MOV	W, lcd_port
	AND	W, #$F0
	MOV	lcd_tmp, W

	CLRB	lcd_enable
	lcd_uport
	MOV	W, <>lcd_tmp
	RET



;------------------------------
lcd_send_nibble:
	MOV	lcd_tmp, W
	MOV	W, #$0F
	AND	lcd_tmp, W
	AND	lcd_shadow, W

	MOV	W, <>lcd_tmp
	OR	lcd_shadow, W
	lcd_uport

	JMP	lcd_strobe




;------------------------------
lcd_read_byte:
	MOV	W, #$F0
;*** WARNING: TRIS expanded in two instructions. Check if previous instruction is a skip instruction.
;	tris	lcd_port

	SETB	lcd_rw

	lcd_uport
	CALL	lcd_strobe
	MOV	lcda, W
	SWAP	lcda
	CALL	lcd_strobe
	OR	lcda, W

	MOV	W, #0
;*** WARNING: TRIS expanded in two instructions. Check if previous instruction is a skip instruction.
;	tris	lcd_port


	CLRB	lcd_rw
	MOV	W, lcda
	RET



;------------------------------
#define	sv_addr		bit_tmp,0

lcd_putc:
	SETB	lcd_rs

lcd_send_byte:
	MOV	lcd_char, W
	CLRB	sv_addr
	SNB	lcd_rs
	SETB	sv_addr

	CLRB	lcd_rs
sb0	CALL	lcd_read_byte	;wait until not lcd busy
	AND	W, #%10000000
	SB	Z
	JMP	sb0

	CLRB	lcd_rw
	CLRB	lcd_rs
	SNB	sv_addr
	SETB	lcd_rs

	MOV	W, <>lcd_char
	CALL	lcd_send_nibble
	MOV	W, lcd_char
	JMP	lcd_send_nibble



;------------------------------
lcd_init:
	MOV	W, #0
;*** WARNING: TRIS expanded in two instructions. Check if previous instruction is a skip instruction.
;	tris	lcd_port


	CLR	lcd_shadow
	lcd_uport

	MOV	W, #50
	CALL	delay_ms

	MOV	W, #3
	MOV	lcda, W
	CLRB	lcd_rs
lcdi0	MOV	W, #3
	CALL	lcd_send_nibble
	MOV	W, #15
	CALL	delay_ms
	DECSZ	lcda
	JMP	lcdi0

	MOV	W, #2
	CALL	lcd_send_nibble

	MOV	W, #%00101000	;function set
	CALL	lcd_send_byte	;4 bit,1/6 duty,5x8

	MOV	W, #%00001000	;display off,cursor off, blink off
	CALL	lcd_send_byte

	MOV	W, #%00000001	;clear screen cursor home
	CALL	lcd_send_byte

	MOV	W, #%00000110	;Increment cursor, don't shift screen
	CALL	lcd_send_byte

	MOV	W, #%00001111	;display on,cursor on, blink on
	CALL	lcd_send_byte

	RET



;------------------------------
;lcd_gotoxy
;   input W = YYXXXXXX
;             76543210
;
;       Y    address
;      ---   -------
;       00    0
;       01    0x40
;       10    20
;       11    0x40+20

xy_loc	macro	x, y
	MOV	W, #(y <	;< 6) | (x & B'00111111')
	CALL	lcd_gotoxy
	endm

lcd_gotoxy:
	MOV	lcd_tmp, W
	AND	W, #%00111111

	SNB	lcd_tmp.6
;*** WARNING: ADDLW was expanded in three instructions! Check if previous instruction is a skip instruction. 
;	 addlw	0x40
	MOV	Hack, W
	MOV	W, #$40
	ADD	W, Hack

	SNB	lcd_tmp.7
;*** WARNING: ADDLW was expanded in three instructions! Check if previous instruction is a skip instruction. 
;	 addlw	.20
	MOV	Hack, W
	MOV	W, #20
	ADD	W, Hack

	OR	W, #%10000000
	CLRB	lcd_rs
	JMP	lcd_send_byte



;------------------------------
lcd_cursor_off:
	CLRB	lcd_rs
	MOV	W, #%00001100	;display on,cursor off, blink off
	JMP	lcd_send_byte



;------------------------------
lcd_cursor_on:
	CLRB	lcd_rs
	MOV	W, #%00001111	;display on,cursor on, blink on
	JMP	lcd_send_byte


file: /Techref/scenix/lib/io/dev/lcd/4bitlcd_sx.htm, 3KB, , updated: 2000/6/29 14:46, local time: 2024/11/22 18:08,
TOP NEW HELP FIND: 
13.59.129.141:LOG IN

 ©2024 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://sxlist.com/Techref/scenix/lib/io/dev/lcd/4bitlcd_sx.htm"> scenix lib io dev lcd 4bitlcd_sx</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 sxlist.com!


Site supported by
sales, advertizing,
& kind contributors
just like you!

Please don't rip/copy
(here's why

Copies of the site on CD
are available at minimal cost.
 

Welcome to sxlist.com!

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  .