mirror of
https://github.com/fmalpartida/New-LiquidCrystal.git
synced 2026-07-28 04:07:33 +00:00
Removed LiquidCristal_4bit, not used any more.
This commit is contained in:
@@ -1,303 +0,0 @@
|
||||
// ---------------------------------------------------------------------------
|
||||
// Created by Francisco Malpartida on 20/08/11.
|
||||
// Copyright 2011 - Under creative commons license 3.0:
|
||||
// Attribution-ShareAlike CC BY-SA
|
||||
//
|
||||
// This software is furnished "as is", without technical support, and with no
|
||||
// warranty, express or implied, as to its usefulness for any purpose.
|
||||
//
|
||||
// Thread Safe: No
|
||||
// Extendable: Yes
|
||||
//
|
||||
// @file LiquidCrystal_4bit.cpp
|
||||
// This file implements a basic liquid crystal library that comes as standard
|
||||
// in the Arduino SDK.
|
||||
//
|
||||
// @brief
|
||||
// This is a basic implementation of the LiquidCrystal library of the
|
||||
// Arduino SDK. The original library has been reworked in such a way that
|
||||
// this class implements the all methods to command an LCD based
|
||||
// on the Hitachi HD44780 and compatible chipsets using the parallel port of
|
||||
// the LCD (4 bit and 8 bit).
|
||||
//
|
||||
// The functionality provided by this class and its base class is identical
|
||||
// to the original functionality of the Arduino LiquidCrystal library.
|
||||
//
|
||||
//
|
||||
// This library is only compatible with Arduino's SDK version 1.0
|
||||
//
|
||||
//
|
||||
// @author F. Malpartida - fmalpartida@gmail.com
|
||||
// ---------------------------------------------------------------------------
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <inttypes.h>
|
||||
#include <Arduino.h>
|
||||
#include <LiquidCrystal_4bit.h>
|
||||
|
||||
// When the display powers up, it is configured as follows:
|
||||
//
|
||||
// 1. Display clear
|
||||
// 2. Function set:
|
||||
// DL = 1; 8-bit interface data
|
||||
// N = 0; 1-line display
|
||||
// F = 0; 5x8 dot character font
|
||||
// 3. Display on/off control:
|
||||
// D = 0; Display off
|
||||
// C = 0; Cursor off
|
||||
// B = 0; Blinking off
|
||||
// 4. Entry mode set:
|
||||
// I/D = 1; Increment by 1
|
||||
// S = 0; No shift
|
||||
//
|
||||
// Note, however, that resetting the Arduino doesn't reset the LCD, so we
|
||||
// can't assume that its in that state when a sketch starts (and the
|
||||
// LiquidCrystal_4bit constructor is called).
|
||||
// A call to begin() will reinitialize the LCD.
|
||||
|
||||
|
||||
// CONSTRUCTORS
|
||||
// ---------------------------------------------------------------------------
|
||||
LiquidCrystal_4bit::LiquidCrystal_4bit(uint8_t rs, uint8_t rw, uint8_t enable,
|
||||
uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3,
|
||||
uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7)
|
||||
{
|
||||
init(0, rs, rw, enable, d0, d1, d2, d3, d4, d5, d6, d7);
|
||||
}
|
||||
|
||||
LiquidCrystal_4bit::LiquidCrystal_4bit(uint8_t rs, uint8_t enable,
|
||||
uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3,
|
||||
uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7)
|
||||
{
|
||||
init(0, rs, 255, enable, d0, d1, d2, d3, d4, d5, d6, d7);
|
||||
}
|
||||
|
||||
LiquidCrystal_4bit::LiquidCrystal_4bit(uint8_t rs, uint8_t rw, uint8_t enable,
|
||||
uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3)
|
||||
{
|
||||
init(1, rs, rw, enable, d0, d1, d2, d3, 0, 0, 0, 0);
|
||||
}
|
||||
|
||||
LiquidCrystal_4bit::LiquidCrystal_4bit(uint8_t rs, uint8_t enable,
|
||||
uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3)
|
||||
{
|
||||
init(1, rs, 255, enable, d0, d1, d2, d3, 0, 0, 0, 0);
|
||||
}
|
||||
|
||||
// PRIVATE METHODS
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
//
|
||||
// init
|
||||
void LiquidCrystal_4bit::init(uint8_t fourbitmode, uint8_t rs, uint8_t rw, uint8_t enable,
|
||||
uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3,
|
||||
uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7)
|
||||
{
|
||||
uint8_t i;
|
||||
|
||||
// Initialize the IO pins
|
||||
// -----------------------
|
||||
|
||||
_rs_pin = rs;
|
||||
_rw_pin = rw;
|
||||
_enable_pin = enable;
|
||||
|
||||
_data_pins[0] = d0;
|
||||
_data_pins[1] = d1;
|
||||
_data_pins[2] = d2;
|
||||
_data_pins[3] = d3;
|
||||
_data_pins[4] = d4;
|
||||
_data_pins[5] = d5;
|
||||
_data_pins[6] = d6;
|
||||
_data_pins[7] = d7;
|
||||
|
||||
// Initialize the IO port direction to OUTPUT
|
||||
// ------------------------------------------
|
||||
|
||||
for ( uint8_t i = 0; i < 4; i++ )
|
||||
{
|
||||
pinMode ( _data_pins[i], OUTPUT );
|
||||
}
|
||||
|
||||
// Initialize the rest of the ports if it is an 8bit controlled LCD
|
||||
// ----------------------------------------------------------------
|
||||
|
||||
if ( !fourbitmode )
|
||||
{
|
||||
for ( uint8_t i = 4; i < 7; i++ )
|
||||
{
|
||||
pinMode ( _data_pins[i], OUTPUT );
|
||||
}
|
||||
}
|
||||
pinMode(_rs_pin, OUTPUT);
|
||||
|
||||
// we can save 1 pin by not using RW. Indicate by passing 255 instead of pin#
|
||||
if (_rw_pin != 255)
|
||||
{
|
||||
pinMode(_rw_pin, OUTPUT);
|
||||
}
|
||||
|
||||
pinMode(_enable_pin, OUTPUT);
|
||||
|
||||
// Initialise displaymode functions to defaults: LCD_1LINE and LCD_5x8DOTS
|
||||
// -------------------------------------------------------------------------
|
||||
if (fourbitmode)
|
||||
_displayfunction = LCD_4BITMODE | LCD_1LINE | LCD_5x8DOTS;
|
||||
else
|
||||
_displayfunction = LCD_8BITMODE | LCD_1LINE | LCD_5x8DOTS;
|
||||
}
|
||||
|
||||
// PUBLIC METHODS
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
//
|
||||
// begin
|
||||
void LiquidCrystal_4bit::begin(uint8_t cols, uint8_t lines, uint8_t dotsize)
|
||||
{
|
||||
if (lines > 1)
|
||||
{
|
||||
_displayfunction |= LCD_2LINE;
|
||||
}
|
||||
_numlines = lines;
|
||||
|
||||
// for some 1 line displays you can select a 10 pixel high font
|
||||
// ------------------------------------------------------------
|
||||
if ((dotsize != 0) && (lines == 1))
|
||||
{
|
||||
_displayfunction |= LCD_5x10DOTS;
|
||||
}
|
||||
|
||||
// SEE PAGE 45/46 FOR INITIALIZATION SPECIFICATION!
|
||||
// according to datasheet, we need at least 40ms after power rises above 2.7V
|
||||
// before sending commands. Arduino can turn on way before 4.5V so we'll wait
|
||||
// 50
|
||||
// ---------------------------------------------------------------------------
|
||||
delayMicroseconds(50000);
|
||||
|
||||
// Now we pull both RS and R/W low to begin commands
|
||||
digitalWrite(_rs_pin, LOW);
|
||||
digitalWrite(_enable_pin, LOW);
|
||||
|
||||
if (_rw_pin != 255)
|
||||
{
|
||||
digitalWrite(_rw_pin, LOW);
|
||||
}
|
||||
|
||||
//put the LCD into 4 bit or 8 bit mode
|
||||
// -------------------------------------
|
||||
if (! (_displayfunction & LCD_8BITMODE))
|
||||
{
|
||||
// this is according to the hitachi HD44780 datasheet
|
||||
// figure 24, pg 46
|
||||
|
||||
// we start in 8bit mode, try to set 4 bit mode
|
||||
write4bits(0x03);
|
||||
delayMicroseconds(4500); // wait min 4.1ms
|
||||
|
||||
// second try
|
||||
write4bits(0x03);
|
||||
delayMicroseconds(4500); // wait min 4.1ms
|
||||
|
||||
// third go!
|
||||
write4bits(0x03);
|
||||
delayMicroseconds(150);
|
||||
|
||||
// finally, set to 4-bit interface
|
||||
write4bits(0x02);
|
||||
}
|
||||
else
|
||||
{
|
||||
// this is according to the hitachi HD44780 datasheet
|
||||
// page 45 figure 23
|
||||
|
||||
// Send function set command sequence
|
||||
command(LCD_FUNCTIONSET | _displayfunction);
|
||||
delayMicroseconds(4500); // wait more than 4.1ms
|
||||
|
||||
// second try
|
||||
command(LCD_FUNCTIONSET | _displayfunction);
|
||||
delayMicroseconds(150);
|
||||
|
||||
// third go
|
||||
command(LCD_FUNCTIONSET | _displayfunction);
|
||||
}
|
||||
|
||||
// finally, set # lines, font size, etc.
|
||||
command(LCD_FUNCTIONSET | _displayfunction);
|
||||
|
||||
// turn the display on with no cursor or blinking default
|
||||
_displaycontrol = LCD_DISPLAYON | LCD_CURSOROFF | LCD_BLINKOFF;
|
||||
display();
|
||||
|
||||
// clear the LCD
|
||||
clear();
|
||||
|
||||
// Initialize to default text direction (for romance languages)
|
||||
_displaymode = LCD_ENTRYLEFT | LCD_ENTRYSHIFTDECREMENT;
|
||||
// set the entry mode
|
||||
command(LCD_ENTRYMODESET | _displaymode);
|
||||
|
||||
}
|
||||
|
||||
/************ low level data pushing commands **********/
|
||||
|
||||
// send
|
||||
void LiquidCrystal_4bit::send(uint8_t value, uint8_t mode)
|
||||
{
|
||||
digitalWrite(_rs_pin, mode);
|
||||
|
||||
// if there is a RW pin indicated, set it low to Write
|
||||
// ---------------------------------------------------
|
||||
if (_rw_pin != 255)
|
||||
{
|
||||
digitalWrite(_rw_pin, LOW);
|
||||
}
|
||||
|
||||
if (_displayfunction & LCD_8BITMODE)
|
||||
{
|
||||
write8bits(value);
|
||||
}
|
||||
else
|
||||
{
|
||||
write4bits(value>>4);
|
||||
write4bits(value);
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// pulseEnable
|
||||
void LiquidCrystal_4bit::pulseEnable(void)
|
||||
{
|
||||
digitalWrite(_enable_pin, LOW);
|
||||
delayMicroseconds(1);
|
||||
|
||||
digitalWrite(_enable_pin, HIGH);
|
||||
delayMicroseconds(1); // enable pulse must be > 450ns
|
||||
|
||||
digitalWrite(_enable_pin, LOW);
|
||||
delayMicroseconds(100); // commands need > 37us to settle
|
||||
}
|
||||
|
||||
//
|
||||
// write4bits
|
||||
void LiquidCrystal_4bit::write4bits(uint8_t value)
|
||||
{
|
||||
for (uint8_t i = 0; i < 4; i++)
|
||||
{
|
||||
digitalWrite(_data_pins[i], (value >> i) & 0x01);
|
||||
}
|
||||
|
||||
pulseEnable();
|
||||
}
|
||||
|
||||
//
|
||||
// write8bits
|
||||
void LiquidCrystal_4bit::write8bits(uint8_t value)
|
||||
{
|
||||
for (uint8_t i = 0; i < 8; i++)
|
||||
{
|
||||
digitalWrite(_data_pins[i], (value >> i) & 0x01);
|
||||
}
|
||||
|
||||
pulseEnable();
|
||||
}
|
||||
@@ -1,135 +0,0 @@
|
||||
// ---------------------------------------------------------------------------
|
||||
// Created by Francisco Malpartida on 20/08/11.
|
||||
// Copyright 2011 - Under creative commons license 3.0:
|
||||
// Attribution-ShareAlike CC BY-SA
|
||||
//
|
||||
// This software is furnished "as is", without technical support, and with no
|
||||
// warranty, express or implied, as to its usefulness for any purpose.
|
||||
//
|
||||
// Thread Safe: No
|
||||
// Extendable: Yes
|
||||
//
|
||||
// @file LiquidCrystal_4bit.h
|
||||
// This file implements a basic liquid crystal library that comes as standard
|
||||
// in the Arduino SDK.
|
||||
//
|
||||
// @brief
|
||||
// This is a basic implementation of the LiquidCrystal library of the
|
||||
// Arduino SDK. The original library has been reworked in such a way that
|
||||
// this class implements the all methods to command an LCD based
|
||||
// on the Hitachi HD44780 and compatible chipsets using the parallel port of
|
||||
// the LCD (4 bit and 8 bit).
|
||||
//
|
||||
// The functionality provided by this class and its base class is identical
|
||||
// to the original functionality of the Arduino LiquidCrystal library.
|
||||
//
|
||||
//
|
||||
// This library is only compatible with Arduino's SDK version 1.0
|
||||
//
|
||||
//
|
||||
// @author F. Malpartida - fmalpartida@gmail.com
|
||||
// ---------------------------------------------------------------------------
|
||||
#ifndef LiquidCrystal_4bit_h
|
||||
#define LiquidCrystal_4bit_h
|
||||
|
||||
#include <inttypes.h>
|
||||
#include <LiquidCrystal.h>
|
||||
|
||||
|
||||
class LiquidCrystal_4bit : public LiquidCrystal
|
||||
{
|
||||
public:
|
||||
/*!
|
||||
@method
|
||||
@abstract 8 bit LCD constructors.
|
||||
@discussion Defines the pin assignment that the LCD will have.
|
||||
The constructor does not initialize the LCD.
|
||||
*/
|
||||
LiquidCrystal_4bit(uint8_t rs, uint8_t enable,
|
||||
uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3,
|
||||
uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7);
|
||||
LiquidCrystal_4bit(uint8_t rs, uint8_t rw, uint8_t enable,
|
||||
uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3,
|
||||
uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7);
|
||||
|
||||
/*!
|
||||
@method
|
||||
@abstract 4 bit LCD constructors.
|
||||
@discussion Defines the pin assignment that the LCD will have.
|
||||
The constructor does not initialize the LCD.
|
||||
*/
|
||||
LiquidCrystal_4bit(uint8_t rs, uint8_t rw, uint8_t enable,
|
||||
uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3);
|
||||
LiquidCrystal_4bit(uint8_t rs, uint8_t enable,
|
||||
uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3);
|
||||
|
||||
|
||||
/*!
|
||||
@function
|
||||
@abstract LCD initialization.
|
||||
@discussion Initializes the LCD to a given size (col, row). This methods
|
||||
initializes the LCD, therefore, it MUST be called prior to using any other
|
||||
method from this class.
|
||||
|
||||
@param cols: the number of columns that the display has
|
||||
@param rows: the number of rows that the display has
|
||||
@param charsize: size of the characters of the LCD: LCD_5x8DOTS or
|
||||
LCD_5x10DOTS.
|
||||
*/
|
||||
virtual void begin(uint8_t cols, uint8_t rows, uint8_t charsize = LCD_5x8DOTS);
|
||||
|
||||
/*!
|
||||
@function
|
||||
@abstract Send a particular value to the LCD.
|
||||
@discussion Sends a particular value to the LCD for writing to the LCD or
|
||||
as an LCD command.
|
||||
|
||||
Users should never call this method.
|
||||
|
||||
@param value Value to send to the LCD.
|
||||
@result mode LOW - write to the LCD CGRAM, HIGH - write a command to
|
||||
the LCD.
|
||||
*/
|
||||
virtual void send(uint8_t value, uint8_t mode);
|
||||
|
||||
|
||||
private:
|
||||
|
||||
/*!
|
||||
@method
|
||||
@abstract Initializes the LCD pin allocation
|
||||
@discussion Initializes the LCD pin allocation and configuration.
|
||||
*/
|
||||
void init(uint8_t fourbitmode, uint8_t rs, uint8_t rw, uint8_t enable,
|
||||
uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3,
|
||||
uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7);
|
||||
|
||||
/*!
|
||||
@method
|
||||
@abstract Writes an 8 bit value to the LCD.
|
||||
@discussion Writes 8 bits to the LCD control data lines.
|
||||
*/
|
||||
void write8bits(uint8_t value);
|
||||
|
||||
/*!
|
||||
@method
|
||||
@abstract Writes an 4 bit value to the LCD.
|
||||
@discussion Writes 4 bits (the least significant) to the LCD control data lines.
|
||||
*/
|
||||
void write4bits(uint8_t value);
|
||||
|
||||
/*!
|
||||
@method
|
||||
@abstract Pulse the LCD enable line (En).
|
||||
@discussion Sends a pulse of 1 uS to the Enable pin to execute an command
|
||||
or write operation.
|
||||
*/
|
||||
void pulseEnable();
|
||||
|
||||
uint8_t _rs_pin; // LOW: command. HIGH: character.
|
||||
uint8_t _rw_pin; // LOW: write to LCD. HIGH: read from LCD.
|
||||
uint8_t _enable_pin; // activated by a HIGH pulse.
|
||||
uint8_t _data_pins[8]; // Data pins.
|
||||
};
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user