📄 control.c.svn-base
字号:
return(0xff); //error occurs
}
if (Personkind == 2) {
AddCheckSum(Money,8); //加入授权金额的校验和
Address = AuthorMoneyAdd+TempBuffer[2]*9; //根据相应的人员写入授权金额
ZDHWriteFlash(ConfigFilePage,9,Money,Address);
}
return(TempByte); //返回当前记录条数
}
ucharx* GetControlPoint(uchar ControlTarget,uchar TargetStart)
{
unsigned char controlnum;
unsigned char i;
unsigned short controladress;
ucharx *TargetPoint;
controlnum = EXT_32KRAM[7];
controladress = 7;
for (i = 0; i < controlnum; i++) {
if (i == ControlTarget) {
TargetPoint = &EXT_32KRAM[controladress+1];
break;
}
controladress += EXT_32KRAM[controladress+1];
}
return (TargetPoint+TargetStart);
}
uchar GetControlData(uchar ControlTarget,uchar TargetStart)
{
unsigned char value;
unsigned char controlnum;
unsigned char i;
unsigned short controladress;
ucharx *TargetPoint;
controlnum=EXT_32KRAM[7];
controladress=7;
for(i=0;i<controlnum;i++)
{
if(i==ControlTarget)
{
TargetPoint=&EXT_32KRAM[controladress+1];
break;
}
controladress+=EXT_32KRAM[controladress+1];
}
value=*(TargetPoint+TargetStart);
return value;
}
void SetControlOneData(uchar ControlTarget,uchar TargetStart,uchar value)
{
unsigned char controlnum;
unsigned char i;
unsigned short controladress;
ucharx *TargetPoint;
controlnum = EXT_32KRAM[7];
controladress = 7;
for (i = 0; i < controlnum; i++) {
if (i == ControlTarget) {
TargetPoint = &EXT_32KRAM[controladress+1];
break;
}
controladress += EXT_32KRAM[controladress+1];
}
*(TargetPoint+TargetStart) = value;
return;
}
void SetControlDataS(uchar ControlTarget,uchar TargetStart,ucharx *Point,uchar Len)
{
unsigned char controlnum;
unsigned char i;
unsigned short controladress;
ucharx *TargetPoint;
controlnum = EXT_32KRAM[7];
controladress = 7;
for (i = 0; i < controlnum; i++) {
if (i == ControlTarget) {
TargetPoint = &EXT_32KRAM[controladress+1];
break;
}
controladress += EXT_32KRAM[controladress+1];
}
for (i = 0; i < Len; i++) {
*(TargetPoint+TargetStart+i) = *(Point+i);
}
return;
}
/*
void SetControlData(ucharx *SourcePoint,uchar ControlTarget,uchar TargetStart,uchar Len)
{
unsigned char controlnum;
unsigned char i;
unsigned short controladress;
ucharx *TargetPoint;
controlnum=EXT_32KRAM[7];
controladress=7;
for(i=0;i<controlnum;i++)
{
if(i==ControlTarget)
{
TargetPoint=&EXT_32KRAM[controladress+1];
}
controladress+=EXT_32KRAM[controladress+1];
}
for(i=0;i<Len;i++)
*(TargetPoint+TargetStart+i)=*(SourcePoint+i);
}
*/
void CopyControlData(uchar ControlSource,uchar SourceStsrt,uchar ControlTarget,uchar TargetStart,uchar Len)
{
unsigned char controlnum;
unsigned char i;
unsigned short controladress;
ucharx *SourcePoint;
ucharx *TargetPoint;
controlnum=EXT_32KRAM[7];
controladress=7;
for(i=0;i<controlnum;i++)
{
if(i==ControlSource)
{
SourcePoint=&EXT_32KRAM[controladress+1];
}
if(i==ControlTarget)
{
TargetPoint=&EXT_32KRAM[controladress+1];
}
controladress+=EXT_32KRAM[controladress+1];
}
for(i=0;i<Len;i++)
*(TargetPoint+TargetStart+i)=*(SourcePoint+SourceStsrt+i);
}
void GetInputData()//将输入数据转如全局变量NowMM中
{
unsigned char controlnum;
unsigned char i,u;
unsigned short controladress;
ucharx *DataPoint;
controlnum=EXT_32KRAM[7];
controladress=7;
for(i=0;i<controlnum;i++)
{
DataPoint=&EXT_32KRAM[controladress+1];
if(i==6)
{
NowMM.Kind=*(DataPoint+30);
}
else if(i==8)
{
NowMM.AccountNum=*(DataPoint+18);
}
else if(i==11)
{
NowMM.Date[0]=0x32;
NowMM.Date[1]=0x30;
for(u=0;u<6;u++)NowMM.Date[u+2]=*(DataPoint+23+u);
}
else if(i==9)
{
for(u=0;u<8;u++)NowMM.BillNum[u]=*(DataPoint+23+u);
}
else if(i==10)
{
if((*(DataPoint+23)==0x20))
{
NowMM.Nomoney=0;
for(u=0;u<17;u++)NowMM.Money[u]=0x41;
}
else
{
NowMM.Nomoney=1;
for(u=0;u<17;u++)NowMM.Money[u]=*(DataPoint+23+u);
}
}
controladress+=EXT_32KRAM[controladress+1];
}
GetAccountAll(NowMM.AccountNum,&(NowMM.Account[0]));
NowMM.qfman=NowPerson;
GetOnePersonName(0,NowPerson,&(NowMM.qfname[0]));
MakeDataToStandard();
return;
}
void GetBcdAccount(uchar InputID,ucharx *Target )
{
uint TempAddress;
TempAddress=AccountAddress+InputID*OneCountLength;
YJHReadFlashToExterMem(AccountPage,AccountLength,(ucharx *)(TempAddress+1),Target); //读取账号
}
void GetAccountAll(uchar InputID,ucharx *Target )
{
//uint TempAddress;
//TempAddress=AccountAddress+InputID*OneCountLength;
//YJHReadFlashToExterMem(AccountPage,AccountLength,(ucharx *)(TempAddress+1),&(NowMM.BcdAccount[0])); //读取账号
GetBcdAccount(InputID,&(NowMM.BcdAccount[0]));
XramBCD_ASIIC(16,&(NowMM.BcdAccount[0]),Target);//&(NowMM.Account[0]));
}
void MakeDataToStandard()
{
uchar u;
NowMM.AscKind=NowMM.Kind+0x30;
NowMM.shman=0xff;
NowMM.sqman=0xff;
Xram_ASIIC_BCD(8,&(NowMM.Date[0]),&(NowMM.BcdDate[0]));
Xram_ASIIC_BCD(8,&(NowMM.BillNum[0]),&(NowMM.BcdBillNum[0]));
if(NowMM.Nomoney==0)
{
for(u=0;u<8;u++)NowMM.BcdMoney[u]=0xaa;
}
else JeAscToBcd(&(NowMM.Money[0]),&(NowMM.BcdMoney[0]));
}
uchar ExamPass(ucharx *InputPass,uchar Personkind,uchar PersonID)
{
uchar TempByte;
ucharx TempBuffer[OnePersonLength],PasswordBuf[PasswordLength];
uint Address;
TempByte=IsPersonLock(Personkind,PersonID);
if(TempByte==0xff) return TempByte;
Xram_ASIIC_BCD(PasswordLength,InputPass,&PasswordBuf[0]); //口令转为BCD
Address=(Personkind*PersonTotalNum+PersonID);
Address*=OnePersonLength;
Address+=FirstPersonAdd;
YJHReadFlashToExterMem(ConfigFilePage,OnePersonLength,(ucharx *)Address,&TempBuffer[0]);//读取口令
TempByte=XramStringCompare((ucharx *)(&PasswordBuf[0]),(ucharx *)(&TempBuffer[11]),PasswordLength-1);//比较口令
if(TempByte==0)
{
if(ReadOneXByte(ConfigFilePage,(ucharx *)Address+1)!=0xff)
{
TempBuffer[0]=0xff; //错误计数器复位
ZDHWriteFlash(ConfigFilePage,1,(ucharx *)(&TempBuffer[0]),Address+1);
}
return(PasswordPass);
}
else
{
TempBuffer[1]<<=1;
YJHExternalWriteFlash(ConfigFilePage,OnePersonLength,(ucharx *)(&TempBuffer[0]),Address);
TempByte=IsPersonLock(Personkind,PersonID);
return(TempByte); //口令锁或错误次数
}
}
uint GetBillNumber(uchar BillType) //BillType=0 查询批量处理缓冲区,BillType=1查询历史记录区
{
uchar Counter,Counter1;
uchar TempByte;
uint Address,BillNumber=0;
switch(BillType)
{
case 0: //查询批量处理缓冲区
{
Address=TempRecordAdd; //批量处理缓冲区首地址
for(Counter=0;Counter<RecordOnePage;Counter++)
{
ZDHReadFlashToInterMem(BatchBufferPage,1,Address,(ucharx *)(&TempByte));
if(TempByte==0xff) break;
Address+=OneHisRecordLen;
}
BillNumber=Counter;
break;
}
case 1: //查询历史记录区
{
/*
for(Counter1=0;Counter1<HistoryTotalPage;Counter1++)//历史记录缓冲区11个扇区
{
Address=Counter1*4*1024;
Address+=HistoryRecordAdd;
for(Counter=0;Counter<RecordOnePage;Counter++)
{
ZDHReadFlashToInterMem(HistoryPage,1,Address,(ucharx *)(&TempByte));//读取人员代号
if(TempByte==0xff) return(BillNumber);
Address+=OneHisRecordLen;
BillNumber++;
}
}
*/
for(Counter1=0;Counter1<HistoryTotalPage;Counter1++)//历史记录缓冲区11个扇区
{
Address=Counter1*4*1024;
Address+=HistoryRecordAdd;
ZDHReadFlashToInterMem(HistoryPage,1,Address|0xfff,(ucharx *)(&TempByte));//读取块区满标志
if(TempByte!=0x55) break;
}
BillNumber=Counter1*RecordOnePage;
for(Counter1=0;Counter1<RecordOnePage;Counter1++)
{
ZDHReadFlashToInterMem(HistoryPage,1,Address,(ucharx *)(&TempByte));//读取人员代号
if(TempByte==0xff) return(BillNumber);
Address+=OneHisRecordLen;
BillNumber++;
}
break;
}
case 3: //查询批量处理缓冲区内有效记录
{
BillNumber=0;
Address=TempRecordAdd; //批量处理缓冲区首地址
for(Counter=0;Counter<RecordOnePage;Counter++)
{
ZDHReadFlashToInterMem(BatchBufferPage,1,Address,(ucharx *)(&TempByte));
if((TempByte==0x57)||(TempByte==0x5f)) BillNumber++;
Address+=OneHisRecordLen;
}
break;
}
case 4: //查询待审核数据
case 5: //查询待授权数据
{
Counter1=0x57;
if(BillType==4) Counter1=0x5f;
Address=TempRecordAdd; //批量处理缓冲区首地址
for(Counter=0;Counter<RecordOnePage;Counter++)
{
ZDHReadFlashToInterMem(BatchBufferPage,1,Address,(ucharx *)(&TempByte));
if(TempByte==Counter1) BillNumber++;
else if(TempByte==0xff) break;
Address+=OneHisRecordLen;
}
break;
}
default: break; //无效返回0
}
return(BillNumber); //返回当前记录总数
}
uchar ZDHInternalWriteFlash(uchar Page,uchar Length,ucharx *SourcePointer,uint DestPointer)
{
#ifdef WIN32
FlashWriteEnable=Enable+safewrite;
WriteFlash(Page,Length,SourcePointer,DestPointer);
return 0;
#else
if(Length!=0)
{
PublicVariable2=(uchar)(((uint)DestPointer)>>8);
PublicVariable3=(uchar)((uint)DestPointer);
FlashWriteEnable=Enable+safewrite;
return(InternalWriteFlash(Page,Length,SourcePointer));
}
return(0);
#endif
}
void InitTurnIndex()
{
TurnIndex[0]=1;//page 1
TurnIndex[1]=1;//page 1
TurnIndex[2]=1;//control 1
TurnIndex[3]=1;//Nowfocuse 1
TurnIndex[4]=1;//Nowfocuse 1 NowFirstLine
}
void TurnDownOnePage()
{
unsigned char i;
if (TurnIndex[0] < 58) {
i = TurnIndex[0];
TurnIndex[i] = NowPage;
TurnIndex[i+1] = CursorEnable|(NowControl&0x0f);
TurnIndex[i+2] = NowFocuse;
TurnIndex[i+3] = NowFirstLine;
TurnIndex[0]+=4;
}
NowFirstLine = 1;
}
void TurnUpOnePage()
{
unsigned char i;
if (TurnIndex[0] > 4) {
TurnIndex[0] -= 4;
i = TurnIndex[0];
NowPage = TurnIndex[i];
CursorEnable = TurnIndex[i+1]>>4;
NowControl = TurnIndex[i+1]&0x0f;
NowFocuse = TurnIndex[i+2];
NowFirstLine = TurnIndex[i+3];
}
InputKey = KEYREFRSH;
WaitForKey = 0;
}
uchar GetPersonNum(PersonListx *Pointer,PersonSelx *PersonPointer,uchar PersonType)
{
uint TempAddress;
uchar Flag[3],Counter=0,MoneyFlag=0;
uchar PersonNumber=0,Counter1;
ucharx MoneyBuffer[8];
if(PersonType==4)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -