|
发表于 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++;
}
} |
|