09C5DA5BC6A51805AC635BA5CE78D7A5
一、硬件介绍
打印机硬件部分连接如下:
![image.png](//file.elecfans.com/web2/M00/92/54/poYBAGPx4RyAanBoAACcWYK66oo773.png)
STB1-STB6引脚是加热引脚
LAT引脚是数据锁存引脚
需要控制这几个引脚加上SPI数据传输,就能实现打印的功能。
二、软件介绍
void dayin(uchar* Char_Rx_Buffer1,uint Char_Rx_Length1,u32 fontype)
{
u32 offset;
u8 qh, wh;
u16 x;
u8 Word_Touch_High, Word_Touch_Wide, Word_Touch_Size, \
Word_Touch_Size_Half, Word_Touch_Wide_Half;
u8 JundePool[24];
u16 JundePool_Index = 0;
u8 PrintPool[3000];
u32 PrintPool_Index = 0;
u32 i, j, l,z;
u8 buff[132];
u16 Chinese_length = 0,Ascll_length = 0;
u16 copy_length =0 ;
u16 Junde_length = 0;
u16 length1 = 0;
u16 surplusLength = 0;
u16 count;
u16 Alllength = 0;
u16 row_flag = 0;
Word_Touch_High = 33;
Word_Touch_Wide = 32;
Word_Touch_Wide_Half = Word_Touch_Wide / 2;
Word_Touch_Size = (Word_Touch_High * Word_Touch_Wide) / 8;
Word_Touch_Size_Half = (Word_Touch_High * Word_Touch_Wide_Half) / 8;
memset(manyRow,0,200);
manyRowLegth = 0;
if(Char_Rx_Length1 > 48 / 2)
{
for(x = 0; x < Char_Rx_Length1;)
{
if(Char_Rx_Buffer1[x] == 0x0d && Char_Rx_Buffer1[x + 1] == 0x0a)
{
x += 2;
manyRow[manyRowLegth ++] = count;
count = 0;
}
else if(Char_Rx_Buffer1[x] & 0x80)
{
count += 2;
x += 2;
}else
{
count += 1;
x += 1;
}
if(count >= 23)
{
manyRow[manyRowLegth ++] = count;
count = 0;
}
}
manyRow[manyRowLegth ++] = count;
}else{
for(x = 0; x < Char_Rx_Length1; x++)
{
if(Char_Rx_Buffer1[x] == 0x0d && Char_Rx_Buffer1[x + 1] == 0x0a)
{
row_flag = 1;
}
}
if(row_flag)
{
manyRow[manyRowLegth ++] = Char_Rx_Length1 - 2;
}else
{
manyRow[manyRowLegth ++] = Char_Rx_Length1;
}
}
for(z = 0; z < manyRowLegth; z ++)
{
Char_Rx_Length1 = manyRow[z];
memset(PrintPool,0,3000);
PrintPool_Index = 0;
memset(JundePool,0,24);
JundePool_Index = 0;
for(x = 0; x < Char_Rx_Length1;)
{
if(Char_Rx_Buffer1[x + Alllength] & 0x80)
{
JundePool[JundePool_Index++] = 1;
qh = Char_Rx_Buffer1[x + Alllength] - 0xA0;
wh = Char_Rx_Buffer1[x + 1 + Alllength] - 0xA0;
offset = (u32)(94 * (qh - 1) + (wh - 1)) * Word_Touch_Size + fontype;
dri_w25qxx_readBuffer( offset,buff, Word_Touch_Size);
x = x + 2;
for(i= 0; i < Word_Touch_Size; i++)
{
PrintPool[PrintPool_Index++] = buff[i];
}
}else{
JundePool[JundePool_Index++] = 2;
qh = Char_Rx_Buffer1[x + Alllength];
offset = fontype + ASCII + (qh - 0x20) * Word_Touch_Size_Half;
dri_w25qxx_readBuffer(offset, buff, Word_Touch_Size_Half);
x = x + 1;
for(i= 0; i < Word_Touch_Size_Half; i++)
{
PrintPool[PrintPool_Index++] = buff[i];
}
}
}
Alllength += Char_Rx_Length1;
for(i = 0; i < Word_Touch_High; i++)
{
length1 = Char_Rx_Length1;
copy_length = 0;
Junde_length = 0;
for(l = 0; l < 48; )
{
if(length1 ==0)
{
RowPool[RowPool_Index ++] = 0;
l += 1;
}else
{
if(JundePool[Junde_length] == 1)
{
Junde_length ++;
for(j = 0; j < 4; j++)
{
RowPool[RowPool_Index++] = PrintPool[j + i *4 + copy_length];
}
copy_length += 132;
l += 4;
length1 -= 2;
}else if(JundePool[Junde_length] == 2)
{
Junde_length ++;
for(j = 0; j < 2; j++)
RowPool[RowPool_Index++] = PrintPool[j + i * 2 + copy_length];
copy_length += 66;
l += 2;
length1 --;
}
}
}
dri_printer_refreshPrint();
memset(RowPool,0,RowPool_Index);
RowPool_Index = 0;
}
dri_stepperMotor_runSpecifyTurnNum(800,20);
if(z != manyRowLegth -1)
{
if(Char_Rx_Length1 < 23)
{
Alllength += 2;
}
}
}
}
三、最后效果
最终实现的效果请看视频,模拟打印一张超市小票(用多种字体)。
|