搜索
bottom↓
回复: 14

【恳求帮忙】有没人会用点阵字库芯片(GT21H16S2Y)?

[复制链接]

出0入0汤圆

发表于 2013-7-14 21:31:48 | 显示全部楼层 |阅读模式
本人在做一个利用点阵字库芯片(GT21H16S2Y),来在LED上显示汉字。

不知程序怎么写,望大神指点。

请问在单片机中,unsigned char readbyte(unsigned long addr),这个函数该怎么写呢?


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入0汤圆

 楼主| 发表于 2013-7-14 21:35:03 | 显示全部楼层
附件里面是驱动程序,包括了汉字地址的算法和程序使用的例子,但是从芯片地址ADDR中读取一个BYTE的数据这个函数没有给出来。望用过此芯片的大神们能够帮下忙。谢谢了

出0入0汤圆

发表于 2013-7-14 22:47:32 | 显示全部楼层
这颗芯片什么价格?

出0入0汤圆

发表于 2013-7-14 23:02:59 | 显示全部楼层
win2kddk 发表于 2013-7-14 22:47
这颗芯片什么价格?

汉字是有版权的,他这个IC 是上海高通科技产的,已经交了版权税、保护费、赞助金  等众多的开销。
所以IC 不便宜的,应该要3元以上。
搞了好几年的汉字显示,一直都用5毛钱 Flash做字库。

出0入0汤圆

发表于 2013-7-15 00:04:18 | 显示全部楼层
同好奇价格

出0入0汤圆

 楼主| 发表于 2013-7-15 00:07:05 | 显示全部楼层
kation122 发表于 2013-7-14 23:02
汉字是有版权的,他这个IC 是上海高通科技产的,已经交了版权税、保护费、赞助金  等众多的开销。
所以IC ...

请问您用的芯片是?

出0入0汤圆

发表于 2013-7-15 00:10:41 | 显示全部楼层
def_2 发表于 2013-7-15 00:07
请问您用的芯片是?

用4M or  8M flash 做GB2312字库啊。目前做产品的绝大部分都是这样弄的。
你这个是做出产品,还是自己习玩耍的呢。

出0入0汤圆

 楼主| 发表于 2013-7-15 06:58:20 | 显示全部楼层
不是出产品啊,还有其他高手用过此芯片吗?

出0入42汤圆

发表于 2013-7-15 07:43:36 来自手机 | 显示全部楼层
这个,因单片机而异吧。。楼主可以找找25系列flash的程序,这个应该有很多。gt21和25系列flash的读指令是兼容的

出0入0汤圆

发表于 2013-7-15 08:29:58 | 显示全部楼层
大致的思路是,
1. 先从汉字的编码[GB2312],算成汉字点阵所在的flash地址
2.从地址中,读出汉字的点阵数据
3.显示点阵。
/********************************************************************/   
/*  函数名称:void HighSpeed_Read_Cont(unsigned long Dst,           */   
/*            unsigned long no_bytes)                               */   
/*  函数功能:快速从GT21L系列芯片读出所要的汉字点阵数据             */   
/*            存于数组upperfont_32中                                */   
/*  参  数:Dst       :数据在GT21L系列芯片中的地址               */   
/*            no_bytes  :从GT21L芯片读出所要的汉字点阵数据的个数   */   
/*  全局变量:upperfont_32[32]:用于快速读取汉字点阵数据            */   
/*  说    明:由于用于快速读取汉字点阵数据的upperfont_32[32]全局变量*/   
/*            为32字节,请用户根据实际情况自行修改数组长度          */   
/********************************************************************/   
void HighSpeed_Read_Cont(unsigned long Dst, unsigned long no_bytes,unsigned char *buffer)   
{   
    unsigned long i = 0;   
        GT21L_HOLDH();
    GT21L_CSL();                                // enable device     
    spiTransferByte(0x0B);                        // read command     
    spiTransferByte(((Dst & 0xFFFFFF) >> 16));  // send 3 address bytes     
    spiTransferByte(((Dst & 0xFFFF) >> 8));   
    spiTransferByte(Dst & 0xFF);   
    spiTransferByte(0xFF);                       //dummy byte   
    for (i = 0; i < no_bytes; i++)           // read until no_bytes is reached     
    {
        buffer[i] = spiTransferByte(0xff);         // receive byte and store at address 80H - FFH     
    }
    GT21L_CSH();                                  // disable device     
}

出0入0汤圆

 楼主| 发表于 2013-7-15 14:16:37 | 显示全部楼层
lisn3188 发表于 2013-7-15 08:29
大致的思路是,
1. 先从汉字的编码[GB2312],算成汉字点阵所在的flash地址
2.从地址中,读出汉字的点阵数据 ...

非常感谢,请问如果是unicode码,要怎么转换成GB2312码呢?用字库芯片可以吗?

出0入0汤圆

发表于 2013-8-6 14:28:33 | 显示全部楼层
mark                                       

出0入0汤圆

发表于 2013-9-29 15:48:45 | 显示全部楼层
kation122 发表于 2013-7-14 23:02
汉字是有版权的,他这个IC 是上海高通科技产的,已经交了版权税、保护费、赞助金  等众多的开销。
所以IC ...

想问一下几毛钱的flash芯片可否推荐一两个常用的型号?

出0入0汤圆

发表于 2013-10-30 21:36:56 | 显示全部楼层
可以直接用吗!                          

出0入0汤圆

发表于 2013-10-31 00:10:11 | 显示全部楼层
本帖最后由 lihw2@ 于 2013-10-31 00:16 编辑

我这个是gt20l16s1y的
可以参考一下 通过文档例程改一下寻址算法就能用
void wrcom_zk( uchar datu ) //  发送命令到字库
{
  
               
         SPI_RW(datu);

       









//        uchar idata i;
//       
//       
//        for(i=0;i<8;i++ )
//        {  
//       
//                Rom_SCK=0;
//                        _nop_();
//                         _nop_();
//
//                        _nop_();
//                if(datu&0x80)
//                {
//                        Rom_IN = 1;
//                        _nop_();
//                        _nop_();
//                }
//                else
//                {
//                        Rom_IN = 0;
//                        nop_();
//                        _nop_();
//                }
//
//                       
//                       
//
//                        Rom_SCK=1;
//                        _nop_();
//                        _nop_();
//                        _nop_();
//                        datu = datu<<1;
//
//        }
}

/****字库IC中取汉字或字符数据(1个字节)***/
static uchar rddata_zk( )
{
        uchar temp;  
        temp=SPI_RW(0xff);

        return(temp);




//        uchar idata i;
//        uchar idata ret_data=0;
//        Rom_SCK=1;
//                        _nop_();
//                        _nop_();
//                        _nop_();
//
//        for(i=0;i<8;i++)
//        {
//                Rom_OUT=1;
//                        _nop_();
//                        _nop_();
//                        _nop_();
//
//                Rom_SCK=0;
//                        _nop_();
//                        _nop_();
//                        _nop_();
//
//                ret_data=ret_data<<1;
//                if( Rom_OUT==1)
//                        ret_data=ret_data+1;
//                else
//                        ret_data=ret_data+0;
//                        _nop_();
//                        _nop_();
//                        _nop_();
//
//                Rom_SCK=1;
//                        _nop_();
//                        _nop_();
//                        _nop_();
//
//        }
//        return(ret_data);
}



*从相关地址(addrHigh:地址高字节,addrMid:地址中字节,addrLow:地址低字节)中连续读出DataLen个字节的数据到 pBuff的地址*/
/*连续读取*/
void get_n_bytes_data_from_zk(uchar addrHigh,uchar addrMid,uchar addrLow,uchar *pBuff,uchar DataLen )
{
        uchar idata  i;
               
SPI_Init();                    /////////////////////////////////
        Rom_CS = 0;
        lcd_cs1=1;       
                        _nop_();
                        _nop_();
                        _nop_();

//        Rom_SCK=0;
//                        _nop_();
//                        _nop_();
//                        _nop_();
               
               
        wrcom_zk(0x03);
        wrcom_zk(addrHigh);
        wrcom_zk(addrMid);
        wrcom_zk(addrLow);
               
                 
        for(i = 0; i < DataLen; i++ )
             *(pBuff+i) =rddata_zk();
                 
          
        Rom_CS = 1;
               

}


/******************************************************************/

ulong idata  fontaddr=0;
void display_GBzk(uchar y,uchar x,uchar *text)
{
        uchar idata i= 0;
        uchar idata addrHigh,addrMid,addrLow ;
        uchar idata fontbuf[32];                       
        while((text>0x00))
        {
                if(((text>=0xb0) &&(text<0xf7))&&(text[i+1]>=0xa1))
                {                                               
                        /*国标简体(GB2312)汉字在高通字库IC中的地址由以下公式来计算:*/
                        /*Address = ((MSB - 0xB0) * 94 + (LSB - 0xA1)+ 846)*32+ BaseAdd;BaseAdd=0*/
                        /*由于担心8位单片机有乘法溢出问题,所以分三部取地址*/
                        fontaddr = (text- 0xb0)*94;
                        fontaddr += (text[i+1]-0xa1)+846;
                        fontaddr = (ulong)(fontaddr*32);
                       
                        addrHigh = (fontaddr&0xff0000)>>16;  /*地址的高8位,共24位*/
                        addrMid = (fontaddr&0xff00)>>8;      /*地址的中8位,共24位*/
                        addrLow = fontaddr&0xff;             /*地址的低8位,共24位*/
                        get_n_bytes_data_from_zk(addrHigh,addrMid,addrLow,fontbuf,32 );/*取32个字节的数据,存到"fontbuf[32]"*/
                        wr_16x16bmp(y,x,fontbuf);/*显示汉字到LCD上,y为页地址,x为列地址,fontbuf[]为数据*/
                        i+=2;
                        x+=16;
                }
                else if((text>=0x20) &&(text<=0x7e))       
                {                                               
                        unsigned char fontbuf[16];                       
                        fontaddr = (text- 0x20);
                        fontaddr = (unsigned long)(fontaddr*16);
                        fontaddr = (unsigned long)(fontaddr+0x3b7c0);                       
                        addrHigh = (fontaddr&0xff0000)>>16;
                        addrMid = (fontaddr&0xff00)>>8;
                        addrLow = fontaddr&0xff;

                        get_n_bytes_data_from_zk(addrHigh,addrMid,addrLow,fontbuf,16 );/*取16个字节的数据,存到"fontbuf[32]"*/
                       
                        wr_8x16bmp(y,x,fontbuf);/*显示8x16的ASCII字到LCD上,y为页地址,x为列地址,fontbuf[]为数据*/
                        i+=1;
                        x+=8;
                }
                else
                        i++;       
        }
       
}
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-8-26 05:19

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表