source: rtos_arduino/trunk/arduino_lib/hardware/arduino/samd/libraries/LCD/LCD_m0.cpp@ 175

Last change on this file since 175 was 175, checked in by ertl-honda, 8 years ago

ライブラリを Arduino IDE 1.7.9 にupdate

File size: 6.9 KB
Line 
1// Versione 1.0 By Mario Mottula
2
3#include "Arduino.h"
4#include "LCD_m0.h"
5#define H HIGH
6#define L LOW
7
8
9//************************************************************
10//* Funzione di inizializzazione display
11//* 4 bit di dati
12//* 2 righe e font Standard 5x8
13//************************************************************
14void LCD_m0::Inizializza_LCD(int pin_RS, int pin_EN,int pin_D4,int pin_D5, int pin_D6, int pin_D7)
15
16{
17 _pin_RS = pin_RS;
18 _pin_EN = pin_EN;
19 _pin_D7 = pin_D7;
20 _pin_D6 = pin_D6;
21 _pin_D5 = pin_D5;
22 _pin_D4 = pin_D4;
23
24
25 //ritardo per stabilizzazione Vdc
26 delay(250);
27 pinMode(pin_RS, OUTPUT);
28 pinMode(pin_EN, OUTPUT);
29 pinMode(pin_D7, OUTPUT);
30 pinMode(pin_D6, OUTPUT);
31 pinMode(pin_D5, OUTPUT);
32 pinMode(pin_D4, OUTPUT);
33
34 delay(50);
35 SetCommandPin(0,0,1,1);
36 delay(10);
37 SetCommandPin(0,0,1,1);
38 delay(1);
39 SetCommandPin(0,0,1,1);
40 delay(50);
41//impostazione interfaccia 4 bit
42 SetCommandPin(0,0,1,0);
43 delay(5);
44
45//impostazione font e righe (2 righe Font 5x8)
46
47 SetCommandPin(0,0,1,0);
48 SetCommandPin(1,0,0,0);
49 delay(5);
50
51// impostazione Off display
52
53 SetCommandPin(0,0,0,0);
54 SetCommandPin(1,0,0,0);
55 delay(5);
56
57
58// impostazione On display cursore OFF
59
60 SetCommandPin(0,0,0,0);
61 SetCommandPin(1,1,0,0);
62 delay(5);
63
64// pulizia display
65
66 SetCommandPin(0,0,0,0);
67 SetCommandPin(0,0,0,0);
68 delay(5);
69
70
71//shift a sinistra cursore (Entry mode da SX a DX)
72
73 SetCommandPin(0,0,0,0);
74 SetCommandPin(0,1,1,0);
75
76
77
78
79
80 }
81
82
83//************************************************************
84//* Funzione di invio Comandi
85//************************************************************
86void LCD_m0::SetCommandPin(int D7,int D6,int D5, int D4)
87{
88 digitalWrite(_pin_RS, L);
89
90 digitalWrite(_pin_D7, D7);
91 digitalWrite(_pin_D6, D6);
92 digitalWrite(_pin_D5, D5);
93 digitalWrite(_pin_D4, D4);
94 digitalWrite(_pin_EN, H);
95 delay(1);
96 digitalWrite(_pin_EN, L);
97
98
99}
100
101//************************************************************
102//* Funzione di invio Dati primi 4 bit
103//************************************************************
104
105void LCD_m0::SetDataPin1(int D7,int D6,int D5, int D4)
106{
107
108
109 digitalWrite(_pin_EN, H);
110 delay(1);
111 digitalWrite(_pin_RS , H);
112
113 digitalWrite(_pin_D7, D7);
114 digitalWrite(_pin_D6, D6);
115 digitalWrite(_pin_D5, D5);
116 digitalWrite(_pin_D4, D4);
117
118
119 digitalWrite(_pin_EN, L);
120 delay(1);
121 digitalWrite(12, H);
122
123}
124//************************************************************
125//* Funzione di invio Dati secondi 4 bit
126//************************************************************
127
128void LCD_m0::SetDataPin2(int D7,int D6,int D5, int D4)
129{
130
131 digitalWrite(_pin_EN, H);
132 delay(1);
133 digitalWrite(_pin_RS , H);
134
135 digitalWrite(_pin_D7, D7);
136 digitalWrite(_pin_D6, D6);
137 digitalWrite(_pin_D5, D5);
138 digitalWrite(_pin_D4, D4);
139
140
141 digitalWrite(_pin_EN, L);
142 delay(1);
143 digitalWrite(_pin_RS , L);
144
145
146}
147
148
149
150
151//************************************************************
152//* Funzione di attivazione Cursore
153//************************************************************
154void LCD_m0::Cursore_ON()
155
156{
157 SetCommandPin(0,0,0,0);
158 SetCommandPin(1,1,1,0);
159}
160
161
162
163//************************************************************
164//* Funzione di disattivazione Cursore
165//************************************************************
166
167void LCD_m0::Cursore_OFF()
168{
169 SetCommandPin(0,0,0,0);
170 SetCommandPin(1,1,0,0);
171
172}
173
174
175
176//************************************************************
177//* Funzione di scrittura carattere in posizione corrente
178//* c = carattere da scrivere in posizione corrente
179//************************************************************
180
181void LCD_m0::Scrivi_Car_PC(char c)
182{
183 carattere = c;
184
185 for(i=0;i<8;i++)
186 {
187 bin[i]=((c>>i)&1);
188 }
189
190 for(i=0;i<8;i++)
191 {
192 bin_inv[i]=bin[7-i];
193 }
194 SetDataPin1(bin_inv[0],bin_inv[1],bin_inv[2],bin_inv[3]);
195 delay(50);
196 SetDataPin2(bin_inv[4],bin_inv[5],bin_inv[6],bin_inv[7]);
197
198}
199
200
201//************************************************************
202//* Funzione di scrittura di un carattere su riga e posizione
203//* desiderate.
204//* c = carttere da scrivere
205//* rig = intero con il numero di riga
206//* pos = intero con il numero della posizione
207//************************************************************
208void LCD_m0::Scrivi_Car_PS(char c,int rig,int pos)
209{
210 carattere = c;
211 //SerialUSB.begin(9600);
212 //SerialUSB.println(carattere);
213 if(rig==1){
214 SetCommandPin(1,0,0,0);//selezione riga1
215 Posizione(pos);
216 }
217 if(rig==2){
218 SetCommandPin(1,1,0,0);//selezione riga 2
219 Posizione(pos);
220 }
221
222 for(i=0;i<8;i++)
223 {
224 bin[i]=((c>>i)&1);
225
226 }
227 for(i=0;i<8;i++)
228 {
229
230 bin_inv[i]=bin[7-i];
231
232 }
233 SetDataPin1(bin_inv[0],bin_inv[1],bin_inv[2],bin_inv[3]);
234 delay(50);
235 SetDataPin2(bin_inv[4],bin_inv[5],bin_inv[6],bin_inv[7]);
236
237}
238
239
240void LCD_m0::Posizione(int pos)
241{
242 switch (pos)
243 {
244 case 0:
245 SetCommandPin(0,0,0,0);
246 break;
247
248 case 1:
249 SetCommandPin(0,0,0,0);
250 break;
251
252 case 2:
253 SetCommandPin(0,0,0,1);
254 break;
255
256 case 3:
257 SetCommandPin(0,0,1,0);
258 break;
259
260 case 4:
261 SetCommandPin(0,0,1,1);
262 break;
263
264 case 5:
265 SetCommandPin(0,1,0,0);
266 break;
267
268 case 6:
269 SetCommandPin(0,1,0,1);
270 break;
271
272 case 7:
273 SetCommandPin(0,1,1,0);
274 break;
275
276 case 8:
277 SetCommandPin(0,1,1,1);
278 break;
279
280 case 9:
281 SetCommandPin(1,0,0,0);
282 break;
283
284 case 10:
285 SetCommandPin(1,0,0,1);
286 break;
287
288 case 11:
289 SetCommandPin(1,0,1,0);
290 break;
291
292 case 12:
293 SetCommandPin(1,0,1,1);
294 break;
295
296 case 13:
297 SetCommandPin(1,1,0,0);
298 break;
299
300 case 14:
301 SetCommandPin(1,1,0,1);
302 break;
303
304 case 15:
305 SetCommandPin(1,1,1,0);
306 break;
307
308 case 16:
309 SetCommandPin(1,1,1,1);
310 break;
311
312
313 }
314}
315
316
317
318//*********************************************************
319//*Permette di scrivere un 'intera riga di testo
320//*stringa = Testo da scrivere Formato String
321//*rig = riga sulla quale scrivere il testo Formato int
322//*********************************************************
323
324void LCD_m0::Scrivi_Testo(String stringa,int rig)
325{
326
327n = stringa.length();
328
329
330 if(rig==1){
331 SetCommandPin(1,0,0,0);
332 SetCommandPin(0,0,0,0);
333
334 for(m=0; m<=n-1; m++){
335 c = stringa[m];
336
337 Scrivi_Car_PC(c);
338 }
339 }
340
341
342 if(rig==2){
343 SetCommandPin(1,1,0,0);//selezione riga1
344 SetCommandPin(0,0,0,0);//offset
345
346 for(m=0; m<=n-1; m++){
347 c = stringa[m];
348
349 Scrivi_Car_PC(c);
350
351 }
352 }
353
354}
355
356
357
358void LCD_m0::Pulisci()
359{
360
361 SetCommandPin(0,0,0,0);
362 SetCommandPin(0,0,0,1);
363
364}
365
Note: See TracBrowser for help on using the repository browser.