📄 printer.c
字号:
/***********************************************************
* 文件名:PRINTER.C
***********************************************************/
#include "REG51STC.H"
#include <ABSACC.H>
#include "CMD16887.H"
#include <INTRINS.H>
#include "externxy.h"
//enum producttype{"Regular","Midgrade","Premium","Diesel","abcdef","x5defee","x6defee","x7defee"};
enum producttype{Regular,Midgrade,Premium,Diesel,abcdef,x5defee,x6defee,x7defee};
//code producttype product;
code uchar oiltypes0[]={"Regular"}; //油品0
code uchar oiltypes1[]={"Midgrade"}; //油品1
code uchar oiltypes2[]={"Premium"}; //油品2
code uchar oiltypes3[]={"Diesel"}; //油品3
code uchar oiltypes4[]={"super"}; //油品4
code uchar oiltypes5[]={"midgrade"}; //油品5
code uchar oiltypes6[]={"premium"}; //油品6
code uchar oiltypes7[]={"super"}; //油品7
code uchar service_station[]={"ASKAR OIL SERVICE (PVT) LTD"}; //加油站信息
/***********************************************************
* 功能:读打印机状态,查询busy信号a/b
***********************************************************/
void delay_printer(uint useconds,uchar prnidid)
{ bit tempbit;
AUXR |=0x02;
if(prnidid==0) tempbit=p1busy;
else tempbit=p2busy;
for(;useconds>0;useconds--)
{
WDT_CONTR=0x34;
printstate=XBYTE[READPRINT]; //读打印机状态
if (!tempbit) break;
}
}
/**********************************************
* 功能:打印机输出命令及数据a/b
***********************************************/
void printer(uchar n,uchar sdata[],uchar prnidid)
{
data uchar i;
P1STB=1;
P2STB=1;
for(i=0;i<n;i++)
{ AUXR &=0xfd;
bbyte=sdata[i];
if (bbyte==0x00 && i>3) break;
AUXR |=0x02;
if(prnidid==0)
{ delay_printer(20,prnidid);
XBYTE[PRINTER1ADD]=bbyte;
delay_printer(5,prnidid);
//if (!p1busy)
{
P1STB=0;
_nop_();
_nop_();
P1STB=1;
}
}
else
{ delay_printer(20,prnidid);
XBYTE[PRINTER2ADD]=bbyte;
delay_printer(5,prnidid);
//if (!p2busy)
{
P2STB=0;
_nop_();
_nop_();
P2STB=1;
}
}
AUXR &=0xfd;
}
AUXR &=0xfd;
}
/**********************************************************
* 功能:打印加油票据a/b
**********************************************************/
void print_proof(uchar gunidid)
{ uchar prnidid;
uchar tt[30];
uchar productnum; //油品
xdata ulong m;
uchar i,j;
bit tempbit;
if(gunidid==0)
{ productnum=oil_types_a;
tempbit=p1sel;
prnidid=pirnt_select_a;
}
else
{ productnum=oil_types_b;
tempbit=p2sel;
prnidid=pirnt_select_b;
}
tempbit=1;
if(tempbit) //不在线不打印
{ //printer(32,"-------------------------------",prnidid);
//tt[0]=0x0a;
//printer(1,&tt[0],prnidid);
for(i=0;i<30;i++)
{
tt[i]=print_format[i+120];
}
printer(30,&tt[0],prnidid);
tt[0]=0x0a;
printer(1,&tt[0],prnidid);
for(i=0;i<30;i++)
{
tt[i]=print_format[i+90];
}
printer(30,&tt[0],prnidid);
tt[0]=0x0a;
printer(1,&tt[0],prnidid);
for(i=0;i<30;i++)
{
tt[i]=print_format[i+60];
}
printer(30,&tt[0],prnidid);
tt[0]=0x0a;
printer(1,&tt[0],prnidid);
tt[0]=0x1b;tt[1]=0x4a;tt[2]=24; //走空行
printer(3,&tt[0],prnidid);
//-------------------------------
if(gunidid==0){m=gun1.sale;bbyte=dotmode[decimal_a];} //金额
else {m=gun2.sale;bbyte=dotmode[decimal_b];}
if(a0) j=6;
else if(a3) j=5;
else j=8;
for(i=7;i>0;i--)
{ if(i==j) {tt[i]=0x2e;i--;}
tt[i]=m%10+0x30;m/=10;
}
tt[0]=m%10+0x30;
for(i=0;i<j-1;i++)
{
if(tt[i]==0x30) tt[i]=0x20;
else break;
}
printer(11," Total: ",prnidid);
printer(4,"Rp.",prnidid);
printer(8,&tt[0],prnidid); //打印金额
tt[0]=0x0a;
printer(1,&tt[0],prnidid);
//-----------------------
if(gunidid==0){m=gun1.liter;bbyte=dotmode[decimal_a];} //升
else {m=gun2.liter;bbyte=dotmode[decimal_b];}
if(a4) j=5;
else if(a1) j=4;
else j=8;
for(i=7;i>0;i--)
{ if(i==j) {tt[i]=0x2e;i--;}
tt[i]=m%10+0x30;m/=10;
}
tt[0]=m%10+0x30;
for(i=0;i<j-1;i++)
{
if(tt[i]==0x30) tt[i]=0x20;
else break;
}
printer(18," Liter: ",prnidid);
printer(8,&tt[0],prnidid); //打印升
printer(3," L ",prnidid);
tt[0]=0x0a;
printer(1,&tt[0],prnidid);
//-----------------------
if(gunidid==0){m=price_a;bbyte=dotmode[decimal_a];} //单价
else {m=price_b;bbyte=dotmode[decimal_b];}
if(a5) j=5;
else if(a2) j=4;
else j=8;
for(i=7;i>0;i--)
{ if(i==j) {tt[i]=0x2e;i--;}
tt[i]=m%10+0x30;m/=10;
}
tt[0]=m%10+0x30;
for(i=0;i<j-1;i++)
{
if(tt[i]==0x30) tt[i]=0x20;
else break;
}
printer(11,"Price/L: ",prnidid);
printer(3,"Rp. ",prnidid);
printer(8,&tt[0],prnidid); //打印单价
//-----------------------
tt[0]=0x0a;
printer(1,&tt[0],prnidid);
printer_time(prnidid); //打印加油日期、时间
tt[0]=0x0a;
printer(1,&tt[0],prnidid);
printer(10,"Product: ",prnidid);
//printer(20,&producttype(productnum),prnidid); //油品
switch (productnum)
{
case 0:
printer(20,&oiltypes0,prnidid);
break;
case 1:
printer(20,&oiltypes1,prnidid);
break;
case 2:
printer(20,&oiltypes2,prnidid);
break;
case 3:
printer(20,&oiltypes3,prnidid);
break;
case 4:
printer(20,&oiltypes4,prnidid);
break;
case 5:
printer(20,&oiltypes5,prnidid);
break;
case 6:
printer(20,&oiltypes6,prnidid);
break;
case 7:
printer(20,&oiltypes7,prnidid);
break;
default:
printer(20,&oiltypes7,prnidid);
break;
}
tt[0]=0x0a;
printer(1,&tt[0],prnidid);
//----------------------------
printer(11,"Selang No: ",prnidid); //软管号
if(gunidid==0)
{
tt[0]=gunadd_a/16+0x30;
tt[1]=gunadd_a%16+0x30;
}
else
{
tt[0]=gunadd_b/16+0x30;
tt[1]=gunadd_b%16+0x30;
}
printer(2,&tt[0],prnidid);
tt[0]=0x0a;
printer(1,&tt[0],prnidid);
//----------------------------------
printer(12," No.Trans: ",prnidid); //发票编号
tt[0]=gunadd_a/16+0x30; //这里在编号前+第一条枪的中控号
tt[1]=gunadd_a%16+0x30;
if(gunidid==0)m=gun1.ppu;
else m=gun2.ppu;
for(i=11;i>1;i--)
{
tt[i]=m%10+0x30;m/=10;
}
printer(12,&tt[0],prnidid);
tt[0]=0x0a;
printer(1,&tt[0],prnidid);
//----------------------------------
for(i=0;i<30;i++)
{
tt[i]=print_format[i+30];
}
printer(30,&tt[0],prnidid); //电话
tt[0]=0x0a;
printer(1,&tt[0],prnidid);
//--------------------------------------
tt[0]=0x0a;
printer(1,&tt[0],prnidid);
for(i=0;i<30;i++)
{
tt[i]=print_format[i+0];
}
printer(30,&tt[0],prnidid);
//printer(40,&service_station,prnidid); //打印加油站信息
tt[0]=0x0a;
printer(1,&tt[0],prnidid);
//------------------------------------
tt[0]=0x0a;
printer(1,&tt[0],prnidid);
tt[0]=0x1b;tt[1]=0x4a;tt[2]=48; //走空行
printer(3,&tt[0],prnidid);
printer(32,"-------------------------------",prnidid);
tt[0]=0x0a;
printer(1,&tt[0],prnidid);
tt[0]=0x1b;tt[1]=0x4a;tt[2]=48; //走空行
printer(3,&tt[0],prnidid);
}
}
/***********************************************
* 功能: 打印加油日期、时间b
***********************************************/
void printer_time(uchar prnidid)
{
xdata uchar tt[12];
tt[0]=0x32;
tt[1]=0x30;
tt[2]=ucCurtime[6]/16+0x30;
tt[3]=ucCurtime[6]%16+0x30;
tt[4]=0x2d;
tt[5]=ucCurtime[4]/16+0x30;
tt[6]=ucCurtime[4]%16+0x30;
tt[7]=0x2d;
tt[8]=ucCurtime[3]/16+0x30;
tt[9]=ucCurtime[3]%16+0x30;
tt[10]=0x20;
tt[11]=0x20;
printer(10," Date: ",prnidid);
printer(12,&tt[0],prnidid);
//-----------------------------
tt[0]=0x0a;
printer(1,&tt[0],prnidid);
tt[0]=ucCurtime[2]/16+0x30;
tt[1]=ucCurtime[2]%16+0x30;
tt[2]=0x3a;
tt[3]=ucCurtime[1]/16+0x30;
tt[4]=ucCurtime[1]%16+0x30;
tt[5]=0x3a;
tt[6]=ucCurtime[0]/16+0x30;
tt[7]=ucCurtime[0]%16+0x30;
tt[8]=0x20;
tt[9]=0x20;
printer(14," Time: ",prnidid);
printer(10,&tt[0],prnidid);
}
/****************************************
* 功能:打印机初始化
******************************************/
void print_ipl(void)
{
xdata uchar tt[2];
tt[0]=27;
tt[1]=64;
printer(2,&tt[0],0);
printer(2,&tt[0],1);
tt[0]=0;
tt[1]=0;
printer(1,&tt[0],0);
printer(1,&tt[0],1);
P1STB=0;
P2STB=0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -