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