⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lcd2.0_hx8309_220x176_16_v1.c

📁 HX8309驱动
💻 C
📖 第 1 页 / 共 2 页
字号:


//void LCD_ReadBitmap(int x0, int y0, int xsize, int ysize, unsigned int *pData)
//{
//	int x1, y1;
//	x1 = x0+xsize-1; 
//	y1 = y0+ysize-1; 
//	LCDDEV_SetWindow(x0, y0, x1, y1);
//	read_XDATA(LCD_DATA);
//	for(y1=0; y1<ysize; y1++){
//		for(x1=0; x1<xsize; x1++){
//			*pData++ = read_XDATA(LCD_DATA);
//		}
//	}
//
//	LCDDEV_RevertWindow(0, 0, LCD_MAX_XSIZE-1, LCD_MAX_YSIZE-1);
//}


unsigned int LCDDEV_GetPixel(int x, int y)
{
	unsigned int color;
	
	LCD_Reg_Set(0x0021, (y<<8 | x));	
	color = read_XDATA(LCD_DATA);
	color = read_XDATA(LCD_DATA);
	return(color);	
}


void LCDDEV_SetPixel(int x, int y, unsigned int color)
{
	  unsigned short i;
	  i = (x<<8) + y ;
    LCD_Reg_Set(0x0021,i) ;
    
    LCD_Command(0x0022) ;	
	  LCD_Data(color) ;	        //color表示RGB值, 这个函数的功能是往(x,y)写入color值

}


void LCDDEV_XorPixel(int x, int y)
{
	unsigned int color;
	color = LCDDEV_GetPixel(x,y);
	LCDDEV_SetPixel(x,y,0xFFFF-color);			
}


void LCDDEV_DrawHLine(int x0, int y, int x1)
{
	if (LCD_Context.DrawMode & LCD_DRAWMODE_XOR){
		for(; x0<=x1; x0++){
			LCDDEV_XorPixel(x0, y);
		}
	}else{
		LCDDEV_SetWindow(x0, y, x1, y);
		for(; x0<=x1; x0++){
			LCD_Data(LCD_COLOR);
		}
		LCDDEV_RevertWindow(0, 0, LCD_MAX_XSIZE-1, LCD_MAX_YSIZE-1);
	}
}

void LCDDEV_DrawVLine(int x, int y0, int y1)
{
	if (LCD_Context.DrawMode & LCD_DRAWMODE_XOR){
		for(; y0<=y1; y0++){
			LCDDEV_XorPixel(x, y0);
		}
	}else{
		LCDDEV_SetWindow(x, y0, x, y1);
		for(; y0<=y1; y0++){
			LCD_Data(LCD_COLOR);
		}	
		LCDDEV_RevertWindow(0, 0, LCD_MAX_XSIZE-1, LCD_MAX_YSIZE-1);
	}
}

void LCDDEV_FillRect(int x0, int y0, int x1, int y1)
{
	int i;
	if (LCD_Context.DrawMode & LCD_DRAWMODE_XOR){
		for(; y0<=y1; y0++){
			LCDDEV_DrawHLine(x0, y0, x1);
		}
	}else{
		LCDDEV_SetWindow(x0, y0, x1, y1);
		for(; y0<=y1 ; y0++){
			i = x0;
			for(; i<=x1; i++){
				LCD_Data(LCD_COLOR);
			}
		}
		
		LCDDEV_RevertWindow(0, 0, LCD_MAX_XSIZE-1, LCD_MAX_YSIZE-1);
	}
}

