⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 printer.c

📁 HT1621液晶控制测试
💻 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 + -