Вы находитесь на странице: 1из 10

Serie LCD monocromtica

LCD 3310
INTRODUCCIN.

Seccin LCD-M4-01
Revisin: 03
Junio 2013

Serie LCD monocromtica

LCD 3310

Seccin LCD-M4-01
Revisin: 03
Junio 2013

Serie LCD monocromtica

LCD 3310

Seccin LCD-M4-01
Revisin: 03
Junio 2013

Serie LCD monocromtica

Seccin LCD-M4-01
Revisin: 03
Junio 2013

LCD 3310
Hola Amigos
CDIGO:
//
///*
ejemplo01_lcd5110.pde
Este Cdigo tiene caractersticas adicionales
incluyendo una funcin de posicionamiento XY en la
pantalla
y una funcin Dibuja la linea de Nokia 3310 LCD
It is modded from the original
http://playground.arduino.cc/Code/PCD8544
*/
// Mods by Jim Park
// jim(^dOt^)buzz(^aT^)gmail(^dOt^)com
//
// hope it works for you
#define PIN_SCE 7 // LCD CS .... Pin 3
#define PIN_RESET 6 // LCD RST .... Pin 1
#define PIN_DC 5 // LCD Dat/Com. Pin 5
#define PIN_SDIN 4 // LCD SPIDat . Pin 6
#define PIN_SCLK 3 // LCD SPIClk . Pin 4
// LCD Gnd .... Pin 2
// LCD Vcc .... Pin 8
// LCD Vlcd ... Pin 7
#define LCD_C LOW
#define LCD_D HIGH
#define LCD_X 84
#define LCD_Y 48
#define LCD_CMD 0
int a = 0;
static const byte ASCII[][5] = {
{0x00, 0x00, 0x00, 0x00, 0x00} // 20
,{0x00, 0x00, 0x5f, 0x00, 0x00} // 21
,{0x00, 0x07, 0x00, 0x07, 0x00} // 22
,{0x14, 0x7f, 0x14, 0x7f, 0x14} // 23
,{0x24, 0x2a, 0x7f, 0x2a, 0x12} // 24
,{0x23, 0x13, 0x08, 0x64, 0x62} // 25
,{0x36, 0x49, 0x55, 0x22, 0x50} // 26
,{0x00, 0x05, 0x03, 0x00, 0x00} // 27
,{0x00, 0x1c, 0x22, 0x41, 0x00} // 28
,{0x00, 0x41, 0x22, 0x1c, 0x00} // 29
,{0x14, 0x08, 0x3e, 0x08, 0x14} // 2a
,{0x08, 0x08, 0x3e, 0x08, 0x08} // 2b
,{0x00, 0x50, 0x30, 0x00, 0x00} // 2c
,{0x08, 0x08, 0x08, 0x08, 0x08} // 2d
,{0x00, 0x60, 0x60, 0x00, 0x00} // 2e
,{0x20, 0x10, 0x08, 0x04, 0x02} // 2f
,{0x3e, 0x51, 0x49, 0x45, 0x3e} // 30
,{0x00, 0x42, 0x7f, 0x40, 0x00} // 31
,{0x42, 0x61, 0x51, 0x49, 0x46} // 32
,{0x21, 0x41, 0x45, 0x4b, 0x31} // 33
,{0x18, 0x14, 0x12, 0x7f, 0x10} // 34
,{0x27, 0x45, 0x45, 0x45, 0x39} // 35
,{0x3c, 0x4a, 0x49, 0x49, 0x30} // 36
,{0x01, 0x71, 0x09, 0x05, 0x03} // 37
,{0x36, 0x49, 0x49, 0x49, 0x36} // 38
,{0x06, 0x49, 0x49, 0x29, 0x1e} // 39
,{0x00, 0x36, 0x36, 0x00, 0x00} // 3a
,{0x00, 0x56, 0x36, 0x00, 0x00} // 3b
,{0x08, 0x14, 0x22, 0x41, 0x00} // 3c
,{0x14, 0x14, 0x14, 0x14, 0x14} // 3d
,{0x00, 0x41, 0x22, 0x14, 0x08} // 3e
,{0x02, 0x01, 0x51, 0x09, 0x06} // 3f
,{0x32, 0x49, 0x79, 0x41, 0x3e} // 40
,{0x7e, 0x11, 0x11, 0x11, 0x7e} // 41
,{0x7f, 0x49, 0x49, 0x49, 0x36} // 42
,{0x3e, 0x41, 0x41, 0x41, 0x22} // 43

!
"
#
$
%
&
'
(
)
*
+
,
.
/
0
1
2
3
4
5
6
7
8
9
:
;
<
=
>
?
@
A
B
C

,{0x7f,
,{0x7f,
,{0x7f,
,{0x3e,
,{0x7f,
,{0x00,
,{0x20,
,{0x7f,
,{0x7f,
,{0x7f,
,{0x7f,
,{0x3e,
,{0x7f,
,{0x3e,
,{0x7f,
,{0x46,
,{0x01,
,{0x3f,
,{0x1f,
,{0x3f,
,{0x63,
,{0x07,
,{0x61,
,{0x00,
,{0x02,
,{0x00,
,{0x04,
,{0x40,
,{0x00,
,{0x20,
,{0x7f,
,{0x38,
,{0x38,
,{0x38,
,{0x08,
,{0x0c,
,{0x7f,
,{0x00,
,{0x20,
,{0x7f,
,{0x00,
,{0x7c,
,{0x7c,
,{0x38,
,{0x7c,
,{0x08,
,{0x7c,
,{0x48,
,{0x04,
,{0x3c,
,{0x1c,
,{0x3c,
,{0x44,
,{0x0c,
,{0x44,
,{0x00,
,{0x00,
,{0x00,
,{0x10,
,{0x00,
};

0x41,
0x49,
0x09,
0x41,
0x08,
0x41,
0x40,
0x08,
0x40,
0x02,
0x04,
0x41,
0x09,
0x41,
0x09,
0x49,
0x01,
0x40,
0x20,
0x40,
0x14,
0x08,
0x51,
0x7f,
0x04,
0x41,
0x02,
0x40,
0x01,
0x54,
0x48,
0x44,
0x44,
0x54,
0x7e,
0x52,
0x08,
0x44,
0x40,
0x10,
0x41,
0x04,
0x08,
0x44,
0x14,
0x14,
0x08,
0x54,
0x3f,
0x40,
0x20,
0x40,
0x28,
0x50,
0x64,
0x08,
0x00,
0x41,
0x08,
0x06,

0x41,
0x49,
0x09,
0x49,
0x08,
0x7f,
0x41,
0x14,
0x40,
0x0c,
0x08,
0x41,
0x09,
0x51,
0x19,
0x49,
0x7f,
0x40,
0x40,
0x38,
0x08,
0x70,
0x49,
0x41,
0x08,
0x41,
0x01,
0x40,
0x02,
0x54,
0x44,
0x44,
0x44,
0x54,
0x09,
0x52,
0x04,
0x7d,
0x44,
0x28,
0x7f,
0x18,
0x04,
0x44,
0x14,
0x14,
0x04,
0x54,
0x44,
0x40,
0x40,
0x30,
0x10,
0x50,
0x54,
0x36,
0x7f,
0x36,
0x08,
0x09,

0x22,
0x49,
0x09,
0x49,
0x08,
0x41,
0x3f,
0x22,
0x40,
0x02,
0x10,
0x41,
0x09,
0x21,
0x29,
0x49,
0x01,
0x40,
0x20,
0x40,
0x14,
0x08,
0x45,
0x41,
0x10,
0x7f,
0x02,
0x40,
0x04,
0x54,
0x44,
0x44,
0x48,
0x54,
0x01,
0x52,
0x04,
0x40,
0x3d,
0x44,
0x40,
0x04,
0x04,
0x44,
0x14,
0x18,
0x04,
0x54,
0x40,
0x20,
0x20,
0x40,
0x28,
0x50,
0x4c,
0x41,
0x00,
0x08,
0x10,
0x09,

0x1c}
0x41}
0x01}
0x7a}
0x7f}
0x00}
0x01}
0x41}
0x40}
0x7f}
0x7f}
0x3e}
0x06}
0x5e}
0x46}
0x31}
0x01}
0x3f}
0x1f}
0x3f}
0x63}
0x07}
0x43}
0x00}
0x20}
0x00}
0x04}
0x40}
0x00}
0x78}
0x38}
0x20}
0x7f}
0x18}
0x02}
0x3e}
0x78}
0x00}
0x00}
0x00}
0x00}
0x78}
0x78}
0x38}
0x08}
0x7c}
0x08}
0x20}
0x20}
0x7c}
0x1c}
0x3c}
0x44}
0x3c}
0x44}
0x00}
0x00}
0x00}
0x08}
0x06}

//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//

44
45
46
47
48
49
4a
4b
4c
4d
4e
4f
50
51
52
53
54
55
56
57
58
59
5a
5b
5c
5d
5e
5f
60
61
62
63
64
65
66
67
68
69
6a
6b
6c
6d
6e
6f
70
71
72
73
74
75
76
77
78
79
7a
7b
7c
7d
7e
7f

D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
S
T
U
V
W
X
Y
Z
[

]
^
_
`
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
{
|
}

void LcdCharacter(char character) {


LcdWrite(LCD_D, 0x00);
for (int index = 0; index < 5; index++) {
LcdWrite(LCD_D, ASCII[character - 0x20][index]);
}
LcdWrite(LCD_D, 0x00);
}

Serie LCD monocromtica

Seccin LCD-M4-01
Revisin: 03
Junio 2013

LCD 3310
void LcdClear(void) {
for (int index = 0; index < LCD_X * LCD_Y / 8;
index++) {
LcdWrite(LCD_D, 0x00);
}
}
void LcdInitialise(void) {
pinMode(PIN_SCE, OUTPUT);
pinMode(PIN_RESET, OUTPUT);
pinMode(PIN_DC, OUTPUT);
pinMode(PIN_SDIN, OUTPUT);
pinMode(PIN_SCLK, OUTPUT);
digitalWrite(PIN_RESET, LOW);
delay(1);
digitalWrite(PIN_RESET, HIGH);
LcdWrite( LCD_CMD, 0x21
LcdWrite( LCD_CMD, 0xBf
//B1
LcdWrite( LCD_CMD, 0x04
//0x04
LcdWrite( LCD_CMD, 0x14
//0x13
LcdWrite( LCD_CMD, 0x0C
para invertir
LcdWrite(LCD_C, 0x20);
LcdWrite(LCD_C, 0x0C);
}

); // LCD Extended Commands.


); // Set LCD Vop (Contrast).
); // Set Temp coefficent.
); // LCD bias mode 1:48.
); // LCD en modo normal; 0x0D

void LcdString(char *characters) {


while (*characters) {
LcdCharacter(*characters++);
}
}
void LcdWrite(byte dc, byte data) {
digitalWrite(PIN_DC, dc);
digitalWrite(PIN_SCE, LOW);
shiftOut(PIN_SDIN, PIN_SCLK, MSBFIRST, data);
digitalWrite(PIN_SCE, HIGH);
}
// gotoXY routina para posicionar cursor
// x - range: 0 to 84
// y - range: 0 to 5
void gotoXY(int x, int y) {
LcdWrite( 0, 0x80 | x); // Column.
LcdWrite( 0, 0x40 | y); // Row.
}
void drawLine(void) {
unsigned char j;
for(j=0; j< 84; j++) { // top
gotoXY (j,0);
LcdWrite (1,0x01);
}
for(j=0; j< 84; j++) { //Bottom
gotoXY (j,5);
LcdWrite (1,0x80);
}
for(j=0; j< 6; j++) { // Right

gotoXY (83,j);
LcdWrite (1,0xff);
}
for(j=0; j< 6; j++) { // Left
gotoXY (0,j);
LcdWrite (1,0xff);
}
}
void setup(void) {
LcdInitialise();
LcdClear();
}
void loop(void) {
// Muestra algunos caracteres animados simples
//
int a,b;
char Str[15];
// Dibuja un Cuadro
for(b=1000; b>0; b--){
drawLine();
for(a=0; a< =5 ; a++){
gotoXY(4,1);
// Mete texto en Cuadro
LcdString ("TestDisplay");
gotoXY(2,3);
LcdCharacter('=');
LcdCharacter('H');
LcdCharacter('O');
LcdCharacter('L');
LcdCharacter('A');
LcdCharacter(' ');
LcdCharacter('A');
LcdCharacter('M');
LcdCharacter('I');
LcdCharacter('G');
LcdCharacter('O');
LcdCharacter('=');
//Dibuja = en esta posicion
gotoXY(2,5);
LcdCharacter('-');
delay(1 *1000);
gotoXY(2,3);
LcdCharacter('-');
LcdCharacter('h');
LcdCharacter('o');
LcdCharacter('l');
LcdCharacter('a');
LcdCharacter(' ');
LcdCharacter('a');
LcdCharacter('m');
LcdCharacter('i');
LcdCharacter('g');
LcdCharacter('o');
LcdCharacter('-');
// Dibuja _ en esta posicion
gotoXY(2,5);
LcdCharacter('_');
delay(.6* 1000);
}
}
}

Serie LCD monocromtica

LCD 3310
Analicemos un poco de cdigo.

#define
#define
#define
#define
#define

PIN_SCE 7
PIN_RESET 6
PIN_DC 5
PIN_SDIN 4
PIN_SCLK 3

//
//
//
//
//

LCD
LCD
LCD
LCD
LCD

CS .... Pin 3
RST .... Pin 1
Dat/Com. Pin 5
SPIDat . Pin 6
SPIClk . Pin 4

void LcdInitialise(void) {
pinMode(PIN_SCE,
OUTPUT);
pinMode(PIN_RESET, OUTPUT);
pinMode(PIN_DC,
OUTPUT);
pinMode(PIN_SDIN, OUTPUT);
pinMode(PIN_SCLK, OUTPUT);
digitalWrite(PIN_RESET, LOW);
delay(1);
digitalWrite(PIN_RESET, HIGH);
LcdWrite( LCD_CMD, 0x21
LcdWrite( LCD_CMD, 0xBf
LcdWrite( LCD_CMD, 0x04
LcdWrite( LCD_CMD, 0x14
LcdWrite( LCD_CMD, 0x0C
LcdWrite(LCD_C, 0x20);
LcdWrite(LCD_C, 0x0C);

);
);
);
);
);

//
//
//
//
//

LCD
Set
Set
LCD
LCD

Extended Commands.
LCD Vop (Contrast). //B1
Temp coefficent. //0x04
bias mode 1:48. //0x13
en modo normal, 0x0D para invertir

void LcdClear(void) {
for (int index = 0; index < LCD_X * LCD_Y / 8; index++) {
LcdWrite(LCD_D, 0x00);
}
}

void LcdClear(void) {
for (int index = 0; index < LCD_X * LCD_Y; index++) {
LcdWrite(LCD_D, 0x00);
}
}

Seccin LCD-M4-01
Revisin: 03
Junio 2013

Serie LCD monocromtica

Seccin LCD-M4-01
Revisin: 03
Junio 2013

LCD 3310

void gotoXY(int x, int y) {


LcdWrite( 0, 0x80 | x); // Column.
LcdWrite( 0, 0x40 | y); // Row.
}

LCD 3310 completa


CDIGO:
/*
lcd_test2.pde
Este Cdigo tiene caractersticas adicionales para Nokia
3310 LCD
incluyendo una funcin de posicionamiento XY en la
pantalla.
Se modific a partir del original que presenta
http://playground.arduino.cc/Code/PCD8544
//
// Ahora, muestra un mayor potencial para sus proyectos
// Espero que le funcione a usted
// Mods by V. Garca. 25/06/2013.
*/
#include "stdlib.h"
#define PIN_DC 5 // LCD Dat/Com. Pin 5
#define PIN_SCE 7 // LCD CS .... Pin 3
#define PIN_SDIN 4 // LCD SPIDat . Pin 6
#define PIN_RESET 6 // LCD RST .... Pin 1
#define PIN_SCLK 3 // LCD SPIClk . Pin 4
// LCD Gnd .... Pin 2
// LCD Vcc .... Pin 8
// LCD Vlcd ... Pin 7
#define
#define
#define
#define
#define

LCD_C LOW
LCD_D HIGH
LCD_X 95 // 84
LCD_Y 64 // 48
LCD_CMD 0

int progress = 0;
int prev_prog = 0;
int pixels[85][6] = {{0}};
int a = 0;
static const byte ASCII[][5] ={
{0x00, 0x00, 0x00, 0x00, 0x00} // 20
,{0x00, 0x00, 0x5f, 0x00, 0x00} // 21
,{0x00, 0x07, 0x00, 0x07, 0x00} // 22
,{0x14, 0x7f, 0x14, 0x7f, 0x14} // 23
,{0x24, 0x2a, 0x7f, 0x2a, 0x12} // 24
,{0x23, 0x13, 0x08, 0x64, 0x62} // 25
,{0x36, 0x49, 0x55, 0x22, 0x50} // 26
,{0x00, 0x05, 0x03, 0x00, 0x00} // 27
,{0x00, 0x1c, 0x22, 0x41, 0x00} // 28
,{0x00, 0x41, 0x22, 0x1c, 0x00} // 29
,{0x14, 0x08, 0x3e, 0x08, 0x14} // 2a
,{0x08, 0x08, 0x3e, 0x08, 0x08} // 2b
,{0x00, 0x50, 0x30, 0x00, 0x00} // 2c
,{0x08, 0x08, 0x08, 0x08, 0x08} // 2d
,{0x00, 0x60, 0x60, 0x00, 0x00} // 2e
,{0x20, 0x10, 0x08, 0x04, 0x02} // 2f
,{0x3e, 0x51, 0x49, 0x45, 0x3e} // 30
,{0x00, 0x42, 0x7f, 0x40, 0x00} // 31
,{0x42, 0x61, 0x51, 0x49, 0x46} // 32
,{0x21, 0x41, 0x45, 0x4b, 0x31} // 33

!
"
#
$
%
&
'
(
)
*
+
,
.
/
0
1
2
3

,{0x18,
,{0x27,
,{0x3c,
,{0x01,
,{0x36,
,{0x06,
,{0x00,
,{0x00,
,{0x08,
,{0x14,
,{0x00,
,{0x02,
,{0x32,
,{0x7e,
,{0x7f,
,{0x3e,
,{0x7f,
,{0x7f,
,{0x7f,
,{0x3e,
,{0x7f,
,{0x00,
,{0x20,
,{0x7f,
,{0x7f,
,{0x7f,
,{0x7f,
,{0x3e,
,{0x7f,
,{0x3e,
,{0x7f,
,{0x46,
,{0x01,
,{0x3f,
,{0x1f,
,{0x3f,
,{0x63,
,{0x07,
,{0x61,
,{0x00,
,{0x02,
,{0x00,
,{0x04,
,{0x40,
,{0x00,
,{0x20,
,{0x7f,
,{0x38,
,{0x38,
,{0x38,
,{0x08,
,{0x0c,
,{0x7f,
,{0x00,
,{0x20,
,{0x7f,
,{0x00,
,{0x7c,
,{0x7c,

0x14,
0x45,
0x4a,
0x71,
0x49,
0x49,
0x36,
0x56,
0x14,
0x14,
0x41,
0x01,
0x49,
0x11,
0x49,
0x41,
0x41,
0x49,
0x09,
0x41,
0x08,
0x41,
0x40,
0x08,
0x40,
0x02,
0x04,
0x41,
0x09,
0x41,
0x09,
0x49,
0x01,
0x40,
0x20,
0x40,
0x14,
0x08,
0x51,
0x7f,
0x04,
0x41,
0x02,
0x40,
0x01,
0x54,
0x48,
0x44,
0x44,
0x54,
0x7e,
0x52,
0x08,
0x44,
0x40,
0x10,
0x41,
0x04,
0x08,

0x12,
0x45,
0x49,
0x09,
0x49,
0x49,
0x36,
0x36,
0x22,
0x14,
0x22,
0x51,
0x79,
0x11,
0x49,
0x41,
0x41,
0x49,
0x09,
0x49,
0x08,
0x7f,
0x41,
0x14,
0x40,
0x0c,
0x08,
0x41,
0x09,
0x51,
0x19,
0x49,
0x7f,
0x40,
0x40,
0x38,
0x08,
0x70,
0x49,
0x41,
0x08,
0x41,
0x01,
0x40,
0x02,
0x54,
0x44,
0x44,
0x44,
0x54,
0x09,
0x52,
0x04,
0x7d,
0x44,
0x28,
0x7f,
0x18,
0x04,

0x7f,
0x45,
0x49,
0x05,
0x49,
0x29,
0x00,
0x00,
0x41,
0x14,
0x14,
0x09,
0x41,
0x11,
0x49,
0x41,
0x22,
0x49,
0x09,
0x49,
0x08,
0x41,
0x3f,
0x22,
0x40,
0x02,
0x10,
0x41,
0x09,
0x21,
0x29,
0x49,
0x01,
0x40,
0x20,
0x40,
0x14,
0x08,
0x45,
0x41,
0x10,
0x7f,
0x02,
0x40,
0x04,
0x54,
0x44,
0x44,
0x48,
0x54,
0x01,
0x52,
0x04,
0x40,
0x3d,
0x44,
0x40,
0x04,
0x04,

0x10}
0x39}
0x30}
0x03}
0x36}
0x1e}
0x00}
0x00}
0x00}
0x14}
0x08}
0x06}
0x3e}
0x7e}
0x36}
0x22}
0x1c}
0x41}
0x01}
0x7a}
0x7f}
0x00}
0x01}
0x41}
0x40}
0x7f}
0x7f}
0x3e}
0x06}
0x5e}
0x46}
0x31}
0x01}
0x3f}
0x1f}
0x3f}
0x63}
0x07}
0x43}
0x00}
0x20}
0x00}
0x04}
0x40}
0x00}
0x78}
0x38}
0x20}
0x7f}
0x18}
0x02}
0x3e}
0x78}
0x00}
0x00}
0x00}
0x00}
0x78}
0x78}

//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//

34
35
36
37
38
39
3a
3b
3c
3d
3e
3f
40
41
42
43
44
45
46
47
48
49
4a
4b
4c
4d
4e
4f
50
51
52
53
54
55
56
57
58
59
5a
5b
5c
5d
5e
5f
60
61
62
63
64
65
66
67
68
69
6a
6b
6c
6d
6e

4
5
6
7
8
9
:
;
<
=
>
?
@
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
S
T
U
V
W
X
Y
Z
[

]
^
_
`
a
b
c
d
e
f
g
h
i
j
k
l
m
n

