📄 ftp.c
字号:
tempaddr <<= 5;
tempaddr =tempaddr + (i<<1);
tempa = spi_read(tempaddr++);
ByteWrite(tempa);
tempa = spi_read(tempaddr);
ByteWrite(tempa);
ch_cnt += 2;
}
else if (*temp_sp>=' ')
{
tempaddr = *temp_sp++;
tempaddr = (tempaddr<<4) + BLOCK5 + i;
tempa = spi_read(tempaddr);
ByteWrite(tempa);
ch_cnt += 1;
}
else
{
break;
}
}
while (ch_cnt++ <48)
{
spi_read(0);
ByteWrite(0);
}
//STB_DIS;
STB_EN;
Motor_Step(1); //启动电机走纸一步
LAT_EN; //启动锁存信号
_NOP();
LAT_DIS; //关闭锁存信号
STB_DIS; //加热状态关闭
}
}
else
{
Motor_Step(16);
}
Motor_Step(ROW_SP); //走纸打印行间距 ROW_SP 默认情况值为 3 串口可以设置打印行距
prn_flag &= ~(1<<prn_tail); //清除标识
if (++prn_tail == PRN_BC) prn_tail = 0;
}
//FLASH 中取PICTURE块阵列送打印头移位寄存器
void print_pic(uchar index)
{
uchar i,tempa;
uchar ch_cnt;
ulong tempaddr;
//Cleasr the printer buffer
ch_cnt = 0;
while (ch_cnt++ <48)
{
ByteWrite(0);
}
LAT_EN; //启动锁存信号
NOP2;
LAT_DIS; //关闭锁存信号
tempaddr = BLOCK6 + (index*80*48); //数据保存到FLASH位置
for(i=0;i<80;i++)
{
ch_cnt = 0;
while(ch_cnt < 48)
{
tempa = spi_read(tempaddr++);
ByteWrite(tempa);
ch_cnt++;
if(ch_cnt >= 24)
{
STB_EN;
}
}
LAT_EN; //启动锁存信号
NOP2;
LAT_DIS; //关闭锁存信号
STB_DIS; //加热状态关闭
Motor_Step(1); //启动电机走纸一步
}
Motor_Step(10); //走纸发票头与打印内容之间的行距
}
//打印 ASCII 码表 ///////////////////////////
/*void print_asc(void)
{
uchar i,j,ch_cnt,tempa,*temp_sp;
ulong tempaddr;//ID;
i = 0;
tempa = 0;
tempaddr = BLOCK5;
//tempaddr = BLOCK5; // + ID; //ID 为所选 ascii 地址块
//Motor_Step(1); //先走纸一步
for(j=0;j<8;j++)
{
for(i=0;i<16;i++)
{
//STB_EN;
ch_cnt = 0;
temp_sp = prn_buff[prn_tail];
while(temp_sp - prn_buff[prn_tail] <48)
{
tempaddr = *temp_sp++;
tempaddr = (tempaddr<<4) + BLOCK5 + i;
tempa = spi_read(tempaddr);
ByteWrite(tempa);
tempaddr++;
ch_cnt += 1;
}
}
while (ch_cnt++ <48)
{
spi_read(0);
ByteWrite(0);
}
LAT_EN; //启动锁存信号
NOP2;
LAT_DIS; //关闭锁存信号
STB_DIS; //加热状态关闭
Motor_Step(1); //启动电机走纸一步
Motor_Step(3);//走纸打印行距
}
//tempaddr = 0;
}*/
//打印命令类型处理程序
void OnPrinterCmd(void)
{
uchar datain =0;
uchar *dPtr;
if (!printer_mode) return;
if (prn_cmd_ok)
{
switch(prn_cmd)
{
case 'J': //打印并走纸 N 行 0~255
Motor_Step(prn_para1);
break;
case '2': //设置行间距 0~255
ROW_SP = prn_para1;
break;
case '*': //取消行间距设置
ROW_SP = 2;
break;
case 'A': //打印两倍高度
DOUB_HIGH = 1;
break;
case '!': //取消双倍高打印
DOUB_HIGH = 0;
break;
case 'B': //打印两倍宽
/* if()
{
}
else if()
{
}*/
break;
case 'C': //打印机自检 打印ASCII码表和公司标识
//print_asc(); //ASCII 码表
print_pic(1); //打印预置公司标识
break;
case 'D': //标准内容 prn_paral = 0 --> 发票头 prn_paral = 1 --> 公司标识 prn_paral = 2 --> *** ...
print_pic(prn_para1);
break;
case 'E': //串口发送指令改变串口通信波特率
break;
}
prn_cmd = 0;
prn_para1 = 0;
prn_cmd_ok = FALSE;
}
//字符串打印
if (prn_havedata && ((prn_flag & (1<<prn_head))==0) )
{
datain = 0;
dPtr = &prn_buff[prn_head][0];
while ((pTU0!=pRU0)&&datain <47 )
{
if (*pTU0 == 0x0A)
{
++pTU0;
if((printstate_sn&2) == 2)
{
if((pRU0 > pTU0)&&((COM0_LEN + pRU0 - pTU0) >= 512))
printstate_sn = 4;
else
{
if((pRU0 < pTU0)&&((pTU0 - pRU0) >= 512))
printstate_sn = 4;
}
}
if(pTU0 >= (COM0 + COM0_LEN))
pTU0 = COM0;
break;
}
if (*pTU0 & 0x80)//
{ //汉字,2字节
*dPtr++ = *pTU0++;
if((printstate_sn&2) == 2)
{
if((pRU0 > pTU0)&&((COM0_LEN + pRU0 - pTU0) >= 512))
printstate_sn = 4;
else
{
if((pRU0 < pTU0)&&((pTU0 - pRU0) >= 512))
printstate_sn = 4;
}
}
if(pTU0 >= (COM0 + COM0_LEN)) pTU0 = COM0;
datain ++;
}
*dPtr++ = *pTU0++;
if((printstate_sn&2) == 2)
{
if((pRU0 > pTU0)&&((COM0_LEN + pRU0 - pTU0) >= 512))
printstate_sn = 4;
else
{
if((pRU0 < pTU0)&&((pTU0 - pRU0) >= 512))
printstate_sn = 4;
}
}
if(pTU0 >= (COM0 + COM0_LEN)) pTU0 = COM0;
datain ++;
}
if (datain < 47) *dPtr = 0;//?
//下一个缓冲区
prn_flag |= (1<<prn_head);
if (++prn_head == PRN_BC) prn_head = 0;
if (pTU0 == pRU0) prn_havedata = FALSE;
}
print_it();
}
//清除打印头移位寄存器
void reg_clr(void)
{
uchar i;
for(i=0; i<48;i++)
{
ByteWrite(0x00);
}
}
/*************************************/
//步进电机走纸程序
/**************************************/
void Motor_Step(uchar cnt)
{
uchar i;
for (i=0;i<cnt;i++)
{
print_timer = 0; //定时器清0
MTA_1; MTB_0;
while(print_timer !=1);
MTA_0;
while(print_timer !=2);
MTB_1;
while(print_timer !=3);
MTA_1;
while(print_timer !=4);
MTB_0;
CLRWTD;
}
while(print_timer <5);
print_timer = 0; //定时器清0
MTA_LOSS;
MTB_LOSS;
}
//发送数据送帧头
void SENT_HEAD(uchar cmd,uint length)
{
verify0t = 0x55;
while((UTXIFG0&IFG1)!=UTXIFG0);
TXBUF0 = 0x55;
while((UTXIFG0&IFG1)!=UTXIFG0);
TXBUF0 = 0x7a; //发送指令头
verify0t ^= 0x7a; //获取校验字节
while((UTXIFG0&IFG1)!=UTXIFG0);
TXBUF0 = cmd;
verify0t ^= cmd; //获取校验字节
while((UTXIFG0&IFG1)!=UTXIFG0);
TXBUF0 = length; //送数据长度
verify0t ^= length; //获取校验字节
while((UTXIFG0&IFG1)!=UTXIFG0);
TXBUF0 = 0; //送保留字
}
//串口发送纸已转载成功处理程序
void paperok_ack(void)
{
SENT_HEAD(0,0); //输出帧头
while((UTXIFG0&IFG1)!= UTXIFG0);
TXBUF0 = verify0t; //送校验字节
}
//串口发送缺纸处理程序
void nopaper_ack(void)
{
SENT_HEAD(2,0); //输出帧头
while((UTXIFG0&IFG1)!=UTXIFG0);
TXBUF0 = verify0t; //送校验字节
}
//串口发送打印忙处理程序
void printerbusy_ack(void)
{
SENT_HEAD(3,0); //输出帧头
while((UTXIFG0&IFG1)!= UTXIFG0);
TXBUF0 = verify0t; //送校验字节
}
//串口发送打印完成状态处理程序
void printerok_ack(void)
{
SENT_HEAD(1,0);
while((UTXIFG0&IFG1)!= UTXIFG0);
TXBUF0 = verify0t; //送校验字节
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -