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

📄 data.c

📁 抄水表手持POS代码
💻 C
📖 第 1 页 / 共 3 页
字号:
#include "_POS.h"
#include "AppSjk.h"
#include "AppData.h"

extern uint UCardBal_0;//交易金额
uchar SBH[2];
extern void display(char line,uchar *buff);
extern uchar Get_Money(uchar *buff);//输入钱数

bit sbhflag=NOK;
bit ZBHFlag=NOK;
bit GLKFlag=NOK;
uchar XLFlag;

extern uint LineNum;
extern uchar BusNum[2];//车辆自编号
extern uchar OpCardNum[2];//承包人编号
extern uchar GLCardNum[3];//管理卡发行卡号
extern bit ReadUCInc();

long ReadLen()
{
uchar xdata ret1,ret2,buff[9],buff1[9];
int i;
long len=0;
for(i=0;i<8;i++) buff[i]=_FlashByteRead(LENPAGE ,LSZLENADDR+i );
ret1=ValidData(buff);
for(i=0;i<8;i++) buff1[i]=_FlashByteRead(LENPAGEBAK ,LSZLENADDR+i );
ret2=ValidData(buff1);
if((ret1==OK)&&(ret2==OK)) {len=buff[2]+buff[3]*0x100;}//TTTTTTTT
else if((ret1==OK)&&(ret2!=OK)){len=buff[2]+buff[3]*0x100;_FlashSectormodfiy(LENPAGEBAK,buff,LSZLENADDR,8);}
else if((ret1!=OK)&&(ret2==OK)){len=buff1[2]+buff1[3]*0x100;_FlashSectormodfiy(LENPAGE,buff1,LSZLENADDR,8);}
else len=-1;//{len=FixLen();sprintf(str,"len=%02ld        ",len);_Display(0,0,str,11);_GetChar();}
//sprintf(str,"len=%02ld        ",len);_Display(0,0,str,11);_GetChar();
return len; 
}
/*
uint FixLen()
{
uint xdata len,i,j,n;
uchar xdata page;
uchar xdata buffer[33];
ulong xdata beg_addr;
uchar xdata buff[32]={0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
                      0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
							 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
							 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff};

len=9000;
for (n=0;n<len;n++)
 {
  i=9000-n;
  for(j=0;j<32;j++){page=(i*32+j)/PAGELENGTH+LSZPAGE;beg_addr=(i*32+j)%PAGELENGTH;buffer[j]=_FlashByteRead(page ,beg_addr );}
  if(memcmp(buffer,buff,32)==0)
   {for(j=0;j<32;j++){page=(i*32+j)/PAGELENGTH+LSZPAGEBAK;beg_addr=(i*32+j)%PAGELENGTH;buffer[j]=_FlashByteRead(page ,beg_addr );}
	 if(memcmp(buffer,buff,32)!=0)return i+1;}
  else return i+1;
 }
}
*/
uchar WriteLen(uint len) 
{
uchar xdata tmp[9];
uchar i,j;

memset(tmp,0,8);
tmp[CC_PHPB]=CC_PB1;tmp[CC_PHPB+1]=CC_PB2;
tmp[2]=(uchar)len;
tmp[3]=(uchar)(len>>8);
_Calc_crc(CRC16, 6, tmp, tmp+6);
for(i=0;i<3;i++){if(_FlashSectormodfiy(LENPAGE,tmp,LSZLENADDR,8)==TRUE)break;}
for(j=0;j<3;j++){if(_FlashSectormodfiy(LENPAGEBAK,tmp,LSZLENADDR,8)==TRUE)break;}
if((i==3)&&(j==3))return NOK;
else return OK;
}

/*uchar ReadLSZ(uchar pagelen,uint beginaddr,uchar *buffer)
{
uchar xdata ret1,ret2,buff[33],buff1[33];
_FlashRead(LSZPAGE+pagelen,beginaddr,32,buff);
ret1=ValidFlow(buff);
if(ret1==OK){memcpy(buffer,buff,32);return OK;}
/*else
{
 _FlashRead(LSZPAGEBAK+pagelen,beginaddr,32,buff1);
 ret2=ValidFlow(buff1);if(ret2==OK){memcpy(buffer,buff1,32);return OK;}
 else {memset(buff1,0xff,32);memcpy(buffer,buff1,32);return NOK;}
}*/
//}

