TFT-LCD屏幕顯示圖片
TFT_LCD顯示圖片時,圖片大小選擇要適配屏幕大小,如果要豎屏顯示的話,則屏幕寬x高為240x320,所以圖片也要找240x320的,
如果是橫屏顯示,則屏幕寬x高為320x240,所以圖片也要找320x240的
圖片取模軟件 —— Image2Lcd v2.9
因為本次實驗是豎屏顯示,所以先在網(wǎng)上找一張240x320的圖片,然后用圖片取模軟件打開
輸出數(shù)據(jù)類型選擇C語言數(shù)據(jù),掃描模式為水平,輸出灰度默認(rèn)是單色的,因為屏幕是16位的,所以要改為16位真彩色,最大寬度和高度與圖片一致,取消包含圖像頭數(shù)據(jù),勾選高位在前,這與后面編寫代碼有關(guān),然后點(diǎn)擊下方的16位彩色,在顏色位數(shù)上選擇RGB565的數(shù)據(jù)格式;然后就可點(diǎn)擊保存,命名為Picture1.h,文件里會有圖片的取模數(shù)據(jù),后續(xù)在代碼中導(dǎo)入該頭文件直接使用即可
代碼
Picture1.h
這個數(shù)組就是用取模軟件取出的圖片數(shù)據(jù),數(shù)據(jù)比較大,有153600個字節(jié),差不多150KB,一定要用const修飾,放到STM32的內(nèi)部Flash中,因為圖片大小為320*240個像素點(diǎn),每個像素點(diǎn)由16位確定,共兩個字節(jié),所以320 * 240 * 2 = 153600
STM32F103ZET6的Flash大小為512KB,所以同樣大小的圖片最多只能存放三張;如果用外部Flash芯片如16M或者64M大小的,則可以放更多的圖片
const unsigned char gImage_Picture1[153600] = { /* 0X10,0X10,0X00,0XF0,0X01,0X40,0X01,0X1B, */
0XA4,0X0C,0X93,0XCB,0XA4,0X2D,0XAC,0X8E,0XA4,0X0C,0XA4,0X0C,0XB4,0X8E,0XBC,0XAE,
0XAC,0X2D,0XBC,0XAE,0XC4,0XEF,0X8B,0X49,0X8B,0X48,0XAC,0X2C,0XC4,0XCE,0XC4,0XAE,
0XC4,0XCE,0XCC,0XEE,0XC4,0X8D,0XDD,0X50,0XD5,0X50,0XC4,0XAE,0XAB,0XEB,0XC4,0XCE,
0XCC,0XEF,0XA3,0XEB,0XC4,0XCF,0XEE,0X14,0XD5,0X30,0XBC,0X6D,0XCC,0XCE,0XCC,0XEF,
TFT_LCD.c
在前面顯示中英文代碼基礎(chǔ)上增加這個顯示圖片的函數(shù)
首先同樣要設(shè)置窗口,然后用switch語句判斷圖片序號,用一個常量指針指向不同圖片序號的圖片數(shù)組;再逐行寫入圖片數(shù)據(jù)
/**
* @name LCD_ShowPicture
* @brief LCD屏幕顯示圖片
* @param usXstar:窗口起點(diǎn)x軸坐標(biāo)
* usYstar:窗口起點(diǎn)y軸坐標(biāo)
* usPicH:圖片的水平分辨率
* usPicV:圖片的垂直分辨率
* ucPicNum:圖片序號
* @retval None
*/
static void LCD_ShowPicture(uint16_t usXstar,uint16_t usYstar,uint16_t usPicH,uint16_t usPicV,uint8_t ucPicNum)
{
uint32_t uiIndex;
const uint8_t * pcPic = NULL;
//設(shè)置窗口大小
LCD_SetWindows(usXstar,usYstar,usPicH,usPicV);
//獲取圖像數(shù)據(jù)首地址
switch (ucPicNum)
{
case 1: pcPic = gImage_Picture1;break;
case 2: pcPic = gImage_Picture2;break;
case 3: pcPic = gImage_Picture3;break;
default: pcPic = gImage_Picture1;break;
}
//逐行寫入圖片數(shù)據(jù)
/*
因為TFT-LCD屏幕是16位的,即每個像素點(diǎn)的數(shù)據(jù)是16位,占兩個字節(jié),usPicH*usPicV表示圖片共有多少個像素點(diǎn),
總共的像素點(diǎn)乘以2就表示圖片取模數(shù)組里字節(jié)的個數(shù),如240*320*2 = 153600
*/
for(uiIndex=0;uiIndex<usPicH*usPicV*2;uiIndex+=2)
{
//因為圖片取模時是數(shù)據(jù)高位在前,每次都是寫兩個字節(jié)(16位),所以要將第一個字節(jié)左移8位,再或上第二個字節(jié)作低8位
LCD_WRITE_DATA((pcPic[uiIndex]<<8) | pcPic[uiIndex+1]);
}
}
System.c
系統(tǒng)運(yùn)行函數(shù)中直接調(diào)用TFT_LCD顯示圖片函數(shù),x,y軸的坐標(biāo)都是從0開始,傳入屏幕的寬240,高320,圖片序號為1,燒錄代碼后便能顯示圖片,代碼量比較大,燒錄慢要等待文章來源:http://www.zghlxwxcb.cn/news/detail-785766.html
/*
* @name Run
* @brief 系統(tǒng)運(yùn)行
* @param None
* @retval None
*/
static void Run()
{
TFT_LCD.LCD_ShowPicture(0,0,LCD_WIGHT,LCD_HIGHT,1); //屏幕顯示圖片
}
顯示效果
圖片1
圖片2文章來源地址http://www.zghlxwxcb.cn/news/detail-785766.html
到了這里,關(guān)于TFT-LCD屏幕顯示圖片的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!