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

📄 lcdlib.c

📁 ucos-II+移植到arm+s3c2410的全套代码
💻 C
📖 第 1 页 / 共 2 页
字号:
	for(j=0;j<LCDHEIGHT;j++){
		for(i=0;i<LCDColumn;i++){
			data=0;
			showrow=LCDCurrentDspTxt+j/LCDTxtMode_TxtHeight;
			if(showrow>LCDRow-1)
				showrow-=LCDRow;
			txtdata=LCDTxtBuffer[showrow][i];
			if(txtdata>=128)
				txtdata=' ';
			txtdata=LCDTxtData[txtdata][j%LCDTxtMode_TxtHeight];

	#if(LCDDATA_ORDER == LCDDATA_SWAPW)	//高低字交换
			*pLCDBuffer=((txtdata>>7)&0x1)*0xff;
			pLCDBuffer++;
			*pLCDBuffer=((txtdata>>6)&0x1)*0xff;
			pLCDBuffer++;
			*pLCDBuffer=((txtdata>>5)&0x1)*0xff;
			pLCDBuffer++;
			*pLCDBuffer=((txtdata>>4)&0x1)*0xff;
			pLCDBuffer++;
			*pLCDBuffer=((txtdata>>3)&0x1)*0xff;
			pLCDBuffer++;
			*pLCDBuffer=((txtdata>>2)&0x1)*0xff;
			pLCDBuffer++;
			*pLCDBuffer=((txtdata>>1)&0x1)*0xff;
			pLCDBuffer++;
			*pLCDBuffer=((txtdata>>0)&0x1)*0xff;
			pLCDBuffer++;
	#else
			*pLCDBuffer=((txtdata>>4)&0x1)*0xff;
			pLCDBuffer++;
			*pLCDBuffer=((txtdata>>5)&0x1)*0xff;
			pLCDBuffer++;
			*pLCDBuffer=((txtdata>>6)&0x1)*0xff;
			pLCDBuffer++;
			*pLCDBuffer=((txtdata>>7)&0x1)*0xff;
			pLCDBuffer++;
			*pLCDBuffer=((txtdata>>0)&0x1)*0xff;
			pLCDBuffer++;
			*pLCDBuffer=((txtdata>>1)&0x1)*0xff;
			pLCDBuffer++;
			*pLCDBuffer=((txtdata>>2)&0x1)*0xff;
			pLCDBuffer++;
			*pLCDBuffer=((txtdata>>3)&0x1)*0xff;
			pLCDBuffer++;
	#endif
		}
	}

#elif (LCDCOLOR==COLOR64K)
	unsigned short int *pLCDBuffer=(unsigned short int *)pLCDFB;
	
	for(j=0;j<LCDHEIGHT;j++){
		for(i=0;i<LCDColumn;i++){
			data=0;
			showrow=LCDCurrentDspTxt+j/LCDTxtMode_TxtHeight;
			if(showrow>LCDRow-1)
				showrow-=LCDRow;
			txtdata=LCDTxtBuffer[showrow][i];
			if(txtdata>=128)
				txtdata=' ';
			txtdata=LCDTxtData[txtdata][j%LCDTxtMode_TxtHeight];

			*pLCDBuffer=((txtdata>>7)&0x1)*0xffff;
			pLCDBuffer++;
			*pLCDBuffer=((txtdata>>6)&0x1)*0xffff;
			pLCDBuffer++;
			*pLCDBuffer=((txtdata>>5)&0x1)*0xffff;
			pLCDBuffer++;
			*pLCDBuffer=((txtdata>>4)&0x1)*0xffff;
			pLCDBuffer++;
			*pLCDBuffer=((txtdata>>3)&0x1)*0xffff;
			pLCDBuffer++;
			*pLCDBuffer=((txtdata>>2)&0x1)*0xffff;
			pLCDBuffer++;
			*pLCDBuffer=((txtdata>>1)&0x1)*0xffff;
			pLCDBuffer++;
			*pLCDBuffer=((txtdata>>0)&0x1)*0xffff;
			pLCDBuffer++;
		}
	}
#endif
}

void LCD_printf(const char *format,...)
{
	int i,j=0;
	int LCDCurrentDspTxt=0;
	va_list v_list;
	char *ptr;
	static char tbuf[256];

	va_start(v_list, format);     // Initialize variable arguments. 
	vsprintf(tbuf, format, v_list ); 
	va_end(v_list);

	ptr= tbuf;

	if(LCDdspMode!=DspTxtMode)
		return;

	/*格式化字符串*/
	for(i=0;ptr[i]!=0;i++){
		if(ptr[i]=='\n'){	//换行
			LCDCurrentPrnTxt++;
			if(LCDCurrentPrnTxt>LCDRow-1){
				LCDCurrentPrnTxt-=LCDRow;
				LCDIsprnOverPage=TRUE;
			}
			if(LCDIsprnOverPage)
				LCDCurrentDspTxt=LCDCurrentPrnTxt;

			for(;j<LCDColumn;j++)	//补齐空格
				LCDTxtBuffer[LCDCurrentPrnTxt][j]=0;
			j=0;
		}
		else{
			if(j<LCDColumn)
				LCDTxtBuffer[LCDCurrentPrnTxt][j++]=ptr[i];
		}
	}
	LCD_TxtRefresh(LCDCurrentDspTxt);
}

