Étape 9: Code pour 44780 / RT0802B-1 ver 2.0-citerne
/ / Ce code est pour un panneau de 14 broches LCD 44780 avec 2 broches plus pour anode/cathode rétro-éclairage#include < LiquidCrystal.h >
Innovente lcd (7, 8, 9, 10, 11, 12) ;
FR, DB4, DB5, DB6, RS, DB7
Conseil d’administration
1 = masse
2 = Vcc
3 = pot 10k - 20k pour le contraste
4 = RS
5 = RW
6 = FR
11 = D4
12 = D5
13 = D6
14 = D7
Rechercher sur internet sur 44780 pour diverses pages qui décrivent le câblage dans les moindres détails
RW doit être câblé faible d’écrire, sinon il reste en mode « lecture »
sprite0 Byte [8] ;
sprite1 Byte [8] ;
sprite2 octet [8] ;
sprite3 octet [8] ;
void setup() {}
mis en place nombre de l’écran LCD de colonnes et de lignes :
LCD.Begin (8, 2) ;
lcd.setCursor(0,0) ;
LCD.Print("tankdemo") ;
lcd.setCursor(0,1) ;
LCD.Print("
memset(sprite0,7,8) ;
memset(Sprite1,7,8) ;
memset(Sprite2,7,8) ;
memset(sprite3,7,8) ;
lcd.setCursor(0,1) ;
Serial.Begin(9600) ;
}
Besoin de huit quantités de 32 bits que je peux utiliser pour les forets mouvants autour.
L’image originale de réservoir est dans ces valeurs.
tankImg long [] = {}
((long) B010000 << 10) | ((long) B000000 << 5) | B000000 / / antenne pointe
, ((long) B010111 << 10) | ((long) B011110 << 5) | B000000 / / haut de la tourelle
, ((long) B001111 << 10) | ((long) B011111 << 5) | B011110 / / tourelle mid avec Canon
, ((long) B000111 << 10) | ((long) B011110 << 5) | B000000 / / tourelle base
, ((long) B001111 << 10) | ((long) B011111 << 5) | B010000 / / bande de roulement haut
, ((long) B010000 << 10) | ((long) B000000 << 5) | B001000
, ((long) B010000 << 10) | ((long) B000000 << 5) | B001000
, ((long) B001111 << 10) | ((long) B011111 << 5) | B010000 / / bas, 24 pixels totales dans la bande de roulement de roulement
};
tankx est la position au niveau du bit sur l’écran.
tankcharx est la position de character-wise, ainsi tankx / 5.
Il peut être négatif.
Tankx zéro, le réservoir est sur la gauche de l’écran
Si tankImg octets sont divisées en quatre caractères personnalisés
le quatrième d'entre eux étant des bits vierges
À tankx un, les bits de réservoir déplacement un peu vers la droite
et si je suis intelligent, les marches sont calculées afin qu’ils « rotation »
Et ainsi de suite
Parce qu’il y a cinq bits horizontalement par char personnalisé
et les marches de réservoir allez tous les deux, je peux répéter l’original
réservoir de marches à partir de même les postes de char
int tankx = -15 ;
int tankcharx ;
int tankchary = 1 ;
int treadx = 0 ;
#define BITS_PER_CHAR 6
void loop() {}
tankcharx = tankx / BITS_PER_CHAR ;
Serial.Print ("tankx =") ;
Serial.Print(tankx) ;
Serial.Print ("tankcharx =") ;
Serial.println(tankcharx) ;
Interprétation initiale, aucune rotation de marches
Si ((tankx % BITS_PER_CHAR) == 0) {}
Passage intégral est en marche, besoin de dessiner un espace vide où la citerne a été modifié
Si (tankcharx > = 1) {}
lcd.setCursor (tankcharx-1, tankchary) ;
LCD.Write(' ') ;
}
Si (tankcharx > = 0 & & tankcharx < = 7) {}
lcd.setCursor (tankcharx, tankchary) ;
LCD.Write((Byte)0) ;
}
Si (tankcharx + 1 > = 0 & & tankcharx + 1 < = 7) {}
lcd.setCursor (tankcharx + 1, tankchary) ;
LCD.Write((Byte)1) ;
}
Si (tankcharx + 2 > = 0 & & tankcharx + 2 < = 7) {}
lcd.setCursor (tankcharx + 2, tankchary) ;
LCD.Write((Byte)2) ;
}
Si (tankcharx + 3 > = 0 & & tankcharx + 3 < = 7) {}
lcd.setCursor (tankcharx + 3, tankchary) ;
LCD.Write((Byte)3) ;
}
}
Calculer les bits des signes individuels personnalisés
int shiftbits = (tankx % BITS_PER_CHAR) ;
Serial.Print ("shiftbits =") ;
Serial.println(shiftbits) ;
Si (shiftbits < 0) {shiftbits += BITS_PER_CHAR;}
pour (int y = 0; y < 8; y ++)
{
lval long = tankImg [y] ;
Switch (treadx) {}
case 0 :
commutateur (y) {}
cas 4 :
lval ^ = 0x2cb0 ; rupture ;
cas 7 :
lval ^ = 0x2490 ; rupture ;
}
rupture ;
cas 1 :
commutateur (y) {}
cas 4 :
lval ^ = 0x1240 ; rupture ;
lval ^ = 0x36d0 ; rupture ;
cas no 5 :
lval ^ = 0x0008 ; rupture ;
cas 6 :
lval ^ = 0 x 4000 ; rupture ;
cas 7 :
lval ^ = 0x0920 ; rupture ;
}
rupture ;
cas 2 :
commutateur (y) {}
cas 4 :
lval ^ = 0x0920 ; rupture ;
lval ^ = 0x1b60 ; rupture ;
cas no 5 :
lval ^ = 0 x 4000 ; rupture ;
cas 6 :
lval ^ = 0x0008 ; rupture ;
cas 7 :
lval ^ = 0x1240 ; rupture ;
}
rupture ;
}
lshifted long = lval << (BITS_PER_CHAR-shiftbits) ;
sprite0 [y] = (byte) ((lshifted >> (3 * BITS_PER_CHAR)) & B011111) ;
Sprite1 [y] = (byte) ((lshifted >> (2 * BITS_PER_CHAR)) & B011111) ;
Sprite2 [y] = (byte) ((lshifted >> (1 * BITS_PER_CHAR)) & B011111) ;
sprite3 [y] = (byte) ((lshifted >> (0 * BITS_PER_CHAR)) & B011111) ;
}
lcd.createChar (0, sprite0) ;
lcd.createChar (1, sprite1) ;
lcd.createChar (2, sprite2) ;
lcd.createChar (3, sprite3) ;
++ tankx ;
Si (tankx > = 50) {tankx = -15;}
++ treadx ;
Si (treadx == 3) {treadx = 0;}
Delay(100) ;
}