(-06-05)
/zhaojun_xf/blog/static/30050580027103831591/
/**************************************************************************************
* FunctionName : PrinterReadOneChar()
* Description : 从字库中读取一个字符放入缓冲区
* EntryParameter : ptr - 字符编码,num - 数据存放打印缓冲的位置
* ReturnValue : None
**************************************************************************************/
void PrinterReadOneChar8x16(uint8 *ptr, uint8 num)
{
uint8 i;
for (i=0; i<16; i++) // 0x20以前的字符没有使用
{
PrinterBuf[i][num] = SSTReadByte(FontStartEn8x16 + ((*ptr-0x20)*16) + i);
}
}
/**************************************************************************************
* FunctionName : PrinterReadOneChinese()
* Description : 从字库中读取一个汉字放入缓冲区
* EntryParameter : ptr - 字符编码,num - 数据存放打印缓冲的位置
* ReturnValue : None
**************************************************************************************/
void PrinterReadOneChinese16x16(uint8 *ptr, uint8 num)
{
uint8 i, k=0, count;
uint32 offSet;
count = 16*16 / 8; // 一个汉字多少字节
offSet = ((*ptr - 0xA1)*94 + (*(ptr+1) - 0xA1))*count; // 汉字的地址是从0xA1A1开始
for (i=0; i<count; i+=2)
{
PrinterBuf[k][num] = SSTReadByte(FontStartCn16x16 + offSet + i); // 读左边8位
PrinterBuf[k][num+1] = SSTReadByte(FontStartCn16x16 + offSet + i + 1); // 读右边8位
k++;
}
}
/**************************************************************************************
* FunctionName : PrinterReadOneBuffer()
* Description : 从缓冲区读取一行文字到打印缓冲区
* EntryParameter : buf - 缓冲区;startAddr - 读取起始地址;endAddr - 读取结束地址
* ReturnValue : None
**************************************************************************************/
void PrinterReadOneBuffer16(uint8 *buf, uint32 startAddr, uint32 endAddr)
{
uint8 i = 0;
uint8 *tmp;
while (i < (endAddr-startAddr))
{
tmp = buf+startAddr+i; // ASCII字符与汉字内码的区别在于128
if (*tmp <= 0x80) // ASCII < 128
{
PrinterReadOneChar(tmp, i); // 把字符的显示数据放入打印缓冲
i++;
}
else // 汉字 > 128
{
PrinterReadOneChinese(tmp, i); // 把汉字的显示数据放入打印缓冲
i += 2;
}
}
}