Étape 6: Décalage de bits réservoir
Avec les personnages maintenant sur l’écran, vous pouvez modifier leurs morceaux. En fin de compte, vous devez appeler la fonction createChar (index, byteArray) pour obtenir les bits à l’écran LCD, et cela signifie que vous devez avoir un tableau de huit octets par caractère. J’utilise quatre caractères personnalisés, donc j’ai utilisé les tableaux d’octets quatre.sprite0 Byte [8] ;
sprite1 Byte [8] ;
sprite2 octet [8] ;
sprite3 octet [8] ;
Au sein de la loop(), j’ai pris l’opérateur modulo position à venir avec un décalage. Puis, je suis allé une ligne à la fois par le réservoir. Ici, l’efficacité de l’ints long entre en jeu. Tout d’abord, je copie le long int du réservoir de dessin dans une variable locale statique. Ensuite, j’ai déplacerait le long int par le nombre de bits que j’aurais besoin.
int shiftbits = (tankx % BITS_PER_CHAR) ; Si (shiftbits < 0) {shiftbits += BITS_PER_CHAR;}
pour (int y = 0; y < 8; y ++)
{
lval long = tankImg [y] ;
...
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) ;
}
Enfin, quand tous les tableaux d’octets avaient été calculées, je serait pousser plus à l’écran LCD.
lcd.createChar (0, sprite0) ;
lcd.createChar (1, sprite1) ;
lcd.createChar (2, sprite2) ;
lcd.createChar (3, sprite3) ;
Si vous ont été ce calcul en déplaçant les octets, vous auriez pour s’assurer vous. par « reporter » le dernier bit de l’octet suivant horizontalement, mais depuis je reste au sein de l’int long de 32 bits à chaque tour, le processeur ne le bit transportant pour moi.
À la fin de la boucle, j’ai déplacer le réservoir et ensuite une boucle autour du début après que le réservoir sortis de l’écran.
++ tankx ;
Si (tankx > = 50) {tankx = -15;}
...
Delay(100) ;
Enfin, vous voyez le retard. Il est important d’utiliser un délai approprié pour votre écran LCD. Mon hobby LCD est bleu avec un éclairage blanc, et elle s’estompe très lentement, donc un court délai finirais avec beaucoup de flou.