📄 ili9320l_16bit.c
字号:
* Input: none
*
* Output: none
*
* Side Effects: none
*
* Overview: clears screen with current color
*
* Note: none
*
********************************************************************/
void ClearDevice(void){
DWORD counter;
CS_LAT_BIT = 0;
SetAddress(0,0,0);
for(counter=0; counter<(DWORD)(GetMaxX()+1)*(GetMaxY()+1); counter++){
WriteData(_color.v[1],_color.v[0]);
}
CS_LAT_BIT = 1;
}
/*********************************************************************
* Function: void PutImage(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 image starting from left,top coordinates
*
* Note: image must be located in flash
*
********************************************************************/
void PutImage(SHORT left, SHORT top, void* bitmap, BYTE stretch){
FLASH_BYTE* flashAddress;
BYTE colorDepth;
WORD colorTemp;
top = GetMaxY() - top;
// Save current color
colorTemp = _color.Val;
switch(*((SHORT*)bitmap))
{
#ifdef USE_BITMAP_FLASH
case FLASH:
// Image address
flashAddress = ((BITMAP_FLASH*)bitmap)->address;
// Read color depth
colorDepth = *(flashAddress+1);
// Draw picture
switch(colorDepth){
case 1:
PutImage1BPP(left, top, flashAddress, stretch);
break;
case 4:
PutImage4BPP(left, top, flashAddress, stretch);
break;
case 8:
PutImage8BPP(left, top, flashAddress, stretch);
break;
case 16:
PutImage16BPP(left, top, flashAddress, stretch);
break;
}
break;
#endif
#ifdef USE_BITMAP_EXTERNAL
case EXTERNAL:
// Get color depth
ExternalMemoryCallback(bitmap, 1, 1, &colorDepth);
// Draw picture
switch(colorDepth){
case 1:
PutImage1BPPExt(left, top, bitmap, stretch);
break;
case 4:
PutImage4BPPExt(left, top, bitmap, stretch);
break;
case 8:
PutImage8BPPExt(left, top, bitmap, stretch);
break;
case 16:
PutImage16BPPExt(left, top, bitmap, stretch);
break;
default:
break;
}
break;
#endif
default:
break;
}
// Restore current color
_color.Val = colorTemp;
}
#ifdef USE_BITMAP_FLASH
/*********************************************************************
* Function: void PutImage1BPP(SHORT left, SHORT top, FLASH_BYTE* 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 PutImage1BPP(SHORT left, SHORT top, FLASH_BYTE* bitmap, BYTE stretch){
register DWORD_VAL address;
register FLASH_BYTE* flashAddress;
register FLASH_BYTE* tempFlashAddress;
BYTE temp;
WORD sizeX, sizeY;
WORD x,y;
BYTE stretchX,stretchY;
WORD pallete[2];
BYTE mask;
// Move pointer to size information
flashAddress = bitmap + 2;
// Set start address
address.Val = (long)LINE_MEM_PITCH*left+ top;
// Read image size
sizeY = *((FLASH_WORD*)flashAddress);
flashAddress += 2;
sizeX = *((FLASH_WORD*)flashAddress);
flashAddress += 2;
pallete[0] = *((FLASH_WORD*)flashAddress);
flashAddress += 2;
pallete[1] = *((FLASH_WORD*)flashAddress);
flashAddress += 2;
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]);
mask = 0;
for(x=0; x<sizeX; x++){
// Read 8 pixels from flash
if(mask == 0){
temp = *flashAddress;
flashAddress++;
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 PutImage4BPP(SHORT left, SHORT top, FLASH_BYTE* 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 16 color image starting from left,top coordinates
*
* Note: image must be located in flash
*
********************************************************************/
void PutImage4BPP(SHORT left, SHORT top, FLASH_BYTE* bitmap, BYTE stretch){
register DWORD_VAL address;
register FLASH_BYTE* flashAddress;
register FLASH_BYTE* tempFlashAddress;
WORD sizeX, sizeY;
register WORD x,y;
BYTE temp;
register BYTE stretchX,stretchY;
WORD pallete[16];
WORD counter;
// Move pointer to size information
flashAddress = bitmap + 2;
// Set start address
address.Val = (long)LINE_MEM_PITCH*left+ top;
// Read image size
sizeY = *((FLASH_WORD*)flashAddress);
flashAddress += 2;
sizeX = *((FLASH_WORD*)flashAddress);
flashAddress += 2;
// Read pallete
for(counter=0;counter<16;counter++){
pallete[counter] = *((FLASH_WORD*)flashAddress);
flashAddress += 2;
}
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 2 pixels from flash
if(x&0x0001){
// second pixel in byte
SetColor(pallete[temp>>4]);
}else{
temp = *flashAddress;
flashAddress++;
// 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]);
}
// Shift to the next pixel
//temp >>= 4;
}
address.Val -= 1;
}
}
CS_LAT_BIT = 1;
}
/*********************************************************************
* Function: void PutImage8BPP(SHORT left, SHORT top, FLASH_BYTE* 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 256 color image starting from left,top coordinates
*
* Note: image must be located in flash
*
********************************************************************/
void PutImage8BPP(SHORT left, SHORT top, FLASH_BYTE* bitmap, BYTE stretch){
register DWORD_VAL address;
register FLASH_BYTE* flashAddress;
register FLASH_BYTE* tempFlashAddress;
WORD sizeX, sizeY;
WORD x,y;
BYTE temp;
BYTE stretchX, stretchY;
WORD pallete[256];
WORD counter;
// Move pointer to size information
flashAddress = bitmap + 2;
// Set start address
address.Val = (long)LINE_MEM_PITCH*left+ top;
// Read image size
sizeY = *((FLASH_WORD*)flashAddress);
flashAddress += 2;
sizeX = *((FLASH_WORD*)flashAddress);
flashAddress += 2;
// Read pallete
for(counter=0;counter<256;counter++){
pallete[counter] = *((FLASH_WORD*)flashAddress);
flashAddress += 2;
}
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(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 PutImage16BPP(SHORT left, SHORT top, FLASH_BYTE* 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 hicolor image starting from left,top coordinates
*
* Note: image must be located in flash
*
********************************************************************/
void PutImage16BPP(SHORT left, SHORT top, FLASH_BYTE* bitmap, BYTE stretch){
register DWORD_VAL address;
register FLASH_WORD* flashAddress;
register FLASH_WORD* tempFlashAddress;
WORD sizeX, sizeY;
register WORD x,y;
WORD temp;
register BYTE stretchX,stretchY;
// Move pointer to size information
flashAddress = (FLASH_WORD*)bitmap + 1;
// Set start address
address.Val = (long)LINE_MEM_PITCH*left+ top;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -