📄 ili9320l_16bit.c
字号:
// Read image size
sizeY = *flashAddress;
flashAddress++;
sizeX = *flashAddress;
flashAddress++;
CS_LAT_BIT = 0;
for(y=0; y<sizeY; y++){
tempFlashAddress = flashAddress;
for(stretchY = 0; stretchY<stretch; stretchY++){
flashAddress = tempFlashAddress;
SetAddress(address.v[2],address.v[1],address.v[0]);
for(x=0; x<sizeX; x++){
// Read pixels from flash
temp = *flashAddress;
flashAddress++;
// Set color
SetColor(temp);
// Write pixel to screen
for(stretchX=0; stretchX<stretch; stretchX++){
WriteData(_color.v[1],_color.v[0]);
}
}
address.Val -= 1;
}
}
CS_LAT_BIT = 1;
}
#endif
#ifdef USE_BITMAP_EXTERNAL
/*********************************************************************
* Function: void PutImage1BPPExt(SHORT left, SHORT top, void* bitmap, BYTE stretch)
*
* PreCondition: none
*
* Input: left,top - left top image corner, bitmap - image pointer,
* stretch - image stretch factor
*
* Output: none
*
* Side Effects: none
*
* Overview: outputs monochrome image starting from left,top coordinates
*
* Note: image must be located in flash
*
********************************************************************/
void PutImage1BPPExt(SHORT left, SHORT top, void* bitmap, BYTE stretch){
register DWORD_VAL address;
register DWORD memOffset;
BITMAP_HEADER bmp;
WORD pallete[2];
BYTE lineBuffer[(SCREEN_HOR_SIZE/8)+1];
BYTE* pData;
SHORT byteWidth;
BYTE temp;
BYTE mask;
WORD sizeX, sizeY;
WORD x,y;
BYTE stretchX, stretchY;
// Set start address
address.Val = (long)LINE_MEM_PITCH*left+ top;
// Get bitmap header
ExternalMemoryCallback(bitmap, 0, sizeof(BITMAP_HEADER), &bmp);
// Get pallete (2 entries)
ExternalMemoryCallback(bitmap, sizeof(BITMAP_HEADER), 2*sizeof(WORD), pallete);
// Set offset to the image data
memOffset = sizeof(BITMAP_HEADER) + 2*sizeof(WORD);
// Line width in bytes
byteWidth = bmp.width>>3;
if(bmp.width&0x0007)
byteWidth++;
// Get size
sizeX = bmp.width;
sizeY = bmp.height;
CS_LAT_BIT = 0;
for(y=0; y<sizeY; y++){
// Get line
ExternalMemoryCallback(bitmap, memOffset, byteWidth, lineBuffer);
memOffset += byteWidth;
for(stretchY = 0; stretchY<stretch; stretchY++){
pData = lineBuffer;
SetAddress(address.v[2],address.v[1],address.v[0]);
mask = 0;
for(x=0; x<sizeX; x++){
// Read 8 pixels from flash
if(mask == 0){
temp = *pData++;
mask = 0x80;
}
// Set color
if(mask&temp){
SetColor(pallete[1]);
}else{
SetColor(pallete[0]);
}
// Write pixel to screen
for(stretchX=0; stretchX<stretch; stretchX++){
WriteData(_color.v[1],_color.v[0]);
}
// Shift to the next pixel
mask >>= 1;
}
address.Val -= 1;
}
}
CS_LAT_BIT = 1;
}
/*********************************************************************
* Function: void PutImage4BPPExt(SHORT left, SHORT top, void* bitmap, BYTE stretch)
*
* PreCondition: none
*
* Input: left,top - left top image corner, bitmap - image pointer,
* stretch - image stretch factor
*
* Output: none
*
* Side Effects: none
*
* Overview: outputs monochrome image starting from left,top coordinates
*
* Note: image must be located in flash
*
********************************************************************/
void PutImage4BPPExt(SHORT left, SHORT top, void* bitmap, BYTE stretch){
register DWORD_VAL address;
register DWORD memOffset;
BITMAP_HEADER bmp;
WORD pallete[16];
BYTE lineBuffer[(SCREEN_HOR_SIZE/2)+1];
BYTE* pData;
SHORT byteWidth;
BYTE temp;
WORD sizeX, sizeY;
WORD x,y;
BYTE stretchX, stretchY;
// Set start address
address.Val = (long)LINE_MEM_PITCH*left+ top;
// Get bitmap header
ExternalMemoryCallback(bitmap, 0, sizeof(BITMAP_HEADER), &bmp);
// Get pallete (16 entries)
ExternalMemoryCallback(bitmap, sizeof(BITMAP_HEADER), 16*sizeof(WORD), pallete);
// Set offset to the image data
memOffset = sizeof(BITMAP_HEADER) + 16*sizeof(WORD);
// Line width in bytes
byteWidth = bmp.width>>1;
if(bmp.width&0x0001)
byteWidth++;
// Get size
sizeX = bmp.width;
sizeY = bmp.height;
CS_LAT_BIT = 0;
for(y=0; y<sizeY; y++){
// Get line
ExternalMemoryCallback(bitmap, memOffset, byteWidth, lineBuffer);
memOffset += byteWidth;
for(stretchY = 0; stretchY<stretch; stretchY++){
pData = lineBuffer;
SetAddress(address.v[2],address.v[1],address.v[0]);
for(x=0; x<sizeX; x++){
// Read 2 pixels from flash
if(x&0x0001){
// second pixel in byte
SetColor(pallete[temp>>4]);
}else{
temp = *pData++;
// first pixel in byte
SetColor(pallete[temp&0x0f]);
}
// Write pixel to screen
for(stretchX=0; stretchX<stretch; stretchX++){
WriteData(_color.v[1],_color.v[0]);
}
}
address.Val -= 1;
}
}
CS_LAT_BIT = 1;
}
/*********************************************************************
* Function: void PutImage8BPPExt(SHORT left, SHORT top, void* bitmap, BYTE stretch)
*
* PreCondition: none
*
* Input: left,top - left top image corner, bitmap - image pointer,
* stretch - image stretch factor
*
* Output: none
*
* Side Effects: none
*
* Overview: outputs monochrome image starting from left,top coordinates
*
* Note: image must be located in flash
*
********************************************************************/
void PutImage8BPPExt(SHORT left, SHORT top, void* bitmap, BYTE stretch){
register DWORD_VAL address;
register DWORD memOffset;
BITMAP_HEADER bmp;
WORD pallete[256];
BYTE lineBuffer[SCREEN_HOR_SIZE];
BYTE* pData;
BYTE temp;
WORD sizeX, sizeY;
WORD x,y;
BYTE stretchX, stretchY;
// Set start address
address.Val = (long)LINE_MEM_PITCH*left+ top;
// Get bitmap header
ExternalMemoryCallback(bitmap, 0, sizeof(BITMAP_HEADER), &bmp);
// Get pallete (256 entries)
ExternalMemoryCallback(bitmap, sizeof(BITMAP_HEADER), 256*sizeof(WORD), pallete);
// Set offset to the image data
memOffset = sizeof(BITMAP_HEADER) + 256*sizeof(WORD);
// Get size
sizeX = bmp.width;
sizeY = bmp.height;
CS_LAT_BIT = 0;
for(y=0; y<sizeY; y++){
// Get line
ExternalMemoryCallback(bitmap, memOffset, sizeX, lineBuffer);
memOffset += sizeX;
for(stretchY = 0; stretchY<stretch; stretchY++){
pData = lineBuffer;
SetAddress(address.v[2],address.v[1],address.v[0]);
for(x=0; x<sizeX; x++){
temp = *pData++;
SetColor(pallete[temp]);
// Write pixel to screen
for(stretchX=0; stretchX<stretch; stretchX++){
WriteData(_color.v[1],_color.v[0]);
}
}
address.Val -= 1;
}
}
CS_LAT_BIT = 1;
}
/*********************************************************************
* Function: void PutImage8BPPExt(SHORT left, SHORT top, void* bitmap, BYTE stretch)
*
* PreCondition: none
*
* Input: left,top - left top image corner, bitmap - image pointer,
* stretch - image stretch factor
*
* Output: none
*
* Side Effects: none
*
* Overview: outputs monochrome image starting from left,top coordinates
*
* Note: image must be located in flash
*
********************************************************************/
void PutImage16BPPExt(SHORT left, SHORT top, void* bitmap, BYTE stretch){
register DWORD_VAL address;
register DWORD memOffset;
BITMAP_HEADER bmp;
WORD lineBuffer[SCREEN_HOR_SIZE];
WORD* pData;
WORD byteWidth;
WORD temp;
WORD sizeX, sizeY;
WORD x,y;
BYTE stretchX, stretchY;
// Set start address
address.Val = (long)LINE_MEM_PITCH*left+ top;
// Get bitmap header
ExternalMemoryCallback(bitmap, 0, sizeof(BITMAP_HEADER), &bmp);
// Set offset to the image data
memOffset = sizeof(BITMAP_HEADER);
// Get size
sizeX = bmp.width;
sizeY = bmp.height;
byteWidth = sizeX<<1;
CS_LAT_BIT = 0;
for(y=0; y<sizeY; y++){
// Get line
ExternalMemoryCallback(bitmap, memOffset, byteWidth, lineBuffer);
memOffset += byteWidth;
for(stretchY = 0; stretchY<stretch; stretchY++){
pData = lineBuffer;
SetAddress(address.v[2],address.v[1],address.v[0]);
for(x=0; x<sizeX; x++){
temp = *pData++;
SetColor(temp);
// Write pixel to screen
for(stretchX=0; stretchX<stretch; stretchX++){
WriteData(_color.v[1],_color.v[0]);
}
}
address.Val -= 1;
}
}
CS_LAT_BIT = 1;
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -