有关热敏打印机接口程序

来源:互联网 发布:淘宝货架摆放布局 编辑:程序博客网 时间:2024/06/03 02:52

 /*
 *****************
 * 卡交易数据结构
 *********************
 */
typedef struct tag_StrRecoder  //交易数据结构
{                                        
 unsigned char  DealNo[4];     //卡号  0x12 0x34  0x56  0x7F;目的是显示123456f
 unsigned char  AccountNo[4];    //帐号
 unsigned int   Sum;    //消费金额     150   1.50元
 unsigned int   DealBal;      //卡余额
    unsigned char  DealTime[8];  //交易时间
 unsigned char  POSNo[4];  //POS编号  
 unsigned char  PipeNo[4];     //流水号
 unsigned char  PrtTime[8];     //打印时间
}StrRecoder,*pStrRecoder;

/

*
******************
*  控制命令
******************
*/
char InitPrint[2] = {0x1B,0x40};//初始化ESC @
char PrtBlack[4] = {0x1B,0x66}; //打印空格ESC J m n
char PtrGoLine[3] = {0x1B,0x64,0x03};//ESC j n 走纸3行
char Enter[1] = { 0x0A };
 /*
**************************************************************************************************************
*  函 数 :PrintStytle()
*
*  描 述 :PrintStytle 打印空格,初始化,走纸
*
*  参 数 :type     1,是打印空格;2是初始化;3是走纸
*
*  返 回 : 无        
*   
**************************************************************************************************************
*/
void PrintStytle( int type )
{
 int i;
 switch ( type )
 {
  case 1://打印空格
  for ( i =0;i<4;i++ )
  HW_DBGU_Putchar(PrtBlack[i]);//控制字符只能一个一个发送
  break;
  case 2://初始化
  for ( i =0; i<2; i++)
  HW_DBGU_Putchar(InitPrint[i]);//控制字符只能一个一个发送
  break;
  case 3:  
  for ( i =0; i<3; i++)
  HW_DBGU_Putchar(PtrGoLine[i]);//控制字符只能一个一个发送
  break;
  default:
  break;
 }
 
}
 /*
**************************************************************************************************************
*  函 数 :PrintAPI()
*
*  描 述 :PrintAPI 打印记录的接口函数
*
*  参 数 :PrintData     : 结构类型,每个域包括不同种类的数据
*
*  返 回 : 无        
*  注 意 : 卡号、帐号、流水号都以十进制显示         
*   
**************************************************************************************************************
*/
void PrintAPI(StrRecoder* PrintData)
{
 char string[32];       //定义一个数组
 PrintStytle( 2 );       //初始化打印机
 sprintf(string,"         郑州新开普电子"); //格式化一串数据到数组
 HW_DBGU_PDC_SendStr(string);     //向串口发送字符串
 HW_DBGU_Putchar(Enter[0]);       //回车字符 ,控制打印机打印缓冲区中数据
 PrintStytle( 2 );       //初始化打印机
 sprintf(string,"            欢迎光临!"); //格式化一串数据到数组
 HW_DBGU_PDC_SendStr(string);    //向串口发送字符串
 HW_DBGU_Putchar(Enter[0]);     //回车字符
 PrintStytle( 2 ) ;       //初始化,参数为2
 sprintf(string,"==============================");
 HW_DBGU_PDC_SendStr(string);
 HW_DBGU_Putchar(Enter[0]);     //回车字符
 PrintStytle( 2 ) ;       //初始化,参数为2
 ////////////////////打印卡号
// sprintf(string,"卡号:%#18X",*(u32 *)PrintData->DealNo);  //#18X 显示加0x 宽度18、16进制输出
 sprintf(string,"卡    号:%u",PrintData->DealNo[0]*0x1000000 + /
         PrintData->DealNo[1]*0x10000 + /
         PrintData->DealNo[2]*0x100 + /
         PrintData->DealNo[3] );
 HW_DBGU_PDC_SendStr(string);     //送字符
 HW_DBGU_Putchar(Enter[0]);     //回车字符
 PrintStytle( 2 ) ;       //初始化,参数为2
 sprintf(string,"帐    号:%u",PrintData->AccountNo[0]*0x1000000 + /
         PrintData->AccountNo[1]*0x10000 + /
         PrintData->AccountNo[2]*0x100 + /
         PrintData->AccountNo[3] );
 
 HW_DBGU_PDC_SendStr(string);    //需要对字符进行处理
 HW_DBGU_Putchar(Enter[0]);     //回车字符
 PrintStytle( 2 ) ;       //初始化,参数为2
 // sprintf(string,"交易时间:%02X%02X-%02X-%02X-%02X:%02X:%02X", //初始化命令和横向放大倍数设置1:1
 sprintf(string,"%c%c交易时间:%c%c%c%02X%02X-%02X-%02X %02X:%02X:%02X", /
        0x1b,'@',0x1b,'U',0x1,   /
        PrintData->DealTime[0],   /
        PrintData->DealTime[1],   /
        PrintData->DealTime[2],   /
        PrintData->DealTime[3],   /
        PrintData->DealTime[4],   /
        PrintData->DealTime[5],   /
        PrintData->DealTime[6]);

 HW_DBGU_PDC_SendStr(string);
 HW_DBGU_Putchar(Enter[0]);     //回车字符
 PrintStytle( 2 ) ;       //初始化,参数为2
 //////////////////////////////
 memset (  string,0,32 );
 sprintf(string,"消 费 额:%u.%u 元",(PrintData->Sum)/100,(PrintData->Sum)%100);
 HW_DBGU_PDC_SendStr(string);
 HW_DBGU_Putchar(Enter[0]);     //回车字符
 /////////////////////////////////////////
 memset ( string,0,32 );
 PrintStytle( 2 ) ;       //初始化,参数为2
 memset (  string,0,32 );
 sprintf(string,"卡 余 额:%u.%u 元",(PrintData->DealBal)/100,(PrintData->DealBal)%100);
 HW_DBGU_PDC_SendStr(string);
 HW_DBGU_Putchar(Enter[0]);     //回车字符
 sprintf(string,"=============================="); //30
 HW_DBGU_PDC_SendStr(string);
 HW_DBGU_Putchar(Enter[0]);     //回车字符
 PrintStytle( 2 ) ;       //初始化,参数为2
 sprintf(string,"POS编 号:%u",PrintData->AccountNo[0]*0x1000000 +/
         PrintData->AccountNo[1]*0x10000 + /
         PrintData->AccountNo[2]*0x100 + /
         PrintData->AccountNo[3] );
  HW_DBGU_PDC_SendStr(string);
 HW_DBGU_Putchar(Enter[0]);     //回车字符
 
 PrintStytle( 2 ) ;       //初始化,参数为2
 sprintf(string,"流 水 号:%u",PrintData->AccountNo[0]*0x1000000 +/
         PrintData->AccountNo[1]*0x10000 + /
         PrintData->AccountNo[2]*0x100 + /
         PrintData->AccountNo[3] );

 HW_DBGU_PDC_SendStr(string);
 HW_DBGU_Putchar(Enter[0]);     //回车字符
 PrintStytle( 2 ) ;       //初始化,参数为2
 sprintf(string,"%c%c打印时间:%c%c%c%02X%02X-%02X-%02X %02X:%02X:%02X", /
        0x1b,'@',0x1b,'U',0x1,/
        PrintData->PrtTime[0],   /
        PrintData->PrtTime[1],   /
        PrintData->PrtTime[2],   /
        PrintData->PrtTime[3],   /
        PrintData->PrtTime[4],   /
        PrintData->PrtTime[5],   /
        PrintData->PrtTime[6]);
 HW_DBGU_PDC_SendStr(string);
 HW_DBGU_Putchar(Enter[0]);     //回车字符
 PrintStytle( 3 ) ;       //走纸,参数为3 */
}

原创粉丝点击