serial LCD 1602 Backpack using PIC16F690 for Hitach HD44780


+ Reply to Thread
Results 1 to 2 of 2
  1. #1
    Join Date
    Jan 2022
    Posts
    44

    Default 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

    Name:  DSC02371.JPG
Views: 3
Size:  89.9 KB


    Name:  DSC02372.JPG
Views: 4
Size:  103.3 KB

  2. #2
    Join Date
    Jan 2022
    Posts
    44


    Did you find this post helpful? Yes | No

    Default 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

Similar Threads

  1. Using 16F1503 as Serial LCD Backpack
    By elec_mech in forum mel PIC BASIC Pro
    Replies: 2
    Last Post: - 11th March 2015, 19:58
  2. 16F877A and LCD HD44780
    By epilot in forum mel PIC BASIC Pro
    Replies: 38
    Last Post: - 1st November 2013, 18:17
  3. FREE Serial LCD Backpack Board
    By rmteo in forum Off Topic
    Replies: 36
    Last Post: - 29th July 2010, 02:32
  4. Lcd Hd44780
    By alaaodeh in forum mel PIC BASIC Pro
    Replies: 1
    Last Post: - 6th February 2007, 14:04
  5. LCD 4x20 HD44780
    By inteco in forum mel PIC BASIC
    Replies: 13
    Last Post: - 27th June 2006, 16:52

Members who have read this thread : 1

You do not have permission to view the list of names.

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts