User | Revision | Line number | New contents of line |
nguyenmanhthao996tn |
0:bcd95cee2654
|
1
|
#include "LCD5110.h"
|
nguyenmanhthao996tn |
0:bcd95cee2654
|
2
|
|
nguyenmanhthao996tn |
0:bcd95cee2654
|
3
|
/*********** Variables ***********/
|
nguyenmanhthao996tn |
0:bcd95cee2654
|
4
|
static DigitalOut *_clk, *_din, *_ce, *_rst, *_dc, *_light;
|
nguyenmanhthao996tn |
0:bcd95cee2654
|
5
|
|
nguyenmanhthao996tn |
0:bcd95cee2654
|
6
|
void LCD5110_init(PinName clk, PinName din, PinName ce, PinName rst, PinName dc, PinName light)
|
nguyenmanhthao996tn |
0:bcd95cee2654
|
7
|
{
|
nguyenmanhthao996tn |
0:bcd95cee2654
|
8
|
LCD5110_GPIO_Config(clk, din, ce, rst, dc, light);
|
nguyenmanhthao996tn |
0:bcd95cee2654
|
9
|
|
nguyenmanhthao996tn |
0:bcd95cee2654
|
10
|
LCD5110_light_on(); // Light on
|
nguyenmanhthao996tn |
0:bcd95cee2654
|
11
|
LCD5110_DC(1); // LCD_DC = 1;
|
nguyenmanhthao996tn |
0:bcd95cee2654
|
12
|
LCD5110_DIN(1); // SPI_MO = 1;
|
nguyenmanhthao996tn |
0:bcd95cee2654
|
13
|
LCD5110_CLK(1); // SPI_SCK = 1;
|
nguyenmanhthao996tn |
0:bcd95cee2654
|
14
|
LCD5110_CE(1); // SPI_CS = 1;
|
nguyenmanhthao996tn |
0:bcd95cee2654
|
15
|
|
nguyenmanhthao996tn |
0:bcd95cee2654
|
16
|
LCD5110_RST(0); // LCD_RST = 0;
|
nguyenmanhthao996tn |
0:bcd95cee2654
|
17
|
LCD5110_LCD_delay_ms(10);
|
nguyenmanhthao996tn |
0:bcd95cee2654
|
18
|
LCD5110_RST(1); // LCD_RST = 1;
|
nguyenmanhthao996tn |
0:bcd95cee2654
|
19
|
|
nguyenmanhthao996tn |
0:bcd95cee2654
|
20
|
/* LCD Initialize sequence */
|
nguyenmanhthao996tn |
0:bcd95cee2654
|
21
|
LCD5110_LCD_write_byte(0x21, 0);
|
nguyenmanhthao996tn |
0:bcd95cee2654
|
22
|
LCD5110_LCD_write_byte(0xc6, 0);
|
nguyenmanhthao996tn |
0:bcd95cee2654
|
23
|
LCD5110_LCD_write_byte(0x06, 0);
|
nguyenmanhthao996tn |
0:bcd95cee2654
|
24
|
LCD5110_LCD_write_byte(0x13, 0);
|
nguyenmanhthao996tn |
0:bcd95cee2654
|
25
|
LCD5110_LCD_write_byte(0x20, 0);
|
nguyenmanhthao996tn |
0:bcd95cee2654
|
26
|
LCD5110_clear();
|
nguyenmanhthao996tn |
0:bcd95cee2654
|
27
|
LCD5110_LCD_write_byte(0x0c, 0);
|
nguyenmanhthao996tn |
0:bcd95cee2654
|
28
|
}
|
nguyenmanhthao996tn |
0:bcd95cee2654
|
29
|
|
nguyenmanhthao996tn |
0:bcd95cee2654
|
30
|
void LCD5110_LCD_write_byte(unsigned char dat, unsigned char mode)
|
nguyenmanhthao996tn |
0:bcd95cee2654
|
31
|
{
|
nguyenmanhthao996tn |
0:bcd95cee2654
|
32
|
unsigned char i;
|
nguyenmanhthao996tn |
0:bcd95cee2654
|
33
|
|
nguyenmanhthao996tn |
0:bcd95cee2654
|
34
|
/* Simulate SPI Transfer */
|
nguyenmanhthao996tn |
0:bcd95cee2654
|
35
|
LCD5110_CE(0); // SPI_CS = 0;
|
nguyenmanhthao996tn |
0:bcd95cee2654
|
36
|
|
nguyenmanhthao996tn |
0:bcd95cee2654
|
37
|
if (0 == mode)
|
nguyenmanhthao996tn |
0:bcd95cee2654
|
38
|
LCD5110_DC(0); // LCD_DC = 0;
|
nguyenmanhthao996tn |
0:bcd95cee2654
|
39
|
else
|
nguyenmanhthao996tn |
0:bcd95cee2654
|
40
|
LCD5110_DC(1); // LCD_DC = 1;
|
nguyenmanhthao996tn |
0:bcd95cee2654
|
41
|
|
nguyenmanhthao996tn |
0:bcd95cee2654
|
42
|
for (i = 0; i < 8; i++) {
|
nguyenmanhthao996tn |
0:bcd95cee2654
|
43
|
LCD5110_DIN((dat & 0x80) >> 7); // SPI_MO = dat & 0x80;
|
nguyenmanhthao996tn |
0:bcd95cee2654
|
44
|
dat = dat << 1;
|
nguyenmanhthao996tn |
0:bcd95cee2654
|
45
|
LCD5110_CLK(0); // SPI_SCK = 0;
|
nguyenmanhthao996tn |
0:bcd95cee2654
|
46
|
LCD5110_CLK(1); // SPI_SCK = 1;
|
nguyenmanhthao996tn |
0:bcd95cee2654
|
47
|
}
|
nguyenmanhthao996tn |
0:bcd95cee2654
|
48
|
|
nguyenmanhthao996tn |
0:bcd95cee2654
|
49
|
LCD5110_CE(1); // SPI_CS = 1;
|
nguyenmanhthao996tn |
0:bcd95cee2654
|
50
|
}
|
nguyenmanhthao996tn |
0:bcd95cee2654
|
51
|
|
nguyenmanhthao996tn |
0:bcd95cee2654
|
52
|
void LCD5110_write_char(unsigned char c)
|
nguyenmanhthao996tn |
0:bcd95cee2654
|
53
|
{
|
nguyenmanhthao996tn |
0:bcd95cee2654
|
54
|
unsigned char line;
|
nguyenmanhthao996tn |
0:bcd95cee2654
|
55
|
unsigned char ch = 0;
|
nguyenmanhthao996tn |
0:bcd95cee2654
|
56
|
|
nguyenmanhthao996tn |
0:bcd95cee2654
|
57
|
c = c - 32;
|
nguyenmanhthao996tn |
0:bcd95cee2654
|
58
|
|
nguyenmanhthao996tn |
0:bcd95cee2654
|
59
|
for (line = 0; line < 6; line++) {
|
nguyenmanhthao996tn |
0:bcd95cee2654
|
60
|
ch = font6_8[c][line];
|
nguyenmanhthao996tn |
0:bcd95cee2654
|
61
|
LCD5110_LCD_write_byte(ch, 1);
|
nguyenmanhthao996tn |
0:bcd95cee2654
|
62
|
}
|
nguyenmanhthao996tn |
0:bcd95cee2654
|
63
|
}
|
nguyenmanhthao996tn |
0:bcd95cee2654
|
64
|
|
nguyenmanhthao996tn |
0:bcd95cee2654
|
65
|
void LCD5110_write_char_reg(unsigned char c)
|
nguyenmanhthao996tn |
0:bcd95cee2654
|
66
|
{
|
nguyenmanhthao996tn |
0:bcd95cee2654
|
67
|
unsigned char line;
|
nguyenmanhthao996tn |
0:bcd95cee2654
|
68
|
unsigned char ch = 0;
|
nguyenmanhthao996tn |
0:bcd95cee2654
|
69
|
|
nguyenmanhthao996tn |
0:bcd95cee2654
|
70
|
c = c - 32;
|
nguyenmanhthao996tn |
0:bcd95cee2654
|
71
|
|
nguyenmanhthao996tn |
0:bcd95cee2654
|
72
|
for (line = 0; line < 6; line++) {
|
nguyenmanhthao996tn |
0:bcd95cee2654
|
73
|
ch = ~font6_8[c][line];
|
nguyenmanhthao996tn |
0:bcd95cee2654
|
74
|
LCD5110_LCD_write_byte(ch, 1);
|
nguyenmanhthao996tn |
0:bcd95cee2654
|
75
|
}
|
nguyenmanhthao996tn |
0:bcd95cee2654
|
76
|
}
|
nguyenmanhthao996tn |
0:bcd95cee2654
|
77
|
|
nguyenmanhthao996tn |
0:bcd95cee2654
|
78
|
void LCD5110_write_string(char *s)
|
nguyenmanhthao996tn |
0:bcd95cee2654
|
79
|
{
|
nguyenmanhthao996tn |
0:bcd95cee2654
|
80
|
unsigned char ch;
|
nguyenmanhthao996tn |
0:bcd95cee2654
|
81
|
while (*s != '\0') {
|
nguyenmanhthao996tn |
0:bcd95cee2654
|
82
|
ch = *s;
|
nguyenmanhthao996tn |
0:bcd95cee2654
|
83
|
LCD5110_write_char(ch);
|
nguyenmanhthao996tn |
0:bcd95cee2654
|
84
|
s++;
|
nguyenmanhthao996tn |
0:bcd95cee2654
|
85
|
}
|
nguyenmanhthao996tn |
0:bcd95cee2654
|
86
|
}
|
nguyenmanhthao996tn |
0:bcd95cee2654
|
87
|
|
nguyenmanhthao996tn |
0:bcd95cee2654
|
88
|
void LCD5110_clear(void)
|
nguyenmanhthao996tn |
0:bcd95cee2654
|
89
|
{
|
nguyenmanhthao996tn |
0:bcd95cee2654
|
90
|
unsigned char i, j;
|
nguyenmanhthao996tn |
0:bcd95cee2654
|
91
|
for (i = 0; i < 6; i++)
|
nguyenmanhthao996tn |
0:bcd95cee2654
|
92
|
for (j = 0; j < 84; j++)
|
nguyenmanhthao996tn |
0:bcd95cee2654
|
93
|
LCD5110_LCD_write_byte(0, 1);
|
nguyenmanhthao996tn |
0:bcd95cee2654
|
94
|
}
|
nguyenmanhthao996tn |
0:bcd95cee2654
|
95
|
|
nguyenmanhthao996tn |
0:bcd95cee2654
|
96
|
void LCD5110_set_XY(unsigned char X, unsigned char Y)
|
nguyenmanhthao996tn |
0:bcd95cee2654
|
97
|
{
|
nguyenmanhthao996tn |
0:bcd95cee2654
|
98
|
unsigned char x = 6 * X;
|
nguyenmanhthao996tn |
0:bcd95cee2654
|
99
|
|
nguyenmanhthao996tn |
0:bcd95cee2654
|
100
|
/* Set cursor location */
|
nguyenmanhthao996tn |
0:bcd95cee2654
|
101
|
LCD5110_LCD_write_byte(0x40 | Y, 0);
|
nguyenmanhthao996tn |
0:bcd95cee2654
|
102
|
LCD5110_LCD_write_byte(0x80 | x, 0);
|
nguyenmanhthao996tn |
0:bcd95cee2654
|
103
|
}
|
nguyenmanhthao996tn |
0:bcd95cee2654
|
104
|
|
nguyenmanhthao996tn |
0:bcd95cee2654
|
105
|
void LCD5110_write_Dec(unsigned int b)
|
nguyenmanhthao996tn |
0:bcd95cee2654
|
106
|
{
|
nguyenmanhthao996tn |
0:bcd95cee2654
|
107
|
|
nguyenmanhthao996tn |
0:bcd95cee2654
|
108
|
unsigned char datas[4];
|
nguyenmanhthao996tn |
0:bcd95cee2654
|
109
|
|
nguyenmanhthao996tn |
0:bcd95cee2654
|
110
|
datas[0] = b / 1000;
|
nguyenmanhthao996tn |
0:bcd95cee2654
|
111
|
b = b - datas[0] * 1000;
|
nguyenmanhthao996tn |
0:bcd95cee2654
|
112
|
datas[1] = b / 100;
|
nguyenmanhthao996tn |
0:bcd95cee2654
|
113
|
b = b - datas[1] * 100;
|
nguyenmanhthao996tn |
0:bcd95cee2654
|
114
|
datas[2] = b / 10;
|
nguyenmanhthao996tn |
0:bcd95cee2654
|
115
|
b = b - datas[2] * 10;
|
nguyenmanhthao996tn |
0:bcd95cee2654
|
116
|
datas[3] = b;
|
nguyenmanhthao996tn |
0:bcd95cee2654
|
117
|
|
nguyenmanhthao996tn |
0:bcd95cee2654
|
118
|
datas[0] += 48;
|
nguyenmanhthao996tn |
0:bcd95cee2654
|
119
|
datas[1] += 48;
|
nguyenmanhthao996tn |
0:bcd95cee2654
|
120
|
datas[2] += 48;
|
nguyenmanhthao996tn |
0:bcd95cee2654
|
121
|
datas[3] += 48;
|
nguyenmanhthao996tn |
0:bcd95cee2654
|
122
|
|
nguyenmanhthao996tn |
0:bcd95cee2654
|
123
|
LCD5110_write_char(datas[0]);
|
nguyenmanhthao996tn |
0:bcd95cee2654
|
124
|
LCD5110_write_char(datas[1]);
|
nguyenmanhthao996tn |
0:bcd95cee2654
|
125
|
LCD5110_write_char(datas[2]);
|
nguyenmanhthao996tn |
0:bcd95cee2654
|
126
|
LCD5110_write_char(datas[3]);
|
nguyenmanhthao996tn |
0:bcd95cee2654
|
127
|
|
nguyenmanhthao996tn |
0:bcd95cee2654
|
128
|
//a++;
|
nguyenmanhthao996tn |
0:bcd95cee2654
|
129
|
}
|
nguyenmanhthao996tn |
0:bcd95cee2654
|
130
|
|
nguyenmanhthao996tn |
0:bcd95cee2654
|
131
|
void LCD5110_light_on(void)
|
nguyenmanhthao996tn |
0:bcd95cee2654
|
132
|
{
|
nguyenmanhthao996tn |
0:bcd95cee2654
|
133
|
LCD5110_LIGHT(0); // Light on
|
nguyenmanhthao996tn |
0:bcd95cee2654
|
134
|
}
|
nguyenmanhthao996tn |
0:bcd95cee2654
|
135
|
|
nguyenmanhthao996tn |
0:bcd95cee2654
|
136
|
void LCD5110_light_off(void)
|
nguyenmanhthao996tn |
0:bcd95cee2654
|
137
|
{
|
nguyenmanhthao996tn |
0:bcd95cee2654
|
138
|
LCD5110_LIGHT(1); // Light off
|
nguyenmanhthao996tn |
0:bcd95cee2654
|
139
|
}
|
nguyenmanhthao996tn |
0:bcd95cee2654
|
140
|
|
nguyenmanhthao996tn |
0:bcd95cee2654
|
141
|
|
nguyenmanhthao996tn |
0:bcd95cee2654
|
142
|
void LCD5110_LCD_delay_ms(unsigned int t)
|
nguyenmanhthao996tn |
0:bcd95cee2654
|
143
|
{
|
nguyenmanhthao996tn |
0:bcd95cee2654
|
144
|
wait_ms(t);
|
nguyenmanhthao996tn |
0:bcd95cee2654
|
145
|
}
|
nguyenmanhthao996tn |
0:bcd95cee2654
|
146
|
|
nguyenmanhthao996tn |
0:bcd95cee2654
|
147
|
void LCD5110_GPIO_Config(PinName clk, PinName din, PinName ce, PinName rst, PinName dc, PinName light)
|
nguyenmanhthao996tn |
0:bcd95cee2654
|
148
|
{
|
nguyenmanhthao996tn |
0:bcd95cee2654
|
149
|
_clk = new DigitalOut(clk);
|
nguyenmanhthao996tn |
0:bcd95cee2654
|
150
|
_din = new DigitalOut(din);
|
nguyenmanhthao996tn |
0:bcd95cee2654
|
151
|
_ce = new DigitalOut(ce);
|
nguyenmanhthao996tn |
0:bcd95cee2654
|
152
|
_rst = new DigitalOut(rst);
|
nguyenmanhthao996tn |
0:bcd95cee2654
|
153
|
_dc = new DigitalOut(dc);
|
nguyenmanhthao996tn |
0:bcd95cee2654
|
154
|
_light = new DigitalOut(light);
|
nguyenmanhthao996tn |
0:bcd95cee2654
|
155
|
}
|
nguyenmanhthao996tn |
0:bcd95cee2654
|
156
|
|
nguyenmanhthao996tn |
0:bcd95cee2654
|
157
|
void LCD5110_CLK(unsigned char temp)
|
nguyenmanhthao996tn |
0:bcd95cee2654
|
158
|
{
|
nguyenmanhthao996tn |
0:bcd95cee2654
|
159
|
*(_clk) = temp;
|
nguyenmanhthao996tn |
0:bcd95cee2654
|
160
|
}
|
nguyenmanhthao996tn |
0:bcd95cee2654
|
161
|
|
nguyenmanhthao996tn |
0:bcd95cee2654
|
162
|
void LCD5110_DIN(unsigned char temp)
|
nguyenmanhthao996tn |
0:bcd95cee2654
|
163
|
{
|
nguyenmanhthao996tn |
0:bcd95cee2654
|
164
|
*(_din) = temp;
|
nguyenmanhthao996tn |
0:bcd95cee2654
|
165
|
}
|
nguyenmanhthao996tn |
0:bcd95cee2654
|
166
|
|
nguyenmanhthao996tn |
0:bcd95cee2654
|
167
|
void LCD5110_CE(unsigned char temp)
|
nguyenmanhthao996tn |
0:bcd95cee2654
|
168
|
{
|
nguyenmanhthao996tn |
0:bcd95cee2654
|
169
|
*(_ce) = temp;
|
nguyenmanhthao996tn |
0:bcd95cee2654
|
170
|
}
|
nguyenmanhthao996tn |
0:bcd95cee2654
|
171
|
|
nguyenmanhthao996tn |
0:bcd95cee2654
|
172
|
void LCD5110_RST(unsigned char temp)
|
nguyenmanhthao996tn |
0:bcd95cee2654
|
173
|
{
|
nguyenmanhthao996tn |
0:bcd95cee2654
|
174
|
*(_rst) = temp;
|
nguyenmanhthao996tn |
0:bcd95cee2654
|
175
|
}
|
nguyenmanhthao996tn |
0:bcd95cee2654
|
176
|
|
nguyenmanhthao996tn |
0:bcd95cee2654
|
177
|
void LCD5110_DC(unsigned char temp)
|
nguyenmanhthao996tn |
0:bcd95cee2654
|
178
|
{
|
nguyenmanhthao996tn |
0:bcd95cee2654
|
179
|
*(_dc) = temp;
|
nguyenmanhthao996tn |
0:bcd95cee2654
|
180
|
}
|
nguyenmanhthao996tn |
0:bcd95cee2654
|
181
|
|
nguyenmanhthao996tn |
0:bcd95cee2654
|
182
|
void LCD5110_LIGHT(unsigned char temp)
|
nguyenmanhthao996tn |
0:bcd95cee2654
|
183
|
{
|
nguyenmanhthao996tn |
0:bcd95cee2654
|
184
|
*(_light) = temp;
|
nguyenmanhthao996tn |
0:bcd95cee2654
|
185
|
}
|