前言
本文章基于STM32F103VET6,參考野火的驅動程序,用LCD液晶屏顯示靜態(tài)圖像。
有紕漏請指出,轉載請說明。
學習交流請發(fā)郵件 1280253714@qq.com
編程要點
顯示一個像素點
將rgb888圖片轉為rgb555
輸出rgb555的C語言數(shù)組
數(shù)組的每一個元素對應一個像素點的rgb三個通道的數(shù)據(jù),用stm32的FSMC模擬8080時序,與ili9341進行通信,ili9341再驅動液晶屏顯示圖片
代碼分析
-
- 顯示一個像素點
void ILI9341_SetPointPixelNew ( uint16_t usX, uint16_t usY,uint16_t currentFillColor)
{
if ( ( usX < LCD_X_LENGTH ) && ( usY < LCD_Y_LENGTH ) )
{
ILI9341_SetCursor ( usX, usY );
ILI9341_FillColor ( 1, currentFillColor );
}
}
void LCD_showPointPixel(void)
{
ILI9341_SetPointPixelNew(10,10,0xf800);
Delay(0xFFFFFF);
}

(為了方便看清,這里實際上顯示了四個點)文章來源:http://www.zghlxwxcb.cn/news/detail-703457.html
2. 將rgb888圖片轉為rgb555(MATLAB)

x=60
y=80
img888=imread("E:\MATLAB\bin\my_MATLAB_Doc\img\color.png");
scaleR=31/255;
scaleG=63/255;
scaleB=31/255;
img565=zeros(x,y);
for i=1:x
for j=1:y
r5=0;
g6=0;
b5=0;
r5=round(double(img888(i,j,1))*scaleR);
g6=round(double(img888(i,j,2))*scaleG);
b5=round(double(img888(i,j,3))*scaleB);
r5L11=bitshift(r5,11); %r左移11位
g6L5=bitshift(g6,5); %g左移5位
img565(i,j)=r5L11+g6L5+b5;
end
end
img565=dec2hex(uint16(img565));
3.輸出rgb555的C語言數(shù)組(MATLAB)
%生成C語言數(shù)組
str="{0x"
a=dec2hex(img565(1))
for i=1:x*y
for j=1:4
str=strcat(str,img565(i,j));
end
str=strcat(str,",0x");
end
str=strcat(str,'}');
writematrix(str,"E:\MATLAB\bin\my_MATLAB_Doc\img\createArray.txt")

因為數(shù)組存放于SRAM,只有64K的空間,故只生成60*80大小的圖片文章來源地址http://www.zghlxwxcb.cn/news/detail-703457.html





4. 數(shù)組的每一個元素對應一個像素點的rgb三個通道的數(shù)據(jù),用stm32的FSMC模擬8080時序,與ili9341進行通信,ili9341再驅動液晶屏顯示圖片.
uint16_t PictureData [ ] ={0x95DA,0x95DA,0x95DA,0x95DA...} //省略
void ILI9341_ShowPicture(uint16_t usX, uint16_t usY,uint16_t pic565[])
{
uint32_t i=0;
uint8_t x=0;
uint8_t y=0;
for(x=0;x<usX;x++)
{
for(y=0;y<usY;y++)
{
if ( ( x < LCD_X_LENGTH ) && ( y < LCD_Y_LENGTH ) )
{
ILI9341_SetCursor ( x, y );
ILI9341_FillColor ( 1, pic565[i] );
}
i++;
}
}
}
int main ( void )
{
ILI9341_Init (); //LCD 初始化
USART_Config();
//其中0、3、5、6 模式適合從左至右顯示文字,
//不推薦使用其它模式顯示文字 其它模式顯示文字會有鏡像效果
//其中 6 模式為大部分液晶例程的默認顯示方向
ILI9341_GramScan ( 3 );
while ( 1 )
{
LCD_showPicture();
}
}
void LCD_showPicture(void)
{
ILI9341_ShowPicture(80,60,PictureData);
Delay(0xFFFFFF);
}

到了這里,關于STM32之LCD液晶屏(ILI9341)顯示圖片的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!