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

📄 jbwait.c

📁 电话PSTN线路上FSK处理软件。。。。。。。。。
💻 C
📖 第 1 页 / 共 4 页
字号:
				break;	

			case NEW_CONTROL_PARA:
				p=&aNewCont[bStatus];
				bTemp=aNewContLoc[bStatus];
				break;	
		}		
		if((bParaByte&bTemp)==0)
			bOnOff=OFF;
		else
			bOnOff=ON;	
		memcpy(&aLargeBuf,p,3);
		memcpy(&aLargeBuf[3],&aOnOff[bOnOff],4);	
		ConvertCode();
		DispOut();
		if(!fFirstKey){
			if(bKeyBuf==0xf0)
				fFirstKey=1;
			continue;	
		}
		if(fKey){
			fKey=0;
			if(cbKey>30)
				continue;
			switch(bKeyBuf){
				case K4:
					if(bOnOff==OFF)
						bParaByte|=bTemp;
					else
						bParaByte&=~bTemp;
					break;
				
				case K2:
					if((bStatus--)==0)
						bStatus=bLen-1;			
					break;
					
				case K3:
					if((++bStatus)==bLen)
						bStatus=0;
					break;
				
				case K1:
					return;	
			}
		}			
	}	
}	

void ClrStatData(void)
{
	bool fClear=1;
	if(!InPutPassWord(1)){
		DispErrorCode();
		return;
	}
	if(fWorkMode){
		AutoReadPara(17);
		if(bParaByte==0)
			fClear=0;
	}
	else{
		AutoReadPara(212);
		if((bParaByte&0x08)==0)
			fClear=0;
	}		
	if(!fClear){		
		bErrorCode=ERR_05;
		DispErrorCode();
		return;
	}
	DispClr();
	aLargeBuf[0]='c';
	aLargeBuf[1]='L';
	aLargeBuf[2]='R';
	ConvertCode();
	DispOut();
	fKey=0;
	while(1){
		IDLE;
		if(fKey)
			break;
	}			
	iParaWord=0;
	lParaLWord=0;
	AutoWritePara(60);
	AutoWritePara(61);
	AutoWritePara(65);
	AutoWritePara(66);
	DispOK(3);
}		


bool InPutPassWord(byte bWhich)
{
	byte bLen,i;
	switch(bWhich){
		case 1:					//Clear Totality
		case 2:					//Change PassWord
			AutoReadPara(56);	//Get out Password saved in aParaBuf[].
			aParaBuf[3]=aParaBuf[1]&0x0f;
			aParaBuf[2]=aParaBuf[1]>>4;
			aParaBuf[1]=aParaBuf[0]&0x0f;
			aParaBuf[0]=aParaBuf[0]>>4;
			if(bWhich==1)
				bLen=4;
			else
				bLen=8;
			break;

		case 3:					//SSd PassWord Saved in aParaBuf[].
			AutoReadPara(212);
			aParaBuf[0]=bParaByte>>4;
			aParaBuf[1]=bParaByte&0x0f;
			AutoReadPara(211);
			aParaBuf[2]=bParaByte>>4;
			aParaBuf[3]=bParaByte&0x0f;
			for(i=0;i<4;i++){			
				if(aParaBuf[i]>9)
					aParaBuf[i]-=6;
			}		
			bLen=4;
			break;
	}	
	while(1){
		IDLE;
		pReadNumber=0;
		pWriteNumber=0;
		if(bWhich==1){
			memcpy(&aLargeBuf[15],"RLc",3);
			ConvertCode();	
		}	
		else if(bWhich==3){
			memcpy(&aLargeBuf[15],"DSS",3);
			ConvertCode();
		}	
		memset(aLargeBuf,0,8);
		memset(aLargeBuf,0x20,bLen);
		DispSymbol(LARGE_PHONE);	
		while(OffHook()){
			IDLE;
			if(pReadNumber<pWriteNumber){
				aLargeBuf[pReadNumber]=0xe4;
				pReadNumber++;
			}	
			DispSymbol(LARGE_HOOK);
			if(pReadNumber==bLen){			//Input Password over,begin check password
				Delay5MS(50);
				if(memcmp(aNumBuf,aParaBuf,4)==0x00){
					if(bWhich==2){
						aParaBuf[0]=(aNumBuf[4]<<4)+aNumBuf[5];
						aParaBuf[1]=(aNumBuf[6]<<4)+aNumBuf[7];
						AutoWritePara(56);		//Renew password for clr totality	
					}	
					return TRUE;
				}	
				bErrorCode=ERR_03;
				return FALSE;
			}		
		}	//end if(...)	
	}		
}	


void DispVersion(void)
{
	bool fLastKey=0;
	memcpy(&aLargeBuf,&aVersion[2],10);
	ConvertCode();
	AutoReadPara(72);
	while(1){
		IDLE;
		aLargeBuf[8]=0x20;
		aLargeBuf[9]=aLCDSegment[bParaByte/10];
		aLargeBuf[10]=aLCDSegment[bParaByte%10];
		DispOut();
		if(bKeyBuf==0xf0)
			fLastKey=1;
		if(!fLastKey)
			continue;	
		if(fKey){
			fKey=0;
			switch(bKeyBuf){
				case K1:
					AutoWritePara(72);
					DispOK(3);
					return;

				case K2:
					if(cbKey>199)
						cbKey=170;
					if((bParaByte--)==0)	
						bParaByte=34;
					break;

				case K3:
					if(cbKey>199)
						cbKey=170;
					if((bParaByte++)==34)	
						bParaByte=0;
					break;

				case K4:
					cbKey=10;
					if(bParaByte==34)
						bParaByte=0;
					else
						bParaByte=34;	
					break;
			}
		}			
	}	
}	
	
void DispAllSegment(void)
{
	memset(aLargeBuf,0xff,20);
	memset(aSmallBuf,0xff,5);
	DispOut(); 
	DelaySecond(3);
	DispClr();
}	
	
