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

📄 data.c

📁 抄水表手持POS代码
💻 C
📖 第 1 页 / 共 3 页
字号:
len=ReadLen();
//len=1000;
if(len<0){_Display(0,1,"   内存错误        ",16); _GetChar(); return;}
if(len==0) {     
            _S232Buf[CC_ADDRINF]=CC_PCRFLOW_SFPOS;
            _ComS232(1);
				_Display(0,1,"POS机内无数据   ",16);_GetChar();return; }
else 
{
 _Display(0,1,"正在上传              ", 16);
 _oo232(CC_PB1);_oo232(CC_PB2);
 buffer[0]=0;buffer[1]=0;buffer[2]=CC_PCRFLOW_SFPOS; buffer[3]=(uchar)(len*32l%0x100l);
 buffer[4]=(uchar)(len*32l/0x100l);buffer[5]=(uchar)(len*32l/0x10000l);
 _os232(buffer,6);_Calc_crc(CRC16,6,buffer,crc);
 for (i=0;i<len;i++)
 {
  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(ValidFlow(buffer)!=OK)
   {for(j=0;j<32;j++){page=(i*32+j)/PAGELENGTH+LSZPAGEBAK;beg_addr=(i*32+j)%PAGELENGTH;buffer[j]=_FlashByteRead(page ,beg_addr );}}
  _os232(buffer,32);
  re_crc(crc,buffer,32, crc);
  x=(i*100)/len;
  sprintf(str,"%02d%%       ",x);
  _Display(8,1,str,16);
 }
 _os232(crc,2);
 _Display(0,1,"正在上传100%    ",16);
 _pRecBuf=0;
 do {
     uret = _ComR232();
	  for(i=0;i<30;i++) {uret = _ComR232();if((uret==CC_WHMD)||(uret==CC_DEL_LSZ))break; }	//				   _delay_10ms(50);
	  if(i==30)_pRecBuf=0;
     if(uret==CC_WHMD)
	  {
	    _Display (0, 1, "上传完成100%        ",16);_Display(0,2,"正在下载黑名单  ",16);
		 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;
		 _Display (0, 2, "下载黑名单完成  ",16);
		}
     key=_GetKey(111);
     if(key==KeyB_No) return;
     }while(uret != CC_DEL_LSZ);
 _ComS232(1);
 _Clr(); _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();
 _Clr(); _Display (0, 2, "清空完成        ",16);_delay_10ms(50);BELL(1,2);_delay_10ms(30);BELL(1,2); _GetChar();
 }
}

void SET_SBH()
{
 uchar xdata buff[8],tmp[9],i;
 ulong sbh;
 uchar ret;
gostart:
 _Clr();
 display(1, "***设置设备号***" );
 display(2, " 请输入5个以内");
 display(3, "      数字:");
 memset(buff,0,sizeof(buff));
display(4, "                  ");
 ret=_GetStr(0,3,buff,7);
 sbh=0;
 if(ret>0)
 {
  for(i=0;i<ret;i++)
  {
   if((buff[i]>='0')&&(buff[i]<='9'))
	{
	 sbh=sbh*10+buff[i]-0x30;
	}
	else{display(4, "    非法数据    ");_GetChar();goto gostart;}
  }
 if(sbh>65535){_Clr();_Display(0,1,"输入数据数值太大",16);_Display(0,2,"请重新输入      ",16);_GetChar();goto gostart;}
 memset(tmp,0,8);
 tmp[CC_PHPB]=CC_PB1;tmp[CC_PHPB+1]=CC_PB2;
 tmp[2]=(uchar)sbh;
 tmp[3]=(uchar)(sbh/0x100);
// tmp[4]=(uchar)(sbh/0x10000);
 memcpy(SBH,tmp+2,2);
 _Calc_crc(CRC16, 6, tmp, tmp+6);
  //oo232(0xaa);oo232(0xbb);os232(tmp,8);oo232(0xcc);oo232(0xdd);
 _FlashSectormodfiy(LENPAGE,tmp,SBHADDR,8);
 _delay_1ms(300);
 _FlashSectormodfiy(LENPAGEBAK,tmp,SBHADDR,8);
 _delay_1ms(300);
 }
 sbhflag=OK;
 return;
}

void DISPLAY_SBH()
{
 uchar xdata i,buff[9],buff1[9],buffer[16]="设备号:";
 uchar ret1=0,ret2=0;
 ulong sbh;
sbhflag=OK;
for(i=0;i<8;i++) buff[i]=_FlashByteRead(LENPAGE ,i+SBHADDR );
ret1=ValidData(buff);
for(i=0;i<8;i++) buff1[i]=_FlashByteRead(LENPAGEBAK ,i+SBHADDR );//FlashRead(LENPAGEBAK,SBHADDR,8,buff1);
ret2=ValidData(buff1);
if((ret1==OK)&&(ret2==OK)) {memcpy(SBH,buff+2,2);sbh=buff[2]+(ulong)buff[3]*0x100l;sprintf(buffer,"设备号:%05ld",sbh);display(3,buffer);}
else if((ret1==OK)&&(ret2!=OK)){memcpy(SBH,buff+2,2);sbh=buff[2]+(ulong)buff[3]*0x100l;sprintf(buffer,"设备号:%05ld",sbh);display(3,buffer);_FlashSectormodfiy(LENPAGEBAK,buff,SBHADDR,8);}
else if((ret1!=OK)&&(ret2==OK)){memcpy(SBH,buff1+2,2);sbh=buff1[2]+(ulong)buff1[3]*0x100l;sprintf(buffer,"设备号:%05ld",sbh);display(3,buffer);_FlashSectormodfiy(LENPAGE,buff1,SBHADDR,8);}
else {display(3,"  未设设备号");sbhflag=NOK;}
return ;
}

void GET_SBH()
{
 uchar xdata i,buff[9],buff1[9];
 uchar ret1=0,ret2=0;

sbhflag=OK;
for(i=0;i<8;i++) buff[i]=_FlashByteRead(LENPAGE ,i+SBHADDR );
ret1=ValidData(buff);
for(i=0;i<8;i++) buff1[i]=_FlashByteRead(LENPAGEBAK ,i+SBHADDR );//FlashRead(LENPAGEBAK,SBHADDR,8,buff1);
ret2=ValidData(buff1);
if((ret1==OK)&&(ret2==OK)) {memcpy(SBH,buff+2,2);}
else if((ret1==OK)&&(ret2!=OK)){memcpy(SBH,buff+2,2);_FlashSectormodfiy(LENPAGEBAK,buff,SBHADDR,8);}
else if((ret1!=OK)&&(ret2==OK)){memcpy(SBH,buff1+2,2);_FlashSectormodfiy(LENPAGE,buff1,SBHADDR,8);}
else {sbhflag=NOK;}
return ;
}


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

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

bit Set_GLK()
{
uchar xdata i,key,buff[20],str[32],temp[8];//,temp[20],tmp[20]
uint xdata cbrh,cbrh1,cbrh2;
bit ret1,ret2;
uchar flag1=0,flag2=0;
ulong xdata ret;

_Clr();
display(4, "   请刷管理卡   ");
_delay_10ms(50);P21=0x00;//P20=0x0;
 P36=0X0;//P37=0X0;P34=0x00;
 _delay_10ms(50);
 _PORT_Init ();
 _UART0_Init(57600);
while(1)
{

 ret=get_voltage(); sprintf(str,"电压:%02.1fV        ",(float)ret/100.00); _Display(0,1,str,16);
 _GetTime(temp);
 sprintf(str,"时间%02x%02x%02x%02x%02x%02x",(uint)temp[0],(uint)temp[1],(uint)temp[2],(uint)temp[3],(uint)temp[4],(uint)temp[5]);
 _Display(0,2,str,16);
 _pRecBuf0=0;
 key=_GetKey(111);if(key==KeyB_No)
 {P21=1;P36=0X1;_delay_10ms(50);
 Get_GLK();
 if(GLKFlag==OK)
 {
  for(i=0;i<16;i++) buff[i]=_FlashByteRead(LENPAGE ,i+GLKADDR );
  _GetTime(str);buff[11]=str[2];
_Calc_crc(CRC16, 14, buff, buff+14);
_FlashSectormodfiy(LENPAGE,buff,GLKADDR,16);
_delay_1ms(100);
_FlashSectormodfiy(LENPAGEBAK,buff,GLKADDR,16);
_delay_1ms(100);
GLKFlag=OK;display(4, "    设置成功    ");
 }
 return NOK;}
 if(ReadUCInc()==NOK) continue;
 if(_R232Buf0[CC_ADDRINF+25]==0x05) break;//if(_R232Buf0[CC_ADDRINF+25]==0x05) break;
 }
SPEAKON;_delay_10ms(250); SPEAKOFF;_delay_10ms(50);display(4, "   正在设置...     ");

for(i=0;i<16;i++) buff[i]=_FlashByteRead(LENPAGE ,i+GLKADDR );
ret1=ValidGLKData(buff);
if(ret1!=OK)
 {for(i=0;i<16;i++) buff[i]=_FlashByteRead(LENPAGEBAK ,i+GLKADDR );ret2=ValidGLKData(buff);
  if(ret2==OK){flag1=buff[2];cbrh1=(uint)buff[3]+(uint)buff[4]*0x100;flag2=buff[5];cbrh2=(uint)buff[6]+(uint)buff[7]*0x100; } }
else {flag1=buff[2];cbrh1=(uint)buff[3]+(uint)buff[4]*0x100;flag2=buff[5];cbrh2=(uint)buff[6]+(uint)buff[7]*0x100; }
cbrh=(uint)_R232Buf0[CC_ADDRINF+30]+(uint)_R232Buf0[CC_ADDRINF+31]*0x100;
if(cbrh==cbrh1){flag1=1;}
else if(cbrh==cbrh2){cbrh2=cbrh1;flag2=flag1;cbrh1=cbrh;flag1=1;}
else if((cbrh!=cbrh1)&&(cbrh!=cbrh2))
{
 if((flag1>0)&&(flag2>0)){display(1, "POS机内已有两名 ");display(2, "承包人的数据,请");
 display(3, "先录出数据         ");display(4, "***按任意键退出***");
 _GetChar();P21=1;P36=0X1;_delay_10ms(50);return NOK;}
 if(flag1==0){cbrh1=cbrh;flag1=1;}
 else {cbrh2=cbrh1;flag2=flag1;cbrh1=cbrh;flag1=1;}
}
memcpy(GLCardNum,_R232Buf0+CC_ADDRINF+1,4);//管理卡发行卡号
memcpy(OpCardNum,_R232Buf0+CC_ADDRINF+30,2);//承包人编号
memset(buff,0,16); 
buff[CC_PHPB]=CC_PB1;buff[CC_PHPB+1]=CC_PB2;
buff[2]=flag1;
buff[3]=(uchar)cbrh1;
buff[4]=(uchar)(cbrh1/0x100);
buff[5]=flag2;
buff[6]=(uchar)cbrh2;
buff[7]=(uchar)(cbrh2/0x100);
memcpy(buff+8,GLCardNum,3);
_GetTime(str);
buff[11]=str[2];
_Calc_crc(CRC16, 14, buff, buff+14);
_FlashSectormodfiy(LENPAGE,buff,GLKADDR,16);
_delay_1ms(100);
_FlashSectormodfiy(LENPAGEBAK,buff,GLKADDR,16);
_delay_1ms(100);
GLKFlag=OK;display(4, "    设置成功    ");P21=1;P36=0X1;_delay_1ms(1000);return OK;
}

bit Set_GLK2()
{
uchar xdata i,buff[20],str[30];
uint xdata cbrh,cbrh1,cbrh2;
bit ret1,ret2;
uchar flag1=0,flag2=0;

for(i=0;i<16;i++) buff[i]=_FlashByteRead(LENPAGE ,i+GLKADDR );
ret1=ValidGLKData(buff);
if(ret1!=OK)
 {for(i=0;i<16;i++) buff[i]=_FlashByteRead(LENPAGEBAK ,i+GLKADDR );ret2=ValidGLKData(buff);
  if(ret2==OK){flag1=buff[2];cbrh1=(uint)buff[3]+(uint)buff[4]*0x100;flag2=buff[5];cbrh2=(uint)buff[6]+(uint)buff[7]*0x100; } }
else {flag1=buff[2];cbrh1=(uint)buff[3]+(uint)buff[4]*0x100;flag2=buff[5];cbrh2=(uint)buff[6]+(uint)buff[7]*0x100; }

cbrh=(uint)_R232Buf0[CC_ADDRINF+30]+(uint)_R232Buf0[CC_ADDRINF+31]*0x100;
if(cbrh==cbrh1){flag1=1;}
else if(cbrh==cbrh2){cbrh2=cbrh1;flag2=flag1;cbrh1=cbrh;flag1=1;}
else if((cbrh!=cbrh1)&&(cbrh!=cbrh2))
{
 if((flag1>0)&&(flag2>0)){display(1, "POS机内已有两名 ");display(2, "承包人的数据,请");
                          display(3, "先录出数据      ");display(4, "**按任意键退出**");_GetChar();
	_Clr();return NOK;}
 display(1, "机内没有此卡信息");display(3, "按确认键保存    ");display(4, "按其它键取消    ");if(_GetChar()!=KeyB_Yes){_Clr();return NOK;}
 display(1, "                ");display(3, "正在设置...       ");display(4, "                ");
 if(flag1==0){cbrh1=cbrh;flag1=1;}
 else  { cbrh2=cbrh1;flag2=flag1;cbrh1=cbrh;flag1=1;}
}
SPEAKON;_delay_10ms(250); SPEAKOFF;_delay_10ms(50);display(3, "正在设置...       ");
memcpy(GLCardNum,_R232Buf0+CC_ADDRINF+1,4);//管理卡发行卡号
memcpy(OpCardNum,_R232Buf0+CC_ADDRINF+30,2);//承包人编号
memset(buff,0,16); 
buff[CC_PHPB]=CC_PB1;buff[CC_PHPB+1]=CC_PB2;
buff[2]=flag1;
buff[3]=(uchar)cbrh1;
buff[4]=(uchar)(cbrh1/0x100);
buff[5]=flag2;
buff[6]=(uchar)cbrh2;
buff[7]=(uchar)(cbrh2/0x100);
memcpy(buff+8,GLCardNum,3);
_GetTime(str);
buff[11]=str[2];
_Calc_crc(CRC16, 14, buff, buff+14);
_FlashSectormodfiy(LENPAGE,buff,GLKADDR,16);
_delay_1ms(100);
_FlashSectormodfiy(LENPAGEBAK,buff,GLKADDR,16);
_delay_1ms(100);
GLKFlag=OK;display(3, "设置成功        ");_delay_1ms(1000);return OK;
}

bit Get_GLK()
{
 uchar xdata i,buff[17],buff1[17],str[8];
 uchar ret1=0,ret2=0,xzdd;

GLKFlag=OK;
for(i=0;i<16;i++) buff[i]=_FlashByteRead(LENPAGE ,i+GLKADDR );
ret1=ValidGLKData(buff);
for(i=0;i<16;i++) buff1[i]=_FlashByteRead(LENPAGEBAK ,i+GLKADDR );
ret2=ValidGLKData(buff1);
if((ret1==OK)&&(ret2==OK)) {memcpy(OpCardNum,buff+3,2);memcpy(GLCardNum,buff+8,3);xzdd=buff[11];}
else if((ret1==OK)&&(ret2!=OK)){memcpy(OpCardNum,buff+3,2);memcpy(GLCardNum,buff+8,3);xzdd=buff[11];_FlashSectormodfiy(LENPAGEBAK,buff,GLKADDR,16);}
else if((ret1!=OK)&&(ret2==OK)){memcpy(OpCardNum,buff1+3,2);memcpy(GLCardNum,buff1+8,3);xzdd=buff1[11];_FlashSectormodfiy(LENPAGE,buff1,GLKADDR,16);}
else {GLKFlag=NOK;return NOK;}
_GetTime(str);
if(xzdd!=str[2])return NOK;
else return OK;
}

bit Clear_GLKFlag()
{
 uchar xdata i,buff[17],buff1[17];
 uchar ret1=0,ret2=0;

for(i=0;i<16;i++) buff[i]=_FlashByteRead(LENPAGE ,i+GLKADDR );
ret1=ValidGLKData(buff);
for(i=0;i<16;i++) buff1[i]=_FlashByteRead(LENPAGEBAK ,i+GLKADDR );
ret2=ValidGLKData(buff1);
if((ret1!=OK)&&(ret2==OK)){memcpy(buff,buff1,16);}
else if((ret1!=OK)&&(ret2!=OK))GLKFlag=NOK;
buff[2]=0;buff[5]=0;
_Calc_crc(CRC16, 14, buff, buff+14);
_FlashSectormodfiy(LENPAGE,buff,GLKADDR,16);
_delay_1ms(100);
_FlashSectormodfiy(LENPAGEBAK,buff,GLKADDR,16);
_delay_1ms(100);
return OK;
}

uchar Get_Bal(uchar *tmp,uchar num)
{
uchar i,ret1,ret2;
uchar xdata buff[9],buff1[9],str[32];
uint  bal; 
 for(i=0;i<8;i++) buff[i]=_FlashByteRead(LENPAGE ,i+JGBADDR+num*8 );
ret1=ValidData(buff);
for(i=0;i<8;i++) buff1[i]=_FlashByteRead(LENPAGEBAK ,i+JGBADDR+num*8 );//FlashRead(LENPAGEBAK,SBHADDR,8,buff1);
ret2=ValidData(buff1);
if((ret1==OK)&&(ret2==OK)) 
{bal=(uint)buff[2]+(uint)buff[3]*0x0100;sprintf(str,"价格%01d:%03.1f       ",(uint)num+1,(float)bal/10.0);memcpy(tmp,str,16);}
else if((ret1==OK)&&(ret2!=OK))
{bal=(uint)buff[2]+(uint)buff[3]*0x0100;sprintf(str,"价格%01d:%03.1f       ",(uint)num+1,(float)bal/10.0);memcpy(tmp,str,16);_FlashSectormodfiy(LENPAGEBAK,buff,JGBADDR+num*8,8);}
else if((ret1!=OK)&&(ret2==OK))
{bal=(uint)buff1[2]+(uint)buff1[3]*0x0100;sprintf(str,"价格%01d:%03.1f      ",(uint)num+1,(float)bal/10.0);memcpy(tmp,str,16);_FlashSectormodfiy(LENPAGE,buff1,JGBADDR+num*8,8);}
else {sprintf(str,"价格%01d:未设         ",(uint)num+1);memcpy(tmp,str,16); return NOK;}
return OK;
}

uchar Get_Bal2(uchar num)

⌨️ 快捷键说明

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