@@ -67,13 +67,6 @@ void LiquidCrystal::init(uint8_t fourbitmode, uint8_t rs, uint8_t rw, uint8_t en
67
67
_data_pins[6 ] = d6;
68
68
_data_pins[7 ] = d7;
69
69
70
- pinMode (_rs_pin, OUTPUT);
71
- // we can save 1 pin by not using RW. Indicate by passing 255 instead of pin#
72
- if (_rw_pin != 255 ) {
73
- pinMode (_rw_pin, OUTPUT);
74
- }
75
- pinMode (_enable_pin, OUTPUT);
76
-
77
70
if (fourbitmode)
78
71
_displayfunction = LCD_4BITMODE | LCD_1LINE | LCD_5x8DOTS;
79
72
else
@@ -95,6 +88,19 @@ void LiquidCrystal::begin(uint8_t cols, uint8_t lines, uint8_t dotsize) {
95
88
_displayfunction |= LCD_5x10DOTS;
96
89
}
97
90
91
+ pinMode (_rs_pin, OUTPUT);
92
+ // we can save 1 pin by not using RW. Indicate by passing 255 instead of pin#
93
+ if (_rw_pin != 255 ) {
94
+ pinMode (_rw_pin, OUTPUT);
95
+ }
96
+ pinMode (_enable_pin, OUTPUT);
97
+
98
+ // Do these once, instead of every time a character is drawn for speed reasons.
99
+ for (int i=0 ; i<((_displayfunction & LCD_8BITMODE) ? 8 : 4 ); ++i)
100
+ {
101
+ pinMode (_data_pins[i], OUTPUT);
102
+ }
103
+
98
104
// SEE PAGE 45/46 FOR INITIALIZATION SPECIFICATION!
99
105
// according to datasheet, we need at least 40ms after power rises above 2.7V
100
106
// before sending commands. Arduino can turn on way before 4.5V so we'll wait 50
@@ -158,12 +164,6 @@ void LiquidCrystal::begin(uint8_t cols, uint8_t lines, uint8_t dotsize) {
158
164
159
165
}
160
166
161
- /*
162
- in some 16x4 LCD when line 3 and 4 are not placed correctly you may try:
163
- setRowOffsets(0x00, 0x40, 0x14, 0x54)
164
- or
165
- setRowOffsets(0x00, 0x40, 0x10, 0x50)
166
- */
167
167
void LiquidCrystal::setRowOffsets (int row0, int row1, int row2, int row3)
168
168
{
169
169
_row_offsets[0 ] = row0;
@@ -311,7 +311,6 @@ void LiquidCrystal::pulseEnable(void) {
311
311
312
312
void LiquidCrystal::write4bits (uint8_t value) {
313
313
for (int i = 0 ; i < 4 ; i++) {
314
- pinMode (_data_pins[i], OUTPUT);
315
314
digitalWrite (_data_pins[i], (value >> i) & 0x01 );
316
315
}
317
316
@@ -320,7 +319,6 @@ void LiquidCrystal::write4bits(uint8_t value) {
320
319
321
320
void LiquidCrystal::write8bits (uint8_t value) {
322
321
for (int i = 0 ; i < 8 ; i++) {
323
- pinMode (_data_pins[i], OUTPUT);
324
322
digitalWrite (_data_pins[i], (value >> i) & 0x01 );
325
323
}
326
324
0 commit comments