User Tools

Site Tools


mmbasic:picomite_to_lcd_via_i2c

Picomite To LCD Via I2C

This program writes “HELLO” on an HD44870 LCD via PCF8574 bus expander and a level converter. It is intended for teaching and learning as it reads straight from top to bottom.

'chips primitive LCD driver
' pcf8574 pins in order: D7,D6,D5,D4,BL,E,RW,RS
'first section straight from the HD44780 data sheet

setpin gp2,gp3,i2c2 'where the sigs come out
i2c2 open 100,100 '100 KHz wait 100 mS
pause 100 ' for power to come up

i2c2 write &h27,0,1,&b00100000 :pause 1 'function set e lo
i2c2 write &h27,0,1,&b00100100 :pause 1 ' flip e hi
i2c2 write &h27,0,1,&b00100000 :pause 1 'e trailing edge sends data

i2c2 write &h27,0,1,&b00100000 :pause 1 'function set e lo
i2c2 write &h27,0,1,&b00100100 :pause 1 ' flip e hi
i2c2 write &h27,0,1,&b00100000 :pause 1 'e trailing edge sends data


i2c2 write &h27,0,1,&b00000000 :pause 1 'second function set
i2c2 write &h27,0,1,&b00000100 :pause 1 'flip e hi
i2c2 write &h27,0,1,&b00000000 :pause 1 'e back lo

i2c2 write &h27,0,1,&b00000000 :pause 1 'third function set
i2c2 write &h27,0,1,&b00000100 :pause 1 'flip e hi
i2c2 write &h27,0,1,&b00000000 :pause 1 'e back lo


i2c2 write &h27,0,1,&b11100000 :pause 1 'display on off
i2c2 write &h27,0,1,&b11100100 :pause 1 'flip e hi
i2c2 write &h27,0,1,&b11100000 :pause 1 'e back lo

i2c2 write &h27,0,1,&b00000000 :pause 1 'entry mode set
i2c2 write &h27,0,1,&b00000100 :pause 1 ' flip e hi
i2c2 write &h27,0,1,&b00000000 :pause 1 ' e down to send data

i2c2 write &h27,0,1,&b01100000 :pause 1 'more entry mode set
i2c2 write &h27,0,1,&b01100100 :pause 1 ' flip e hi
i2c2 write &h27,0,1,&b01100000 :pause 1 'e back lo

'now write a character LSB hi is character, not control.

i2c2 write &h27,0,1,&b01000001 :pause 1 'hi nibble of capital H
i2c2 write &h27,0,1,&b01000101 :pause 1 'flip e hi
i2c2 write &h27,0,1,&b01000001 :pause 1 'e back lo to send

i2c2 write &h27,0,1,&b10000001 :pause 1 'lo nibble of capital H
i2c2 write &h27,0,1,&b10000101 :pause 1 ' flip e hi
i2c2 write &h27,0,1,&b10000001 :pause 1 ' e lo to send

i2c2 write &h27,0,1,&b01000001 :pause 1 'hi nibble of capital E
i2c2 write &h27,0,1,&b01000101 :pause 1 'flip enable hi
i2c2 write &h27,0,1,&b01000001 :pause 1 'enable lo to send

i2c2 write &h27,0,1,&b01010001 :pause 1 'lo nibble of capital E
i2c2 write &h27,0,1,&b01010101 :pause 1 'flip enable hi
i2c2 write &h27,0,1,&b01010001 :pause 1 ' enable lo send

i2c2 write &h27,0,1,&b01000001 :pause 1 'hi nibble of capital L
i2c2 write &h27,0,1,&b01000101 :pause 1 'flip enable hi
i2c2 write &h27,0,1,&b01000001 :pause 1 'lo to send

i2c2 write &h27,0,1,&b11000001 :pause 1 'lo nibble of capital L
i2c2 write &h27,0,1,&b11000101 :pause 1 'enable hi
i2c2 write &h27,0,1,&b11000001 :pause 1 'enable lo

i2c2 write &h27,0,1,&b01000001 :pause 1 'hi nibble of 2nd capital L
i2c2 write &h27,0,1,&b01000101 :pause 1 'flip enable hi
i2c2 write &h27,0,1,&b01000001 :pause 1 'lo to send

i2c2 write &h27,0,1,&b11000001 :pause 1 'lo nibble of 2nd capital L
i2c2 write &h27,0,1,&b11000101 :pause 1 'enable hi
i2c2 write &h27,0,1,&b11000001 :pause 1 'enable lo

i2c2 write &h27,0,1,&b01000001 :pause 1 'hi nibble of capital O
i2c2 write &h27,0,1,&b01000101 :pause 1 'enable hi
i2c2 write &h27,0,1,&b01000001 :pause 1 'lo to send

i2c2 write &h27,0,1,&b11110001 :pause 1 'lo nibble of capital O
i2c2 write &h27,0,1,&b11110101 :pause 1 'enable hi
i2c2 write &h27,0,1,&b11110001 :pause 1 'lo to send

'turn on backlight
i2c2 close
setpin gp2, gp3, i2c2
i2c2 open 100,100 '100 KHz, wait 100 ms
i2c2 write &h27,0,1,&b0001000
i2c2 close
mmbasic/picomite_to_lcd_via_i2c.txt · Last modified: 2025/01/14 10:24 by gerry