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

📄 pda.c

📁 税控收款机源码:拼音输入法,LCD,VFD驱动,IC卡驱动,税控国标
💻 C
字号:
#include "include.h"

/***********************************************************
  函数:uchar Pda_input(uchar *TUclen, uchar TUcHzbuf[])
  版本:1.0.0.5
  日期:20020722 9:47 
  ----------------------------------------------------------
  功能:PDA传送汉字内码串到税控机
  入口参数:
    uchar  *TUclen:    汉字内码串长度指针
    uchar  TUcHzbuf[]: 汉字内码串
  
  出口参数:
    uchar  *TUclen:   返回汉字内码串的长度指针
    uchar  TUcHzbuf[]: 返回汉字内码串
  
  函数返回:
      通信成功返回0,否则返回错误代码
	  错误代码:0xFE:按【取消】直接退出
	            //0x01:校验码错
                //0x02:开始标志错
                //0x03:汉字内码串长度错
				//0x04:汉字内码错
                //0xFF:通讯错误,延时退出

  通讯协议:
      1、 手写板与收款机的通讯波特率: 9600,N,8,1
      
	  2、 手写板发送给收款机的数据格式为:
          开始标志(一个字节)    :  ESC (0x1B)
          汉字长度(一个字节)   :  N
          数据(N个字节)        :  汉字内码
          算术检验和(一个字节) :  前 N+2 个字节的算术和
          
          例子:PDA发送汉字"开发科技"
                1B 08 BF AA B7 A2 BF C6 BC BC E2 
			   -头-长-      汉字内码串       -算术校验和-
      
      3、 税控收款机应答格式:  
	      接收正确发送十六进制:11 EE ,手写板正确结束;    
	      接收错误发送十六进制:22 DD ,
		  手写板重发,重发3次还未成功则失败结束;税控机则报警。
		  
      4	、硬件特性,RS232通讯,逻辑1为5V,接口第九针接5V直流电源  
		  
		  
		  
**************************************************************/
uchar Pda_input(uchar *TUcLen, uchar TUcHzbuf[])
{
	#define MAXPDALEN  60  //最大的PDA输入长度(0~255),100相当于50个汉字
	uchar JJJ,KKK,i,
		LUcSum,          //算术和
		LUcLen,          //汉字内码串长度,<=100
		LUcErr,          //错误标志,0正确,1错误
		LUcErrCount;     //错误次数      
	uchar xdata LUcBufRece[MAXPDALEN+3]; //接收缓冲,1byte(头)+1byte(长)+100byte(汉字内码串)+1byte(尾)
	uchar xdata LUcBufSend[2];   //发送缓冲
	//uchar LUcBufDisp[10];  //显示缓冲
   
	LUcErrCount=0;         //初始化错误计数器      
	LUcErr=0;              //初始化错误标志  
  
	// beep(255);
   
	//select_com(0);        //选取RS232串口
	modify_rate2(3);       //选取波特率9600bps
  
	clear_rece_buffer2();  //清除接收缓冲区

	do      //等待PDA传送汉字,否则按[取消]退出
	{
		openbacklight();
		if(low_pwr)//等1时表示已关掉了交流电
			return(POWER_OFF); 
		JJJ=get_key();
		if(JJJ==VOID)
			return(VOID); //lyj
		if(!rece2(1,LUcBufRece))                 //接收包头和长度
		{
			if((LUcBufRece[0]==0x1B)&&!rece2(1,&LUcBufRece[1]))//开始标志和汉字长度是否正确
			{
				LUcLen=LUcBufRece[1];
				if((LUcLen<=MAXPDALEN)&&!rece2(LUcLen+1,&LUcBufRece[2])) //接收汉字内码串和包尾
				{
					LUcSum=0;
					for(i=0;i<LUcLen+2;i++) LUcSum+=LUcBufRece[i];//计算代数校验和
					if(LUcSum==LUcBufRece[LUcLen+2]) //比较校验和       
					{
						delayms(200);
						LUcBufSend[0]=0x11;
						LUcBufSend[1]=0xEE;
						send_str2(2,LUcBufSend);//接收正确发送十六进制:11 EE
			
						memcpy(TUcHzbuf,&LUcBufRece[2],LUcLen);//返回汉字内码串
						*TUcLen=LUcLen;                        //返回汉字内码串长度指针
						return 0;
					}
				}
			}
			LUcErr++;
		}

		if(LUcErr>0)              //判断是否有错
		{
			delayms(200);
			clear_rece_buffer();   //清除接收缓冲区
			LUcBufSend[0]=0x22;
			LUcBufSend[1]=0xDD;
			send_str2(2,LUcBufSend);//接收错误发送十六进制:22 DD
			LUcErr=0;
			LUcErrCount++;         //错误次数加1
			//beep(100);
			if (LUcErrCount>3)     //错误次数大于3报警
			{
				do
				{
					KKK=get_key();
					beep(255);
				}while(KKK!=CLEAR);   //按【清除】退出报警循环,重新等待PDA传送汉字
				LUcErrCount=0;
			}
		}  
	}while(JJJ!=VOID);//按【取消】退出等待PDA传送汉字循环
	return VOID;
}

⌨️ 快捷键说明

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