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

📄 control.c.svn-base

📁 keilC底层软件,能够结合硬件产生加解密密文,具有安全保护功能.
💻 SVN-BASE
📖 第 1 页 / 共 5 页
字号:
		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 + -