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

📄 display.c

📁 S3C2440+SM501在wince环境下的应用!
💻 C
📖 第 1 页 / 共 3 页
字号:
            else            	if(bcolor != NO_BACK_COLOR)	// 背景像素(若有背景色)            		PutPixel(x+(i%2)*8+j,y+(i/2),bcolor);            value <<= 1;        }	}}//ShowChar1616()//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~// 函数: 显示16*24字符.// 描述: 从字库提取点阵, 显示一个16*24字符.//// [参数表]//	addr: 字符点阵地址.//	x, y: 显示坐标.//	fcolor: 前景颜色.//	bcolor: 背景颜色.//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~void ShowChar1624(int addr,WORD x,WORD y,WORD color,int bcolor){	short i,j;	BYTE	value;	j = 0;	for( i=0; i<48; i++ )	// 16*24点阵共占48字节	{		value = *(BYTE *)(addr+i);	// 取8-bit点阵		for(j=0;j<8;j++)		{            if( value & 0x80 )	// 前景/背景判别            	PutPixel(x+(i%2)*8+j,y+(i/2),color);	// 前景像素            else            	if(bcolor != NO_BACK_COLOR)	// 背景像素(若有背景色)            		PutPixel(x+(i%2)*8+j,y+(i/2),bcolor);            value <<= 1;        }	}}//ShowChar1624()//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~// 函数: 显示24*24字符.// 描述: 从字库提取点阵, 显示一个24*24字符.//// [参数表]//	addr: 字符点阵地址.//	x, y: 显示坐标.//	fcolor: 前景颜色.//	bcolor: 背景颜色.//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~void ShowChar2424(int addr,WORD x,WORD y,WORD color,int bcolor){	short i,j;	BYTE	value;		j = 0;	for( i=0; i<72; i++ )	// 24*24点阵共占72字节	{		value = *(BYTE *)(addr+i);	// 取8-bit点阵		for(j=0;j<8;j++)		{            if( value & 0x80 )	// 前景/背景判别            	PutPixel(x+(i%3)*8+j,y+(i/3),color);	// 前景像素           	else           		if(bcolor != NO_BACK_COLOR)	// 背景像素(若有背景色)            		PutPixel(x+(i%3)*8+j,y+(i/3),bcolor);            value <<= 1;        }	}}//ShowChar2424()//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~// 函数: 显示24*32字符.// 描述: 从字库提取点阵, 显示一个24*32字符.//// [参数表]//	addr: 字符点阵地址.//	x, y: 显示坐标.//	fcolor: 前景颜色.//	bcolor: 背景颜色.//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~void ShowChar2432(int addr,WORD x,WORD y,WORD color,int bcolor){	short i,j;	BYTE	value;		j = 0;	for( i=0; i<96; i++ )	// 24*32点阵共占96字节	{		value = *(BYTE *)(addr+i);	// 取8-bit点阵		for(j=0; j<8; j++)		{            if( value & 0x80 )	// 前景/背景判别            	PutPixel(x+(i%3)*8+j,y+(i/3),color);	// 前景像素           	else           		if(bcolor != NO_BACK_COLOR)	// 背景像素(若有背景色)            		PutPixel(x+(i%3)*8+j,y+(i/3),bcolor);            value <<= 1;        }	}}//ShowChar2432()//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~// 函数: 显示32*32字符.// 描述: 从字库提取点阵, 显示一个32*32字符.//// [参数表]//	addr: 字符点阵地址.//	x, y: 显示坐标.//	fcolor: 前景颜色.//	bcolor: 背景颜色.//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~void ShowChar3232(int addr,WORD x,WORD y,WORD color,int bcolor){	short i,j;	BYTE	value;		j = 0;	for( i=0; i<128; i++ )	// 32*32点阵共占128字节	{		value = *(BYTE *)(addr+i);	// 取8-bit点阵		for(j=0;j<8;j++)		{            if( value & 0x80 )	// 前景/背景判别            	PutPixel(x+(i%4)*8+j,y+(i/4),color);	// 前景像素           	else           		if(bcolor != NO_BACK_COLOR)	// 背景像素(若有背景色)            		PutPixel(x+(i%4)*8+j,y+(i/4),bcolor);            value <<= 1;        }	}}//ShowChar3232()//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~// 函数: 显示32*48字符.// 描述: 从字库提取点阵, 显示一个32*48字符.//// [参数表]//	addr: 字符点阵地址.//	x, y: 显示坐标.//	fcolor: 前景颜色.//	bcolor: 背景颜色.//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~void ShowChar3248(int addr,WORD x,WORD y,WORD color,int bcolor){	short i,j;	BYTE	value;		j = 0;	for( i=0; i<192; i++ )	// 32*48点阵共占192字节	{		value = *(BYTE *)(addr+i);	// 取8-bit点阵		for(j=0;j<8;j++)		{            if( value & 0x80 )	// 前景/背景判别            	PutPixel(x+(i%4)*8+j,y+(i/4),color);	// 前景像素           	else           		if(bcolor != NO_BACK_COLOR)	// 背景像素(若有背景色)            		PutPixel(x+(i%4)*8+j,y+(i/4),bcolor);            value <<= 1;        }	}}//ShowChar3248()//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~// 函数: 显示32*64字符.// 描述: 从字库提取点阵, 显示一个32*64字符.//// [参数表]//	addr: 字符点阵地址.//	x, y: 显示坐标.//	fcolor: 前景颜色.//	bcolor: 背景颜色.//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~void ShowChar3264(int addr,WORD x,WORD y,WORD color,int bcolor){	short i,j;	BYTE	value;		j = 0;	for( i=0; i<256; i++ )	// 32*64点阵共占256字节	{		value = *(BYTE *)(addr+i);	// 取8-bit点阵		for(j=0;j<8;j++)		{            if( value & 0x80 )	// 前景/背景判别            	PutPixel(x+(i%4)*8+j,y+(i/4),color);	// 前景像素           	else           		if(bcolor != NO_BACK_COLOR)	// 背景像素(若有背景色)            		PutPixel(x+(i%4)*8+j,y+(i/4),bcolor);            value <<= 1;        }	}}//ShowChar3264()//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~// 函数: 显示48*80字符.// 描述: 从字库提取点阵, 显示一个48*80字符.//// [参数表]//	addr: 字符点阵地址.//	x, y: 显示坐标.//	fcolor: 前景颜色.//	bcolor: 背景颜色.//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~void ShowChar4880(int addr,WORD x,WORD y,WORD color,int bcolor){	short i,j;	BYTE	value;	j = 0;	for( i=0;i<480;i++ )	// 48*80点阵共占480字节	{		value = *(BYTE *)(addr+i);	// 取8-bit点阵		for(j=0;j<8;j++)		{            if( value & 0x80 )	// 前景/背景判别            	PutPixel(x+(i%6)*8+j,y+(i/6),color);	// 前景像素           	else           		if(bcolor != NO_BACK_COLOR)	// 背景像素(若有背景色)            		PutPixel(x+(i%6)*8+j,y+(i/6),bcolor);            value <<= 1;        }	}}//ShowChar4880()//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~// 函数: 显示字符串.// 描述: 在屏幕特定区域显示字符串(包括英文和中文).//// [参数表]//	s: 字符串首地址.//	x, y: 显示区左上角的坐标.//	fcolor: 前景(字体)颜色.//	bcolor: 背景颜色.//	cfont: 字体大小.//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~void ShowString(char *s,WORD x,WORD y,WORD fcolor,int bcolor,BYTE cfont){	int	i=0,j;	WORD cCharSize,VSize;		VSize = 16;	GetCharSize(cfont,(WORD *)&cCharSize,(WORD *)&VSize);			j = strlen(s);	// 字符串长度	while(i<j)	{		if( s[i]==255 ) s[i] = 46;//浮点数的小数点		if( (s[i]<128) && (s[i] > 0))		{			if(x + cCharSize > SCREEN_WIDTH) //达到屏幕右边界			{						//显示移动到下一行				x = 0;				y += LineHeight;	//下一行+2个点				if (y + VSize > SCREEN_HEIGHT)  break;			}			ShowEnglishChar(s[i++],x,y,fcolor,bcolor,cfont);			if(s[i - 1] == 46)				x += cCharSize/2 + 1;			else				x += cCharSize;		// 英文都是8*16或8*12		}		else		{			if(x + 24 > SCREEN_WIDTH) //达到屏幕右边界			{						//显示移动到下一行				x = 0;				y += LineHeight;//下一行+2个点				if (y + 24 > SCREEN_HEIGHT)  break;			}			ShowChineseChar24(s+i,x,y,fcolor,bcolor);			x += 24;	//汉字为24*24			i += 2;		}	}}//ShowString()//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~// 函数: 显示信息.// 描述:  显示信息,延时若干ms后返回.//// [参数表]//	cmsg: 中文信息字符串始地址.//	emsg: 英文信息字符串始地址.//	wait: 延时的毫秒数//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~void ShowMsg(char *cmsg, char *emsg, DWORD wait){	int	i;	// 计算字符串所占长度(左右留空共14个点)	if(cLanguage == SHOW_CHINESE)	// 语言选择		i = (strlen(cmsg) * 12 + 14);	else		i = (strlen(emsg) * 12 + 14);	i /= 2;		SaveCurrScreen(TEMP_LZMA_ADDR);	// 保存当前屏幕		// 填充一个矩形块作为背景	FilledRectangle(SCREEN_WIDTH/2-i,SCREEN_HEIGHT/2-18,SCREEN_WIDTH/2+i-1,SCREEN_HEIGHT/2+18,COLOR_BLACK,COLOR_BLACK);			// 画边框	Rectangle(SCREEN_WIDTH/2-i+4,SCREEN_HEIGHT/2-15,SCREEN_WIDTH/2+i-4,SCREEN_HEIGHT/2+15,COLOR_WHITE,cLine);			if( cLanguage == SHOW_CHINESE )	// 根据语言选择显示字符串		ShowString(cmsg,SCREEN_WIDTH/2-i+6,SCREEN_HEIGHT/2-12,COLOR_WHITE,COLOR_BLACK,3);	else		ShowString(emsg,SCREEN_WIDTH/2-i+6,SCREEN_HEIGHT/2-12,COLOR_WHITE,COLOR_BLACK,3);			while(wait-->0)		// 延时		udelay(1000);	// delay 1 us	RestoreScreen(TEMP_LZMA_ADDR);	// 恢复屏幕}//ShowMsg()//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~// 函数: 填充矩形.// 描述: 在屏幕指定区域填充一个矩形.//// [参数表]//	x1, y1: 左上角坐标//	x2, y2: 右下角坐标//	color1: 边框颜色//	color2: 填充颜色//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~void FilledRectangle(WORD x1,WORD y1,WORD x2,WORD y2,WORD color1,WORD color2){	int	i,j;	WORD *addr;		Rectangle(x1, y1, x2, y2, color1, cLine);	// 画边框	for (i=y1+1; i<y2;i++)	// 填充	{		addr = (WORD *)(CONFIG_SM501_MEM_BASE+i*SCREEN_WIDTH*2+(x1+1)*2);		for (j=x1+1; j<x2; j++)			*addr++=color2;	}}//FilledRectangle()//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~// 函数: 画圆.// 描述: 在屏幕指定位置画圆.//// [参数表]//	x, y: 圆心坐标.//	radius: 半径.//	color: 颜色.//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~void Circle(WORD x, WORD y, WORD radius, WORD color){	int start,end,tmp,y1,y2;		start = x - radius;	// 起始横坐标	if( start < 0 )	// 超出左边,则以左边为起始		start = 0;			end = x + radius;	// 结束横坐标	if( end >= SCREEN_WIDTH ) // 超出右边,则以右边为结束		end = SCREEN_WIDTH - 1;		y1 = y; y2 = y;		while( start <= end )	// 从左右两边同时画圆	{			tmp = Sqrt(radius*radius-(start-x)*(start-x));		if( y+tmp < SCREEN_HEIGHT )		{			if( y1 != y+tmp )				Line(start,y1,start,y+tmp,color,cLine);			else					PutPixel(start,y1,color);			y1 = y+tmp;		}		if( y-tmp >= 0 ) 		{						if( y2 != y-tmp ) 				Line(start,y2,start,y-tmp,color,cLine);			else					PutPixel(start,y2,color);			y2 = y-tmp;		}		start = start+1;	} // while(start<=end)}//Circle()//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~// 函数: 画圆.// 描述: 在屏幕指定位置画圆, 并可设定填充.//// [参数表]//	x, y: 圆心坐标.//	radius: 半径.//	color: 颜色.//	fill: 填充标记. 0-无填充; 1-填充.//// 注: 与FillCircle函数相比, 此函数的填充速度较快.//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~void DrawCircle(WORD x, WORD y, WORD radius,WORD color,BYTE fill){	int start,end,tmp,y1,y2;	WORD i = 0,j = 0;	WORD *dot;		dot = (WORD *)BMP_TMPRAM_ADDR;	i = 0;	start = x - radius;	// 起始横坐标	if( start<0 )	// 超出左边,则以左边为起始		start = 0;			end = x;// + radius;	if( end >= SCREEN_WIDTH ) //超出右边,以右边为结束		end =  SCREEN_WIDTH - 1;		y1 = y; y2 = y;		while(start <= end)	{			tmp = Sqrt(radius*radius-(start-x)*(start-x));		if( y+tmp < SCREEN_HEIGHT )		{			if(fill == 0)			{				if( y1 != y+tmp )				{					Line(start,y1,start,y+tmp,color,cLine);					Line(start+2*(radius-i),y1,start+ 2*(radius-i),y+tmp,color,cLine);				}				else					{					PutPixel(start,y1,color);					PutPixel(start+ 2*(radius-i),y1,color);				}			}			y1 = y+tmp;		}		if( y-tmp >= 0 ) 		{			if(fill == 0)			{				if( y2 != y-tmp ) 				{					Line(start,y2,start,y-tmp,color,cLine);					Line(start+ 2*(radius-i),y2,start+ 2*(radius-i),y-tmp,color,cLine);				}				else					{					PutPixel(start,y2,color);					PutPixel(start+ 2*(radius-i),y2,color);				}			}			y2 = y-tmp;		}		if(fill == 1)	// 填充参数计算		{ 			dot[j++] = start;			dot[j++] = y2;						dot[j++] = start;			dot[j++] = y1;						dot[j++] = start+ 2*(radius-i);			dot[j++] = y2;						dot[j++] = start+ 2*(radius-i);			dot[j++] = y1;		}		start = start+1;		i++;	}//while(start<=end)	if(fill == 1)	// 填充圆	{		for(i = 0;i<j;)		{			DrawLine(dot[i],dot[i+1],dot[i+2],dot[i+3],color);			DrawLine(dot[i+4],dot[i+5],dot[i+6],dot[i+7],color);			i += 8;

⌨️ 快捷键说明

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