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

📄 screendrv.c

📁 嵌入式开发中触摸屏的显示读写设置,可以显示文字等简单功能
💻 C
📖 第 1 页 / 共 3 页
字号:
		for(i=0;i<FONTH;i++){
			if((c&mask)!=0){
				printPix(intx+i,inty+j,pVScreen->foreColor);
				//PrintfUartDef("position(%x,%x) with mask 0x%x c 0x%x color %x\r\n",intx,inty,(int)(mask),(int)c,(int)(pVScreen->foreColor));
				}else{
					printPix(intx+i,inty+j,pVScreen->backgroundColor);
					//PrintfUartDef("position(%d,%d) with mask 0x%x c 0x%x color %x\r\n",(int)(intx),(int)(inty),(int)(mask),(int)c,(int)(pVScreen->backgroundColor));
			}
			
			mask=mask>>1;
			
			if(mask==0){
				offset++;
				c=charPix[offset];
				//PrintfUartDef("[%d]c=0x%x\r\n",offset,(int)c);
				mask=0x80;
			}
		}
	}
		
	return 1;
	
}


//打印一个字符在x,y的位置_以字符衡量,放大了四倍2×2
int VSPrint1(int inty ,int intx ,unsigned char *charPix ,VScreen_T *pVScreen){
	int i=0,j=0;
	unsigned short mask=0,c=0;
	
	//判断是否超过了虚拟屏幕范围,超出则返回 0
	if(intx>pVScreen->columns||inty>pVScreen->rows)
		return 0;
	
	
	//计算相对位置到intx,inty
	intx--;
	intx=intx*2*FONTH;
	intx+=pVScreen->startx;
	inty--;
	inty=inty*2*FONTV;
	inty+=pVScreen->starty;
	for(i=0;i<FONTV;i++)
	{
	   mask=0x80;
	   c=(unsigned short)charPix[i];
	   for(j=0;j<FONTH;j++){
		if((c&mask)!=0){
						printPix(intx,inty,pVScreen->foreColor);
						#ifdef debuglcd
						PrintfUartDef("position(%x,%x) with mask 0x%x c 0x%x color %x\r\n",pVScreen->startx,pVScreen->starty,(int)(mask),(int)(pVScreen->foreColor));
						#endif
						printPix(intx+1,inty,pVScreen->foreColor);
						printPix(intx,inty+1,pVScreen->foreColor);
						printPix(intx+1,inty+1,pVScreen->foreColor);
					 }
			else 	 {
						printPix(intx,inty,pVScreen->backgroundColor);
						#ifdef debuglcd
						PrintfUartDef("position(%x,%x) with mask 0x%x c 0x%x color %x\r\n",intx,inty,(int)(mask),(int)(pVScreen->foreColor));
						#endif
						printPix(intx+1,inty,pVScreen->backgroundColor);
						printPix(intx,inty+1,pVScreen->backgroundColor);
						printPix(intx+1,inty+1,pVScreen->backgroundColor);
					 }
		intx+=2;	//调整横向的点位置
		mask=mask>>1;
	   }
	   intx-=FONTV;	//横坐标归位
	   inty+=2;		//调整纵向的坐标
	   
	 }
	 return 1;
	 
}

//虚拟屏幕初始化
int InitVS(int intx,int inty,int width,int height,VScreen_T *pVScreen){
	if(intx<0||inty<0||width<8||height<16||(intx+width)>640||(inty+height)>480){
		return 0;
	}
	pVScreen->startx=intx;
	pVScreen->starty=inty;
	pVScreen->endx=intx+width;
	pVScreen->endy=inty+height;
	pVScreen->rows=height/16-1;
	pVScreen->columns=width/8-1;
	pVScreen->foreColor=RGB565_COLOR_WHITE;
	//charBuf omitted 
	pVScreen->backgroundColor=RGB565_COLOR_BLUE;
	pVScreen->cursorx=0;
	pVScreen->cursory=0;
	pVScreen->screenOut=0;
	VSClear(pVScreen);
	return 1;
	
}

//带有固定边框的虚拟屏幕初始化
int InitBorderVS(int intx,int inty,int width,int height,VScreen_T *pVScreen){
	int i;
	if(intx<0||inty<0||width<8||height<16||(intx+width)>640||(inty+height)>480){
		return 0;
	}
	pVScreen->startx=intx;
	pVScreen->starty=inty;
	pVScreen->endx=intx+width;
	pVScreen->endy=inty+height;
	
	pVScreen->foreColor=RGB565_COLOR_WHITE;
	//charBuf omitted 
	pVScreen->backgroundColor=RGB565_COLOR_BLUE;
	pVScreen->cursorx=0;
	pVScreen->cursory=0;
	pVScreen->screenOut=0;
	VSClear(pVScreen);
	//画框----
	i=intx;
	for(i+=2;i<(pVScreen->endx-2);i++)
		printPix(i,pVScreen->starty+2,pVScreen->foreColor);
		
	i=intx;	
	for(i+=2;i<(pVScreen->endx-2);i++)
		printPix(i,pVScreen->endy-3,pVScreen->foreColor);
	
	i=inty;	
	for(i+=2;i<(pVScreen->endy-2);i++)
		printPix(pVScreen->startx+2,i,pVScreen->foreColor);
	
	i=inty;
	for(i+=2;i<(pVScreen->endy-2);i++)
		printPix(pVScreen->endx-3,i,pVScreen->foreColor);
	
	pVScreen->startx+=5;
	pVScreen->starty+=5;
	pVScreen->endx-=5;
	pVScreen->endy-=5;
	pVScreen->rows=(pVScreen->endy-pVScreen->starty)/16-1;
	pVScreen->columns=(pVScreen->endx-pVScreen->startx)/8-1;
	return 1;

}

//彩色条纹1
void colorBar1(){
	int i,j,x,y,flag,green,blue,red;
	green=0;
	red=0;
	blue=0;
	flag=0;
	for(x=0;x<640;x+=20){
		for(i=0;i<20;i++){
			for(y=0;y<480;y+=16){
				for(j=0;j<16;j++){
					if(green=64){
						flag=1;
						}
					if(flag=0) {green++;}
						else {green--;}
					printPix(x+i,y+j,(unsigned short)RGB565(red,green,blue));
				}
				blue++;
			}
			red++;
		}
	}
}

//三色调色板
void colorBar(void){
	unsigned short color=0;
	int i,j,r,g,b,max;
	for (i=0; i< 640; i++)
		for (j=0; j<480; j++)
		{
			max = Maximum(Maximum(i,j),(1120-i-j));
			r = i * 31 /640;
			g = j * 62 /480;
			b = (1120-i-j) * 31 /1120;
			color = (unsigned short)RGB565(r,g,b);
			printPix(i,j,color);
			
		}
}

//打印缓冲区内的字符
void PrintBuffer(VScreen_T *pVScreen, char *pBuf)
{
	int  i;
	
    for(i = 0; pBuf[i]; i++)
    {
    	//case of \t
		if(pBuf[i]==0x9){
			VSP(' ',pVScreen);
			VSP(' ',pVScreen);
			VSP(' ',pVScreen);
			VSP(' ',pVScreen);
		}else
		if(pBuf[i]==0xd){
			pVScreen->cursorx=0;
		}else
		if(pBuf[i]==0xa){
			NextLine(pVScreen);
		}else{		
	       	VSP(pBuf[i],pVScreen);
       	}
		   
	}
}


//缓冲区解析规范化
#include "stdarg.h"
void doPrintLcd(char * buffer, char * fmt, va_list ap)
{
    void *p1, *p2, *p3, *p4, *p5, *p6, *p7, *p8, *p9, *p10, *p11, *p12;

    p1 = va_arg(ap,void*);
    p2 = va_arg(ap,void*);
    p3 = va_arg(ap,void*);
    p4 = va_arg(ap,void*);

    p5 = va_arg(ap,void*);
    p6 = va_arg(ap,void*);
    p7 = va_arg(ap,void*);
    p8 = va_arg(ap,void*);

    p9 = va_arg(ap,void*);
    p10 = va_arg(ap,void*);
    p11 = va_arg(ap,void*);
    p12 = va_arg(ap,void*);

    sprintf(buffer,fmt,p1,p2,p3,p4,p5,p6,p7,p8,p9,p10,p11,p12);
}


//实用函数:屏幕打印
void PrintfLcd(VScreen_T *pVScreen,char * fmt, ...)
{
    char buffer[256];
    va_list ap;

    va_start(ap,fmt);
    doPrintLcd(buffer,fmt,ap);
	PrintBuffer(pVScreen,buffer);
}

//实用函数:在默认的全屏上面打印字符
void PrintfLcdDef(char * fmt, ...){
	char buffer[256];
    va_list ap;

    va_start(ap,fmt);
    doPrintLcd(buffer,fmt,ap);
	PrintBuffer(&VSGLOBAL,buffer);
}

//光标移到某行某列
void gotoPos(int rows,int columns,VScreen_T *pVScreen){
	pVScreen->cursorx=columns;
	pVScreen->cursory=rows;
}


//获取当前行
unsigned int getColumns(VScreen_T *pVScreen){
	return pVScreen->cursorx;
}

//获取当前列
unsigned int getRows(VScreen_T *pVScreen){
	return pVScreen->cursory;
}

//在绝对位置打印字串
void PrintfLcdAbs(int rows,int columns,VScreen_T *pVScreen,char * fmt, ...){
	int y,x;
	char buffer[256];
    va_list ap;
	y=getRows(pVScreen);
	x=getColumns(pVScreen);
	gotoPos(rows,columns,pVScreen);
	va_start(ap,fmt);
    doPrintLcd(buffer,fmt,ap);
	PrintBuffer(pVScreen,buffer);
	gotoPos(y,x,pVScreen);
}

//默认屏幕绝对位置打印
void PrintfLcdAbsDef(int rows,int columns,char * fmt, ...){
	int y,x;
	char buffer[256];
    va_list ap;
	y=getRows(&VSGLOBAL);
	x=getColumns(&VSGLOBAL);
	gotoPos(rows,columns,&VSGLOBAL);
	va_start(ap,fmt);
    doPrintLcd(buffer,fmt,ap);
	PrintBuffer(&VSGLOBAL,buffer);
	gotoPos(y,x,&VSGLOBAL);
}

//换行--旧版
int lineUp(VScreen_T *pVScreen){
	int i,j;
	for(i=pVScreen->startx;i<pVScreen->endx;i++)
		for(j=pVScreen->starty+FONTV;j<pVScreen->endy;j++){
			pPixel[i+(j-FONTV)*640] = pPixel[i+j*640];
			}
	for(i=pVScreen->startx;i<pVScreen->endx;i++)
		for(j=pVScreen->endy-FONTV;j<pVScreen->endy;j++){
		pPixel[i+j*640]=pVScreen->backgroundColor;
		}
}

//define the color of the screen
void setVSColor(unsigned short foreColor,unsigned short backgroundColor,VScreen_T *pVScreen){
	pVScreen->foreColor=foreColor;
	pVScreen->backgroundColor=backgroundColor;
	
}

⌨️ 快捷键说明

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