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

📄 display.c

📁 S3C2440+SM501在wince环境下的应用!
💻 C
📖 第 1 页 / 共 3 页
字号:
		}	}}//DrawCircle()//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~// 函数: 填充圆形.// 描述: 在屏幕指定区域填充一个圆形.//// [参数表]//	x, y: 圆心坐标.//	radius: 半径.//	color1: 边框颜色.//	color2: 填充颜色.//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~void FillCircle(WORD x,WORD y,WORD radius,WORD color1,WORD color2){	int i;		Circle(x, y, radius, color1);	// 画边框		for( i=radius-1; i>=0; i-- )	// 填充		Circle(x,y,i,color2);	 	 }//FillCircle()//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~// 函数: 画矩形.// 描述: 在屏幕指定区域画矩形.//// [参数表]//	x1, y1: 左上角坐标.//	x2, y2: 右下角坐标.//	color: 边框颜色.//	cType: 边框线型.//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~void Rectangle(WORD x1,WORD y1,WORD x2,WORD y2,WORD color,BYTE cType){    Line(x1,y1,x2,y1,color,cType);    Line(x2,y1,x2,y2,color,cType);    Line(x1,y2,x2,y2,color,cType);    Line(x1,y1,x1,y2,color,cType);}//Rectangle()//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~// 函数: 区域反白.// 描述: 将指定矩形区域反白显示.//// [参数表]//	x1, y1: 左上角坐标.//	x2, y2: 右下角坐标.//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~void ReverseBlock(WORD x1,WORD y1,WORD x2,WORD y2){	int	i,j;	for(i=x1;i<=x2;i++)		for(j=y1;j<=y2;j++)			ReversePutPixel(i,j);}//ReverseBlock()//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~// 函数: 恢复区域显示.// 描述: 从内存中读出储存的屏幕数据, 恢复指定区域的显示.//// [参数表]//	x, y: 需要恢复区域的左上角坐标.//	width: 区域宽度.//	height: 区域高度.//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~void RestoreArea(WORD x,WORD y,WORD width,WORD height){	WORD i;	int addr;		if(x==0 && width==SCREEN_WIDTH)	{		addr = GetAddress(x,y);		// 显存偏移地址;		memcpy_four((int *)addr,(int *)(SDRAM_ADDR_LCDBACK+(y)*SCREEN_WIDTH*2+(x)*2),width*height*2);		return;	}		width *= 2;	// 每个pos要写一个WORD	width = width + 2*(x%2);		x = 2*(x/2);		for(i=0; i<height; i++)	{		addr = GetAddress(x,i+y);	// 显存偏移地址;		memcpy_four((int *)addr,(int *)(SDRAM_ADDR_LCDBACK+(y+i)*SCREEN_WIDTH*2+(x)*2),width);	}}//RestoreArea()//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~// 函数: 恢复键盘显示之前状态.//// [参数表]//	x, y: 需要恢复区域的左上角坐标.//	width: 区域宽度.//	height: 区域高度.//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//恢复键盘显示之前状态void ReKeyBoradBefor(WORD x,WORD y,WORD width,WORD height){	WORD i;	int addr;		width *= 2;	// 每个pos要写一个WORD	width = width + 2*(x%2);		x = 2*(x/2);		for(i=0;i<height;i++)	{		addr = GetAddress(x,i+y);	// 显存偏移地址;		memcpy_four((int *)addr,(int *)(SAVE_CURR_SCREEN+(y+i)*SCREEN_WIDTH*2+(x)*2),width);	}}//ReKeyBoradBefor()//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~// 函数: 反色显示所按的按键.//// [参数表]//	cx1, cy1: 按键的左上角坐标.//	cx2, cy2: 按键的右下角坐标.//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~void ShowTouched(WORD cx1,WORD cy1,WORD cx2,WORD cy2){	ReverseBlock(cx1,cy1,cx2,cy2);	udelay(100000);			ReverseBlock(cx1,cy1,cx2,cy2);}//ShowTouched()//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~// 函数: 显示数字.// 描述: 定长显示数字, 长度不够则补空格.//// [参数表]//	data: 需要显示的数值.//	dot: 小数点位.//	cDigital: 指定位数.//	xx, yy: 左上角坐标.//	fColor: 前景颜色.//	bColor: 背景颜色.//	fontSize: 字体大小.//// 注: 如果data位数超出指定的cDigital,显示为#.//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~void NumberDisplay (int data,BYTE dot,BYTE cDigital,WORD xx,WORD yy,WORD fColor,int bColor,BYTE fontSize){	int i,j=1;	char buf[SCREEN_WIDTH/8 + 2],format[SCREEN_WIDTH/8 + 2];	int	x=abs(data);	WORD cCharSize,VSize ;		VSize = 16;	GetCharSize(fontSize,(WORD *)&cCharSize,(WORD *)&VSize);		if( dot == 0 ) 		sprintf(buf," %10d",data);	// 如果出现乱码,调整显示宽度	else	{		//带小数点的显示,分成整数与小数来显示		j = 1;		for(i=0;i<dot;i++)			j *= 10;					if( data<0 )			sprintf(format,"        -%%d.%%0%dd",dot);		else			sprintf(format,"        %%d.%%0%dd",dot);		sprintf(buf,format,x/j,x%j);	}		//判断实际数据是否超过设定的最大长度。如果超出则显示####	i = strlen(buf)- cDigital;		for(j=0;j<i;j++)	{		if(( buf[j] != ' ') && (buf[j] != '0'))		{			for(j=0; j<strlen(buf);j++)				buf[j] = '#';			break;		}	}		RestoreArea(xx,yy,cDigital*cCharSize,VSize);	ShowString(buf+i,xx,yy,fColor,NO_BACK_COLOR,fontSize);}//NumberDisplay()//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~// 函数: 显示浮点数.// 描述: 在指定位置,按指定小数位数显示一个浮点数.//// [参数表]//	data: 需要显示的数值.//	dot: 小数点位.//	cDigital: 指定位数.//	xx, yy: 左上角坐标.//	fColor: 前景颜色.//	bColor: 背景颜色.//	direct: 对齐方式. 0-靠左对齐; 1-靠右对齐.//	cfont: 字号.//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~void DispFloat(int data, WORD dot,WORD digital, WORD x, WORD y, WORD fColor, WORD bColor,BYTE direct,BYTE cfont){	int i, j,sym;	char format[SCREEN_WIDTH/8 + 2],buf[SCREEN_WIDTH/8 + 2];			if(data == 0)		sym = 1;	else		sym = abs(data)/data;//符号位			if(dot==0)			//整数直接显示		sprintf(buf,"%d",data);	else	//浮点数按要求的小数位数显示		{			j = 1;		for(i=0;i<dot;i++)				j*=10;					if(sym > 0)			sprintf(format,"%%d.%%0%dd",dot);		else			sprintf(format,"-%%d.%%0%dd",dot);		sprintf(buf,format,abs(data/j),abs(data%j));	}	if( direct == 0 )//靠左显示		ShowString(buf,x,y,fColor,bColor,cfont);	else			 //靠右显示			ShowString_back(buf,x,y,fColor,bColor,cfont);}//DispFloat()//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~// 函数: 保存屏幕.// 描述: 保存当前全屏屏幕数据.//// [参数表]//	SaveAddr: 存储屏幕数据的存储区起始地址.//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~void SaveCurrScreen (DWORD SaveAddr){	memcpy_four((int *)SaveAddr,(int *)(SCREEN_ADDR + 0x100000 -NotUseViewmem),SCREEN_WIDTH*SCREEN_HEIGHT*2);}//SaveCurrScreen()//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~// 函数: 恢复屏幕.// 描述: 从存储区读出全屏数据, 恢复屏幕.//// [参数表]//	SaveAddr: 存储屏幕数据的存储区起始地址.//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~void RestoreScreen(DWORD SaveAddr){	memcpy_four((int *)(SCREEN_ADDR + 0x100000 -NotUseViewmem),(int *)SaveAddr,SCREEN_WIDTH*SCREEN_HEIGHT*2);}//RestoreScreen()//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~// 函数: 靠右显示字符串.// 描述: 靠右对齐显示字符串(含中文和英文).//// [参数表]//	s: 字符串首地址.//	x, y: 显示区右上角的坐标.//	fcolor: 前景(字体)颜色.//	bcolor: 背景颜色.//	cfont: 字号.//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~void ShowString_back(char *s,WORD x,WORD y,WORD fColor,WORD bColor,BYTE cfont){	WORD j;		j = strlen(s);	x = x-j*12;		ShowString(s,x,y,fColor,bColor,cfont);}//ShowString_back()//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~// 函数: 显示字符串外加方框.//// [参数表]//	msg: 字符串起始地址.//	x, y: 显示框左上角坐标.//	cleft: 字符串左、右边距.//	cTop: 字符串上、下边距.//	cfontSize: 字号大小.//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~void ShowStringAndBox(char *msg,WORD x,WORD y,int fcolor,int bcolor,BYTE cLeft,BYTE cTop,BYTE cfontSize){   	BYTE bLen,cCharSize,cCharHeight;	WORD wTotalLens;		switch( cfontSize )	// 根据字号选择字符尺寸	{		case 0:	// 8*16		case 1:	// 16*16			cCharSize = 8;			cCharHeight = 16;			break;					case 2:	// 16*24			cCharSize = 8;			cCharHeight = 24;			break;				case 3:	// 16*32			cCharSize = 8;			cCharHeight = 32;			break;					case 4:	// 24*24			cCharSize = 12;			cCharHeight = 24;			break;				case 5:	// 32*32			cCharSize = 16;			cCharHeight = 32;			break;					case 6:	// 48*48			cCharSize = 24;			cCharHeight = 48;			break;					default:			cCharSize = 8;			break;	}	bLen = strlen(msg);	// 字符串长度	wTotalLens = x + bLen*cCharSize + 2*cLeft;	// 显示方框结束点	Rectangle(x,y,wTotalLens,y + cCharHeight + 2*cTop,fcolor,cLine);	// 边框	ShowString(msg,x + cLeft,y + cTop,fcolor,bcolor,cfontSize);	// 显示字符串}//ShowStringAndBox()//!!!!! 以下函数都是没用的 !!!!!/*void ShowString48(char *s,WORD x,WORD y,WORD fcolor,WORD bcolor){	int	i=0,j;	j = strlen(s);	while(i<j)	{		if(x + 48 > SCREEN_WIDTH) //达到屏幕右边界		{						//显示移动到下一行			x = 0;//tmpX;			y += LineHeight;//下一行+2个点			if (y + 48 > SCREEN_HEIGHT)  break;		}		//ShowChineseChar48(s+i,x,y,fcolor,bcolor);		//ShowChineseChar(s+i,x,y,fcolor,bcolor);//ShowChinese3232(s+i,x,y,fcolor,bcolor);		x += 48;//48;			//汉字为16*16		i += 2;	}}//ShowString48*//*// 显示16*16汉字 ******************************void ShowChinese1616(char *hz,WORD x,WORD y,WORD color,WORD bkcolor){	int	i,j,hzaddr;	int pos;	BYTE	value;	//45120*288/32    //计算出汉字在字库中的位置    //16*16(32个字节时 = 33088 + ((hz[0]  - 176) * 94 + (hz[1]  - 161)) * 32		//RestoreArea(x,y,16,16);	 pos =  (33088 + ((hz[0]  - 176) * 94 + (hz[1]  - 161)) * 32);    //加入显示全角字符处理   	if( pos < 0 )  	pos =12032+ pos;    	 	   	hzaddr = dwChFontAddr +  pos ;	for(i=0;i<32;i++)//一个24*24汉字72个字节	{		value = *(BYTE *)(hzaddr+i);		for(j=0;j<8;j++)		{            if( value&0x80 )            	PutPixel(x+(i%2)*8+j,y+(i/2),color);//			else//            	PutPixel(x+(i%2)*8+j,y+(i/2),bkcolor);            value <<= 1;        }    }}*//*void RestoreDisArea(char *s,WORD x,WORD y){		WORD wTotalLens;	wTotalLens = strlen(s);	wTotalLens *= 24;	wTotalLens += (2*(x%2));		x = 2*(x/2);		RestoreArea(x,y,wTotalLens/2,24);}*//*//数据格式:前64个字节为头信息//图像数据是16位色,照片都是24位色,要先转换为16位色才能正常显示void ShowBMP(short *bmp,short x,short y){	short		i,j,width,height;	char		info[100];	short		*dst;		width = *bmp;	height = *(bmp+1);	printf("ShowBMP -- Width:%d,Height:%d\n",width,height);	if( width < 1 || width+x > 1024 || height < 1 || height+y>768 )	{	  	sprintf(info, "Data Error. Width=%d Height=%d\n",width,height);		//video_drawstring (0, 0, info);				return;	}		bmp += 32;												//指针移动到图像数据	dst = (short *)CONFIG_SM501_MEM_BASE;		//显存地址	for(i=0;i<height;i++)	for(j=0;j<width;j++)	{		*(dst+i*SCREEN_WIDTH+j) = *bmp++;//		*(dst+i*SCREEN_WIDTH*2+j*2+1) = *bmp++;	}} // ShowBMP*//*void ShowErrData(BYTE cCmdNo){	WORD k;		for( k=0;k<mapProperty.wTotalElements;k++ )	{		//判断该数据项对应的命令序号是否等于当前命令串号		if( mapProperty.MapProperty.cCommandIndex[k] == cCmdNo )		{			ShowString("XXXX",GeneralButton[k].wLeft,GeneralButton[k].wTop,COLOR_BLACK,COLOR_WHITE,GeneralButton[k].cReceType/10);		}//if (mapProperty.MapProperty.cCommandIndex[k] == i)	}//for}*//************************出现5次以上通信不成功显示通信故障Delayms************************//*void CommErr(void){	BYTE i;		for(i = 0;i<COMMANDNUMS;i++)	{		if( cCommErr[i] >= 5 )	//10次通讯失败显示"通讯故障"		{			ShowErrData(i+1);			cCommErr[i] = 0;			ClearSystemStatus(COMMAND0_DATA);		}	}	}//CommErr*/

⌨️ 快捷键说明

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