LCD - Custom Character Display

thebatosai's Avatar, Join Date: May 2009
Newbie Member
Hi,

I am trying to write a program to display custom character on LCD using CGRAM. I am using 68HC11 MCU and 20x2 LCD for this purpose.

I attached my code in attachment. I don't seem to get anything on LCD. The HEX pattern, CC, is supposed to look like a speaker. Any help would great.

Code:
 ORG $6000

CC	FCB	$06,$0f,$0f,$0f,$0f,$0f,$0f,$00

 ORG $7000

MAIN		JSR LCD_CLR
		JSR DSP_CC
		SWI

DSP_CC		LDY #$40
		JSR LCD_TEST
		LDX #CC
		JSR LCD_DSP
		RTS

LCD_CLR 	LDAA #$01
		JSR LCD_TEST
       		STAA $1400
		RTS

LCD_TEST 	TST $1400
     		BMI LCD_TEST
		RTS
                                 
LCD_DSP		LDAA 0,X
		LDAB 0,Y
		STAB $1400
		CMPA #00
		BEQ FINISH
		JSR LCD_TEST
		STAA $1401
		INX
		INY
		JMP LCD_DSP
FINISH 		RTS

Last edited by shabbir; 4May2009 at 08:33.. Reason: Attachment Removed
0
xpi0t0s's Avatar, Join Date: Aug 2004
Mentor
How does
Code:
00000110
00001111
00001111
00001111
00001111
00001111
00001111
look like a speaker?

How does the MCU know to start executing the program at $7000? I'm not a 68HC11 expert but I've done a bit of PIC programming and you need to put a jump at the start of program memory if that's not where the start of the program is. Obviously ignore this if the 68HC11 starts at $7000.

LDAA 0,X - OK, I guess this reads the 06 ff ff etc since X is initialised to #CC.
LDAB 0,Y - So what does this do? Y is initialised to #$40.
0
thebatosai's Avatar, Join Date: May 2009
Newbie Member
I am sorry that is definitely not speaker look alike. It is supposed to look like a battery. But the my it doesn't make difference to the problem.

Answering your question one at a time.

Once the program is loaded. Using a BUFFALO monitor program I would type go 7000 to run the program, Where 7000 is a hex and address from where my main subroutine starts.

Your second question, LDAB #$40, is the instruction that will initialize CGRAM. $40 corresponds to first row of 5x8 pixel map. So, $40~$47 for 8 rows. Last row is 00 for cursor.

I am newbie but I have some assembly and now trying to play around. I tried following the instruction in the website below but its for different MCU.

w w w.8051projects.net/lcd-interfacing/lcd-custom-character.php
Attached Images
File Type: jpg Capture_4.jpg (22.3 KB, 3 views)
0
xpi0t0s's Avatar, Join Date: Aug 2004
Mentor
> Your second question, LDAB #$40, is the instruction that will initialize CGRAM. $40 corresponds to first row of 5x8 pixel map. So, $40~$47 for 8 rows. Last row is 00 for cursor.

Um, sorry I'm being thick. Where's the instruction that writes to $40~47?
0
thebatosai's Avatar, Join Date: May 2009
Newbie Member
Hmm its alright. You see first Index Register Y is initialized to $40. Then it is incremented using INY. It is also stored in $1400 LCD Control Register, which tells the address in CGRAM to right hex pattern.