Hello fellow piclisters, I am having trouble creating special characters with a standard 14 pin LCD card and a PIC16F84. I am using code derived from Peer's wonderful LCD pages, and the code is trying to create three special characters residing in CGRAM spaces 0x000, 0x001, and 0x002 respectively. I understand that I must first initialize the LCD. This has been done effectively. Then select the special character RAM space. This is done with the following subroutine: MOVLW 0x000 ; set the first CGRAM value LCDSCGA ANDLW 0x03F IORLW 0x040 CALL LCDPUTCMD ; this routine is from Peer (and works) Now as I understand it, I must write the eight bytes of segment information. The location is incremented automatically via my initialization mode setup (also verifyed). MOVLW 0x01b ; send the first byte of segment info CALL LCDPUTCHAR ; send the data to the LCD o o o (do this seven more times) At this point I assume that all data necessary to create my first special character resides at location 0x000 in the LCD RAM. To display this character I need to write it to the display. So first, set the LCD to display mode via the following subroutine: LCDSDDA IORLW 0x080 ; CALL LCDPUTCMD ; RETURN Then send my characters: MOVLW 0x000 ; location where my special character is CALL LCDPUTCHAR ; o o o (send more characters) My questions are: 1. Do I have it right, but misplaced a bug somewhere? Or: 2. Have a got a concept wrong, which one, and what should it be? Thanks for the help, Tim Crist