打印

哪位帅哥有GT20L16s1y 的驱动代码参考 谢谢

[复制链接]
1039|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lvben5d|  楼主 | 2019-7-11 11:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 lvben5d 于 2019-7-11 13:44 编辑

// 字体起始地址   索引1是 GB2312的偏移地址    索引5 ASCII     大家一起CHECK下?
const u32 FontBaseAdd[] ={
  0x3b7d0, 0x0, 0x3bfc0, 0x66c0, 0x3b7c0, 0x3cf80, 0x3c2c0, 0x3d580
};

u32 getFontAddress(u8 gb2312_msb, u8 gb2312_lsb, u8 fontid, u8 FontBytes)
{
  uint32_t Address =0;

   //15 x 16 GB2312 字符
  if(gb2312_msb ==0xA9 && gb2312_lsb >=0xA1)
    Address = (282 + (gb2312_lsb - 0xA1 )) * 32 + FontBaseAdd[fontid];
  else if (gb2312_msb>=0xA1 && gb2312_msb<=0xA3 && gb2312_lsb>=0xA1)
    Address =((gb2312_msb - 0xA1) * 94 + (gb2312_lsb - 0xA1)) * 32+ FontBaseAdd[fontid];
  else if(gb2312_msb >=0xB0 && gb2312_msb <= 0xF7 && gb2312_lsb >=0xA1)
    Address = ((gb2312_msb - 0xB0) * 94 + (gb2312_lsb - 0xA1)+ 846) * 32+ FontBaseAdd[fontid];

  //8x16 | 5x7 | 5x8 ASCII 标准字符 | 粗体
  uint32_t AscFontBytes = FontBytes * 8;
  //if (fontid > 5) AscFontBytes +=2; 16不等宽字符,数据多2字节
  if (fontid >1 && gb2312_msb==0 && gb2312_lsb>=0x20 && gb2312_lsb<= 0x7E)
    Address = (gb2312_lsb - 0x20) *  AscFontBytes + FontBaseAdd[fontid];

  return Address;
}

使用特权

评论回复
沙发
lvben5d|  楼主 | 2019-7-11 14:20 | 只看该作者
本帖最后由 lvben5d 于 2019-7-11 14:30 编辑

经过函数验证, 输入 GB2312 MSB  LSB   获得字符在IC内的地址, 然后读取 15x16点阵, OK。    我用的是GD32F130R8T6
u8 spi0_sendrecvbyte(u8 byte)
{
        while(RESET == spi_i2s_flag_get(SPI0, SPI_FLAG_TBE))  ;
        spi_i2s_data_send(SPI0, byte);        
        while(RESET == spi_i2s_flag_get(SPI0, SPI_FLAG_RBNE)) {}
        return spi_i2s_data_receive(SPI0);
}

void gt20l16_ReadOneHanzi(u32 addr, u8 *pbuf)
{
        u8 n=0;                    
        ZIKU_CS_L;                                        //使能器件
        spi0_sendrecvbyte(0x03);                    //发送读取命令
        spi0_sendrecvbyte((u8)(addr>>16));   //发送24bit地址   
        spi0_sendrecvbyte((u8)(addr>>8));
        spi0_sendrecvbyte((u8)addr);
        for(n=0; n<32; n++)        *pbuf++ = spi0_sendrecvbyte(0xFF);
        ZIKU_CS_H;
}     u16 GB2312_code=0xB6FE;  // 中文“一”
ADDR = getFontAddress(GB2312_code/256, GB2312_code%256, 1, fontbyte);
gt20l16_ReadOneHanzi(ADDR, BUF);





使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

95

主题

746

帖子

12

粉丝