annotate service/busyboxArduino/LiquidCrystal_V1.2.1/LiquidCrystal/LiquidCrystal_SR3W.cpp @ 154:58c47bfe0ce5

add LiquidCrystal_V1.2.1 lib Ignore-this: ddfe8b0c1d6e19f210684520859d5a57
author drewp@bigasterisk.com
date Sat, 03 Jan 2015 23:35:16 -0800
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
154
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
1 // ---------------------------------------------------------------------------
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
2 // Created by Francisco Malpartida on 7.3.2012.
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
3 // Copyright 2011 - Under creative commons license 3.0:
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
4 // Attribution-ShareAlike CC BY-SA
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
5 //
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
6 // This software is furnished "as is", without technical support, and with no
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
7 // warranty, express or implied, as to its usefulness for any purpose.
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
8 //
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
9 // Thread Safe: No
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
10 // Extendable: Yes
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
11 //
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
12 // @file LiquidCrystal_SRG.h
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
13 // This file implements a basic liquid crystal library that comes as standard
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
14 // in the Arduino SDK but using a generic SHIFT REGISTER extension board.
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
15 //
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
16 // @brief
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
17 // This is a basic implementation of the LiquidCrystal library of the
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
18 // Arduino SDK. The original library has been reworked in such a way that
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
19 // this class implements the all methods to command an LCD based
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
20 // on the Hitachi HD44780 and compatible chipsets using a 3 wire latching
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
21 // shift register. While it has been tested with a 74HC595N shift register
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
22 // it should also work with other latching shift registers such as the MC14094
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
23 // and the HEF4094
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
24 //
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
25 // This particular driver has been created as generic as possible to enable
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
26 // users to configure and connect their LCDs using just 3 digital IOs from the
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
27 // AVR or Arduino, and connect the LCD to the outputs of the shiftregister
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
28 // in any configuration. The library is configured by passing the IO pins
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
29 // that control the strobe, data and clock of the shift register and a map
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
30 // of how the shiftregister is connected to the LCD.
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
31 //
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
32 //
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
33 // +--------------------------------------------+
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
34 // | MCU |
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
35 // | IO1 IO2 IO3 |
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
36 // +----+-------------+-------------+-----------+
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
37 // | | |
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
38 // | | |
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
39 // +----+-------------+-------------+-----------+
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
40 // | Strobe Data Clock |
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
41 // | 8-bit shift/latch register | 74HC595N
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
42 // | Qa0 Qb1 Qc2 Qd3 Qe4 Qf5 Qg6 Qh7 |
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
43 // +----+----+----+----+----+----+----+----+----+
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
44 // | | | | | | |
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
45 // |11 |12 |13 |14 |6 |5 |4 (LCD pins)
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
46 // +----+----+----+----+----+----+----+----+----+
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
47 // | DB4 DB5 DB6 DB7 E Rw RS |
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
48 // | LCD Module |
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
49 //
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
50 // NOTE: Rw is not used by the driver so it can be connected to GND.
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
51 //
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
52 // The functionality provided by this class and its base class is identical
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
53 // to the original functionality of the Arduino LiquidCrystal library.
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
54 //
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
55 //
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
56 // History
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
57 // 2012.03.29 bperrybap - fixed constructors not properly using Rs
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
58 // Fixed incorrect use of 5x10 for default font
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
59 // - now matches original LQ library.
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
60 // moved delay to send() so it is per cmd/write vs shiftout()
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
61 // NOTE: delay is on hairy edge of working when FAST_MODE is on.
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
62 // because of waitUsec().
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
63 // There is margin at 16Mhz AVR but might fail on 20Mhz AVRs.
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
64 //
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
65 // @author F. Malpartida - fmalpartida@gmail.com
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
66 // ---------------------------------------------------------------------------
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
67 // flags for backlight control
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
68 #include <stdio.h>
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
69 #include <string.h>
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
70 #include <inttypes.h>
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
71
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
72 #if (ARDUINO < 100)
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
73 #include <WProgram.h>
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
74 #else
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
75 #include <Arduino.h>
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
76 #endif
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
77 #include "LiquidCrystal_SR3W.h"
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
78
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
79 #include "FastIO.h"
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
80
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
81 /*!
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
82 @defined
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
83 @abstract LCD_NOBACKLIGHT
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
84 @discussion No BACKLIGHT MASK
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
85 */
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
86 #define LCD_NOBACKLIGHT 0x00
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
87
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
88 /*!
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
89 @defined
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
90 @abstract LCD_BACKLIGHT
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
91 @discussion BACKLIGHT MASK used when backlight is on
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
92 */
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
93 #define LCD_BACKLIGHT 0xFF
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
94
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
95
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
96 // Default library configuration parameters used by class constructor with
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
97 // only the I2C address field.
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
98 // ---------------------------------------------------------------------------
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
99 /*!
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
100 @defined
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
101 @abstract Enable bit of the LCD
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
102 @discussion Defines the IO of the expander connected to the LCD's Enable
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
103 */
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
104 #define EN 4 // Enable bit
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
105
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
106 /*!
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
107 @defined
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
108 @abstract Read/Write bit of the LCD
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
109 @discussion Defines the IO of the expander connected to the LCD's Rw pin
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
110 */
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
111 #define RW 5 // Read/Write bit
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
112
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
113 /*!
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
114 @defined
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
115 @abstract Register bit of the LCD
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
116 @discussion Defines the IO of the expander connected to the LCD's Register select pin
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
117 */
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
118 #define RS 6 // Register select bit
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
119
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
120 /*!
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
121 @defined
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
122 @abstract LCD dataline allocation this library only supports 4 bit LCD control
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
123 mode.
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
124 @discussion D4, D5, D6, D7 LCD data lines pin mapping of the extender module
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
125 */
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
126 #define D4 0
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
127 #define D5 1
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
128 #define D6 2
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
129 #define D7 3
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
130
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
131
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
132
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
133 LiquidCrystal_SR3W::LiquidCrystal_SR3W(uint8_t data, uint8_t clk, uint8_t strobe)
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
134 {
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
135 init( data, clk, strobe, RS, RW, EN, D4, D5, D6, D7 );
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
136 }
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
137
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
138 LiquidCrystal_SR3W::LiquidCrystal_SR3W(uint8_t data, uint8_t clk, uint8_t strobe,
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
139 uint8_t backlighPin, t_backlighPol pol)
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
140 {
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
141 init( data, clk, strobe, RS, RW, EN, D4, D5, D6, D7 );
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
142 setBacklightPin(backlighPin, pol);
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
143 }
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
144
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
145 LiquidCrystal_SR3W::LiquidCrystal_SR3W(uint8_t data, uint8_t clk, uint8_t strobe,
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
146 uint8_t En, uint8_t Rw, uint8_t Rs,
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
147 uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7 )
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
148 {
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
149 init( data, clk, strobe, Rs, Rw, En, d4, d5, d6, d7 );
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
150 }
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
151
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
152 LiquidCrystal_SR3W::LiquidCrystal_SR3W(uint8_t data, uint8_t clk, uint8_t strobe,
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
153 uint8_t En, uint8_t Rw, uint8_t Rs,
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
154 uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7,
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
155 uint8_t backlighPin, t_backlighPol pol)
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
156 {
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
157 init( data, clk, strobe, Rs, Rw, En, d4, d5, d6, d7 );
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
158 setBacklightPin(backlighPin, pol);
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
159 }
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
160
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
161
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
162 void LiquidCrystal_SR3W::send(uint8_t value, uint8_t mode)
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
163 {
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
164
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
165 if ( mode != FOUR_BITS )
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
166 {
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
167 write4bits( (value >> 4), mode ); // upper nibble
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
168 }
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
169 write4bits( (value & 0x0F), mode); // lower nibble
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
170
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
171
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
172 #if (F_CPU <= 16000000)
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
173 // No need to use the delay routines on AVR since the time taken to write
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
174 // on AVR with SR pin mapping even with fio is longer than LCD command execution.
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
175 waitUsec(37); //goes away on AVRs
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
176 #else
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
177 delayMicroseconds ( 37 ); // commands & data writes need > 37us to complete
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
178 #endif
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
179
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
180 }
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
181
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
182
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
183 void LiquidCrystal_SR3W::setBacklightPin ( uint8_t value, t_backlighPol pol = POSITIVE )
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
184 {
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
185 _backlightPinMask = ( 1 << value );
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
186 _backlightStsMask = LCD_NOBACKLIGHT;
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
187 _polarity = pol;
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
188 setBacklight (BACKLIGHT_OFF); // Set backlight to off as initial setup
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
189 }
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
190
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
191 void LiquidCrystal_SR3W::setBacklight ( uint8_t value )
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
192 {
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
193 // Check if backlight is available
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
194 // ----------------------------------------------------
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
195 if ( _backlightPinMask != 0x0 )
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
196 {
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
197 // Check for polarity to configure mask accordingly
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
198 // ----------------------------------------------------------
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
199 if (((_polarity == POSITIVE) && (value > 0)) ||
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
200 ((_polarity == NEGATIVE ) && ( value == 0 )))
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
201 {
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
202 _backlightStsMask = _backlightPinMask & LCD_BACKLIGHT;
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
203 }
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
204 else
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
205 {
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
206 _backlightStsMask = _backlightPinMask & LCD_NOBACKLIGHT;
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
207 }
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
208 loadSR( _backlightStsMask );
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
209 }
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
210 }
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
211
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
212
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
213 // PRIVATE METHODS
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
214 // -----------------------------------------------------------------------------
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
215
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
216 int LiquidCrystal_SR3W::init(uint8_t data, uint8_t clk, uint8_t strobe,
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
217 uint8_t Rs, uint8_t Rw, uint8_t En,
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
218 uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7)
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
219 {
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
220 _data = fio_pinToBit(data);
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
221 _clk = fio_pinToBit(clk);
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
222 _strobe = fio_pinToBit(strobe);
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
223 _data_reg = fio_pinToOutputRegister(data);
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
224 _clk_reg = fio_pinToOutputRegister(clk);
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
225 _strobe_reg = fio_pinToOutputRegister(strobe);
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
226
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
227 // LCD pin mapping
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
228 _backlightPinMask = 0;
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
229 _backlightStsMask = LCD_NOBACKLIGHT;
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
230 _polarity = POSITIVE;
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
231
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
232 _En = ( 1 << En );
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
233 _Rw = ( 1 << Rw );
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
234 _Rs = ( 1 << Rs );
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
235
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
236 // Initialise pin mapping
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
237 _data_pins[0] = ( 1 << d4 );
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
238 _data_pins[1] = ( 1 << d5 );
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
239 _data_pins[2] = ( 1 << d6 );
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
240 _data_pins[3] = ( 1 << d7 );
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
241
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
242 _displayfunction = LCD_4BITMODE | LCD_1LINE | LCD_5x8DOTS;
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
243
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
244 return (1);
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
245 }
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
246
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
247 void LiquidCrystal_SR3W::write4bits(uint8_t value, uint8_t mode)
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
248 {
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
249 uint8_t pinMapValue = 0;
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
250
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
251 // Map the value to LCD pin mapping
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
252 // --------------------------------
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
253 for ( uint8_t i = 0; i < 4; i++ )
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
254 {
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
255 if ( ( value & 0x1 ) == 1 )
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
256 {
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
257 pinMapValue |= _data_pins[i];
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
258 }
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
259 value = ( value >> 1 );
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
260 }
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
261
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
262 // Is it a command or data
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
263 // -----------------------
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
264 mode = ( mode == DATA ) ? _Rs : 0;
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
265
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
266 pinMapValue |= mode | _backlightStsMask;
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
267 loadSR ( pinMapValue | _En ); // Send with enable high
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
268 loadSR ( pinMapValue); // Send with enable low
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
269 }
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
270
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
271
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
272 void LiquidCrystal_SR3W::loadSR(uint8_t value)
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
273 {
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
274 // Load the shift register with information
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
275 fio_shiftOut(_data_reg, _data, _clk_reg, _clk, value, MSBFIRST);
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
276
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
277 // Strobe the data into the latch
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
278 ATOMIC_BLOCK(ATOMIC_RESTORESTATE)
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
279 {
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
280 fio_digitalWrite_HIGH(_strobe_reg, _strobe);
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
281 fio_digitalWrite_SWITCHTO(_strobe_reg, _strobe, LOW);
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
282 }
58c47bfe0ce5 add LiquidCrystal_V1.2.1 lib
drewp@bigasterisk.com
parents:
diff changeset
283 }