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

📄 matrix16.c

📁 T6369C控制器的图形液晶显示功能用于烟草的标签显示
💻 C
字号:
/*******************************************************************************
文件名称:Matrix16.C
适用范围:宋体16*16字符点阵信息读取程序
          使用的字体文件为ASC16.BIN和HZK16.BIN,用WINHEX将两个合成在一个文件中,
          文件名为Matrix16.bin,将Matrix16.bin以BIN方式烧录在AT27C040中;
*******************************************************************************/
#include	"Matrix16.H"


#define asc_ofs 0x0000		//指定ASC16点阵信息在字库中的偏移位置
#define hzk_ofs 0x1000		//指定HZK16点阵信息在字库中的偏移位置

//#define addr_ex P1				//指定P1口作为扩展地址总线(A13-A18)

unsigned char xdata *p_dots;
unsigned char xdata dot_info[32];
//------------------------------------------------------------------------------

void GetChDots(uchar ch_code);
void GetHzDots(uchar hz_code_h,hz_code_l);
void ConvertChDots(uint pos_x,uint pos_y);
void ConvertLineMessage(uchar v_ln);

void ConvertHzDots(uint pos_x,uint pos_y);
void Convert1HzDots2(uchar hz_x,hz_y);
//------------------------------------------------------------------------------
uint GetHzDotsAddr(uchar hz_code_h,hz_code_l)
{
	ulong addr;
	uint  addr_l,addr_h;

	if((hz_code_h<0xa1)|(hz_code_l<0xa1)){
		hz_code_h=0xa1;hz_code_l=0xa1;
	}
	
  addr = (hz_code_h-0xa1)*94;
  addr = (addr+hz_code_l-0xa1)*32;
  addr = addr+hzk_ofs;    					//GB2132 offset 0x1000;
  addr_l = addr & 0x1fff;
  addr_h = addr >> 13;
  addr_ex = addr_h;
	return(addr_l|rom_ofs);    				//片选汉字库ROM
}

//---------------------------------------------------------------------------
uint GetChDotsAddr(uchar ch_code)
{
	ulong addr;
	uint  addr_l;

	addr = ch_code*16;
	addr_l = addr & 0x1fff;
	addr_ex = 0x00;										//屏蔽高位地址,ASC码用不到。
	return(addr_l|rom_ofs);    				//片选ROM
}

//---------------------------------------------------------------------------
void GetChDots(uchar ch_code)
{
	uchar i;
	
	p_dots=GetChDotsAddr(ch_code);					//计算点阵首地址,赋给指针
	for(i=0;i<16;i++){											//读出点阵信息,放入点阵数组
		dot_info[i]=*p_dots++;
	}
}

void GetHzDots(uchar code_h,code_l)
{
	uchar i;
	
	p_dots=GetHzDotsAddr(code_h,code_l);		//计算点阵首地址,赋给指针
	for(i=0;i<32;i++){											//读出点阵信息,放入点阵数组
		dot_info[i]=*p_dots++;
	}
}

//0308 vonvert from 16*16 to 16*16
void ConvertHzDots(uint pos_x,uint pos_y)
{

  	uint  idata j,y;
	uint idata addroffset;
  
	addroffset=pos_y+pos_x;
	
//左上部和左下部    
	for(j=0;j<16;j++)
	{
		y=j%2;
		if(y==0)
		{
			bmp_info[addroffset+j/2] = dot_info[j];
		}
		else
		{
			bmp_info[addroffset+16+j/2] = dot_info[j];
		}
		
    }

//右上部和右下部    
	for(j=0;j<16;j++)
	{
		y=j%2;
		if(y==0)
		{
			bmp_info[addroffset+8+j/2] = dot_info[16+j];
		}
		else
		{
			bmp_info[addroffset+24+j/2] = dot_info[16+j];
		}
    }
  
}

void ConvertChDots(uint pos_x,uint pos_y)
{
  	uint  idata j,y;
	uint idata addroffset;
  
	addroffset=pos_y+pos_x;
	
	for(j=0;j<16;j++)
	{
			bmp_info[addroffset+j] = dot_info[j];
    }
}

//0308 vonvert from 16*16 to 16*32
void Convert1HzDots2(uchar hz_x,hz_y)
{

  uint xdata j, y;
  unsigned char xdata bmp_info_temp[64];

  addr_ex=0x01;
//左上部和左下部    
	for(j=0;j<16;j++)
	{
		y=j%2;
		if(y==0)
		{
			bmp_info_temp[j/2] = dot_info[j];
		}
		else
		{
			bmp_info_temp[16+j/2] = dot_info[j];
		}
		
    	}

//右上部和右下部    
	for(j=0;j<16;j++)
	{
		y=j%2;
		if(y==0)
		{
			bmp_info_temp[8+j/2] = dot_info[16+j];
		}
		else
		{
			bmp_info_temp[24+j/2] = dot_info[16+j];
		}
    	}
	    	
	for(j=0;j<32;j++)  
	{
		bmp_info[2*j+1]=bmp_info[2*j]=bmp_info_temp[j];
	}
	
}

//---------------------------------------------------------------------------
void ConvertLineMessage(uchar v_ln)
{
	uint xdata i,j;
//pos_y(行) pos_x(列)
	uint xdata pos_x, pos_y;

	pos_y=v_ln * LINEWIDTH;
	j=0;
	
	for(i=0;i<LINEWIDTH;i++)
	{
		if(info_ln[i]>0xa0)
		{
			GetHzDots(info_ln[i],info_ln[i+1]);
			pos_x=32*j;
			ConvertHzDots(pos_x,pos_y);
			i++;
		}
		else
		{
			GetChDots(info_ln[i]);
			ConvertChDots(pos_x,pos_y);
		}
		j++;

	}
}

⌨️ 快捷键说明

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