Moderadores: 51, guest2003, Renie, gpenga
longo.251272 escreveu:É um display de 3.2 inch 320x240 com Touch HY32C.
.......Sei que tenho que converter a imagem em uma tabela hex e enviar ponto a ponto pra ele. Nada além disso.
longo.251272 escreveu:Resolvido.
#define MAX_X 240
#define MAX_Y 320
void LCD_DrawPicture( uint16_t Xpos, uint16_t Ypos, uint16_t dim_x, uint16_t dim_y, const uint32_t *picture)
{
uint16_t x, y;
// GPIO_ResetBits(GPIOD , GPIO_Pin_7); //CS=0;
//LCD_SetAddress(Xpos, Ypos, Xpos + dim_x - 1, Ypos + dim_y - 1);
//Ajustado para posicinar a imagem da direita para a esquerda em X
LCD_SetAddress( MAX_X - Xpos - dim_x, Ypos, MAX_X - Xpos - 1, Ypos + dim_y - 1);
for(x = Xpos; x < (Xpos + dim_x); x++ ) {
for(y = Ypos; y < (Ypos + dim_y); y++ ) {
LCD_WriteData(*picture++);
}
}
LCD_SetAddress( 0, 0, MAX_X - 1, MAX_Y - 1 );
// GPIO_SetBits(GPIOD , GPIO_Pin_7); //CS=1;
}
void LCD_SetAddress( uint16_t Xpos1, uint16_t Ypos1, uint16_t Xpos2, uint16_t Ypos2 )
{
LCD_WriteReg( 0x0044, ( Ypos2 << 8 ) + Ypos1 ); //Column address start2
LCD_WriteReg( 0x0045, Xpos1 ); //Column address start1
LCD_WriteReg( 0x0046, Xpos2 ); //Column address end2
LCD_WriteReg( 0x004E, Ypos1 ); //Column address end1
LCD_WriteReg( 0x004F, Xpos1 ); //Row address start2
LCD_WriteIndex( 0x0022 );
}
Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante