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

📄 drawer.c

📁 dos下打开钱箱的源代码,用tc实现
💻 C
字号:
/*******************************************************
         钱箱驱动函数库
钱箱控制类型共2种:1:主板控制,2:打印机控制;
在主板控制时,需设置主板型号,共4种:1:370,2:560,3:563,4:760;5:9575
在打印机控制时,需设置打印机端口,共6种:COM1,COM2,COM3,COM4,LPT1,LPT2
对钱箱的操作类型共3种: 1:初始化,2:打开,3:检测开关状态

对370,9575主板控制的钱箱,每次开机后必须进行一次初始化,其他的钱箱
可以直接打开或检测开关状态.

修改时间: 2003-05-22

对于563/564/760/761/85610/6921驱动方式同563/760主板
第二次修改:2004-10-18
*********************************************************/



#include <conio.h>
#include <stdio.h>
#include <string.h>
#include <dos.h>
#include <bios.h>
int OpenMBDrawer(int iType);
int CheckMBDrawerStatus(int iType);
int OpenPrnDrawer(int iPtType,int iPt);
int CheckPrnDrawerStatus(int iPtType,int iPt);
int Init370Drawer(void);
int Init9575Drawer(void);
int SendStrToPrn(int iPtType,int iPt,char *str,int iLen);


//生成的DOS下的EXE可执行程序,参数为3个字符串,
//第1个参数为下列值之一:'MB','PRN',分别对应2种钱箱控制类型:1:主板控制,2:打印机控制;
//第2个参数为下列值之一:'370','560','563','760','9575',分别对应4种主板型号
//         或下列值之一:'COM1','COM2','COM3','COM4','LPT1','LPT2',分别对应6种打印机端口
//第3个参数为下列值之一:'I','O','C',分别对应对钱箱的3种操作类型:1:初始化,2:打开,3:检测状态.
//返回:初始化和打开时,1:成功,-1:失败;
//     检测状态时,1:关,0:开,-1:失败
int  main(int argc,char *argv[])
{
  int iDrawerType=0; //钱箱控制类型
  int iMBType=0;     //主板型号
  int iPrnPt=0;      //打印机端口
  int iEvent=0;      //对钱箱的操作
  int iRes;          //返回值
  int i;
  char *sDrawerType[2]={"MB","PRN"};
  char *sMBType[5]={"370","560","563","760","9575"};
  char *sPrnPt[6]={"COM1","COM2","COM3","COM4","LPT1","LPT2"};
  char *sEvent[3]={"I","O","C"};  

  if(argc!=4)
	return  iRes=-1;

  for(i=0;i<=1;i++)
	{
	  if(!strcmp(argv[1],sDrawerType[i]))
		{
		  iDrawerType=i+1;
		  break;
		}
	}

  if(iDrawerType==0)
    return iRes=-1;
  else if(iDrawerType==1)
    {
      for(i=0;i<=4;i++)
        {
          if(!strcmp(argv[2],sMBType[i]))
            {
              iMBType=i+1;
              break;
            }
        }
	  if(iMBType==0)
		return iRes=-1;
	}
  else
	{
	  for(i=0;i<=5;i++)
		{
		  if(!strcmp(argv[2],sPrnPt[i]))
			{
			  iPrnPt=i+1;
			  break;
			}
		}
	  if(iPrnPt==0)
		return iRes=-1;
	}

  for(i=0;i<=2;i++)
	{
	  if(!strcmp(argv[3],sEvent[i]))
		{
		  iEvent=i+1;
		  break;
		}
	}

  if(iEvent==0)
	return iRes=-1;

  if(iDrawerType==1)   //主板控制
	switch(iEvent)
	  {
		case 1:       //初始化
		  if(iMBType==1)
			iRes=Init370Drawer();
		  else if (iMBType==5)
		    iRes=Init9575Drawer();
		  else
			iRes=1;
		  break;
		case 2:   //打开
		  iRes=OpenMBDrawer(iMBType);
		  break;
		case 3:   //检测
		  iRes=CheckMBDrawerStatus(iMBType);
		  break;
	  }
  else if ( (iDrawerType==2) && (iPrnPt<=4))   //串口打印机控制
	switch(iEvent)
	  {
		case 1:       //初始化
		  iRes=1;
		  break;
		case 2:   //打开
		  iRes=OpenPrnDrawer(1,iPrnPt);
		  break;
		case 3:   //检测
		  iRes=CheckPrnDrawerStatus(1,iPrnPt);
		  break;
	  }
  else  if ( (iDrawerType==2) && (iPrnPt>=5))   //并口打印机控制
	switch(iEvent)
	  {
		case 1:       //初始化
		  iRes=1;
		  break;
		case 2:   //打开
		  iRes=OpenPrnDrawer(2,iPrnPt-4);
		  break;
		case 3:   //检测
		  iRes=CheckPrnDrawerStatus(2,iPrnPt-4);
		  break;
	  }
  else
    iRes=-1;

printf("%d\n",iRes);
return iRes;
}

/*===========================================================================
							   钱箱接口函数库
===========================================================================*/

//函数: OpenMBDrawer
//功能: 打开由主板控制的钱箱
//参数: iType:主板型号,1:370,2:560,3:563,4:760,5:9575
//返回: -1:无相应主板型号;1:成功
//说明: 若主板类型为370,控制位为D7,指令为先送0x80,再送0.
//      若主板类型为9575,控制位为D7,指令为先送0,再送0x80.
//      若主板类型为560,控制位为D0,开钱箱的指令为先送1再送0
//      若主板类型为563或760,控制位为D0,开钱箱的指令为先送0再送1;

int OpenMBDrawer(int iType)
{

  if(iType==1)      //370
	{
	   outportb(0x220,0x80);
	   delay(200);
	   outportb(0x220,0);
	}
  else if(iType==2)   //560
	{  outportb(0x220,1);
	   delay(200);
	   outportb(0x220,0);
	}
  else if((iType==3)||(iType==4))  //563,760
	{
	  outportb(0x220,0);
	  delay(200);
	  outportb(0x220,1);
	}
  else if(iType==5)      //9575
	{
	   outportb(0x220,0x00);
	   delay(200);
	   outportb(0x220,0x80);
	}
  else
	return -1;

  return 1;
}


//函数:CheckMBDrawerStatus
//功能:检查由主板控制的钱箱状态

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -