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