GT30L32S4W中文字库芯片+墨水屏显示调好程序分享

这公司叫高通,但新版规格书不带地址运算,带地址运算规格书下载GT30L32S4W规格书,带地址运算

芯片管脚配置:

 基础驱动及读取代码:

/**
  ******************************************************************
  * @brief   GT20 SPI发送指令
  * @param   [in] cmd 字符在芯片中的地址
  * @retval  None
  ******************************************************************
  */
static void GT30L32_Send_Byte(uint32_t cmd)
{
	uint8_t i;
	cmd=cmd|0x03000000;
	for(i=0;i<32;i++)
	{
		GT20L_CLK_0;
		if(cmd&0x80000000)
			{
				GT20L_MOSI_1;
			}
		else 
			{
				GT20L_MOSI_0;
			}	
		GT20L_CLK_1;
		cmd=cmd<<1;
	}					
}

/**
  ******************************************************************
  * @brief   GT20 SPI读取一个字节
  * @param   [in]None
  * @retval  一个字节
  ******************************************************************
  */
static uint8_t GT30L32_Read_Byte(void)
{
      uint8_t i;
      uint8_t dat=0;
	  cm_gpio_level_e S1Y_SO = CM_GPIO_LEVEL_LOW;
	  GT20L_CLK_1;
      for(i=0;i<8;i++)
      {
		GT20L_CLK_0;
        dat=dat<<1;
       cm_gpio_get_level(GT20L_SIMO,&S1Y_SO);

        if(S1Y_SO)
			{
               dat=dat|0x01;
			}
        else
			{
                dat&=0xFE;
			}
		GT20L_CLK_1;	
      }	
      return dat;
}
/****************************************************
 * @brief   从字库中读数据
  * @param   [in] Address  : 表示字符点阵在芯片中的字节地址。
  * @param   [in] byte_long : 是读点阵数据字节数。
  * @param   [out] p_arr   : 是保存读出的点阵数据的数组。
  * @retval  None
*****************************************************/
static void GT30L32_Read( uint32_t  address, uint8_t  byte_long, uint8_t* p_arr )
{
    unsigned int j = 0;
	
   GT20L_CLK_1;
   GT20L_MOSI_1;
   GT20L_CS_0;
    GT30L32_Send_Byte( address );
    for( j = 0; j < byte_long; j++ )
    {
        p_arr[j] = GT30L32_Read_Byte();
    }
	GT20L_CS_1;
}

[GT30L32S4W所有字体数据都是横置横排]

排置: W(横置横排)
点阵大小为 8X16的字母"A"的
点阵数据: 00 10 28 28 28 44 44 7C 82 82 82 82 00 00 00 00

如果读到的数据不对请检查驱动是否正确

代码将横置横排转换为竖置竖排墨水屏显示

/***************************************
  * @brief   ASCII8x16
  * @param   [in] ASCIICode:表示ASCII 码(8bits)
  * @param   [in] BaseAdd:说明该套字库在芯片中的起始地址。
  * @param   [out] DZ_Data:是保存读出的点阵数据的数组。
  * @retval  1 成功 0 失败
***************************************/
void GT30L32_Ascii8x16_Data( uint8_t ASCIICode, uint8_t* S1YDZ_Data )
{
    uint32_t BaseAdd = 0x1DD780;
    uint32_t address = (ASCIICode - 0x20 ) * 16 + BaseAdd;
   uint8_t zk[16];
	uint8_t dat= 0;
	uint8_t dat_zk = 0;
	uint8_t i,z;
    unsigned int j = 0;
    if( ( ASCIICode >= 0x20 ) && ( ASCIICode <= 0x7e ) )
        {
            GT20L_CLK_1;
            GT20L_MOSI_1;
            GT20L_CS_0;
            GT30L32_Send_Byte( address );
            //htl_uart0_printf("-----\r\n");
            for( j = 0; j < 16; j++ )
            {
                zk[j] = GT30L32_Read_Byte();
               // htl_uart0_printf("[%02x]",zk[j]);               
            }
           // htl_uart0_printf("-----\r\n");
            GT20L_CS_1;
        }
/转换输出///
	j=0;
    for(z=0;z<8;z++)
		{
			for(i=0;i<8;i++)
				{
					dat=dat<<1;	
					dat_zk = zk[i];
					dat_zk =dat_zk<<z;
					if(dat_zk&0X80)dat=dat|0x01;
					else dat&=0xFE;
				}
			S1YDZ_Data[j]	= dat;
			dat =0;
			dat_zk =0;
			j++;
			for(i=0;i<8;i++)	
				{
					dat=dat<<1;	
					dat_zk = zk[i+8];
					dat_zk =dat_zk<<z;
					if(dat_zk&0X80)dat=dat|0x01;
					else dat&=0xFE;	
				}
			S1YDZ_Data[j]= dat;
		    j++;
	    }
}

15X16中文代码

/********************************************************************************
  * @brief  GB2312_15X16汉字字符读取 30 byte
  * @param  [in] GB2312Code	汉字内码
  * @param  [out] BUF	缓存数组
  * @retval none
  *******************************************************************************/
 void GT30L32_GB2312_15X16(const unsigned char *GB2312Code , uint8_t *BUF)
 {
    uint8_t i;
    uint8_t dat= 0;
	  uint8_t dat_zk = 0;
	  uint8_t z;
    uint8_t j = 0;
    uint8_t zk[32]; 
    uint32_t Address ;               //表示汉字或ASCII字符点阵在芯片中的字节地址。
    uint32_t BaseAdd = 0x2C9D0;      //说明点阵数据在字库芯片中的起始地址。
    uint8_t MSB = *GB2312Code;       //表示汉字内码GBCode 的高8bits。
    uint8_t LSB = *(GB2312Code + 1); //表示汉字内码GBCode 的低8bits
 
        /*计算方法:*/
        if((MSB >=0xA1) && (MSB <= 0Xa9) && (LSB >=0xA1))
        Address =( (MSB - 0xA1) * 94 + (LSB - 0xA1))*32+ BaseAdd;
        else if((MSB >=0xB0) && (MSB <= 0xF7) && (LSB >=0xA1)) 
        Address = ((MSB - 0xB0) * 94 + (LSB - 0xA1)+ 846)*32+ BaseAdd; 

        /********* 获取字符点阵数据 ****************/
        GT20L_CLK_1;
        GT20L_MOSI_1;
        GT20L_CS_0;
        osDelay(1);//大约0.11S
        GT30L32_Send_Byte( Address );
        for( i = 0; i < 32; i++ )
            {
                 zk[i] = GT30L32_Read_Byte();
            }  
        GT20L_CS_1;
  /*****************转换输出**************************/
    for(z=0;z<8;z++)//16个字节
		{
			for(i=0;i<8;i++)
				{
					dat=dat<<1;	
					dat_zk = zk[i*2];
					dat_zk =dat_zk<<z;
					if(dat_zk&0X80)dat=dat|0x01;
					else dat&=0xFE; 
				}
			BUF[j]	= dat;
			dat =0;
			dat_zk =0;
			j++;
			for(i=0;i<8;i++)	
				{
					dat=dat<<1;	
					dat_zk = zk[i*2+16];
					dat_zk =dat_zk<<z;
					if(dat_zk&0X80)dat=dat|0x01;
					else dat&=0xFE;
				}
			BUF[j]= dat;
		    j++;
	    }
   //*************************************
    for(z=0;z<7;z++)//16个字节
		{
			for(i=0;i<8;i++)
				{
					dat=dat<<1;	
					dat_zk = zk[i*2+1];
					dat_zk =dat_zk<<z;
					if(dat_zk&0X80) dat=dat|0x01;
					else	dat&=0xFE;
				}
			BUF[j]	= dat;
			dat =0;
			dat_zk =0;
			j++;
			for(i=0;i<8;i++)	
				{
					dat=dat<<1;	
					dat_zk = zk[i*2+1+16];
					dat_zk =dat_zk<<z;
					if(dat_zk&0X80)	dat=dat|0x01;
					else	dat&=0xFE;
				}
			BUF[j]= dat;
		    j++;
	    }
 }

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值