{
//input : uint32 *image_addr
uint16 row,col,image_data_temp;
uint16 *image_addr_temp=NULL;
static uint16 dst_image[4][96] = {0x00};
//one pixel is 16bit
image_addr_temp = (uint16 *)image_addr;
//clear dst_image buffers
for(row=0;row<32;row++)
{
for(col=0;col<96;col++)
{
dst_image[row/8][col] = 0x00;
}
}
//fill dst_image buffers
for(col=0;col<96;col++)
{
for(row=0;row<32;row++)
{
image_addr_temp = (uint16 *)image_addr;
image_data_temp = *(image_addr_temp+96*row+col);
if((((image_data_temp&0xf800)>>11) + /
((image_data_temp&0x07e0)>>5) + /
(image_data_temp&0x001f))/3 > 20)//transform rgb565 to black-white image
{
dst_image[row/8][col] |= 1<<(row%8);
}
else
{
dst_image[row/8][col] |= 0<<(row%8);
}
}
}
//then the dst_image buffer is the OLED data that it needed
image_addr = (uint32 *)&dst_image[0][0];
}
OLED data example as following:
(Start Column)--> (End Col)
--------------------------------|-------------------------------------------------------------|-----
| | | | | | |0| | <- LSB D0 | | | | | | | |
| | | | | | |1| | | | | | | | | |
PAGE(n) | | | | | | |1| | | | | | | | | |
(Start page) | | | | | | |0| | | | | | | | | |
| | | | | | |0| | .................... | | | | | | | |
| | | | | | |1| | | | | | | | | |
| | | | | | |0| | | | | | | | | |
| | | | | | |1| | <- MSB D7 | | | | | | | |
-----------------------------------------------------------------------------------------------------