?? jbscomm.c
字號(hào):
/***********************************************************
*
* 說(shuō) 明:串口通訊程序,包函新、老數(shù)據(jù)格式
* 日 期:1999/11/29
*
**********************************************************/
//#pragma SRC
//#pragma DEBUG
#include <jbScomm.h>
/***********************************************************
*
* 說(shuō) 明:串口通訊程序,包函新、老數(shù)據(jù)格式
* 日 期:1999/11/29
*
**********************************************************/
void UartComm(void)
{
byte cbMenu=4; // 缺省進(jìn)入呼叫管理機(jī)狀態(tài)
bool fEnterSelect=FALSE;
bool fDispUpdate=TRUE;
bool fLastKey=TRUE; // 避免長(zhǎng)按鍵多次起作用
while(TRUE){
IDLE;
if(fDispUpdate){
fDispUpdate=FALSE;
memset(aLargeBuf,0,20);
memcpy(&aLargeBuf,&aUartMenu[cbMenu],11);
ConvertCode();
DispOut();
}
if(fLastKey){
if(bKeyBuf==0xf0)
fLastKey=FALSE;
continue;
}
if((!fKey)||(cbKey>30)) continue;
fKey=FALSE;
// 菜單選擇循環(huán):
bErrorCode=ERR_NO;
switch(bKeyBuf)
{
case K1:
if(cbMenu==8){
bStatusWord=S_HARDWAREINIT;
bEnterFlag=0x69;
return;
}
cbMenu=8;
break;
case DOWN_ARROW: //向前翻滾
if(cbMenu!=0)
cbMenu--;
else
cbMenu=8;
break;
case UP_ARROW: //向后翻滾
if(cbMenu!=8)
cbMenu++;
else
cbMenu=0;
break;
case MENU_ENTER: // 確定鍵
if(cbMenu==8){ // 退出鍵
bStatusWord=S_HARDWAREINIT;
return;
}
else if(cbMenu==4){
if(fWorkMode)
bCallReason=NEW_TEST;
else
bCallReason=OLD_TEST;
bStatusWord=S_UPCALL;
return;
}
fEnterSelect=TRUE;
break;
}
fDispUpdate=TRUE;
if(!fEnterSelect) continue;
fEnterSelect=FALSE;
fFlash=0;
// 功能處理循環(huán):
switch(cbMenu)
{
case 0: // "1 F-SA ",發(fā)送所有數(shù)據(jù)
SendAll(cbMenu);
break;
case 1: // "2 F-SAC ",發(fā)送所有數(shù)據(jù)并指示接收方初始化
SendAll(cbMenu);
break;
case 2: // "3 F-SC ",發(fā)送時(shí)鐘
SendClock();
break;
case 3: // "4 F-RD ",進(jìn)入接收等待
RecvAll();
break;
case 5: // "5 F-SEr ",
DispClr();
EX0=1;
bStatusWord=S_SERVICE;
return ;
case 6: // "6 F-SER ",
SendProgram();
break;
//ChangeWorkMode();
//break;
case 7: //"7 F-PC "
PRNCLRServer();
break;
}
if(bDlpReason!=0) return; // 轉(zhuǎn)入串口程序下載過(guò)程
ExitUart();
} // End while(TRUE)
}
// End function: UartComm()
void SetPrnBackDistance(void) //lmt add 2001.3.13
{
byte i1;
Page(6);
i1=XBYTE[PARA_59];
Page(5);
while(1){
IDLE;
memcpy(aLargeBuf,"3-",2);
ConvertCode();
aLargeBuf[2]=aLCDSegment[i1/100];
aLargeBuf[3]=aLCDSegment[(i1%100)/10];
aLargeBuf[4]=aLCDSegment[i1%10];
DispOut();
if(fKey){
fKey=0;
switch(bKeyBuf){
case K2:
if(cbKey>199)
cbKey=180;
i1--;
break;
case K3:
if(cbKey>199)
cbKey=180;
i1++;
break;
case K1:
Page(6);
XBYTE[PARA_59]=i1;
Page(5);
return;
}
}
}
}
void PRNCLRServer(void) //lmt add 2001.3.13
{
byte xdata bManue;
byte data i;
bManue=1;
memset(aLargeBuf,0,20);
while(1){
IDLE;
if(bManue==3){
Page(6);
i=XBYTE[PARA_59];
Page(5);
while(1){
IDLE;
aLargeBuf[0]='3';
aLargeBuf[1]='-';
ConvertCode();
aLargeBuf[2]=aLCDSegment[i/100];
aLargeBuf[3]=aLCDSegment[(i%100)/10];
aLargeBuf[4]=aLCDSegment[i%10];
DispOut();
if(fKey){
fKey=0;
if(cbKey>30)
continue;
if(bKeyBuf==K4){
if(cbKey>199)
cbKey=180;
Speaker(40);
SetPrnBackDistance();
return;
}
else if(bKeyBuf==K3){
if(cbKey>199)
cbKey=180;
bManue=1;
break;
}
else if(bKeyBuf==K2){
if(cbKey>199)
cbKey=180;
bManue=2;
break;
}
}
}
}
if(bManue==1)
memcpy(aLargeBuf,"1-PRN",5);
if(bManue==2)
memcpy(aLargeBuf,"2-CLR",5);
ConvertCode();
DispOut();
if(fKey){
fKey=0;
if(cbKey>30)
continue;
switch(bKeyBuf){
case K1:
if(bManue==1){
if(PrintBaoBiao()){
return;
}
else{
bManue=1;
break;
}
}
if(bManue==2){
ClrLastClass();
return;
}
break;
case K2:
if(cbKey>199)
cbKey=180;
--bManue;
if(bManue<=0)
bManue=3;
break;
case K3:
if(cbKey>199)
cbKey=180;
++bManue;
if(bManue>=4)
bManue=1;
break;
case K4:
Speaker(20);
break;
}
}
}
}
void ClrLastClass(void) //lmt add 2001.3.13
{
byte i;
WaitRTC();
Page(6);
XBYTE[StartTimeAddress]=XBYTE[0xe004]; //清除時(shí)間即為該班開(kāi)始統(tǒng)計(jì)時(shí)間
XBYTE[StartTimeAddress+1]=XBYTE[0xe002];
XBYTE[StartTimeAddress+2]=XBYTE[0xe000];
XBYTE[EndTimeAddress]=XBYTE[0xe004]; //清除時(shí)間即為該班開(kāi)始統(tǒng)計(jì)時(shí)間
XBYTE[EndTimeAddress+1]=XBYTE[0xe002];
XBYTE[EndTimeAddress+2]=XBYTE[0xe000];
for(i=0,iAddress=ClassIDDAddress;i<15;i++){
XBYTE[iAddress+i]=0x00;
}
Page(5);
}
void ExitUart(void)
{
TR1=0;REN=0;ES=0; // 關(guān)閉串口中斷
if(bErrorCode==ERR_NO)
DispOK(3);
else if(bErrorCode==KEY_EXIT)
cbKey=200;
else
DispErrorCode();
}
// End function: ExitUart()
/************************************************************
*
* 函 數(shù):SendAll()
* 說(shuō) 明:OLD模式/NEW模式下發(fā)送所有數(shù)據(jù)
*
***********************************************************/
void SendAll(byte bMenu)
{
if(fWorkMode)
NewSendAll(bMenu);
else
OldSendAll(bMenu);
}
// End function: SendAll()
/************************************************************
*
* 函 數(shù):SendClock()
* 說(shuō) 明:OLD模式/NEW模式下發(fā)送時(shí)鐘
*
***********************************************************/
void SendClock(void)
{
byte i,bTemp,bCheckSum=0;
uint iAddr=0xc000;
DispSymbol(LARGE_COMM);
ResetUart();
TxCmd(0x32);
fWaitExit=1;
if(!RxCmd())
return;
fWaitExit=0;
if(bErrorCode==KEY_EXIT)
return;
else if(bRecSBUF!=OK){
bErrorCode=ERR_05;
return;
}
DispSymbol(LARGE_FLASH);
WaitRTC();
for(i=0;i<10;i++)
{
Page(6);
bTemp=XBYTE[iAddr++];
Page(5);
TxByte(bTemp);
bCheckSum+=bTemp;
}
TxByte(bCheckSum);
if(!RxCmd())
return;
if(bRecSBUF!=OK)
bErrorCode=ERR_05;
}
// End function: SendClock()
/************************************************************
*
* 函 數(shù):RecvAll()
* 說(shuō) 明:OLD模式/NEW模式下接收所有數(shù)據(jù)
* 數(shù)據(jù)可來(lái)自管理機(jī)或另一臺(tái)計(jì)費(fèi)器。
*
***********************************************************/
void RecvAll(void)
{
DispSymbol(LARGE_COMM);
ResetUart();
while(TRUE){
fWaitExit=1;
fFirstCmd=1;
if(!RxCmd())
continue;
fFirstCmd=0;
fWaitExit=0;
if(bErrorCode==KEY_EXIT)
return;
bErrorCode=ERR_NO;
if((bRecSBUF>=0x30)&&(bRecSBUF<=0x32)){
DispSymbol(LARGE_FLASH);
fWorkMode=0;
OldRecvAll();
return;
}
else if((bRecSBUF>=0x40)&&(bRecSBUF<=0x57)){
DispSymbol(LARGE_FLASH);
fWorkMode=1;
NewRecvAll();
return;
}
else if(bRecSBUF==0x81){
DispCmd(bRecSBUF);
QueryVersion();
/*
if(!RxCmd())
break;
if(bRecSBUF!=DOWNLOAD_PROGRAM){
bErrorCode=ERR_05;
break;
}
*/
if(bErrorCode!=ERR_NO)
break;
DispCmd(bRecSBUF);
return;
}
else
continue;
} // End while(TRUE)
}
// End function: RecvAll()
/************************************************************
*
* 函 數(shù):OldSendAll()
* 說(shuō) 明:OLD模式發(fā)送所有數(shù)據(jù)
*
***********************************************************/
void OldSendAll(byte bCmd)
{
byte i,j,bCheckSum;
byte bTemp;
uint iAddr;
DispSymbol(LARGE_COMM);
ResetUart();
TxCmd(bCmd+0x30);
DispCmd(bCmd);
fWaitExit=1;
if(!RxCmd())
return;
fWaitExit=0;
if(bErrorCode==KEY_EXIT)
return;
else if(bRecSBUF!=OK){
bErrorCode=ERR_05;
return;
}
DispSymbol(LARGE_FLASH);
//
iAddress=PARA_232;
ReadBytes(1,2);
iParaWord--;
iParaWord|=0xf000;
AutoReadPara(51);
if((bParaByte&0x08)!=0)
bParaByte&=0xf7;
else
bParaByte|=0x08;
aDataBuf[0]=bParaByte;
WriteData(1,iParaWord,1,&aDataBuf); // 將老模式控制參數(shù)填到費(fèi)率中
//
iAddr=PARA_202;
for(i=0;i<81;i++){
for(j=0,bCheckSum=0;j<64;j++){
Page(1);
bTemp=XBYTE[iAddr+j];
Page(5);
TxByte(bTemp);
bCheckSum+=bTemp;
}
TxByte(bCheckSum);
if(!RxCmd())
return;
if(bRecSBUF!=OK){
bErrorCode=ERR_04;
return;
}
iAddr+=64;
FlashComm();
}
}
// End function: OldSendAll()
/************************************************************
*
* 函 數(shù):NewSendAll()
* 說(shuō) 明:OLD模式/NEW模式下發(fā)送所有數(shù)據(jù)
*
***********************************************************/
byte aNewUCmd[]={
S_NEW_SYSTEM, // 0x40
S_NEW_DISCOUNT, // 0x41
S_CALLSTATION, // 0x42
S_IDD_CLASS, // 0x43
S_DDD_CLASS, // 0x44
S_LOCAL_CLASS, // 0x45
S_IDD_TARIFF, // 0x46
S_DDD_TARIFF, // 0x47
S_LOCAL_TARIFF, // 0x48
S_MANAGEMENT,
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -