- 目錄第六講 單片機(jī)驅(qū)動(dòng)彩色液晶屏 控制RA8889軟件:顯示文字:Part2.外接字庫
第七講 單片機(jī)驅(qū)動(dòng)彩色液晶屏 控制RA8889軟件:顯示文字:Part3.自建字庫
第八講 單片機(jī)驅(qū)動(dòng)彩色液晶屏 控制RA8889軟件:顯示圖片
第九講 單片機(jī)驅(qū)動(dòng)彩色液晶屏 控制RA8889軟件:認(rèn)識(shí)顯存并進(jìn)行讀、寫、復(fù)制
第十講 單片機(jī)驅(qū)動(dòng)彩色液晶屏 控制RA8889軟件:圖像運(yùn)算
第十一講 單片機(jī)驅(qū)動(dòng)彩色液晶屏 控制RA8889軟件:播放avi視頻
第十二講 單片機(jī)驅(qū)動(dòng)彩色液晶屏 如何打包bin檔
第十三講 單片機(jī)驅(qū)動(dòng)彩色液晶屏 bin檔的燒錄方法
下面我們開始介紹如何顯示圖片了!一般情況圖資建議存放在RA8889 / RA8876擴(kuò)展的FLASH芯片,容量可依據(jù)實(shí)際需求來做選擇。顯示圖片有如下幾種方式:
RA8889是支持QPI(Quad Peripheral Interface)通信方式,這可大大加快DMA速度,圖片顯示速度很快!同時(shí)結(jié)合JPG硬件解碼,圖片顯示速度又再提高一個(gè)數(shù)量級(jí),相當(dāng)強(qiáng)大的功能!
采用DMA方式顯示BMP圖片
實(shí)現(xiàn)方法是MCU將要調(diào)用圖片的寬高和地址發(fā)送給RA8889,爾后交給RA8889從FLASH內(nèi)部連續(xù)獲取圖片數(shù)據(jù),過程不需要MCU干預(yù)了,因此顯示速度很快,若采用QPI通信則更快了!
顯示BMP圖片的API代碼:void DMA_24bit(unsigned char Clk ,unsigned short X1,unsigned short Y1,unsigned short X_W,unsigned short Y_H ,unsigned short P_W ,unsigned long Addr);
void DMA_32bit(unsigned char Clk ,unsigned short X1,unsigned short Y1,unsigned short X_W,unsigned short Y_H ,unsigned short P_W,unsigned long Addr);?
顯示JPG圖片
JPG圖片的顯示也很簡單,自動(dòng)選擇QPI通信方式,由于JPG數(shù)據(jù)經(jīng)過壓縮,容量是BMP圖片的10%左右,再加上采用QPI獲取數(shù)據(jù),顯示圖片速度相比BMP圖片會(huì)有一個(gè)指數(shù)級(jí)的提高。也因此RA8889還支持AVI影片的播放,這部份內(nèi)容在后文再作介紹。
顯示JPG圖片的API代碼:
void JPG_NOR (unsigned long addr,unsigned long JPGsize,unsigned long IDEC_canvas_width,unsigned short x,unsigned short y);
采用MCU直接寫入BMP圖片
BMP圖片還可以從MCU直接寫入,直接寫入的數(shù)據(jù)是存在MCU的FLASH中,這種方法速度比較慢,小的圖片、圖標(biāo)可行,太大要考慮速度是否可接受了,再者圖片大也可能存不進(jìn)FLASH。MCU寫入圖片調(diào)用的API函數(shù)如下:
void BTE_MCU_Write_MCU_8bit(unsigned long S1_Addr,unsigned short S1_W,unsigned short XS1,unsigned short YS1,unsigned long Des_Addr,unsigned short Des_W, unsigned short XDes,unsigned short YDes,unsigned int ROP_Code,unsigned short X_W,unsigned short Y_H,const unsigned char *data);
void BTE_MCU_Write_MCU_16bit(unsigned long S1_Addr,unsigned short S1_W,unsigned short XS1,unsigned short YS1,unsigned long Des_Addr,unsigned short Des_W, unsigned short XDes,unsigned short YDes,unsigned int ROP_Code,unsigned short X_W,unsigned short Y_H,const unsigned short *data);
顯示PNG圖片
PNG圖片的顯示類似BMP,不一樣的是顯存要先指定一個(gè)Buffer空間,用于處理透明色,處理完之后再復(fù)制到指定位置。顯示PNG圖片的API代碼:
void SPI_NOR_DMA_png (unsigned long dma_page_addr,unsigned long pic_buffer_Layer,unsigned long Show_pic_Layer,unsigned int picture_Width,unsigned int picture_Height);
?
顯示圖形光標(biāo)
圖形光標(biāo)的顯示會(huì)有點(diǎn)不同,RA8889內(nèi)建4個(gè)32x32點(diǎn)陣可自定義的圖形光標(biāo),建好的圖形光標(biāo)可類似桌面系統(tǒng)的光標(biāo)(比如鼠標(biāo)形狀)自由指定坐標(biāo),光標(biāo)是顯示在另外一個(gè)圖層。圖形光標(biāo)實(shí)例演示:
//文字光標(biāo)演示
Enable_Text_Cursor_Blinking();
Blinking_Time_Frames(10);
Text_Cursor_H_V(15,1);
Enable_Text_Cursor();
delay_seconds(1);
Show_String("d"); delay_ms(300);
Show_String("i"); delay_ms(300);
Show_String("r"); delay_ms(300);
Show_String(" "); delay_ms(1000);
for(i=0;i<14;i++)
{
delay_ms(300);
Text_Cursor_H_V(15-i,1+i);
}
delay_seconds(3);
Disable_Text_Cursor();
BTE_Solid_Fill(0,canvas_image_width,0,32+24+4+28+20+28+28+20+28+108+28+24,0x4410,LCD_width,83);
Foreground_color_65k(White);
Goto_Text_XY(0,32+24+4+28+20+28+28+20+28+108+28+24);
Show_String("Demo graphic cursor:");CGROM_Select_Internal_CGROM(); //選擇內(nèi)部字庫
Font_Select_12x24_24x24();
Set_Graphic_Cursor_Color_1(0xff);
Set_Graphic_Cursor_Color_2(0x00);Graphic_cursor_initial(); //內(nèi)部圖形光標(biāo)
Graphic_Cursor_XY(0,32+24+4+28+20+28+28+20+28+108+28+28+28);
Select_Graphic_Cursor_1();
delay_ms(1000);
Select_Graphic_Cursor_2();
delay_ms(1000);
Select_Graphic_Cursor_3();
delay_ms(1000);
Select_Graphic_Cursor_4();
delay_ms(1000);
Select_Graphic_Cursor_1();
for(j=0;j<6;j++)
{
for(i=0;i<800;i++)
{
Graphic_Cursor_XY(i,32+24+4+28+20+28+28+20+28+108+28+28+28-j*50);
delay_ms(3);
}
}
Graphic_Cursor_XY(0,32+24+4+28+20+28+28+20+28+108+28+28+28);
delay_seconds(3);
Disable_Graphic_Cursor();BMP圖片格式
補(bǔ)充一些說明,BMP圖片即原圖無壓縮,每一個(gè)點(diǎn)是由RGB三個(gè)像素構(gòu)成,如果是24位,則RGB為8:8:8,即3個(gè)字節(jié)表示一個(gè)點(diǎn)。我們畫圖軟件描一張圖,僅紅綠藍(lán)三個(gè)點(diǎn):
用轉(zhuǎn)檔軟件(ImageTool等軟件)取出來點(diǎn)陣數(shù)據(jù)就可以燒進(jìn)FLASH使用,我們可以打開查看數(shù)據(jù)的二進(jìn)制內(nèi)容如下圖,前三個(gè)字節(jié)為取出來是0xFF0000,即表示紅色;接下來是0x00FF00表示綠色;最后一個(gè)是0x0000FF表示藍(lán)色。注意數(shù)據(jù)是LSB->MSB存放,因此倒過來拼在一起。
如果是16位,則RGB為5:6:5,即2個(gè)字節(jié)表示一個(gè)點(diǎn)。我們?cè)俅蜷_查看數(shù)據(jù)的二進(jìn)制內(nèi)容如下圖,前兩個(gè)字節(jié)為取出來是0xF800,即表示紅色;接下來是0x07E0表示綠色;最后一個(gè)是0x001F表示藍(lán)色。
如果是8位,則RGB為3:3:2,即1個(gè)字節(jié)表示一個(gè)點(diǎn)。我們?cè)俅蜷_查看數(shù)據(jù)的二進(jìn)制內(nèi)容如下圖,第一個(gè)字節(jié)為取出來是0xE0,即表示紅色;接下來是0x1C表示綠色;最后一個(gè)是0x03表示藍(lán)色。
BMP圖片存入FLASH的格式即如此,RA8889 / RA8876進(jìn)行DMA調(diào)用就是一點(diǎn)一點(diǎn)讀取,然后再寫入顯存。
液晶屏初始化是8位色、16位色或者24位色,那么也只能顯示相應(yīng)位深的圖片,實(shí)際使用時(shí)打包圖片數(shù)據(jù)要注意選擇好,使圖片數(shù)據(jù)格式與初始化的格式一致。
關(guān)于顯存,下一章節(jié)再進(jìn)行介紹。
第八講 THE END
分享到:
相關(guān)熱詞搜索:RA8889 RA8876 顯示圖片
上一篇:第七講 單片機(jī)驅(qū)動(dòng)彩色液晶屏 顯示文字:Part3.自建字庫
下一篇:第九講 單片機(jī)驅(qū)動(dòng)彩色液晶屏 控制RA8889軟件:認(rèn)識(shí)顯存
>>延伸閱讀:0