Serie LCD monocromtica

Seccin LCD-M4-01
Revisin: 03
Junio 2013

LCD 3310
,{0x38, 0x44, 0x44, 0x44, 0x38} //
,{0x7c, 0x14, 0x14, 0x14, 0x08} //
,{0x08, 0x14, 0x14, 0x18, 0x7c} //
,{0x7c, 0x08, 0x04, 0x04, 0x08} //
,{0x48, 0x54, 0x54, 0x54, 0x20} //
,{0x04, 0x3f, 0x44, 0x40, 0x20} //
,{0x3c, 0x40, 0x40, 0x20, 0x7c} //
,{0x1c, 0x20, 0x40, 0x20, 0x1c} //
,{0x3c, 0x40, 0x30, 0x40, 0x3c} //
,{0x44, 0x28, 0x10, 0x28, 0x44} //
,{0x0c, 0x50, 0x50, 0x50, 0x3c} //
,{0x44, 0x64, 0x54, 0x4c, 0x44} //
,{0x00, 0x08, 0x36, 0x41, 0x00} //
,{0x00, 0x00, 0x7f, 0x00, 0x00} //
,{0x00, 0x41, 0x36, 0x08, 0x00} //
,{0x10, 0x08, 0x08, 0x10, 0x08} //
// ,{0x00, 0x06, 0x09, 0x09, 0x06}
,{0x02, 0x05, 0x02, 0x00, 0x00} //
};

