ALIENTEK TFTLCD显示大字例程(ASCII 38*38,,46*46, 60*60).包含取模软件,字库,函数

  • Post author:
  • Post category:其他

显示函数

void LCD_ShowChar(u16 x,u16 y,u8 num,u8 size,u8 mode, u16 color)
{  							  
  u16 temp,t1,t;
	u16 y0=y;
	u16 csize=(size/8+((size%8)?1:0))*(size/2);		//得到字体一个字符对应点阵集所占的字节数	
 	num=num-' ';//得到偏移后的值(ASCII字库是从空格开始取模,所以-' '就是对应字符的字库)
	for(t=0;t<csize;t++)
	{
		switch(size)	//不同的字体在添加字库后可以直接在这里添加case语句
		{
			case 12: temp = asc2_1608[num][t];	break;			//调用1206字体
			case 16: temp = asc2_1608[num][t];	break;			//调用1608字体
			case 24: temp = asc2_2412[num][t];	break;			//调用2412字体
			case 36: temp = asc2_3618[num][t];	break;			//调用3618字体
			case 48: temp = asc2_4824[num][t];	break;			//调用4824字体
			case 60: temp = asc2_6030[num][t];	break;			//调用6030字体
			default: return;																//没有的字库
		}
		for(t1=0;t1<8;t1++)
		{			    
			if(temp&0x80)LCD_Fast_DrawPoint(x,y,color);		
			else if(mode==0)LCD_Fast_DrawPoint(x,y,color);
			temp<<=1;
			y++;
			if(y>=lcddev.height)return;		//超区域了
			if((y-y0)==size)
			{
				y=y0;
				x++;
				if(x>=lcddev.width)return;	//超区域了
				break;
			}
		}  	 
	} 	    	   	 	  
}

void LCD_Show_Font(u16 x,u16 y,u16 size, u8 mode, u8 index, u16 color)
{//需要自己生产汉字字库
	u16 t;
	u8 temp,t1;
	u16 y0=y;
	u8 *dzk;   
	u16 csize = 0;					
	switch(size)
	{
		case 24:csize = 72; break;		//一个24*24的汉字72字节
		case 36:csize = 180; break;		//一个36*36的汉字168字节
		case 48:csize = 288; break;		//一个48*48的汉字288字节
		case 60:csize = 480; break;		//一个60*60的汉字480字节
		case 72:csize = 648; break;		//一个72*72的汉字648字节
		default : return;							//不是合适的size就返回不显示
	}
	dzk=(u8*)LCD_HZK_TBL[index];	//得到汉字编号对应的点阵库 
	for(t=0;t<csize;t++)
	{   												   
		temp=dzk[t];				//得到点阵数据                          
		for(t1=0;t1<8;t1++)			//按照从高位到低位的顺序画点
		{
			if(temp&0x80)LCD_Fast_DrawPoint(x,y,color);
			else if(0 == mode)LCD_Fast_DrawPoint(x,y,color); 
			temp<<=1;
			y++;
			if((y-y0)==size)			//对y坐标的处理,当y坐标距起始坐标差24个像素点,x坐标加1
			{
				y=y0;
				x++;
				break;
			}
		}  	 
	}  
}

void LCD_Show_string_Font(u16 x, u16 y, u8 mode, u8 ch_index_arr[], u8 len, u16 color)
{		//按照LCD_ShowChar()的方法可以改成适合任何字库
	u16 temp = 0,t = 0,t1 = 0;
	u16 y0=y;
	u8 *dzk;   
	u16 csize=180;					//一个36*36的汉字180字节
	u8 i;
	for(i = 0; i < len; i++)
	{
		dzk=(u8*)LCD_HZK_TBL[ch_index_arr[i]];	//得到汉字编号对应的点阵库 
		for(t=0;t<csize;t++)
		{   												   
			temp=dzk[t];				//得到点阵数据                          
			for(t1=0;t1<8;t1++)			//按照从高位到低位的顺序画点
			{
				if(temp&0x80)LCD_Fast_DrawPoint(x,y,color);
				else if(0 == mode)LCD_Fast_DrawPoint(x,y,color); 
				temp<<=1;
				y++;
				if((y-y0)== 36)			//对y坐标的处理,当y坐标距起始坐标差36个像素点,x坐标加1
				{
					y=y0;
					x++;
					break;
				}
			}  	 
		}
	} 
}

版权声明:本文为qq_43577471原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。