O circuito é o mesmo das partes anteriores, acrescidos de dois botões ligados entre as porta digitais 10 e 11 e terra. Os pullups internos do ATmega são usados para a entrada ser lida como "1" quando os botões estiverem soltos.
Na parte que nos interessa, temos uma matriz de 84x6 bytes que armazena a imagem da tela. Para não complicar muito, o jogo foi todo feito usando duas rotinas, LcdSetPixel e LcdGetPixel:
// Imagem da tela
static byte tela [LCD_DX][LCD_DY/8];
// Altera um ponto da tela
void LcdSetPixel (int x, int y, int valor)
{
int by = y >> 3;
y = y & 7;
if (valor)
tela [x][by] |= 1 << y;
else
tela [x][by] &= ~(1 << y);
LcdWrite( LCD_CMD, 0x40 + by);
LcdWrite( LCD_CMD, 0x80 + x);
LcdWrite(LCD_DAT, tela[x][by]);
}
// Informa valor de ponto da tela
int LcdGetPixel (int x, int y)
{
int by = y >> 3;
y = y & 7;
return tela[x][by] & (1 << y);
}
Não vou entrar aqui no detalhe da lógica do jogo em si, o código completo está nos arquivos do blog, no arquivo breakout.zip.O vídeo abaixo mostra o jogo em uso:

Nenhum comentário:
Postar um comentário