6f
70
71
72
73
74
75
76
77
78
79
7a
7b
7c
7d
7e
//
7f

o
p
q
r
s
t
u
v
w
x
y
z
{
|
}

7f

void LcdCharacter(char character) {


LcdWrite(LCD_D, 0x00);
for (int index = 0; index < 5; index++) {
LcdWrite(LCD_D, ASCII[character - 0x20][index]);
}
LcdWrite(LCD_D, 0x00);
}
void LcdClear(void) {
for (int index = 0; index < LCD_X * LCD_Y; index++) {
LcdWrite(LCD_D, 0x00);
}
}
void LcdInitialise(void) {
pinMode(PIN_SCE, OUTPUT);
pinMode(PIN_RESET, OUTPUT);
pinMode(PIN_DC, OUTPUT);
pinMode(PIN_SDIN, OUTPUT);
pinMode(PIN_SCLK, OUTPUT);
digitalWrite(PIN_RESET, LOW);
delay(1);
digitalWrite(PIN_RESET, HIGH);
LcdWrite( LCD_CMD, 0x21
LcdWrite( LCD_CMD, 0xB9
//B1
LcdWrite( LCD_CMD, 0x04
//0x04
LcdWrite( LCD_CMD, 0x14
//0x13
LcdWrite( LCD_CMD, 0x0C
0x0d for inverse
LcdWrite(LCD_C, 0x20);
LcdWrite(LCD_C, 0x0C);
}

); // LCD Extended Commands.


); // Set LCD Vop (Contrast).

LcdWrite( 0, 0x40 | y); // Row.


}
// Activa o desactivar un pixel especifico
// x: 0 to 84, y: 0 to 48
void setPixel(int x, int y, int d) {
// if (x > 84 || y > 48) { return; }
if (x > 96 || y > 56) { return; }
// El LCD tiene 6 filas, con 8 pxeles por fila.
// 'y_mod' es la fila que el pxel es encendido
// 'y_pix' is the pixel in that row we want to
enable/disable
int y_mod = (int)(y >> 3); // >>3 divides by 8
int y_pix = (y-(y_mod << 3)); // << 3 multiplies by 8
//
int val = 1 << y_pix;
// Tenemos que mantener un seguimiento de los pxeles
son de
// encendido/apagado para escribir el carcter correcto
en la pantalla LCD.
if (d){
pixels[x][y_mod] |= val;
} else {
pixels[x][y_mod] &= ~val;
}
// Write the updated pixel out to the LCD
// TODO Check if the pixel is already in the state
requested,
// if so, don't write to LCD.
gotoXY(x,y_mod);
LcdWrite (1,pixels[x][y_mod]);
}
void drawLine(int x1, int y1, int x2, int y2) {

// Dibuja una linea horizontal de anchura w desde x,y


void drawHorizontalLine(int x, int y, int w){
drawHorizontalLineXY(x,x+w,y);
}
// Draw a horizontal line between x1 and x2 at row y
void drawHorizontalLineXY(int x1, int x2, int y){
for (int i=x1;i<=x2;i++) {
setPixel(i,y,1);
}
}

); // Set Temp coefficent.


); // LCD bias mode 1:48.
); // LCD in 0x0C normal mode.

