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