byte code aInitOldTalk[15]={0x0d,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,
                		    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
byte code aInitNewTalk[30]={0xdc,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,
                		    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
                		    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
                		    0x00,0x00,0x00,0x00,0x00,0x00};

void ClrTotal(void)
{
	byte i;
	byte j;
	byte bTalk,bTemp;
	Speaker(20);
	Open(POWER_ON);
	memset(&aDataBuf,0,128);
	if(fWorkMode){								
		//清开关机记录,清日分项合计
		iAddress=NEW_POWERONOFF_ADDR;
		for(i=0;i<10;i++){
			WriteData(1,iAddress,128,&aDataBuf);
			iAddress+=128;
		}
		WriteData(1,PARA_00,6,&aDataBuf);
		//清话单记录
		iAddress=NEW_BILLS_ADDR;
		for(i=0,bTalk=0;i<118;i++){
			for(j=0;j<128;j++){
				aDataBuf[j]=aInitNewTalk[bTalk];
				if(++bTalk==NEW_BILL_LEN)
					bTalk=0;
			}
			bTemp=58-(byte)((iAddress-NEW_BILLS_ADDR)>>8);
			DispSpeed(bTemp);
			WriteData(1,iAddress,128,&aDataBuf);
			iAddress+=128;
		}
	}
	else{
		//清开关机记录,清日分项合计
		iAddress=OLD_POWERONOFF_ADDR;
		for(i=0;i<2;i++){
			WriteData(1,iAddress,128,&aDataBuf);
			iAddress+=128;
		}
		iAddress=0xed00;
		for(i=0;i<2;i++){
			WriteData(1,iAddress,128,&aDataBuf);
			iAddress+=128;
		}
		WriteData(1,PARA_200,6,&aDataBuf);
		//清话单记录
		iAddress=OLD_BILLS_ADDR;
		for(i=0,bTalk=0;i<24;i++){
			for(j=0;j<128;j++){
				aDataBuf[j]=aInitOldTalk[bTalk];
				if(++bTalk==15)
					bTalk=0;
				if((i==0)&&(j==119)){
					WriteData(1,iAddress,120,&aDataBuf);
					iAddress+=120;
					break;
				}	
			}
			bTemp=11-(byte)((iAddress-OLD_BILLS_ADDR)>>8);
			DispSpeed(bTemp);
			if(i!=0){
				WriteData(1,iAddress,128,&aDataBuf);
				iAddress+=128;
			}	
		}
		aParaBuf[0]=0x87;
		aParaBuf[1]=0x42;
		AutoWritePara(23);					
	}
	ClrRam();
	bParaByte=7;
	AutoWritePara(52);
	bParaByte=7;
	AutoWritePara(53);
	bParaByte=0;
	AutoWritePara(54);
	AutoWritePara(55);
	AutoWritePara(77);
	AutoWritePara(76);
	AutoWritePara(57);						//将清累计值密码置为0
	bParaByte=75;	
	AutoWritePara(73);						//打印机走纸距离
	aParaBuf[0]=0;
	aParaBuf[1]=0;
	AutoWritePara(56);						//将清累计值密码置为0
	Close(POWER_ON);
}			
			
	
void ClrRam(void)
{
	memset(aDataBuf,0,114);
	WriteData(6,0xc00e,114,&aDataBuf);		//从0xc00e 到 0xc070 都清为0
	WaitRTC();
	Page(6);
	aUserRTCBuf[YEARH] =0x20;
	aUserRTCBuf[YEARL] =XBYTE[0xc009]; 
	aUserRTCBuf[MONTH] =XBYTE[0xc008];
	aUserRTCBuf[DAY]   =XBYTE[0xc007];
	//aUserRTCBuf[WEEK]  =XBYTE[0xc006];
	aUserRTCBuf[HOUR]  =XBYTE[0xc004];
	aUserRTCBuf[MINUTE]=XBYTE[0xc002];
	aUserRTCBuf[SECOND]=XBYTE[0xc000];
	Page(5);	
}		
	
void DispSpeed(byte bTemp)
{	
	aLargeBuf[9]=0;
	aLargeBuf[10]=0;
	aLargeBuf[12]=aLCDSegment[bTemp/10];
	aLargeBuf[11]=aLCDSegment[bTemp%10];
	DispOut();
}	

void PowerAlarm(void)
{
 	byte i;
	i=200;
	while(--i!=0){
		if(PERR) 
			return;
	};
	SDA=0;
	SDelay();
	SCL=0;
	SDelay();
	I2CWrite(0x70);					// 将显示器设为闪烁模式
	I2CWrite(0x71);
	SCL=1;
	SDelay();
	SDA=1;
	SDelay();				
	WriteOut(RTC_CONTROLA,0x25);	// 开启蜂鸣器长鸣
	WriteOut(RTC_CONTROLB,0x1a);
	DelaySecond(4);
	WriteOut(RTC_CONTROLB,0x12);	// 关闭蜂鸣器
	Open(RLY);
	Close(MLD);
	PCON=0x82;						// 进入掉电保护状态
}

void TestPrinter(void)
{
	byte i;
	memset(aNumBuf,0x0c,16);
	for(i=0;i<10;i++)
		aNumBuf[i]=i;
	SaveCurrentTime();
	iTotalTime=14399;
	lTotalTariff=199999;
	PrintTalkRecord();
}
	
void DispDiscount(void)
{
	byte i;
	bIDL=1;
	if(fWorkMode){
       	NewCheckHoliday();						//查节假日表
		NewNo2Tariff();        					//查第二费率时间表
       	iAddress=NEW_DDD_CLASS_ADDR;
       	Page(1);
	    if(fNo2Tariff){
        	bParaByte=XBYTE[iAddress];
	   		iAddress+=(uint)(bParaByte*16)+1;
		}
		iAddress+=31;							//使用缺省费率的级数
		i=XBYTE[iAddress++];
	    if((i!=0)&&fHoliday);
    	else
    		i=XBYTE[iAddress];	
   		bDayPartCode=i;							//不用管是否为节假日       	
       	Page(5);
        NewGetDiscount();		    			//查折扣率方案表,计算折扣率存储在aParaBuf[]中
		if((aParaBuf[0]<100)||(aParaBuf[1]<100)||
		   (aParaBuf[2]<100)||(aParaBuf[3]<100))
		    DispSymbol(LARGE_HALFPRICE);
		else
			DispSymbol(LARGE_ALLPRICE);   
	}
	else{
		OldCheckHoliday();
		i=OldGetDiscount();
        if(i<100)						// 折扣率小于100且设置折扣项 
          	DispSymbol(LARGE_HALFPRICE);
        else
          	DispSymbol(LARGE_ALLPRICE);	
	}	
}


byte CheckCallID(void)
{
	byte i;
	Page(5);
	pReadNumber=0; 
	// if(aCallID[0]!=0x04)				// 是否为有效的来电显示号码 
	if(aCallID[0]>10)					// 是否为有效的来电显示号码 
		return 0;
	else if((aCallID[10]=='P')||(aCallID[10]=='O'))	
		return 0;
	else if(aCallID[1]>8){	
		//	
		pReadNumber=aCallID[1]-8;		// 显示来电号码的个数 //
		memset(aDataBuf,0x0c,16);
		// 
		if(pReadNumber>16){				// 长度非法 //	
			pReadNumber=16;	
		}	
		if(pReadNumber<3)				// 至少要有3个号码 //
			return 0;
		
		// 将ASCII数据转换成十进制数据 //
		for(i=0;i<pReadNumber;i++){
			aDataBuf[i]=aCallID[10+i]-'0';
			if(aDataBuf[i]>9){			// 非法字符 2002-04-01 19:29 //
				return 0;	
			}	
		} 	
		
		pReadNumber--;
		memcpy(aNumBuf,aDataBuf,16);
		
		if(CheckManagement())
			return 1;
		else
			return 2;
	}
	return 0;
}	

// aDataBuf 中存储的是来电显示号码
bool CheckManagement(void)
{
	byte i,bTemp,j;
	byte k;
	byte bNum;
	byte aTemp[16];
	if(bAutoOffHookTimes!=0)			// 
		return 0;
	Page(1);
	bNum=XBYTE[NEW_MANAGEMENT_ADDR];	// 比较来电显示号码是否是管理系统的号码 
	Page(5);
	if((bNum==0)||(bNum>128))
		return 0;
	iAddress=NEW_MANAGEMENT_ADDR+1;
	for(k=0;k<16;k++){					// 来电显示号码的长度 //
		if(aDataBuf[k]>9)
			break;
	}
	for(i=0;i<bNum;i++){
		ReadBytes(1,8);
		for(j=0;j<16;j++){
			if((j%2)==0)
				bTemp=aParaBuf[j/2]>>4;
			else
				bTemp=aParaBuf[j/2]&0x0f;
			if(bTemp>9)
				break;
			else
				aTemp[j]=bTemp;	
		}	
		if(j>2){		    			// 至少设置3个有效号码,防止无管理系统号码时,计费器自动摘机 //
			if(k>=j){
				if(memcmp(aTemp,&aDataBuf[k-j],j)==0) // 号码匹配 
					return 1;
			}		
		}
		else
			break;		
	}	
	return 0;
}	

// 存储来电显示号码 //
void SaveCallId(void)
{
	iTotalTime=0;
	lTotalTariff=0;
	SaveCurrentTime();
	SaveRecord();
}	

⌨️ 快捷键说明

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