|
因为产品要用到LCD,找了ILI9488测试了下,感觉SPI驱动被整的支离破碎,LCD_DC 还穿插拉高拉低,连个连续的数据都发送不了,这也太耗MCU了,请问兄弟们,有什么好办法没有
void ILI9488_Draw_Pixel(uint16_t X,uint16_t Y,uint16_t Colour)
{
if((X >=LCD_WIDTH) || (Y >=LCD_HEIGHT)) return; //OUT OF BOUNDS!
//ADDRESS
HAL_GPIO_WritePin(LCD_DC_GPIO_Port, LCD_DC_Pin, GPIO_PIN_RESET);
ILI9488_SPI_Send(0x2A);
HAL_GPIO_WritePin(LCD_DC_GPIO_Port, LCD_DC_Pin, GPIO_PIN_SET);
//XDATA
uint8_t Temp_Buffer[4] = {X>>8,X, (X+1)>>8, (X+1)};
HAL_SPI_Transmit(HSPI_INSTANCE, Temp_Buffer, 4, 1);
//ADDRESS
HAL_GPIO_WritePin(LCD_DC_GPIO_Port, LCD_DC_Pin, GPIO_PIN_RESET);
ILI9488_SPI_Send(0x2B);
HAL_GPIO_WritePin(LCD_DC_GPIO_Port, LCD_DC_Pin, GPIO_PIN_SET);
//YDATA
uint8_t Temp_Buffer1[4] = {Y>>8,Y, (Y+1)>>8, (Y+1)};
HAL_SPI_Transmit(HSPI_INSTANCE, Temp_Buffer1, 4, 1);
//ADDRESS
HAL_GPIO_WritePin(LCD_DC_GPIO_Port, LCD_DC_Pin, GPIO_PIN_RESET);
ILI9488_SPI_Send(0x2C);
HAL_GPIO_WritePin(LCD_DC_GPIO_Port, LCD_DC_Pin, GPIO_PIN_SET);
//COLOUR
uint8_t Temp_Buffer2[3] = {(Colour>>8)&0xF8, (Colour>>3)&0xFC, Colour<<3};
HAL_SPI_Transmit(HSPI_INSTANCE, Temp_Buffer2, 3, 1);
}
void ILI9488_Putchar(uint16_t x,uint16_t y,uint8_t num,uint8_t mode)
{
uint8_t temp;
uint8_t pos,t;
uint16_t colortemp = POINT_COLOR;
if(x > (LCD_WIDTH - 8) || y > LCD_HEIGHT - 16) return;
num=num-' ';
if(!mode)
{
for(pos = 0; pos < 16; pos++)
{
temp = asc2_1608[(uint16_t)num*16 + pos];
for(t = 0; t < 8; t++)
{
if(temp&0x01)ILI9488_Draw_Pixel(x+t,y+pos,POINT_COLOR);
else ILI9488_Draw_Pixel(x+t,y+pos,BACK_COLOR);
temp>>=1;
}
}
}
else
{
for(pos=0;pos<16;pos++)
{
temp=asc2_1608[(uint16_t)num*16+pos];
for(t=0;t<8;t++)
{
if(temp&0x01)ILI9488_Draw_Pixel(x+t,y+pos,POINT_COLOR);
temp>>=1;
}
}
}
POINT_COLOR=colortemp;
}
|
|