📄 stccoinboxnew.c
字号:
//////////////////////////////////////////////
else
{
if(nKeyProcessStep2 == 1)
{
nKeyLowLevel2Counter++;
nKeyHighLevel2Counter = 0;
if(nKeyLowLevel2Counter>=KeyMaxLowLevel)
{
nKeyProcessStep2 =2;
nKeyLowLevel2Counter =KeyMaxLowLevel;
bKeyPermit = TRUE;
bEtime=0;
}
}
if(nKeyProcessStep2 == 2)nKeyProcessStep2 = 0;
}
}
/////////////////////////////////////////////////////////////
if(bCoinReceiveA == 1) //上电处理//&&(bKeyCoin==0)
{
nHigh_CheckCoinCounter++;
nLow_CheckCoinCounter = 0;
if(nHigh_CheckCoinCounter>= MaxHighLevel)
{
nCheckLevelStep = 1;
nHigh_CheckCoinCounter = MaxHighLevel;
}
bPulseSecondCount=1;
//nPulseDelayTime=0;
}
else
{/*
if(bPulseSecondCount)
{
nPulseTime[nPulseSort++]=nPulseDelayTime;
if(nPulseSort>=2)nPulseSort=0;
bPulseSecondCount=0;
bPulseFirstCount=1;
if(nPulseDelayTime<500){bGsmLed=0;bCoin_Permit=0;nPulseDelayTime=0;}
else {bGsmLed=1;bCoin_Permit=1;nPulseDelayTime=0;}//nSpareMoney++;
if(nPulseDelayTime>2000){bGsmLed=1;bPulseFirstCount=0;nPulseDelayTime=0;}
}
*/
if(nCheckLevelStep == 1)
{
nLow_CheckCoinCounter++;
nHigh_CheckCoinCounter = 0;
if(nLow_CheckCoinCounter>= MaxLowLevel)
{
nCheckLevelStep =2;
bKeyCoin=1;
if(nLow_CheckCoinCounter >= MaxLowLevel){nLow_CheckCoinCounter=MaxLowLevel;}/////// ////
}
}
}
if((bPassWordPermit)||(bSetPassWordPermit))PassWordDelay++;
else PassWordDelay=0;
// if(Delay_ms)Delay_ms--;
//ET0=1;
}
////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////
void Send (void)
{
TI=0;
////////////////////////////////////////////////////////
switch(T_Status)
{
case 0: bRest=0;bTxd0_SendPermit=0;bSetState=0;bSendCommand=0; break;
case 1: if(Init_BackTime>=16)
{Senddata1 = 0x35; Senddata2 = backtime[Init_BackTime-16];}
else{Senddata1=0x34; Senddata2 = backtime[Init_BackTime];}
bTxd0_SendPermit=1; SendTime=0; bGetCommand=0; bAckCommand=0; break;
case 2: if(bGetCommand==1){T_Status=6; SendTime=0; bTxd0_SendPermit=0;break;}
if(SendTime>500){T_Status=1;bTxd0_SendPermit=0;SendTime=0;break;}
else{T_Status=2;bTxd0_SendPermit=0;break;}
case 3: if(SendTime>5000){Senddata1=0x38;Senddata2=0x30;bTxd0_SendPermit=1;break;}
else{bTxd0_SendPermit=0;break;}
case 4: Senddata1=0x36;Senddata2=0x30;bTxd0_SendPermit=1;bSetState=0;bRest=1;bSendCommand=0;break;
case 5: if(bSetState==1){T_Status=7; SendTime=0; bTxd0_SendPermit=0;break;}
if(SendTime>500){T_Status=4;bTxd0_SendPermit=0;SendTime=0;break;}
else{T_Status=5;bTxd0_SendPermit=0;break;}
case 7: if(bSendCommand==1)
{T_Status=0;bTxd0_SendPermit=0;SendTime=0;bSendCommand=0;bERR=0;bRun = Off;break;}
if(SendTime>=32000){bTxd0_SendPermit=0;bRun = Off;SendTime=32000; bERR=1;break;} //E //r
else{T_Status=7;bTxd0_SendPermit=0;break;}
case 6: if(bAckCommand==1)
{T_Status=3;bTxd0_SendPermit=0;bAckCommand=0;SendTime=0; break;}
if(SendTime>=18000){T_Status=3;SendTime=0; bTxd0_SendPermit=0; break;} //E //r
else{T_Status=6;bTxd0_SendPermit=0;break;}
default: bTxd0_SendPermit=0; break;
}
// else{T_Status=0;bTxd0_SendPermit=0;Transmit_Point=6;}
////////////////////////////////////////////////////////
if(bTxd0_SendPermit==1)
{
switch(Transmit_Point)
{
case 0: SBUF= SOI;Transmit_Point++;break;
case 1: SBUF= DATAH;Transmit_Point++;break;
case 2: SBUF= DATAL;Transmit_Point++;break;
case 3: SBUF= Senddata1;Transmit_Point++;break;
case 4: SBUF= Senddata2;Transmit_Point++;break;
case 5: SBUF= EOI;Transmit_Point++;break;
default:Transmit_Point=6;if((Senddata1==0x34)||(Senddata1==0x35)){T_Status=2;}
if(Senddata1==0x38)
{
T_Status=3;
if(SendTime>5000){SendTime=0;}
}
if(Senddata1==0x36){T_Status=5;}
bTxd0_SendPermit=0;break;
}
}
}
/////////////////////////////////////////////////////////
void Receive(void)
{
RI=0;
switch (R_Status)
{
case 0: if(SBUF==SOI){R_Status=1;break;}
else{R_Status=0;break;}
case 1: if(SBUF==GETH){R_Status=2;break;}
else{R_Status=0;break;}
case 2: if(SBUF==GETL){R_Status=3;Rxd0_DataLength=0;break;}
if(SBUF==M_AckCommand){R_Status=5;Rxd0_DataLength=0;break;} ///
if(SBUF==M_SetState){R_Status=7;Rxd0_DataLength=0;break;}
else{R_Status=0;break;}
case 3: if(SBUF==EOI){R_Status=0;Rxd0_DataLength=0;Transmit_Point=0;Send();break;}
Rxd0_DataLength++;
if(Rxd0_DataLength>21){R_Status=0;Rxd0_DataLength=0;break;}
else{R_Status=3;break;}
case 5: if(SBUF==DATAACK){R_Status=6;Transmit_Point=0;break;}
else{R_Status=0;break;}
case 6:
if(SBUF==M_GetCommand)
{bGetCommand=1; R_Status=0;break;}
if(SBUF==M_SetState)
{
bSetState=1;
R_Status=0;
break;
}
if(SBUF==M_AckCommand)
{
bAckCommand=1;
R_Status=0;
break;
}
if(SBUF==S_SendCommand) {bSendCommand=1; R_Status=0;break;}
if(SBUF==EOI){R_Status=0;break;Rxd0_DataLength=0;}
Rxd0_DataLength++;
if(Rxd0_DataLength>21){R_Status=0;Rxd0_DataLength=0;break;}
break;
case 7: Rxd0_RecBuffer[Rxd0_DataLength]=SBUF;
if(Rxd0_RecBuffer[Rxd0_DataLength]==EOI)
{
R_Status=0;
Rxd0_DataLength=0;
bLcdDisplayChange=TRUE;
break;
}
Rxd0_DataLength++;
if(Rxd0_DataLength>21){R_Status=0;Rxd0_DataLength=0;break;}
else{R_Status=7;break;}
}
ReceiveTime=0x0000;
}
/////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
void CommRX() interrupt 4 using 3
{
if(TI==1){Send();}
if(RI==1){Receive();}
}
////////////////////////////////////////////////////////////////////////
Timer1() interrupt 3 using 3
{
F_TM=1;
}
void Rxd0_RecProcss(void)
{
for(Transmit_Point=0;Transmit_Point<21;Transmit_Point++)
{
if((Rxd0_RecBuffer[Transmit_Point] >= 0x30) && (Rxd0_RecBuffer[Transmit_Point] <= 0x39)) Rxd0_RecBuffer[Transmit_Point] -= 0x30 ;
else if((Rxd0_RecBuffer[Transmit_Point] >= 0x41) && (Rxd0_RecBuffer[Transmit_Point] <= 0x46)) Rxd0_RecBuffer[Transmit_Point] -= 0x37 ;
else Rxd0_RecBuffer[Transmit_Point] -= 0x57 ;
}
/*
for(Transmit_Point=0;Transmit_Point<11;Transmit_Point++)
{
(Lcddis[Transmit_Point]&=LcddisMask[Transmit_Point]) ;//| ((Rxd0_RecBuffer[2*Transmit_Point]<<4)|Rxd0_RecBuffer[2*Transmit_Point+1]) ;
}
*/
Lcddis[1]&=LcddisMask[1];
Lcddis[2]&=LcddisMask[2];
Lcddis[3]&=LcddisMask[3];
Lcddis[10]&=LcddisMask[10];
Lcddis[1]|=(Rxd0_RecBuffer[0]<<4)&0xf0;//(Rxd0_RecBuffer[0]<<4)&0xff;
Lcddis[2]=((Rxd0_RecBuffer[2]<<4)|Rxd0_RecBuffer[3]);
Lcddis[3]=((Rxd0_RecBuffer[4]<<4)|Rxd0_RecBuffer[5]);
Lcddis[3]|=0x80;
Lcddis[10]=((Rxd0_RecBuffer[6]<<4)|Rxd0_RecBuffer[7]);
Lcddis[10]|=0x08;
/*
Lcddis[1]=((Rxd0_RecBuffer[0]<<4)|Rxd0_RecBuffer[1]);//(Rxd0_RecBuffer[0]<<4)&0xff;//
Lcddis[2]=((Rxd0_RecBuffer[2]<<4)|Rxd0_RecBuffer[3]);//Rxd0_RecBuffer[1];//
Lcddis[3]=((Rxd0_RecBuffer[4]<<4)|Rxd0_RecBuffer[5]);//Rxd0_RecBuffer[2];//
Lcddis[3]|=0x80;
Lcddis[10]=((Rxd0_RecBuffer[6]<<4)|Rxd0_RecBuffer[7]);//Rxd0_RecBuffer[3];//
Lcddis[10]|=0x08;
*/
if(T_Status!=0)
{
//Lcddis[1]|=0xf0;
//Lcddis[2]=0xff;
//Lcddis[3]=0xff;
// Lcddis[10]=0xff;
}
//Lcddis[8]|=Lcddis[8];
//Lcddis[9]|=Lcddis[9];
/////////////////////////////////////////
}
///////////////////////////////////////////////////////////////
//xt
void Init_BaudRate0()
{
ES=0;
SCON=0X50;
T2CON=0x30; //用定时器2做串口1的波特率发生器
RCAP2H=0xff; // 11.0592M晶振下,baud rate=57600
RCAP2L=0xfa;
TH2=0xff; // 11.0592M晶振下,baud rate=57600
TL2=0xfa;
PS=1;//串口中断优先
//TR0 = 1;
TR2=1;
ES=1;
// EA=1;
}
//串口1的设置
void Init_BaudRate1()
{ // ES=0;
TMOD = 0x21;
TH1=(256-96); //9600bps 就是 1000000/9600=104.167微秒 执行的timer是
// 104.167*11.0592/12= 96
TL1=TH1;
PCON=0X80;
//PS=1;
TR1=0; //在发送或接收才开始使用
TF1=0;
ET1=1;//Enable interrupt
//SCON=0X50;
EA = 1; //EA = 1;
}
/*
uchar Ascii_to_Hex(uchar str)
{
uchar temp1,temp2;
temp1=((str/10)&0x0f)<<4;
temp2=(str%10)&0x0f;
temp1+=temp2;
return temp1;
}
*/
/*
uchar Hex_to_Ascii(uchar str)
{
uchar temp1,temp2;
temp1=((str&0xf0)>>4)*10;
temp2=(str&0x0f);
temp1+=temp2;
return temp1;
}
*/
/*
//单片机串口1发送Gsm信息
/////////////////////function: send string////////////////////////////////////////
void GsmSend(uchar * str)
{
uchar nCnt=0;
uchar len=strlen(str);
for(nCnt=0;nCnt<len;nCnt++) PSendChar(str[nCnt]);
// for(nCnt=0;nCnt<len;nCnt++)PSendChar(*str++);
}
*/
/*
uchar sendAtcommad(char *atstr)
{
// uint xdata nCnt;
uchar xdata value=0;
memset(TXD1_Buffer,0,sizeof(TXD1_Buffer));
// TXD1_SendWrite=TXD1_SendRead=0;
GsmSend(atstr);
return 0;
}
*/
/*
uchar find_OK_ERROR()
{
char nCnt;
for(nCnt=0;nCnt<140;nCnt++)
{
if(RcvBuf[nCnt]==0) return 2;
if(strncmp(RcvBuf+nCnt,"OK",2)==0) return 0;
else if(strncmp(RcvBuf+nCnt,"ERROR",5)==0) return 1;
}
return 1;// return 3;
}
*/
/////////////手机模块初始化函数///////////////////////////////////////////////////////////
//cut off power
/*
void power_down(void)
{
PD=1; //power off
bStartTC35iPermit=1;
while(bStartTC35iPermit)bGsmLed =0;
PD=0;
bGsmLed =1;
}
*/
//turn on GSM engine using Ignition line IGT
void start_tc35(void)
{
IGT=0;
bDelay20mS=1;
while(bDelay20mS)bGsmLed =0;
IGT=1;
bStartTC35iPermit=1;
while(bStartTC35iPermit){bGsmLed =0;WDR();} //
IGT=0;
bGsmLed =1;
//bStartTC35iPermit=1;
//while(bStartTC35iPermit);
}
/*
void AT_Send(void)
{
uchar xdata nCnt;//,error_counter
//error_counter=0;
//while(1)
//{
for(nCnt=0;nCnt<3;nCnt++) PSendChar(Command_At[nCnt]);
// GsmSend(Command_At);
//for(nCnt=0;nCnt<9;nCnt++)
// RXD1_Buffer[nCnt]=PGetChar();
// if(RXD1_Buffer[5]=='O'&&RXD1_Buffer[6]=='K') break;
// else if(error_counter++<10) Delay_1S();
// else deal_with_error();
//}
}
*/
/***********AT+cmgf*************
set preferred message format:text mode or PDU mode
In PDU mode, a complete SMS Message including all header information is passed
as a binary string (in hexadecimal format, so only this set of characters is allowed :
{‘0’,’1’,’2’,’3’,’4’,’5’,’6’,’7’,’8’,’9’, ‘A’, ‘B’,’C’,’D’,’E’,’F’} ). Each pair or characters is converted to
a byte (ex : ‘41’ is converted to the ASCII character ‘A’, whoes ASCII code is 0x41 or 65).
In Text mode, every commands and responses are in ASCII characters.
********************************/
/*
void AT_cmgf(void)
{ uchar nCnt;
for(nCnt=0;nCnt<10;nCnt++) PSendChar(Command_Cmgf[nCnt]);
//GsmSend(Command_Cmgf);
}
void AT_cops(void)
{ uchar nCnt;
for(nCnt=0;nCnt<10;nCnt++) PSendChar(Command_cops[nCnt]);
}
void AT_ateo(void)
{ uchar nCnt;
for(nCnt=0;nCnt<5;nCnt++) PSendChar(Command_ateo[nCnt]);
}
void AT_cmee(void)
{ uchar nCnt;
for(nCnt=0;nCnt<10;nCnt++) PSendChar(Command_cmee[nCnt]);
}
*/
void start_GSM()
{
//power_down();
start_tc35();
//for(nCnt=0;nCnt<11;nCnt++) Delay_1S();
//AT_Send();
// delay_160ms();
//AT_cmgf();
// delay_160ms();
// AT_cops();
// delay_160ms();
// AT_ateo();
//PSendChar("AT+COPS=0\r"); //GSM network operator is to be selected automatically
//delay_160ms();
//AT_cmee();
// delay_160ms();
//led2_close();//start complete
// return 0;
}
/*
void AT_cmgd(uchar index_high,uchar index_low)
{
uchar idata nCnt;
uchar byte_length=0;
bit high_flag=(index_low!='0');
high_flag=(index_high!='0');
if(high_flag)
byte_length=17;
else
byte_length=16;
for(nCnt=0;nCnt<8;nCnt++) PSendChar(Command_Cmgd[nCnt]);
//GsmSend(Command_Cmgd);
if(high_flag)
PSendChar(index_high);
PSendChar(index_low);
PSendChar('\r');
delay_160ms();
}
*/
void AT_cnmi(void)
{ uchar nCnt;
for(nCnt=0;nCnt<18;nCnt++) PSendChar(Command_Cnmi[nCnt]);
}
void GSM_Tansmit_WorkRecord()
{ uchar nCnt=0;
uchar temp;
for(nCnt=0;nCnt<10;nCnt++) PSendChar(Command_Cmgf[nCnt]);
bStartTC35iPermit=1;
while(bStartTC35iPermit){WDT_CONTR=0x34;bGsmLed =0;}
bGsmLed =1;
for(nCnt=0;nCnt<8;nCnt++) PSendChar(Command_Cmgs[nCnt]);
for(nCnt=0;nCnt<15;nCnt++)
{// if(SmsMangerCenterCode[nCnt]!=0x0d)
PSendChar(SmsMangerCenterCode[nCnt]);
// else return;
}
bStartTC35iPermit=1;
while(bStartTC35iPermit){WDT_CONTR=0x34;bGsmLed =0;}
bGsmLed =1;
PSendChar(';');
PSendChar('5');
PSendChar(',');
// P8563_gettime();
temp=(uchar)g8563_Store[6];//年
temp=(((temp>>4)&0x0f)+0x30);
PSendChar(temp);
temp=(uchar)g8563_Store[6]&0x0f;
temp+=0x30;
PSendChar(temp);
temp=(uchar)g8563_Store[5];//月
temp=(((temp>>4)&0x0f)+0x30);
PSendChar(temp);
temp=(uchar)g8563_Store[5]&0x0f;
temp+=0x30;
PSendChar(temp);
temp=(uchar)g8563_Store[3];//日
temp=(((temp>>4)&0x0f)+0x30);
PSendChar(temp);
temp=(uchar)g8563_Store[3]&0x0f;
temp+=0x30;
PSendChar(temp);
temp=(uchar)g8563_Store[2];//小时
temp=(((temp>>4)&0x0f)+0x30);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -