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);
- }
O vídeo abaixo mostra o jogo em uso:
Nenhum comentário:
Postar um comentário