void LCD_ChangeMode(int mode)
{
	LCDdspMode=mode;
}

#if (USE_MINIGUI==0) && (DIRECT_DISPLAY==0)
extern U32 LCDBuffer[LCDHEIGHT][LCDWIDTH];
//extern U32 *LCDBuffer[];

void LCD_Refresh()
{
	int i,j;
	U32 lcddata;
	U32 pixcolor;	//一个像素点的颜色
	U32 *p=pLCDFB;
	U8* pbuf=(U8*)LCDBuffer[0];

	if(LCDdspMode!=DspGraMode)
		return;

#if (LCDCOLOR==GRAY16)
	for(i=0;i<LCDWIDTH*LCDHEIGHT/8;i++){
		lcddata=0;
		for(j=28;j>=0;j-=4){
			pixcolor=0xf-(pbuf[0]+pbuf[1]+pbuf[2])/48;	//变换RGB色彩为灰度
			lcddata|=pixcolor<<j;
			pbuf+=4;
		}

		#if(LCDDATA_ORDER == LCDDATA_SWAPW)	//高低字交换
			lcddata=(lcddata>>16)|(lcddata<<16);
		#endif

		*(pLCDFB+i)=lcddata;
	}
#elif (LCDCOLOR==COLOR256)

	for(i=0;i<LCDWIDTH*LCDHEIGHT/4;i++){
		lcddata=0;
	#if(LCDDATA_ORDER == LCDDATA_SWAPW)	//高低字交换
		for(j=0;j<32;j+=8){
			pixcolor=(pbuf[0]&0xe0)|((pbuf[1]>>3)&0x1c)|(pbuf[2]>>6);	//变换RGB
				//		R			G					B
			lcddata|=pixcolor<<j;
			pbuf+=4;
		}
	#else
		for(j=24;j>=0;j-=8){
			pixcolor=(pbuf[0]&0xe0)|((pbuf[1]>>3)&0x1c)|(pbuf[2]>>6);	//变换RGB
				//		R			G					B
			lcddata|=pixcolor<<j;
			pbuf+=4;
		}
	#endif
		*p=lcddata;
		p++;
	}
#elif (LCDCOLOR==COLOR64K)
//#define RGB888_RGB565(p)	((p[0]>>3)|((p[1]&0xfc)<<3)|((p[2]&0xf8)<<8))
				//		R			G					B
#define RGB888_RGB565(p)	((p[2]>>3)|((p[1]&0xfc)<<3)|((p[0]&0xf8)<<8))

	for(i=0;i<LCDWIDTH*LCDHEIGHT/2;i++){
		pixcolor=RGB888_RGB565(pbuf);	//变换RGB
		lcddata=pixcolor;
		pbuf+=4;

		pixcolor=RGB888_RGB565(pbuf);	//变换RGB
		lcddata|=pixcolor<<16;
		pbuf+=4;

		*p=lcddata;
		p++;
	}

#endif
}

#endif //#if (USE_MINIGUI==0) && (DIRECT_DISPLAY==0)

//文本模式下清除屏幕?
void LCD_Cls() 
{
	LCDCurrentPrnTxt=0,	//打印文本所在的行
	LCDIsprnOverPage=FALSE;

	memset(LCDTxtBuffer,0,LCDRow*LCDColumn);
}

void LCD_TestShow()
{
	int i,j;
	for(j=0;j<LCDHEIGHT;j+=16){
		for(i=0;i<40;i++){
			*(pLCDFB+0+i+j*40)=0xffffffff;
			*(pLCDFB+40+i+j*40)=0xeeeeeeee;
			*(pLCDFB+80+i+j*40)=0xdddddddd;
			*(pLCDFB+120+i+j*40)=0xcccccccc;
			*(pLCDFB+160+i+j*40)=0xbbbbbbbb;
			*(pLCDFB+200+i+j*40)=0xaaaaaaaa;
			*(pLCDFB+240+i+j*40)=0x99999999;
			*(pLCDFB+280+i+j*40)=0x88888888;
			*(pLCDFB+320+i+j*40)=0x77777777;
			*(pLCDFB+360+i+j*40)=0x66666666;
			*(pLCDFB+400+i+j*40)=0x55555555;
			*(pLCDFB+440+i+j*40)=0x44444444;
			*(pLCDFB+480+i+j*40)=0x33333333;
			*(pLCDFB+520+i+j*40)=0x22222222;
			*(pLCDFB+560+i+j*40)=0x11111111;
			*(pLCDFB+600+i+j*40)=0x00000000;
		}
	}
}

⌨️ 快捷键说明

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