uchar WriteLSZ(uchar *buff,ulong beginaddr, uint length)
{
uint i,j,m,beg_addr;
uchar page1,page2;
//FlashSectorerase(20);
for(i=0;i<length;i++)
{
 page1=(beginaddr+i)/PAGELENGTH+LSZPAGE;
 page2=(beginaddr+i)/PAGELENGTH+LSZPAGEBAK;
 beg_addr=(beginaddr+i)%PAGELENGTH;
 for(j=0;j<3;j++){if(_FlashByteWrite(page1,beg_addr,buff[i])==TRUE)break;}
 for(m=0;m<3;m++){if(_FlashByteWrite(page2,beg_addr,buff[i])==TRUE)break;}
}
if((j==3)&&(m==3))return NOK;
else return OK;
}

uchar InitLSZ()
{
 uchar xdata i;
 long xdata len;
 for (i=0;i<3;i++)
 {
  WriteLen(0);
  len=ReadLen();
  if(len==0) break;
 }
 if((i==3)&&(len!=0))return NOK;
 for(i=0;i<5;i++) {if(_FlashSectorErase(LSZPAGE+i)!=TRUE) return NOK;_delay_1ms(50);}
 for(i=0;i<5;i++) {if(_FlashSectorErase(LSZPAGEBAK+i)!=TRUE) return NOK;_delay_1ms(50);}
 Clear_GLKFlag();
 return OK;
}
/*
uchar InitLSZ()
{
 uchar i;


 _FlashSectorErase(LENPAGE);_FlashSectorErase(LENPAGEBAK);
 _FlashSectorErase(HMDPAGE);_FlashSectorErase(HMDPAGEBAK);
 for(i=0;i<5;i++) {if(_FlashSectorErase(LSZPAGE+i)!=TRUE) return NOK;_delay_1ms(50);}
 for(i=0;i<5;i++) {if(_FlashSectorErase(LSZPAGEBAK+i)!=TRUE) return NOK;_delay_1ms(50);}
 return OK;
}*/

uchar ValidData(uchar *buff)
{
uchar xdata crc[2];

_Calc_crc(CRC16,6,buff,crc);
if((crc[0]!=buff[ 6])||(crc[1]!=buff[ 7])) return NOK;
if(buff[CC_PHPB]!=CC_PB1)return NOK;
if(buff[CC_PHPB+1]!=CC_PB2)return NOK;
return OK; 
}

uchar ValidFlow(uchar *tm)//检测CRC
{
uchar xdata crc[2]; //check CRC
_Calc_crc(CRC16,14,tm,crc);
if((crc[0]!=tm[14])||(crc[1]!=tm[15])) return NOK;
return OK;
}

void re_crc(uchar *crc,uchar *buffer,uint length, uchar *out)
{
 uint len;
 uchar xdata buff[35]; //max==100
 len=length/LSZLENGTH;
 buff[0]=crc[0];
 buff[1]=crc[1];
 memcpy(buff+2,buffer,32);
 _Calc_crc(CRC16,34,buff,out);
}

uchar InitJHLSZ()
{
 if(_FlashSectorErase(JHPAGE)!=TRUE) return NOK;
 return OK;
}


uchar WriteJHLSZ(uchar page,uchar *buff,uint beginaddr, uint length)
{
uint i,j,m,beg_addr;
for(i=0;i<length;i++)
{
 beg_addr=beginaddr+i;
 for(j=0;j<3;j++){if(_FlashByteWrite(page,beg_addr,buff[i])==TRUE)break;}
}
if(j==3) return NOK;
else return OK;
}

void DownLoad()
{
ulong i;
uint  j,beginaddr,len;
uchar xdata key,uret,page;

_pRecBuf=0;i=0;_Clr();
 while(1) 
 {
  _Display(0,1,"正在连接主机    ",16);_Display(0,2,"按取消键退出    ",16);
  key=_GetKey(111);if(key==KeyB_No)return;
  uret = _ComR232();
  if(uret==CC_TONGXUN_2){if(_R232Buf[CC_ADDRINF+1]==0x02)break;}
  i++;if(i>20){_pRecBuf=0;i=0;}
 }
 len=(uint)_R232Buf[CC_ADDRINF+4]+(uint)_R232Buf[CC_ADDRINF+5]*0x100;
// page=_R232Buf[CC_ADDRINF+11]; if((page<1)||(page>8))page=0; else page--;
 _S232Buf[CC_ADDRINF]=CC_TONGXUN_2;_S232Buf[CC_ADDRINF+1]=2;_S232Buf[CC_ADDRINF+2]=0;_S232Buf[CC_ADDRINF+3]=0;
 _ComS232(4);_pRecBuf=0;i=0;
 _Clr();display(2, "正在下载...      ");
 if(InitJHLSZ()==NOK){_Clr();display(2, "初始化失败        ");display(3, "请重新下载        ");_GetChar();return;}
 for(j=0;j<len;j++)
 {
  while(1)
  {
   uret = _ComR232();
	if(uret==CC_TONGXUN_2)
	{
	 //beginaddr=(uint)page*32*16+((uint)_R232Buf[CC_ADDRINF+2]-1)*0x20;
	 beginaddr=(((uint)_R232Buf[CC_ADDRINF+2]+(uint)_R232Buf[CC_ADDRINF+3]*0x100-1)*JHLENGTH)%PAGELENGTH;
	 page=JHPAGE+(((uint)_R232Buf[CC_ADDRINF+2]+(uint)_R232Buf[CC_ADDRINF+3]*0x100-1)*JHLENGTH)/PAGELENGTH;
	 WriteJHLSZ(page,_R232Buf+CC_ADDRINF+4,beginaddr,JHLENGTH);
	 _S232Buf[CC_ADDRINF]=CC_TONGXUN_2;_S232Buf[CC_ADDRINF+1]=2;_S232Buf[CC_ADDRINF+2]=_R232Buf[CC_ADDRINF+2];_S232Buf[CC_ADDRINF+3]=_R232Buf[CC_ADDRINF+3];_ComS232(4);
	 break;
	}
	i++;if(i>90){_Clr();display(2, "连接中断        ");display(3, "下载失败        ");_GetChar();return;}
  }
  _pRecBuf=0;i=0;
 }
 _Clr();display(2, "下载完成        ");_GetChar();return;
}

