New LiquidCrystal library  1.3.2
Generic LCD control library
/Users/fmalpartida/Documents/development/mercurial repos/SW/NewliquidCrystal/LiquidCrystal_SR3W.h
1 // ---------------------------------------------------------------------------
2 // Created by Francisco Malpartida on 7.3.2012.
3 // Copyright 2011 - Under creative commons license 3.0:
4 // Attribution-ShareAlike CC BY-SA
5 //
6 // This software is furnished "as is", without technical support, and with no
7 // warranty, express or implied, as to its usefulness for any purpose.
8 //
9 // Thread Safe: No
10 // Extendable: Yes
11 //
12 // @file LiquidCrystal_SR3W.h
13 // This file implements a basic liquid crystal library that comes as standard
14 // in the Arduino SDK but using a generic SHIFT REGISTER extension board.
15 //
16 // @brief
17 // This is a basic implementation of the LiquidCrystal library of the
18 // Arduino SDK. The original library has been reworked in such a way that
19 // this class implements the all methods to command an LCD based
20 // on the Hitachi HD44780 and compatible chipsets using a 3 wire latching
21 // shift register. While it has been tested with a 74HC595N shift register
22 // it should also work with other latching shift registers such as the MC14094
23 // and the HEF4094
24 //
25 // This particular driver has been created as generic as possible to enable
26 // users to configure and connect their LCDs using just 3 digital IOs from the
27 // AVR or Arduino, and connect the LCD to the outputs of the shiftregister
28 // in any configuration. The library is configured by passing the IO pins
29 // that control the strobe, data and clock of the shift register and a map
30 // of how the shiftregister is connected to the LCD.
31 //
32 //
33 // +--------------------------------------------+
34 // | MCU |
35 // | IO1 IO2 IO3 |
36 // +----+-------------+-------------+-----------+
37 // | | |
38 // | | |
39 // +----+-------------+-------------+-----------+
40 // | Strobe Data Clock |
41 // | 8-bit shift/latch register | 74HC595N
42 // | Qa0 Qb1 Qc2 Qd3 Qe4 Qf5 Qg6 Qh7 |
43 // +----+----+----+----+----+----+----+----+----+
44 // | | | | | | |
45 // |11 |12 |13 |14 |6 |5 |4 (LCD pins)
46 // +----+----+----+----+----+----+----+----+----+
47 // | DB4 DB5 DB6 DB7 E Rw RS |
48 // | LCD Module |
49 //
50 // NOTE: Rw is not used by the driver so it can be connected to GND.
51 //
52 // The functionality provided by this class and its base class is identical
53 // to the original functionality of the Arduino LiquidCrystal library.
54 //
55 //
56 // @author F. Malpartida - fmalpartida@gmail.com
57 // ---------------------------------------------------------------------------
58 #ifndef _LIQUIDCRYSTAL_SR3W_H_
59 #define _LIQUIDCRYSTAL_SR3W_H_
60 
61 #include <inttypes.h>
62 #include "LCD.h"
63 #include "FastIO.h"
64 
65 
66 class LiquidCrystal_SR3W : public LCD
67 {
68 public:
69 
90  LiquidCrystal_SR3W(uint8_t data, uint8_t clk, uint8_t strobe);
91  // Constructor with backlight control
92  LiquidCrystal_SR3W(uint8_t data, uint8_t clk, uint8_t strobe,
93  uint8_t backlighPin, t_backlighPol pol);
94 
112  LiquidCrystal_SR3W(uint8_t data, uint8_t clk, uint8_t strobe,
113  uint8_t En, uint8_t Rw, uint8_t Rs,
114  uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7 );
115  // Constructor with backlight control
116  LiquidCrystal_SR3W( uint8_t data, uint8_t clk, uint8_t strobe,
117  uint8_t En, uint8_t Rw, uint8_t Rs,
118  uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7,
119  uint8_t backlighPin, t_backlighPol pol);
120 
133  virtual void send(uint8_t value, uint8_t mode);
134 
145  void setBacklightPin ( uint8_t value, t_backlighPol pol );
146 
156  void setBacklight ( uint8_t value );
157 
158 private:
159 
165  int init(uint8_t data, uint8_t clk, uint8_t strobe,
166  uint8_t Rs, uint8_t Rw, uint8_t En,
167  uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7);
168 
177  void write4bits(uint8_t value, uint8_t mode);
178 
185  void loadSR(uint8_t value);
186 
187 
188  fio_bit _strobe; // shift register strobe pin
189  fio_register _strobe_reg; // SR strobe pin MCU register
190  fio_bit _data; // shift register data pin
191  fio_register _data_reg; // SR data pin MCU register
192  fio_bit _clk; // shift register clock pin
193  fio_register _clk_reg; // SR clock pin MCU register
194  uint8_t _En; // LCD expander word for enable pin
195  uint8_t _Rw; // LCD expander word for R/W pin
196  uint8_t _Rs; // LCD expander word for Register Select pin
197  uint8_t _data_pins[4]; // LCD data lines
198  uint8_t _backlightPinMask; // Backlight IO pin mask
199  uint8_t _backlightStsMask; // Backlight status mask
200 
201 };
202 
203 #endif
204 
void setBacklightPin(uint8_t value, t_backlighPol pol)
Definition: LiquidCrystal_SR3W.cpp:183
Definition: LiquidCrystal_SR3W.h:66
LiquidCrystal_SR3W(uint8_t data, uint8_t clk, uint8_t strobe)
Definition: LiquidCrystal_SR3W.cpp:133
Definition: LCD.h:187
void setBacklight(uint8_t value)
Definition: LiquidCrystal_SR3W.cpp:191
virtual void send(uint8_t value, uint8_t mode)
Definition: LiquidCrystal_SR3W.cpp:162