36
36
pass
37
37
38
38
from adafruit_mcp230xx .mcp23008 import MCP23008
39
+ from adafruit_pcf8574 import PCF8574
39
40
from adafruit_character_lcd .character_lcd import Character_LCD_Mono
40
41
41
42
__version__ = "0.0.0+auto.0"
42
43
__repo__ = "https://github.com/adafruit/Adafruit_CircuitPython_CharLCD.git"
43
44
44
45
46
+ class I2C_Expander :
47
+ # pylint: disable=too-few-public-methods
48
+ """
49
+ I2C Expander ICs
50
+ """
51
+
52
+ MCP23008 = "MCP23008"
53
+ PCF8574 = "PCF8574"
54
+
55
+
45
56
class Character_LCD_I2C (Character_LCD_Mono ):
46
57
# pylint: disable=too-few-public-methods
47
58
"""Character LCD connected to I2C/SPI backpack using its I2C connection.
@@ -67,30 +78,56 @@ def __init__(
67
78
lines : int ,
68
79
address : Optional [int ] = None ,
69
80
backlight_inverted : bool = False ,
81
+ expander : I2C_Expander = I2C_Expander .MCP23008 ,
70
82
) -> None :
71
83
"""Initialize character LCD connected to backpack using I2C connection
72
84
on the specified I2C bus with the specified number of columns and
73
85
lines on the display. Optionally specify if backlight is inverted.
74
86
"""
75
87
76
- if address :
77
- self .mcp = MCP23008 (i2c , address = address )
78
- else :
79
- self .mcp = MCP23008 (i2c )
80
- super ().__init__ (
81
- self .mcp .get_pin (1 ), # reset
82
- self .mcp .get_pin (2 ), # enable
83
- self .mcp .get_pin (3 ), # data line 4
84
- self .mcp .get_pin (4 ), # data line 5
85
- self .mcp .get_pin (5 ), # data line 6
86
- self .mcp .get_pin (6 ), # data line 7
87
- columns ,
88
- lines ,
89
- backlight_pin = self .mcp .get_pin (7 ),
90
- backlight_inverted = backlight_inverted ,
91
- )
88
+ if expander == I2C_Expander .MCP23008 :
89
+ if address :
90
+ self .expander = MCP23008 (i2c , address = address )
91
+ else :
92
+ self .expander = MCP23008 (i2c )
93
+
94
+ super ().__init__ (
95
+ self .expander .get_pin (1 ), # reset
96
+ self .expander .get_pin (2 ), # enable
97
+ self .expander .get_pin (3 ), # data line 4
98
+ self .expander .get_pin (4 ), # data line 5
99
+ self .expander .get_pin (5 ), # data line 6
100
+ self .expander .get_pin (6 ), # data line 7
101
+ columns ,
102
+ lines ,
103
+ backlight_pin = self .expander .get_pin (7 ),
104
+ backlight_inverted = backlight_inverted ,
105
+ )
106
+
107
+ elif expander == I2C_Expander .PCF8574 :
108
+ if address :
109
+ self .expander = PCF8574 (i2c , address = address )
110
+ else :
111
+ self .expander = PCF8574 (i2c )
112
+
113
+ super ().__init__ (
114
+ self .expander .get_pin (0 ), # reset
115
+ self .expander .get_pin (2 ), # enable
116
+ self .expander .get_pin (4 ), # data line 4
117
+ self .expander .get_pin (5 ), # data line 5
118
+ self .expander .get_pin (6 ), # data line 6
119
+ self .expander .get_pin (7 ), # data line 7
120
+ columns ,
121
+ lines ,
122
+ backlight_pin = self .expander .get_pin (3 ),
123
+ backlight_inverted = backlight_inverted ,
124
+ )
92
125
93
126
def _write8 (self , value : int , char_mode : bool = False ) -> None :
127
+ if not isinstance (self .expander , MCP23008 ):
128
+ super ()._write8 (value , char_mode )
129
+ return
130
+
94
131
# Sends 8b ``value`` in ``char_mode``.
95
132
# :param value: bytes
96
133
# :param char_mode: character/data mode selector. False (default) for
@@ -112,13 +149,13 @@ def _write8(self, value: int, char_mode: bool = False) -> None:
112
149
backlight_bit = int (self .backlight ^ self .backlight_inverted ) << 7
113
150
114
151
# Write char_mode and upper 4 bits of data, shifted to the correct position.
115
- self .mcp .gpio = reset_bit | backlight_bit | ((value & 0xF0 ) >> 1 )
152
+ self .expander .gpio = reset_bit | backlight_bit | ((value & 0xF0 ) >> 1 )
116
153
117
154
# do command
118
155
self ._pulse_enable ()
119
156
120
157
# Write char_mode and lower 4 bits of data, shifted to the correct position.
121
- self .mcp .gpio = reset_bit | backlight_bit | ((value & 0x0F ) << 3 )
158
+ self .expander .gpio = reset_bit | backlight_bit | ((value & 0x0F ) << 3 )
122
159
123
160
# do command
124
161
self ._pulse_enable ()
0 commit comments