void LcdString(char *characters) {


while (*characters) {
LcdCharacter(*characters++);
}
}
void LcdWrite(byte dc, byte data) {
digitalWrite(PIN_DC, dc);
digitalWrite(PIN_SCE, LOW);
shiftOut(PIN_SDIN, PIN_SCLK, MSBFIRST, data);
digitalWrite(PIN_SCE, HIGH);
}
// gotoXY routine to position cursor
// x - range: 0 to 84
// y - range: 0 to 5
void gotoXY(int x, int y) {
LcdWrite( 0, 0x80 | x); // Column.

// Draw a vertical line of height h from x,y


void drawVerticalLine(int x, int y, int h){
drawVerticalLineXY(y,y+h,x);
}
// Draw a vertical line from y1 to y2 on column x
void drawVerticalLineXY(int y1, int y2, int x){
for (int i=y1;i<=y2;i++) {
setPixel(x,i,1);
}
}
void clearPixels() {
for (int x=0;x<83;x++) {
for(int y=0;y<47;y++) {
pixels[x][y] = 0;
}
}
}
// Draw a rectangle of width w and height h from x,y
void drawRect(int x, int y, int w, int h) {
drawHorizontalLineXY(x,x+w,y);
drawHorizontalLineXY(x,x+w,y+h);
drawVerticalLineXY(y,y+h,x);
drawVerticalLineXY(y,y+h,x+w);
}
// ***** aado *******
void initProgressBar() {
LcdClear();

Serie LCD monocromtica

Seccin LCD-M4-01
Revisin: 03
Junio 2013

LCD 3310
clearPixels();
drawRect(10,21, 64, 5);

delay(25);
}
LcdClear();
clearPixels();

}
void setProgressBar(int value) {
int startValue = ((float)prev_prog/100.0)*64;
int newValue = ((float)value/100.0)*64;
if (newValue < startValue) { startValue = 0; }
int pb_x = 10;
int pb_y = 21;
for (int i=startValue;i<newValue;i++) {
drawVerticalLine(pb_x+i,pb_y,5);
}
prev_prog = value;
}
// ********hasta aqui *****
void setup(void) {
LcdInitialise();
initProgressBar();
while (progress < 100) {
progress++;
setProgressBar(progress);

int progress = 0;
int prev_prog = 0;
int pixels[85][6] = {{0}};

void initProgressBar() {
LcdClear();
clearPixels();
drawRect(10,21, 64, 5);
}
void setProgressBar(int value) {
int startValue = ((float)prev_prog/100.0)*64;
int newValue = ((float)value/100.0)*64;
if (newValue < startValue) { startValue = 0; }
int pb_x = 10;
int pb_y = 21;
for (int i=startValue;i<newValue;i++) {
drawVerticalLine(pb_x+i,pb_y,5);
}
prev_prog = value;
}

}
void loop(void) {
gotoXY(4,0); //Poner el texto en la pantalla
LcdString ("TestDisplay");
gotoXY(0,1);
LcdString ("Este ejemplo");
gotoXY(0,2);
LcdString ("lcdtest.pde");
gotoXY(0,3);
LcdString ("funciona bien");
gotoXY(8,4);
LcdString ("Este LCD3310 ");
gotoXY(0,5);
LcdString ("realmente ");
gotoXY(0,6);
LcdString ("tiene 95x64 px");
gotoXY(0,7);
LcdString ("fijate bien");
}

Serie LCD monocromtica

LCD 3310
Exencin de responsabilidad:

Seccin LCD-M4-01
Revisin: 03
Junio 2013