void UploadToPos()
{
uchar page,ret1,err,bflag=0;
ulong i,len1;
long len;
//ulong xdata sjkh1,je1,sjkh2,je2;
uint  beg_addr,x;
uchar xdata key,uret,str[50],buff[33],xzdate[5];

_GetTime(str);Data16ToData10(str,str);Date6ToDate4(str,xzdate);
_pRecBuf=0;i=0;x=0;_Clr();
do {
    _Display(0,1,"正在连接POS机   ",16);_Display(0,2,"按取消键退出    ",16);
	 key=_GetKey(111);if(key==KeyB_No)return;
	 uret = _ComR232();
	}while ( uret != CC_POSRFLOW );
_Clr();
len=ReadLen();
//len=200;
if(len<0){_Display(0,1,"   内存错误        ",16); _GetChar(); return;}
_S232Buf[CC_ADDRINF]=CC_POSRFLOW;_S232Buf[CC_ADDRINF+1]=(uchar)len;_S232Buf[CC_ADDRINF+2]=(uchar)(len/0x100);_ComS232(3);
if(len==0) { _Display(0,1,"POS机内无数据   ",16);_GetChar();return; }
else 
{
 _Display(0,1,"正在上传00%              ", 16);//sjkh1=0;sjkh2=0;je1=0;je2=0;
 while(1)
 {
  err=0;_pRecBuf=0;
  gostart:
  i=0;
  while(1){ //_delay_1ms(200);
     uret=_ComR232();
	  if(uret==CC_DEL_LSZ)goto gobreak;
	  if(uret==CC_POSRFLOW)break;
//	  i++;if(i>=300){if(bflag==1) goto gobreak;_Display(0,1,"    上传失败    ",16);_GetChar();return;}
	  i++;if(i>80){if(err<5){_pRecBuf=0;i=0;err++;_delay_1ms(1000);goto gostart;}if(bflag==1) goto gobreak;_Display(0,1,"    上传失败    ",16);_GetChar();return;}
	  if(uret==CC_WHMD)
	  {
	   _Display (0, 1, "上传完成100%        ",16);_Display(0,2,"正在下载黑名单  ",16);
	   str[0]=_FlashByteRead(HMDPAGE ,0);
		x=(uint)_R232Buf[CC_ADDRINF+1]+(uint)_R232Buf[CC_ADDRINF+2]*0x100-1;
		beg_addr=x*240;
		_FlashSectormodfiyPage(HMDPAGE,_R232Buf+7,beg_addr,240);
		_S232Buf[CC_ADDRINF]=CC_WHMD;_ComS232(1);_pRecBuf=0;bflag=1;
	  }
//	  _delay_1ms(50);//_delay_10ms(33);
	  }
  len1=(ulong)_R232Buf[CC_ADDRINF+1]+(ulong)_R232Buf[CC_ADDRINF+2]*0x100l;
  sprintf(str,"%02ld%%       ",(len1*5)*100/len);
  _Display(8,1,str,8);
  _S232Buf[CC_ADDRINF]=CC_POSRFLOW;_S232Buf[CC_ADDRINF+1]=(uchar)len1;_S232Buf[CC_ADDRINF+2]=(uchar)(len1/0x100);
  len1=len1*5;
  for(i=0;i<5;i++)
  {
   page=((len1+i)*32)/PAGELENGTH;beg_addr=((len1+i)*32)%PAGELENGTH;
	_FlashRead(LSZPAGE+page,beg_addr,32,buff);
   ret1=ValidFlow(buff);
   if(ret1==OK)
	 {
	  memcpy(buff+4,xzdate,4);_Calc_crc(CRC16,30,buff,buff+30);
	  memcpy(_S232Buf+CC_ADDRINF+3+i*32,buff,32);}
   else
	{
	 _FlashRead(LSZPAGEBAK+page,beg_addr,32,buff);
	 ret1=ValidFlow(buff);
	 if(ret1==OK)
	  {
		memcpy(buff+4,xzdate,4);_Calc_crc(CRC16,30,buff,buff+30);
	   memcpy(_S232Buf+CC_ADDRINF+3+i*32,buff,32);}
	 else {memset(buff,0xff,32);memcpy(_S232Buf+CC_ADDRINF+3+i*32,buff,32);}
	 }
	//ReadLSZ(page,beg_addr,_S232Buf+CC_ADDRINF+3+i*32);
  }
  _ComS232(165); 
  }
  gobreak:
 _S232Buf[CC_ADDRINF]=CC_DEL_LSZ;
 _ComS232(1);
 _Clr();if(bflag==1){_Display (0, 1, "上传完成100%        ",16);_Display(0,2,"正在下载黑名单  ",16);_delay_1ms(500);} 
 _Display (0, 1, " 下载黑名单完成       ",16);_Display (0, 2, " 正在清空流水账        ",16);
 for(i=0;i<3;i++) {  if(InitLSZ()==OK) break; }
 if(i==3) { _Clr(); _Display (0, 2, "清空流水账错误        ",16); _GetChar(); }
 Clear_GLKFlag();
 _Display (0, 2, "    清空完成        ",16);_delay_10ms(50); BELL(1,2);_delay_10ms(30);BELL(1,2);_GetChar();
 }
}

void upload()
{
uchar page;
ulong i;
long len;
uint  beg_addr,j,x;
uchar xdata buffer[36],crc[2],key,uret,str[20];

_pRecBuf=0;i=0;x=0;_Clr();
do {
    _Display(0,1,"正在连接主机    ",16);_Display(0,2,"按取消键退出    ",16);
	 key=_GetKey(111); if(key==KeyB_No)return;
	 uret = _ComR232();
	 i++;if(i>20){_pRecBuf=0;i=0;}
	}while ( uret != CC_PCRFLOW_SFPOS );
_Clr();

⌨️ 快捷键说明

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