2nd Version-Serial: UART/I2C/SPI Text LCD Display Adapter for 1602/1602/2002/2004/4002 LCD
Backlight be controlled able by software
(This auction EXCLUDE LCD panel in pictures below)
(Please compare the pinout with you display, make sure they are same before purchasing)
Unlike other "Serial Display" which just convert serial input to parallel, Digole's Serial displays and adapters embedded a powerful MCU to process the commands received. Display characters and control back light as you want, all commands are simple, high level and easy to remember!
Programing User Manual
Download Arduino lib and demo code
mbed Library (Thanks for Michael Shimniok to contribute code)
The following vedio show this adapter work with 16pin and 8*2pin LCD
In order to use a Text LCD display, you need connect at least 4 data pins and 2 control pins from your circuit to display, and you also need to spend some time to write code to drive it, in some case, you may need couple of days to deal with it, and it will give you a nightmare when changing to other display.
This control module (adapter) will help you to solve this issue, it can work with most 1602/1604/2002/2004/4002 LCD that config with KS0066U/F / HD44780 and other compatible chips seamlessly, so you can use your display with this module in couple of minutes!(Please ask if you not sure whether or not your LCD is compatible with the adapter)
What benefits you if using these products in you electronic projects?
- Save lots of the I/O resources: these products only need 1 to 3 I/O pins from your master controller that depends on the communication type you want.
- Easy to use: the commands sending to products are easy to remember and understand.
FEATURES:
- Supply voltage: 1.8V to 5.5V
- Communication mode: UART/I2C/SPI, defined by the jumper on board
- Receiving buffer: 64 bytes
- Work with KS0066U/F / HD44780 and other compatible chips
- Work with most 1602/1604/2002/2004/4002 LCD
- 16 Pins with 2.54mm pitch connect to LCD
|
- Low power consumption: 4mA maximum
- Simple command sets, easy to remember
- Default setting: UART baud 9600bps, I2C address is 0x27
- UART baud (bps): 300, 1200, 2400, 4800, 9600, 14400, 19200, 28800, 38400, 57600, 115200, selected by software
- Manual, Arduino lib, sample code download here
- Turn backlight on/off by software to save energy
|
Work with 2002 LCD (double row 8x2 pin)
Work on 1602 LCD (single row 16pin)
Pinout of module connect to LCD display:
PIN |
Description |
PIN |
Description |
1 |
VSS Ground of circuit |
2 |
VDD Power Supply |
3 |
V0 |
4 |
RS |
5 |
R/W |
6 |
E |
7 |
DB0 or D0 |
8 |
DB1 or D1 |
9 |
DB2 or D2 |
10 |
DB3 or D3 |
11 |
DB4 or D4 |
12 |
DB5 or D5 |
13 |
DB6 or D6 |
14 |
DB7 or D7 |
15 |
BLA or A, + power supply for backlit
|
16 |
BLK or K, - power supply for backlit |
Pinout of this module connect to MCU:
PIN |
Description |
PIN |
Description |
1 |
GND (0V) |
2 |
SS: SPI mode only
chip select control in, low active |
3 |
I2C and SPI mode:
SCK/SCL: Clock in
|
4 |
UART mode:
RX
I2C mode:
SDA
SPI mode:
SDI
|
5 |
VCC: power supply
1.8V to 5.5V depends on you LCD |
|
|
Character/Graphic Display Shared Command: (B-one byte, B…-Bytes)
Command
|
Description
|
Arduino lib function
|
note
|
CL
|
CLear screen and set the display position to first Column and first Row (x=0.y=0), for graphic LCD, it also set the font to default and turn off the cursor.
|
clearScreen();
|
|
CSB
|
set CurSor on/off
|
enableCursor();
disableCursor();
|
|
BLB
|
Set Back Light ON/OFF, B=0 or 1, 0 off, 1 on
|
backLightOn();
backLightOff();
|
Not available on Character Adapter V1
|
DCB
|
Display Config on/off, the factory default set is on, so, when the module is powered up, it will display current communication mode on LCD, after you design finished, you can turn it off
|
displayConfig(0);
displayConfig(1);
|
|
SBB…
|
Set UART Baud, B are ASCII characters, the available values are: “300”, “1200”, “2400”,”4800”, “9600”, “14400”, “19200”, “28800”, “38400”, “57600”,”115200”
|
Set BAUD when initial the class
|
When adapter power up or reset, always start with 9600 Baud
|
SI2CAB
|
Set I2C Address,the default address is 0x27, the adapter will store the new address in memory
|
setI2CAddress(0x34);
|
Change address to 0x34
|
STCRBBBBBB
|
Set Text Columns and Rows, this command will config your LCD if other than 1602 and the chip is other than KS0066U/F / HD44780
|
setLCDColRow(20,4);
|
The last 4 B should be“\x80\xC0\x94\xD4”
|
TPBB
|
set Text Position for following display
|
setPrintPos(6,1);
|
This will affect the following “TT” command
|
TTB…
|
display TexT string, the text will wraped in next row if the current row fulled, the Text Postion will be changed to the last char displyed, this command ended by 0x00 or 0x0D received
|
print(string);
print(int);
print(char);
print(float);
print(double);
drawStr(x,y,string);
|
The print function in Arduino, also can print other data and format the out put.
|
MCDB
|
Manual CommanD: send command B to display bypass the adapter
|
directCommand(0xaf);
|
Use it if you want to control the display directly
|
MDTB
|
Manual DaTa: send data B to display bypass the adapter
|
directData(0x88);
|
Same as above
|
Arduino Sample Code(download here):
#include <DigoleSerial.h>
#include <Wire.h>
DigoleSerialDisp mydisp(&Serial, 9600); //Pin 1(TX)on arduino to RX on module
//DigoleSerialDisp mydisp(&Wire,'\x27'); //SDA (data line) is on analog input pin 4, and SCL (clock line) is on analog input pin 5
//DigoleSerialDisp mydisp(8,9,10); //Pin 8: data, 9:clock, 10: SS, you can assign 255 to SS, and hard ground SS pin on module
#define LCDCol 16
#define LCDRow 2
int ptr;
const char a[] = "disp char array";
const char b = 'Q';
int c = 3456;
String d = "I'm a string";
float pi = 3.1415926535;
double lg10;
void setup() {
mydisp.begin();
/*----------for text LCD adapter and graphic LCD adapter ------------*/
mydisp.clearScreen(); //CLear screen
//mydisp.displayConfig(1); //set config display ON, 0=off
//mydisp.setI2CAddress(0x29); //this function only working when you connect using I2C, from 1 to 127
//delay(1000);
//mydisp.setLCDColRow(16,2); //set LCD Col and Row, only time set up is OK
mydisp.disableCursor(); //disable cursor, enable cursore use: enableCursor();
mydisp.drawStr(4, 0, "Demo now"); //display string at: x=4, y=0
//Test print function
mydisp.setPrintPos(0, 1);
mydisp.print(a); // display a char array
resetpos();
mydisp.print("display a char:");
mydisp.print(b); //display a char
resetpos();
mydisp.print("int as DEC:");
mydisp.print(c); //display 3456 in Dec
resetpos();
mydisp.print("as HEX:");
mydisp.print(c, HEX); //display 3456 in Hex
resetpos();
mydisp.print("as OCT:");
mydisp.print(c, OCT); //display 3456 in Oct
resetpos();
mydisp.print("BIN:");
mydisp.print(c, BIN); //display 3456 in Bin
resetpos();
mydisp.print(d); //display String object
resetpos();
mydisp.print("float pi=");
mydisp.print(pi); //display float of PI
resetpos();
mydisp.print("Pi6=");
mydisp.print(pi, 6); //display PI in 6 Accuracy
resetpos();
mydisp.print("Pi*3=");
mydisp.print(pi * 3, 6); //display PI time 3 in 6 Accuracy
resetpos();
mydisp.print("lg5=");
mydisp.print(log(5), 8); //display log(5) in 8 Accuracy
resetpos();
for (uint8_t j = 0; j < 4; j++) //making "Hello" string moving
{
for (uint8_t i = 0; i < 10; i++) //move string to right
{
mydisp.setPrintPos(i, 1);
mydisp.print(" Hello ");
delay(100); //delay 100ms
}
for (uint8_t i = 0; i < 10; i++) //move string to left
{
mydisp.setPrintPos(9 - i, 1);
mydisp.print(" Hello ");
delay(100);
}
}
mydisp.print("Enjoy it!");
mydisp.enableCursor(); //enable cursor
}
void resetpos(void) //for demo use, reset display position and clean the demo line
{
mydisp.setPrintPos(0, 1);
delay(2000); //delay 2 seconds
mydisp.println(" "); //display space, use to clear the demo line
mydisp.setPrintPos(0, 1);
}
void loop() {
}
|