FLASH芯片W25Q16中放入圖片后用單片機(jī)讀取顯示
下面,瑞生介紹一種方法給大家,只利用一顆FLASH芯片W25Q16即可用你的單片機(jī)把圖片顯示到TFT液晶屏上。
原理:W25Q16是一顆FLASH芯片,可以存儲(chǔ)數(shù)據(jù),共2M字節(jié)。把圖片搞成二進(jìn)制bin文件,通過(guò)串口調(diào)試助手把這個(gè)文件傳給單片機(jī),單片機(jī)再把接收到的數(shù)據(jù)通過(guò)SPI口傳給W25Q16,這樣圖片就永久的保存下來(lái)了。顯示圖片的時(shí)候,單片機(jī)通過(guò)SPI口讀取W25Q16中的圖片數(shù)據(jù),然后解碼顯示到液晶屏上。
1.把圖片搞成二進(jìn)制bin文件
這里需要用到一個(gè)軟件:Image2LCD(百度可以下載)
打開(kāi)軟件如下圖所示:
點(diǎn)擊左上角“打開(kāi)”,選擇一張圖片打開(kāi),并按照下面圖片顯示的配置
點(diǎn)擊“保存”按鈕,保存到你的電腦某個(gè)位置即可。二進(jìn)制bin文件就做好了。
2.把bin文件裝到W25Q16里面
要把bin文件裝到W25Q16里面,通過(guò)前面講的原理,我們得寫(xiě)個(gè)單片機(jī)程序。程序的流程為:串口接收到一個(gè)字節(jié),把字節(jié)通過(guò)SPI口傳到W25Q16,再接收到一個(gè)字節(jié),再傳一個(gè),如此循環(huán)……。這個(gè)程序簡(jiǎn)單吧?這個(gè)功能最好用串口中斷完成。
下面是串口中斷函數(shù),負(fù)責(zé)接收串口數(shù)據(jù)和把接收到的數(shù)據(jù)寫(xiě)到W25Q16:
voidUART_IRQHandler(void){uint32IRQ_ID;//定義讀取中斷ID號(hào)變量uint8buf[1]={0x00};//定義接收數(shù)據(jù)變量數(shù)組
IRQ_ID=UART->IIR;//讀中斷ID號(hào)IRQ_ID=((IRQ_ID>>1)&0x7);//檢測(cè)bit4:bit1if(IRQ_ID==0x02)//檢測(cè)是不是接收數(shù)據(jù)引起的中斷{buf[0]=UART->RBR;//從RXFIFO中讀取接收到的數(shù)據(jù)W25X16_Write_Page(buf,flash_addr,1);//把數(shù)據(jù)寫(xiě)到W25X16中flash_addr++;}return;}
寫(xiě)好程序以后,連接好單片機(jī)和電腦的串口,打開(kāi)串口調(diào)試助手,選好波特率,選好串口號(hào),然后點(diǎn)擊“選擇發(fā)送文件”按鈕,如下圖所示:
選擇你剛才做好的bin文件,然后點(diǎn)擊“發(fā)送文件”按鈕,顯示“正在發(fā)送”。如下圖:
等上個(gè)幾秒鐘,顯示發(fā)送完成,并顯示發(fā)送了多少個(gè)字節(jié)。如下圖:
為什么是一共發(fā)送了153600個(gè)字節(jié),讓我們來(lái)算一下吧。TFT真彩屏,一個(gè)像素點(diǎn)需要用2個(gè)字節(jié)表示,240*320的屏,就需要240X340X2=153600個(gè)字節(jié)。
這時(shí)候,圖片數(shù)據(jù)就下載完成了。
3.從W25Q16里面讀取圖片數(shù)據(jù)并顯示到TFT上
下面是顯示圖片的關(guān)鍵函數(shù):
voidLCD_ShowPic(uint16xstart,uint16ystart,uint16xend,uint16yend,uint32pic_add){uint32max,i;uint8pic_buf[2];//用于存放一個(gè)點(diǎn)的顏色值
LCD_XYRAM(xstart,ystart,xend,yend);//設(shè)置GRAM坐標(biāo)LCD_WR_REG_DATA(0x0020,xstart);//設(shè)置X坐標(biāo)位置LCD_WR_REG_DATA(0x0021,ystart);//設(shè)置Y坐標(biāo)位置LCD_WR_REG(0x0022);//指向RAM寄存器,準(zhǔn)備寫(xiě)數(shù)據(jù)到RAMW25X16_Write_Enable();//允許寫(xiě)W25X16max=((uint32)(xend-xstart+1)*(uint32)(yend-ystart+1))*2;//得到顯示圖片的數(shù)據(jù)大小
for(i=0;i調(diào)用這個(gè)函數(shù),就可以顯示圖片了!
4.總結(jié)
接收一個(gè)字節(jié)并存儲(chǔ)到W25Q16中,這個(gè)需要很快的速度,主頻低的單片機(jī)是做不到的。我的實(shí)驗(yàn)中,用到的是ARM Cortex-M0內(nèi)核的單片機(jī)LPC1114。