void LCDDEV_DrawBitLine1BPP(int x, int y, int xsize, int Diff, unsigned int *pData) 
{
  	x += Diff;

	switch(LCD_Context.DrawMode){
		case LCD_DRAWMODE_REV:
			while(xsize){
				if(*pData & (0x8000 >> Diff))
					LCD_SetPixel(x, y, LCD_BKCOLOR);
				else
					LCD_SetPixel(x, y, LCD_COLOR);
				x++;
				xsize--;
				if(++Diff == 16){
					Diff = 0;
					pData++;
				}
			}
			break;
		case LCD_DRAWMODE_TRANS:
			while(xsize){
				if(*pData & (0x8000 >> Diff))
					LCD_SetPixel(x, y, LCD_COLOR);
				x++;
				xsize--;
				if(++Diff == 16){
					Diff = 0;
					pData++;
				}
			}
			break;
		case LCD_DRAWMODE_XOR:
			while(xsize){
				if(*pData & (0x8000 >> Diff))
					LCD_XorPixel(x,y);
				x++;
				xsize--;
				if(++Diff == 16){
					Diff = 0;
					pData++;
				}
			}
			break;
	    case LCD_DRAWMODE_CIR90:
	        while(xsize){
				if(*pData & (0x8000 >> Diff))
					LCD_SetPixel(x, y, LCD_COLOR);
				y++;
				xsize--;
				if(++Diff == 16){
					Diff = 0;
					pData++;
				}
			}
	        break;
		default:
		    while(xsize){
				if(*pData & (0x8000 >> Diff))
					LCD_SetPixel(x, y, LCD_COLOR);
				else
					LCD_SetPixel(x, y, LCD_BKCOLOR);
				x++;
				xsize--;
				if(++Diff == 16){
					Diff = 0;
					pData++;
				}
			}
			break;
	}	
}
//#ifdef LCD_SWITCH_XY
//void LCDDEV_DrawBitLine1BPP(int x, int y, int xsize, int Diff, unsigned int *pData) 
//{
//  	x += Diff;
//
//	switch(LCD_Context.DrawMode){
//		case LCD_DRAWMODE_REV:
//			while(xsize){
//				if(*pData & (0x8000 >> Diff))
//					LCD_SetPixel(y, x, LCD_BKCOLOR);
//				else
//					LCD_SetPixel(y, x, LCD_COLOR);
//				x++;
//				xsize--;
//				if(++Diff == 16){
//					Diff = 0;
//					pData++;
//				}
//			}
//			break;
//		case LCD_DRAWMODE_TRANS:
//			while(xsize){
//				if(*pData & (0x8000 >> Diff))
//					LCD_SetPixel(y, x, LCD_COLOR);
//				x++;
//				xsize--;
//				if(++Diff == 16){
//					Diff = 0;
//					pData++;
//				}
//			}
//			break;
//		case LCD_DRAWMODE_XOR:
//			while(xsize){
//				if(*pData & (0x8000 >> Diff))
//					LCD_XorPixel(y,x);
//				x++;
//				xsize--;
//				if(++Diff == 16){
//					Diff = 0;
//					pData++;
//				}
//			}
//			break;
//		default:
//			while(xsize){
//				if(*pData & (0x8000 >> Diff))
//					LCD_SetPixel(y, x, LCD_COLOR);
//				else
//					LCD_SetPixel(y, x, LCD_BKCOLOR);
//				x++;
//				xsize--;
//				if(++Diff == 16){
//					Diff = 0;
//					pData++;
//				}
//			}
//			break;
//	}	
//}
//#else
//void LCDDEV_DrawBitLine1BPP(int x, int y, int xsize, int Diff, unsigned int *pData) 
//{
//  	x += Diff;
//
//	switch(LCD_Context.DrawMode & (LCD_DRAWMODE_TRANS | LCD_DRAWMODE_XOR)){
//		case 0:
//			while(xsize){
//				if(*pData & (0x8000 >> Diff))
//					LCD_SetPixel(x, y, LCD_COLOR);
//				else
//					LCD_SetPixel(x, y, LCD_BKCOLOR);
//				x++;
//				xsize--;
//				if(++Diff == 16){
//					Diff = 0;
//					pData++;
//				}
//			}
//			break;
//		case LCD_DRAWMODE_TRANS:
//			while(xsize){
//				if(*pData & (0x8000 >> Diff))
//					LCD_SetPixel(x, y, LCD_COLOR);
//				x++;
//				xsize--;
//				if(++Diff == 16){
//					Diff = 0;
//					pData++;
//				}
//			}
//			break;
//		case LCD_DRAWMODE_XOR:
//			while(xsize){
//				if(*pData & (0x8000 >> Diff))
//					LCD_XorPixel(x,y);
//				x++;
//				xsize--;
//				if(++Diff == 16){
//					Diff = 0;
//					pData++;
//				}
//			}
//			break;
//		default:
//			break;
//	}	
//}
//#endif

void LCDDEV_DrawBitLine16BPP(int x0, int y0, int xsize, int ysize, unsigned int *pData) 
{
	int x1,y1;
	unsigned int i;
	
	x1 = x0+xsize-1;
	y1 = y0+ysize-1;
	LCDDEV_SetWindow(x0, y0, x1, y1);
	for(; ysize>0; ysize--){
		i = xsize;
		for(; i>0; i--){
			#ifdef  Parallel8
			write_mem(LCD_DATA,*pData>>8);
    	    #endif
    	    write_mem(LCD_DATA,*pData++);
		}
	}
		
	LCDDEV_RevertWindow(0, 0, LCD_MAX_XSIZE-1, LCD_MAX_YSIZE-1);
}


void LCDDEV_DrawBitmap(int x0,    		int y0,
                       int xsize, 		int ysize,
                       int BitsPerPixel,	int BytesPerLine,
                       unsigned int *pData, 		int Diff)
{
  	int i;
   	switch (BitsPerPixel) {
   		case 1:
   		    if(LCD_Context.DrawMode == LCD_DRAWMODE_CIR90){
                for(i=0; i<ysize; i++){
   	                LCDDEV_DrawBitLine1BPP(x0+i, y0, xsize, Diff, pData);
   	                pData += BytesPerLine;
   	                }
   		    }else{
   			    for(i=0; i<ysize; i++){ 
   				    LCDDEV_DrawBitLine1BPP(x0, i+y0, xsize, Diff, pData);
   				    pData += BytesPerLine;
   			    }
   			}
   			break;
   		case 16:
       		LCDDEV_SetWindow(x0, y0, x0+xsize-1, y0+ysize-1);
       		for(; ysize > 0; ysize--){
       		    LCDDEV_DrawBitLine16BPP(x0, y0++, xsize, 1, pData);
       		    pData += BytesPerLine;
       		} 
       		LCDDEV_RevertWindow(0, 0, LCD_MAX_XSIZE-1, LCD_MAX_YSIZE-1);
       	break;
   	}
}


//length
void DMA_LcdJpegInitX(void)
{
	LCD_Reg_Set(0x0001,0x001B);//180度转向0x001B
	
	LCD_Reg_Set(0x0002,0x0400); 
    LCD_Reg_Set(0x0003,0x1038); //6020

	LCD_Reg_Set(0x0004,0x0000);
	LCD_Reg_Set(0x0005,0x0000);
	//LCD_Reg_Set(0x0007,0x0004);
	LCD_Reg_Set(0x0008,0x0202);
	LCD_Reg_Set(0x0009,0x0000);
	LCD_Reg_Set(0x000B,0x0000);
	LCD_Reg_Set(0x000C,0x0003);
	
//	LCD_Reg_Set(0x0040,0x0000);
//	LCD_Reg_Set(0x0041,0x00ef); //00ef
//	LCD_Reg_Set(0x0042,0xDB00);
//	LCD_Reg_Set(0x0043,0xDB00);
//	
//	LCD_Reg_Set(0x0021,0x0000);
//	LCD_Reg_Set(0x0023,0x0000);
//	LCD_Reg_Set(0x0024,0x0000);
//	LCD_Reg_Set(0x0044,0xAF00);
//	LCD_Reg_Set(0x0045,0xDB00);
	
	LCD_Reg_Set(0x0021, 0x0000);
	LCD_Command(0x0022);		
}


//weight
void DMA_LcdJpegInit(void)
{
	LCD_Reg_Set(0x0001,0x011B);
	
	LCD_Reg_Set(0x0002,0x0400); 
    LCD_Reg_Set(0x0003,0x1030); //6020

	LCD_Reg_Set(0x0004,0x0000);
	LCD_Reg_Set(0x0005,0x0000);
	//LCD_Reg_Set(0x0007,0x0004);
	LCD_Reg_Set(0x0008,0x0202);
	LCD_Reg_Set(0x0009,0x0000);
	LCD_Reg_Set(0x000B,0x0000);
	LCD_Reg_Set(0x000C,0x0003);
	
//	LCD_Reg_Set(0x0040,0x0000);
//	LCD_Reg_Set(0x0041,0x00ef); //00ef
//	LCD_Reg_Set(0x0042,0xDB00);
//	LCD_Reg_Set(0x0043,0xDB00);
//	
//	LCD_Reg_Set(0x0021,0x0000);
//	LCD_Reg_Set(0x0023,0x0000);
//	LCD_Reg_Set(0x0024,0x0000);
//	LCD_Reg_Set(0x0044,0xAF00);
//	LCD_Reg_Set(0x0045,0xDB00);
	
	LCD_Reg_Set(0x0021, 0x0000);
	LCD_Command(0x0022);	
}


          
//******************************************************************************


        

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -