亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? tft_c1l5.c

?? ARMSTM32 lcd驅動程序集錦
?? C
?? 第 1 頁 / 共 3 頁
字號:
LOCAL void C1L5_Clear(
						uint32 color	//color to fill the whole lcd.
						)
{
	uint32 i;
	uint16 *buf_ptr = (uint16 *)LCD_GetLCDBuffer();

	uint16  fill_color = color;
	
	for(i=0; i<(C1L5_HEIGHT ); i++)
	{

            dma_request(0, (uint32)&fill_color, (uint32)(buf_ptr + i * C1L5_WIDTH), C1L5_WIDTH, 
                                     1, 1);
		
	}

	C1L5_Invalidate();
}

/******************************************************************************/
//  Description:   Set the windows address to display, in this windows
//                 color is  refreshed.
//	Global resource dependence: 
//  Author:         Jim.zhang
//	Note:
/******************************************************************************/
__inline void C1L5_set_display_window(
	uint8 left, 	// start Horizon address
	uint8 top, 		// start Vertical address
	uint8 right, 	// end Horizon address
	uint8 bottom	// end Vertical address
	)
{
	C1L5_sendcommand1(0x09, left);
	C1L5_sendcommand1(0x10, top);
	C1L5_sendcommand1(0x11, right);
	C1L5_sendcommand1(0x12, bottom);
}


/******************************************************************************/
//  Description:  Set start RAM address which is write to AC(Address
//                Counter) register.
//  Input:
//      left: start Horizon address of AC
//      top: start Vertical address of AC.
//  Return:
//      None.
//	Note:           
/******************************************************************************/
__inline void C1L5_set_start_address(
	uint8 left, 
	uint8 top
	)
{
	C1L5_sendcommand1(0x18, left);
	C1L5_sendcommand1(0x19, top);
}

/******************************************************************************/
//  Description:   invalidate a rectang of in LCD
//	Global resource dependence: 
//  Author:         Jim.zhang
//	Note:
//  modify:  jim.cui  2005.0728  use  dma to transport data  
/******************************************************************************/
LOCAL ERR_LCD_E C1L5_Invalidate(void)
{
	uint16 i,j;
	//uint16 address = 0;
	uint16 *buf_ptr = (uint16 *)LCD_GetLCDBuffer();
	
#ifdef LCD_USE_DMA	
	//uint32  dummy_before,dummy_after;

	C1L5_set_display_window(0, 0, C1L5_WIDTH-1, C1L5_HEIGHT-1);
	C1L5_set_start_address(0, 0);
/*
	address = (uint16) ( (((C1L5_WIDTH - 1 + OFFSET_X) & 0xFF ) << 8 ) | (OFFSET_X));
	C1L5_sendcommand1(0x44, address);		// set horizon address
	address = (uint16) ( ((C1L5_HEIGHT-1) & 0xFF) << 8 );

	C1L5_sendcommand1(0x45, address);	// set vertical address
	C1L5_sendcommand1(0x0021, OFFSET_X);	
*/
	//C1L5_SEND_COMMAND(0x0017); 			// send data.

	//dummy_before =  1 % 4;		// Inserted numbers befor every arrow.
	//dummy_after =  3 - (C1L5_WIDTH % 4);	// Inserted numbers after every arrow.
        
	for(j=0; j<(C1L5_HEIGHT ); j++)
	{

            dma_request(0, (uint32)(buf_ptr + j * C1L5_WIDTH), 0x58020000, C1L5_WIDTH, 
                                     1, 0);
		
	}

#else
	SCI_TRACE_LOW("tft_C1L5.c C1L5_Invalidate line%d", __LINE__);
	
	C1L5_set_display_window(0, 0, C1L5_WIDTH-1, C1L5_HEIGHT-1);
	C1L5_set_start_address(0, 0);
/*
	address = (uint16) ( (((C1L5_WIDTH - 1 + OFFSET_X) & 0xFF ) << 8 ) | (OFFSET_X));
	C1L5_sendcommand1(0x44, address);		// set horizon address
	address = (uint16) ( ((C1L5_HEIGHT-1) & 0xFF) << 8 );

	C1L5_sendcommand1(0x45, address);	// set vertical address
	C1L5_sendcommand1(0x0021, OFFSET_X);	
*/
	//C1L5_SEND_COMMAND(0x0017); 			// send data.
	
	for(i=0; i<(C1L5_WIDTH * C1L5_HEIGHT); i++)
		C1L5_SEND_DATA( *buf_ptr++ );
		
#endif
		
	return ERR_LCD_NONE;
}

/*****************************************************************************/
//  Description:    Get the lcd base information..
//	Global resource dependence: 
//  Author:         louis.wei
//	Note:
/*****************************************************************************/
LOCAL  ERR_LCD_E   C1L5_GetInfo(
								   LCD_INFO_T *lcd_info_ptr	//lcd information struct pointer
								   )
{
	if ( PNULL == lcd_info_ptr )
	{
		return ERR_LCD_POINTER_NULL;	
	}
	
	lcd_info_ptr->r_bitmask			= 0xf800;
	lcd_info_ptr->g_bitmask			= 0x07e0;
	lcd_info_ptr->b_bitmask			= 0x001f;
	lcd_info_ptr->bits_per_pixel	= 16;
	lcd_info_ptr->contrast_min		= 0x00;
	lcd_info_ptr->contrast_max   	= 63;
	lcd_info_ptr->contrast_defaut	= 0x0A;
	
	lcd_info_ptr->lcd_width		= C1L5_WIDTH;
	lcd_info_ptr->lcd_height	= C1L5_HEIGHT;
	lcd_info_ptr->lcdbuff_ptr	= (void *)LCD_GetLCDBuffer();
		
	return ERR_LCD_NONE;
}

/******************************************************************************/
//  Description:   Copy a retangle data from clcd_buffer to display RAM.
//                     then the rectangle display is to be refreshed
//	Global resource dependence: 
//  Author:         Jim.zhang
//	Note:       
//     To improve speed, lcd is operate in HIGH SPEED RAM WRITE MODE(4
//     uint16 are write continuously always.) So, some dummy uint16 
//     should be inserted to satisfy this mode.   Please refer to spec.
//  modify:  jim.cui  2005.0728  use  dma to transport data  
/******************************************************************************/

LOCAL ERR_LCD_E C1L5_InvalidateRect(
	uint16 left, 	//the left value of the rectangel
	uint16 top, 	//top of the rectangle
	uint16 right, 	//right of the rectangle
	uint16 bottom	//bottom of the rectangle
	)
{
	uint32 i, j;
	uint32 dummy_before, dummy_after;
	uint32 row, column,rect_width;
	uint16 *buf_ptr = (uint16 *)LCD_GetLCDBuffer();
	
	//****************************************************
	//**********解決進入攝像模式的問題*******************
    if (LCD_GetRefreshFlag() != TRUE )
		{
		      SCI_TRACE_LOW(" LCD_GetRefreshFlag");
			return ERR_LCD_OPERATE_FAIL ;
		}
	//*****************************************************

	//SCI_TRACE_LOW("tft_C1L5.c C1L5_InvalidateRect line%d: left = %d, top = %d, right = %d, bottom = %d", __LINE__, left, top, right,bottom);
  	left 	= (left >= C1L5_WIDTH)    ? C1L5_WIDTH-1 : left;
	right 	= (right >= C1L5_WIDTH)   ? C1L5_WIDTH-1 : right;
	top 	= (top >= C1L5_HEIGHT)    ? C1L5_HEIGHT-1 : top;
	bottom 	= (bottom >= C1L5_HEIGHT) ? C1L5_HEIGHT-1 : bottom;

	if ( ( right < left ) || ( bottom < top ) )
	{
		return ERR_LCD_PARAMETER_WRONG;
	}
 
 	 	
	C1L5_set_display_window(left, top, right, bottom);
	
	// In High Speed RAM Write Mode. Maybe some dummy data are insterted.
	//dummy_before =  (left) % 4;		// Inserted numbers befor every arrow.
	//dummy_after =  3 - (right % 4);	// Inserted numbers after every arrow.
	
#ifdef LCD_USE_DMA 		
	C1L5_set_start_address(left, top);

	//C1L5_SEND_COMMAND(0x17); 			// send data.
       rect_width = right-left+1;
       
	for (j = top; j <= bottom; j++)
	{	

            dma_request(0, (uint32)(buf_ptr + j * C1L5_WIDTH+left), 0x58020000, rect_width, 
                    1, 0);	
	
	}
#else

	row = bottom - top;
	column = right - left;

	C1L5_set_start_address(left - dummy_before, top);

	//C1L5_SEND_COMMAND(0x17); 			// send data.

	for (i = 0; i <= row; i++)
	{	
		for(j = 0; j<dummy_before; j++) // Insert dummy write befor real write.
			C1L5_SEND_DATA(0x00);
			
		for (j = 0; j <= column; j++)	// real write 
			C1L5_SEND_DATA( *(buf_ptr + (top+i)*C1L5_WIDTH + left+j) );
	
		for(j=0; j<dummy_after; j++)	// Insert dummy write after real write.
			C1L5_SEND_DATA(0x00);
	}			
#endif
	
	return ERR_LCD_NONE;
}

/******************************************************************************/
//  Description:  for mp4 display
//	Global resource dependence: 
//  Author:  juan.zhang

