2 Attachment(s)
serial LCD 1602 Backpack using PIC16F690 for Hitach HD44780
Hello everyone,
I'de like to share this project, may come handy for hobbyist working around LCD display.
My search for a serial LCD that can receive serial data from 300 to 19200 baud on the internet was not successful
then I roll-up my sleeves and build this LCD backpack that use a common Hitachi HD44780 display. (still popular today)
My project was simple with parts already on hand like PIC16F690, NPN smd transistor, potentiometer, resistor. and PBP3 Basic code.
So enjoy,
Code:
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Name : 16F690 LCD BACKPACK
' Date : Sep 27-2025
' Note : 393 words used of 2048
' Notes : Serin2 Baud Rate 300 ~ 19200 Intrc_OSC 8Mhz
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
#CONFIG
cfg = _INTRC_OSC_NOCLKOUT
cfg&= _WDT_OFF
cfg&= _PWRTE_OFF
cfg&= _MCLRE_OFF
cfg&= _CP_OFF
cfg&= _CPD_OFF
cfg&= _BOD_OFF
cfg&= _IESO_OFF
cfg&= _FCMEN_OFF
__CONFIG cfg
#ENDCONFIG
DEFINE OSC 8 ' Core is running at EXT-CRYSTAL 16MHz PBP 33,217
ANSEL = 0 ' Set all pins digital
ANSELH = 0 ' Set all pins digital
OPTION_REG.7 = 0 ' PORTA/PORTB pull-ups are enabled by individual port latch values
CM1CON0 = 0 ' Analog comparators off
En var Portb.4 : low en
RS var Portb.6 : low rs
B1 var byte : b1 = 0
' 300=3313 600=1646 1200=813 2400=396 4800=188 9600=84 19200=32
BaudR var byte : baudr = 32
TRISA = 0 : TRISB = 100000 : TRISC = 0
PORTA = 0 : PORTB = 0 : PORTC = 0
OSCCON = $70
high Porta.0 ' Backlight ON
gosub LCDinit ' initialise LCD
'Serin2
main:
serin2 Portb.5,baudr,3,main,[b1]
if b1 < 253 then ' Characters
PORTC = b1
HIGH EN : PAUSEus 5 : LOW EN
goto main
elseif b1 = 254 then ' LCD Command
low RS
serin2 Portb.5,baudr,3,main,[b1]
PORTC = b1 ' output the data
HIGH EN : PAUSEus 5 : LOW EN
high RS ' character mode
goto main
elseif b1 = 255 then
low rs ' LCD Command
serin2 Portb.5,baudr,3,main,[b1]
if b1 = 0 then
low porta.0 ' Back Light OFF
high rs
endif
if b1 = 8 then
high porta.0 ' Back Light ON
high rs
endif
goto main ' loop back to top
ENDIF
LCDINIT: ' Standard LCD Module Initialisation
PORTC = 000001 ' 2, Clear Display
HIGH EN : PAUSEus 300 : LOW EN ' Send data
pause 4
PORTC = 000010 ' 4, Return Home
HIGH EN : PAUSEus 300 : LOW EN
pause 4
PORTC = 111000 ' 1, 8 bit, 2 line, 5x8 Characters
HIGH EN : PAUSEus 300 : LOW EN
pause 4
' PORTC = 001100 ' Display on, no cursor, no blink
PORTC = 001110 ' 1, Display on, cursor, blink
HIGH EN : PAUSEus 300 : LOW EN
pause 4
PORTC = 000110 ' 1, Entry mode
HIGH EN : PAUSEus 300 : LOW EN
pause 4
high rs ' character mode
RETURN
Attachment 9989
Attachment 9990
Re: serial LCD 1602 Backpack using PIC16F690 for Hitach HD44780
Here's an code update
on the LCD backpack code the line
BaudR var byte should be replace with: BaudR var Word
and here's the serial sender code updated as well. (use an 12F683)
Code:
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'Project : 12F683 Serial LCD Test 300 ~ 19200 baud for 16F690 Lcd Backpack
'Date : Sep 27-2025
'Notes : 285 words used of 2048
'Notes : Serout2 300 ~ 19200 Intrc_OSC 8Mhz
'300=3313 600=1646 1200=813 2400=396 4800=188 9600=84 19200=32
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
#CONFIG
__config _INTOSCIO & _WDTE_OFF & _PWRTE_OFF & _MCLRE_OFF & _BOD_OFF & _CP_OFF & _CPD_OFF
#ENDCONFIG
DEFINE OSC 8 ' Core is running at EXT-CRYSTAL 16MHz PBP 33,217
LCD Var GPIO.0 ' Serial out
ANSEL = 0 ' Set all digital PULLUP Resistor page:10
TRISIO = %00000000 ' INPUT=1 OUTPUT = 0
OSCCON = $70 ' $70=8Mhz $60=4mhz $50=2MHZ $40=1MHZ $30=500KHZ
BaudR var word
baudR = 32 ' 300=3313 600=1646 1200=813 2400=396 4800=188 9600=84 19200=32
Pace var byte ' for serout2
pace = 0
SEROUT2 lcd,baudR,pace,[ 254, 1] ' Clear LCD
pause 40
DO
' LCD 1602
sEROUT2 lcd,baudR,pace,[254,128,"ABCDEFGHIJKLMNOP"] ' Line 1 16 Char.
SEROUT2 lcd,baudR,pace,[254,192,"0123456789-=,./>"] ' Line 2 16 Char.
' LCD 2004
'SEROUT2 lcd,BaudR,pace,[254,128,"ABCDEFGHIJkLMNOPQRST"] ' Line 1 20 Char.
'SEROUT2 lcd,BaudR,pace,[254,192,"0123456789-=,./;!@#$"] ' Line 2 20 Char.
'SEROUT2 lcd,BaudR,pace,[254,148,"ABCDEFGHIJkLMNOPQRST"] ' Line 3 20 Char.
'SEROUT2 lcd,BaudR,pace,[254,212,"0123456789-=,./;!@#$"] ' Line 4 20 Char.
PAUSE 2000
SEROUT2 lcd,baudR,pace,[ 255, 0] ' Back Light OFF
PAUSE 200
SEROUT2 lcd,baudR,pace,[ 255, 8] ' Back Light ON
PAUSE 2000
SEROUT2 lcd,baudR,pace,[ 254, 1] ' Clear LCD
pause 1000
LOOP
END