📄 data.c
字号:
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 + -