/******************************************************************************/
LOCAL ERR_LCD_E C1L5_InvalidateRectImage(
	uint16 left, 	//the left value of the rectangel
	uint16 top, 	//top of the rectangle
	uint16 right, 	//right of the rectangle
	uint16 bottom,	//bottom of the rectangle
	uint16 *buf_ptr,
	uint8  is_invert//ignore
	)
{
	uint32 i, j;
	uint32 dummy_before, dummy_after;
	uint32 row, column,rect_width;

  	left 	= (left >= MP4_MAX_WIDTH)    ? MP4_MAX_WIDTH-1 : left;
	right 	= (right >= MP4_MAX_WIDTH)   ? MP4_MAX_WIDTH-1 : right;
	top 	= (top >= MP4_MAX_HEIGHT)    ? MP4_MAX_HEIGHT-1 : top;
	bottom 	= (bottom >= MP4_MAX_HEIGHT) ? MP4_MAX_HEIGHT-1 : bottom;

	left = 0;
	right = 127;
	top = 0;
	bottom = 159;	//175;	

	
	if ( ( right < left ) || ( bottom < top ) )
	{
		return ERR_LCD_PARAMETER_WRONG;
	}
 
 	SCI_TRACE_LOW("tft_C1L5.c C1L5_InvalidateRectImage() left=%d,right=%d,top=%d,bottom=%d,is_invert=%d line%d", left,right,top,bottom,is_invert,__LINE__); 	
 	
 	if (is_invert)
	{
		C1L5_sendcommand1(0x17,0x0005 );
	}
	else
	{
		C1L5_sendcommand1(0x17,0x0000 );
	}
 	 	
	C1L5_set_display_window(left, top, right, bottom);
	
	// In High Speed RAM Write Mode. Maybe some dummy data are insterted.
	dummy_before =  (left) % 4;		// Inserted numbers befor every arrow.
	dummy_after =  3 - (right % 4);	// Inserted numbers after every arrow.
	

#if 1	
	//	C1L5_set_display_window(left, top, right, bottom);	
	if (is_invert)
	{
		C1L5_set_start_address(right, top);
	}	    
	else
	{
		C1L5_set_start_address(left, top);
	}    

	//C1L5_SEND_COMMAND(0x17); 			// send data.

	if (is_invert)
	{
		for (j = left; j <= right; j++)
		{		
			for (i = top; i <= bottom; i++)
			{
				C1L5_SEND_DATA( *(buf_ptr + j * 176 + i) ); 
			}
		}			
	}
	else
	{
		for (j = top; j <= bottom; j++)
		{
			for (i = left; i <= right; i++)
			{
				C1L5_SEND_DATA( *(buf_ptr + j * 176 + i) );
			}
		}				
	}	

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久精品国产精品亚洲红杏| 欧美高清性hdvideosex| 欧美午夜精品理论片a级按摩| 91麻豆精品国产综合久久久久久| 欧美国产日韩a欧美在线观看| 午夜私人影院久久久久| 成人国产精品免费观看视频| 91精品国产色综合久久| 一区二区三区在线影院| 国产成人h网站| 91麻豆精品91久久久久久清纯| 日韩码欧中文字| 成人在线视频一区| 欧美xxxx老人做受| 奇米一区二区三区| 欧美视频一区二区| 亚洲精品国产一区二区三区四区在线| 国产高清久久久| 精品国产第一区二区三区观看体验| 五月天亚洲精品| 色94色欧美sute亚洲线路二| 亚洲欧洲国产日韩| 成人国产精品免费| 国产精品美女久久久久aⅴ国产馆| 美国毛片一区二区三区| 欧美人伦禁忌dvd放荡欲情| 亚洲美女视频一区| 97久久久精品综合88久久| 国产精品热久久久久夜色精品三区 | hitomi一区二区三区精品| 日韩一卡二卡三卡四卡| 美女在线视频一区| 精品久久久久久久人人人人传媒| 男男视频亚洲欧美| 欧美mv日韩mv| 狠狠色丁香婷婷综合| 亚洲精品在线网站| 国内成人自拍视频| 国产精品丝袜在线| 99精品久久久久久| 亚洲国产精品一区二区尤物区| 欧美少妇bbb| 日日夜夜免费精品| 日韩手机在线导航| 国产精品77777| 亚洲欧洲三级电影| 欧美午夜一区二区三区| 日韩av在线播放中文字幕| 精品国产自在久精品国产| 国产一区91精品张津瑜| 一区二区中文字幕在线| 91黄色免费版| 奇米777欧美一区二区| 欧美精品一区二区三区在线播放 | 日本一区二区在线不卡| 成人av资源在线观看| 亚洲午夜激情网站| 精品sm在线观看| 不卡欧美aaaaa| 天天影视色香欲综合网老头| 久久亚洲二区三区| 欧美综合天天夜夜久久| 另类欧美日韩国产在线| 日韩美女久久久| 日韩欧美中文字幕公布| 99久久精品国产网站| 日韩综合小视频| 日本一区二区三区免费乱视频| 欧美在线一二三| 国产高清在线精品| 亚洲国产精品久久人人爱| 久久精品视频在线免费观看| 欧美影院一区二区| 国产激情视频一区二区三区欧美| 亚洲乱码国产乱码精品精98午夜 | 中文字幕中文字幕一区二区| 欧美久久久久久蜜桃| 国产激情一区二区三区桃花岛亚洲| 亚洲黄色片在线观看| 精品国产乱码久久久久久蜜臀 | 久久综合色8888| 在线观看亚洲a| 国产成人自拍在线| 男女男精品网站| 夜夜夜精品看看| 国产精品护士白丝一区av| 欧美一区二区三区电影| 色呦呦国产精品| 国产成人午夜精品影院观看视频 | 成人国产精品免费观看视频| 美美哒免费高清在线观看视频一区二区| 亚洲男人的天堂一区二区| 久久精品亚洲精品国产欧美 | 久久99蜜桃精品| 亚洲一级片在线观看| 国产精品国产三级国产a | 国产精品一区二区久久精品爱涩| 亚洲成人先锋电影| 亚洲免费观看在线视频| 欧美激情一区二区三区四区| 精品国产青草久久久久福利| 欧美一区二区视频免费观看| 欧美三级欧美一级| 欧美性大战久久久久久久| 91极品视觉盛宴| 99精品国产99久久久久久白柏| 国产精品亚洲视频| 国产精品一级片| 国产成人精品亚洲午夜麻豆| 国产尤物一区二区| 国产综合一区二区| 国内精品写真在线观看| 久久激情五月婷婷| 激情小说欧美图片| 激情综合网天天干| 国产高清在线精品| 成人av网站在线观看免费| 成人精品国产福利| 北条麻妃一区二区三区| www.日本不卡| 91在线观看成人| 在线免费视频一区二区| 欧美性受极品xxxx喷水| 欧美久久久久久久久| 欧美一区二区三区在线| 欧美成人精精品一区二区频| 久久久欧美精品sm网站| 中文子幕无线码一区tr| 亚洲人成在线播放网站岛国| 亚洲欧洲精品天堂一级| 亚洲高清在线精品| 人禽交欧美网站| 韩国在线一区二区| 成人美女在线视频| 在线观看视频91| 宅男噜噜噜66一区二区66| 久久午夜羞羞影院免费观看| 欧美经典三级视频一区二区三区| 最新中文字幕一区二区三区 | 综合久久一区二区三区| 亚洲一区二区三区影院| 精品在线视频一区| 不卡一区二区在线| 欧美三级电影网| 精品va天堂亚洲国产| 亚洲三级小视频| 久久av资源网| 色拍拍在线精品视频8848| 欧美久久久久久久久久| 中文字幕免费不卡| 天堂蜜桃91精品| 成人免费毛片高清视频| 欧美日韩极品在线观看一区| 久久久久国产免费免费| 亚洲一区二区三区四区在线免费观看 | 亚洲一区二区三区美女| 精品中文字幕一区二区| 色香色香欲天天天影视综合网 | 欧美日韩在线不卡| 国产丝袜欧美中文另类| 亚洲成人av福利| 成人黄色小视频| 精品乱人伦小说| 亚洲成av人片在www色猫咪| 懂色av一区二区夜夜嗨| 7878成人国产在线观看| 亚洲人成影院在线观看| 国产精品一区2区| 7777女厕盗摄久久久| 亚洲蜜臀av乱码久久精品| 国产精品一区二区三区99| 欧美人成免费网站| 亚洲视频免费在线| 国产精品99久久久久久久vr | 国产网红主播福利一区二区| 日韩精品成人一区二区在线| 91在线一区二区三区| 久久久精品国产99久久精品芒果| 丝袜诱惑亚洲看片| 在线免费观看成人短视频| 国产精品女同一区二区三区| 精品一二三四在线| 日韩欧美精品在线视频| 亚洲高清久久久| 日本精品一区二区三区高清| 中文字幕日韩av资源站| 国产精品白丝av| 久久久影视传媒| 激情综合网天天干| 精品欧美乱码久久久久久| 青草国产精品久久久久久| 777a∨成人精品桃花网| 亚洲成人免费看| 欧美日韩一区二区三区四区| 一区二区三区蜜桃网| 一本色道综合亚洲| 一个色综合av| 在线成人高清不卡| 日本不卡不码高清免费观看| 69p69国产精品|