Arduino LCD1602字符液晶扩展板,PCB沉金工艺加工,用料十足,主板采用全新优质2行16个字符液晶,不仅具有对比度调节旋钮、背光灯选择开关,还具4个方向按键、1个选择按键和一个复位按键;这款1602液晶扩展板真正意义上的将电路简化,直接将此板插Arduino Duemilanove控制器上即可.
规格参数
1.模块尺寸:20.5mm×41mm
2.模块重量:57g
1602字符型LCD简介
1602LCD主要技术参数:
1.显示容量:16×2个字符
2.芯片工作电压:4.5—5.5V
3.工作电流:2.0mA(5.0V)
4.模块最佳工作电压:5.0V
5.字符尺寸:2.95×4.35(W×H)mm
1 VSS电源地9 D2数据
2 VDD电源正极10 D3数据
3 VL液晶显示偏压11 D4数据
4 RS数据/命令选择12 D5数据
5 R/W读/写选择13 D6数据
6 E使能信号14 D7数据
7 D0数据15 BLA背光源正极
8 D1数据16 BLK背光源负极
第1脚:VSS为地电源。
第2脚:VDD接5V正电源。
第3脚:VL为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比度
最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度。
第4脚:RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。
第5脚:R/W为读写信号线,高电平时进行读操作,低电平时进行写操作。当RS
和R/W共同为低电平时可以写入指令或者显示地址,当RS为低电平R/W为高电平时
可以读忙信号,当RS为高电平R/W为低电平时可以写入数据。
第6脚:E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。
第7~14脚:D0~D7为8位双向数据线。
第15脚:背光源正极。
第16脚:背光源负极。
1602LCD的指令说明:
1602液晶模块内部的控制器共有11条控制指令,如表下表所示:
序号指令RS R/W D7 D6 D5 D4 D3 D2 D1 D0
1清屏0 0 0 0 0 0 0 0 0 1
2光标返回0 0 0 0 0 0 0 0 1 *
3置输入模式0 0 0 0 0 0 0 1 I/D S
4显示开/关控制0 0 0 0 0 0 1 D C B
5光标或字符移位0 0 0 0 0 1 S/C R/L * *
6置功能0 0 0 0 1 DL N F * *
7置字符发生存贮器地址0 0 0 1字符发生存贮器地址
8置数据存贮器地址0 0 1显示数据存贮器地址
9读忙标志或地址0 1 BF计数器地址
10写数到CGRAM或DDRAM)1 0要写的数据内容
11从CGRAM或DDRAM读数1 1读出的数据内容
1602液晶模块的读写操作、屏幕和光标的操作都是通过指令编程来实现的。(说明:1为高电平、0为低电平)
指令1:清显示,指令码01H,光标复位到地址00H位置。
指令2:光标复位,光标返回到地址00H。
指令3:光标和显示模式设置I/D:光标移动方向,高电平右移,低电平左移S:
屏幕上所有文字是否左移或者右移。高电平表示有效,低电平则无效。
指令4:显示开关控制。D:控制整体显示的开与关,高电平表示开显示,低电
平表示关显示C:控制光标的开与关,高电平表示有光标,低电平表示无光标B:控
制光标是否闪烁,高电平闪烁,低电平不闪烁。
指令5:光标或显示移位S/C:高电平时移动显示的文字,低电平时移动光标。
指令6:功能设置命令DL:高电平时为4位总线,低电平时为8位总线N:低电
平时为单行显示,高电平时双行显示F:低电平时显示5x7的点阵字符,高电平时显示
5x10的点阵字符。
指令7:字符发生器RAM地址设置。
指令8:DDRAM地址设置。
指令9:读忙信号和光标地址BF:为忙标志位,高电平表示忙,此时模块不能接
收命令或者数据,如果为低电平表示不忙。
指令10:写数据。
指令11:读数据。
与HD44780相兼容的芯片时序表如下:
读状态输入RS=L,R/W=H,E=H输出D0—D7=状态字
写指令输入RS=L,R/W=L,D0—D7=指令码,E=高脉冲输出无
读数据输入RS=H,R/W=H,E=H输出D0—D7=数据
写数据输入RS=H,R/W=L,D0—D7=数据,E=高脉冲输出无
1602LCD的一般初始化(复位)过程:
延时15mS
写指令38H(不检测忙信号)
延时5mS
写指令38H(不检测忙信号)
延时5mS
写指令38H(不检测忙信号)
以后每次写指令、读/写数据操作均需要检测忙信号
写指令38H:显示模式设置
写指令08H:显示关闭
写指令01H:显示清屏
写指令06H:显示光标移动设置
写指令0CH:显示开及光标设置
AUDUINO官方例程:
//example use of LCD4Bit_mod library
#include <LCD4Bit_mod.h>
//create object to control an LCD.
//number of lines in display=1
LCD4Bit_mod lcd = LCD4Bit_mod(2);
//Key message
char msgs[5][15] = {"Right Key OK ",
"Up Key OK ",
"Down Key OK ",
"Left Key OK ",
"Select Key OK" };
int adc_key_val[5] ={30, 150, 360, 535, 760 };
int NUM_KEYS = 5;
int adc_key_in;
int key=-1;
int oldkey=-1;
void setup() {
pinMode(13, OUTPUT); //we'll use the debug LED to output a heartbeat
lcd.init();
//optionally, now set up our application-specific display settings, overriding whatever the lcd did in lcd.init()
//lcd.commandWrite(0x0F);//cursor on, display on, blink on. (nasty!)
lcd.clear();
lcd.printIn("KEYPAD testing... pressing");
}
void loop() {
adc_key_in = analogRead(0); // read the value from the sensor
digitalWrite(13, HIGH);
key = get_key(adc_key_in); // convert into key press
if (key != oldkey) // if keypress is detected
{
delay(50); // wait for debounce time
adc_key_in = analogRead(0); // read the value from the sensor
key = get_key(adc_key_in); // convert into key press
if (key != oldkey)
{
oldkey = key;
if (key >=0){
lcd.cursorTo(2, 0); //line=2, x=0
lcd.printIn(msgs[key]);
}
}
}
//delay(1000);
digitalWrite(13, LOW);
}
// Convert ADC value to key number
int get_key(unsigned int input)
{
int k;
for (k = 0; k < NUM_KEYS; k++)
{
if (input < adc_key_val[k])
{
return k;
}
}
if (k >= NUM_KEYS)
k = -1; // No valid key pressed
return k;
}
LCD4Bit_mod.h