📄 plc_demo.c
字号:
SendByte(suba1); /*发送器件子地址1*/
if(ack==0) return(0xFF);
Start_I2c();
SendByte(sla+1);
if(ack==0)return(0xFF);
s=RcvByte();
Ack_I2c(1); /*发送非应位*/
Stop_I2c(); /*结束总线*/
return(s);
}
/*--------------------------------------------------
Initialize
初始化硬件以及寄存器,全局变量
--------------------------------------------------*/
void Initialize()
{
unsigned char i, ch;
/*初始化硬件参数,寄存器等等*/
Init_CPU();
Init_16c550();
Init_SRAM(); //Write Title into SRAM
/*初始化全局变量*/
/* PCTxBuffer = SRAM_BASEADDR + 0x200;
PCRxBuffer = SRAM_BASEADDR + 0x600;
ModuleTxBuffer = SRAM_BASEADDR + 0xa00;
ModuleRxBuffer = SRAM_BASEADDR + 0xe00;
*/
PCTxBuffer = 0xc200;
PCRxBuffer = 0xc600;
ModuleTxBuffer = 0xca00;
ModuleRxBuffer = 0xce00;
Init_LCD();
Display_LCD( LCD_Title );
DelayCount = 0;
while( DelayCount < 10000 );
DelayCount = 0;
Display_LCD( Sys_Title );
PowerOffFlag = 0;
PCDisconnectFlag = 0;
RePowerOffFlag = 0;
RePCDisconnectFlag = 0;
memset(PCTxBuffer, 0, LINE_LENGTH);
memset(PCRxBuffer, 0, LINE_LENGTH);
memset(ModuleTxBuffer, 0, LINE_LENGTH);
memset(ModuleRxBuffer, 0, LINE_LENGTH);
memset( Phone1, 0, 32 );
memset( Phone2, 0, 32 );
EEPR_AT_data = 1;
EEPR_DT_data = 5;
ModuleWaitFlag = 0;
DelayCount = 0;
ModuleSendDelayCount = 0;
Initialized = 0;
ModuleReceiveCount = 0;
PCReceiveCount = 0;
PCWaitFlag = 0;
ModuleTxCount = 0;
PCTxCount = 0;
PCConnectCount = 0;
Sms_edit_mode = 0;
Sms_send_type = 0;
PowerOffDelayCount = 0;
ConnectSmsHasSent = 0;
PowerSmsHasSent = 0;
LCDRefreshFlag = 0;
LedFlashFlag = 0;
LedFlashCount = 0;
ReceiveSMSFlag = 0;
/* EEProm data safe check */
ch = 0;
ch = ReadEEPROMonebyte( FIR_PHONE_NUMBER_ADDR );
if( ch > 32 )
{
WriteEEPROMonebyte( FIR_PHONE_NUMBER_ADDR, 1 );
DelayCount = 0;
while( DelayCount < 100 );
ch = ReadEEPROMonebyte( FIR_PHONE_NUMBER_ADDR + 1 );
if( ch < 0x30 || ch > 0x39 )
{
WriteEEPROMonebyte( FIR_PHONE_NUMBER_ADDR+1, '1' );
DelayCount = 0;
while( DelayCount < 100 );
}
}
ch = 0;
ch = ReadEEPROMonebyte( SEC_PHONE_NUMBER_ADDR );
if( ch > 32 )
{
WriteEEPROMonebyte( SEC_PHONE_NUMBER_ADDR, 1 );
DelayCount = 0;
while( DelayCount < 100 );
ch = ReadEEPROMonebyte( SEC_PHONE_NUMBER_ADDR + 1 );
if( ch < 0x30 || ch > 0x39 )
{
WriteEEPROMonebyte( SEC_PHONE_NUMBER_ADDR+1, '1' );
DelayCount = 0;
while( DelayCount < 100 );
}
}
ch = ReadEEPROMonebyte( SEC_PHONE_NUMBER_ADDR );
if( ch > 32 )
{
WriteEEPROMonebyte( SEC_PHONE_NUMBER_ADDR, 1 );
DelayCount = 0;
while( DelayCount < 100 );
ch = ReadEEPROMonebyte( SEC_PHONE_NUMBER_ADDR + 1 );
if( ch < 0x30 || ch > 0x39 )
{
WriteEEPROMonebyte( SEC_PHONE_NUMBER_ADDR+1, '1' );
DelayCount = 0;
while( DelayCount < 100 );
}
}
ch = ReadEEPROMonebyte( DISCONNECT_TIME_ADDR );
if( ch < 1 || ch > 10 )
{
WriteEEPROMonebyte( DISCONNECT_TIME_ADDR, 5 );
DelayCount = 0;
while( DelayCount < 100 );
}
ch = ReadEEPROMonebyte( SMS_SEND_TINE_ADDR );
if( ch < 1 || ch > 3 )
{
WriteEEPROMonebyte( SMS_SEND_TINE_ADDR, 1 );
DelayCount = 0;
while( DelayCount < 100 );
}
ch = ReadEEPROMonebyte( NETDOG_POWER_OPEN_ADDR );
if( ch != 1 && ch != 0 )
{
WriteEEPROMonebyte( NETDOG_POWER_OPEN_ADDR, 0 );
DelayCount = 0;
while( DelayCount < 100 );
}
ch = ReadEEPROMonebyte( NETDOG_CONNECT_OPEN_ADDR );
if( ch != 1 && ch != 0 )
{
WriteEEPROMonebyte( NETDOG_CONNECT_OPEN_ADDR, 0 );
DelayCount = 0;
while( DelayCount < 100 );
}
ch = ReadEEPROMonebyte( USE_NAME_OPEN_ADDR );
if( ch != 1 && ch != 0 )
{
WriteEEPROMonebyte( NETDOG_CONNECT_OPEN_ADDR, 0 );
DelayCount = 0;
while( DelayCount < 100 );
}
DelayCount = 0;
NetFoxPowerOpenFlag = ReadEEPROMonebyte( NETDOG_POWER_OPEN_ADDR );
NetFoxConnectOpenFlag = ReadEEPROMonebyte( NETDOG_CONNECT_OPEN_ADDR );
NetFoxUseNameOpenFlag = ReadEEPROMonebyte( USE_NAME_OPEN_ADDR );
EEPR_AT_data = ReadEEPROMonebyte( SMS_SEND_TINE_ADDR );
EEPR_DT_data = ReadEEPROMonebyte( DISCONNECT_TIME_ADDR );
GetFirPhoneNo( Phone1, 0 );
GetSecPhoneNo( Phone2, 0 );
memset( Name, 0, 64 );
if( ReadEEPROMonebyte(NETDOG_NAME_ADDR) > 32 )
{
strcpy( Name, "0000" );
}
else
{
GetStringFromEEPROM(Name, NETDOG_NAME_ADDR );
}
}
/***********************************************************************************************************/
/***********************************************************************************************************/
/*-----------------------------------------
StrCatChar
工具函数,串尾接一个字符
------------------------------------------*/
void StrCatChar( unsigned char *str, unsigned char ch )
{
int len;
len = strlen( str );
if( len < LINE_LENGTH - 1 )
{
str[len] = ch;
str[len+1] = 0;
}
}
/*-----------------------------------------
StrStr
工具函数,串字符串判断
------------------------------------------*/
unsigned char StrStr( unsigned char *str1, unsigned char *str2 )
{
int i, j;
i = 0;
j = 0;
while(str1[i] != 0 )
{
while( str2[j] != 0 )
{
if(str1[i+j] != str2[j])
break;
j ++;
}
if( str2[j] == 0)
return 1;
i ++;
j = 0;
}
return 0;
}
/*-----------------------------------------
xStrstrFirst
工具函数,串首字符串判断
------------------------------------------*/
/*
unsigned char xStrstrFirst(unsigned char *str1, unsigned char *str2)
{
int i, len2;
len2 = strlen(str2);
for(i = 0; i < len2; i ++)
{
if(str1[i] != str2[i])
return 0;
}
return 1;
}
*/
int GetConcentFromString( unsigned char *str, unsigned char mark1, unsigned char mark2, unsigned char *ret )
{
int i, len, temp;
len = strlen(str);
for( i = 0; i < len; i ++ )
{
if (str[i] == mark1)
{
*ret = (unsigned char)i +1;
temp = i +1;
}
if( str[i] == mark2)
{
return i-temp;
}
}
return 0;
}
void ConventPhoneNo2USC2(unsigned char *src, unsigned char *tar )
{
int i;
int len;
len = strlen( src );
for ( i= 0; i < len; i ++ )
{
/* USC2 mode */
tar[i*4] = '0';
tar[i*4+1] = '0';
tar[i*4+2] = '3';
tar[i*4+3] = src[i];
tar[i*4+4] = 0;
}
}
/*-----------------------------------------
JudgePCString
判断来自PC的指令是什么内容
------------------------------------------*/
void JudgePCString( )
{
int i, j, len;
unsigned char mark;
unsigned char ch;
if( PCRxBuffer[0] == 0 )
return ;
for (i = 0; i < TOTAL_CMD_NUMBER; i ++)
{
if( StrStr(PCRxBuffer, pc_cmd[i]) )
{
mark = 0;
switch(i)
{
case 0:
DelayCount = 0;
strcpy( ModuleTxBuffer, Module_AT[8] );
break;
case 2: /*写第一个紧急号码*/
if( ModuleWaitFlag == 1 )
{
strcpy(PCTxBuffer, "NF:Busy\r\n");
break;
}
len = GetConcentFromString( PCRxBuffer, '(', ')', &mark );
memset( ModuleTxBuffer, 0, LINE_LENGTH );
DelayCount = 0;
strcpy( ModuleTxBuffer, Sms_PowerOff1 );
ConventPhoneNo2USC2( Phone1, ModuleTxBuffer +9 );
strcat( ModuleTxBuffer, "\"\r\n");
//strcat( ModuleTxBuffer, Sms_PowerOff3 );
j = strlen( ModuleTxBuffer );
memcpy( ModuleTxBuffer + j, PCRxBuffer+mark, len );
StrCatChar( ModuleTxBuffer, 0x1a );
Sms_edit_mode = 1;
strcpy(PCTxBuffer, dog_reply[i]);
break;
case 3:
if( ModuleWaitFlag == 1 )
{
strcpy(PCTxBuffer, "NF:Busy\r\n");
break;
}
len = GetConcentFromString( PCRxBuffer, '(', ')', &mark );
memset( ModuleTxBuffer, 0, LINE_LENGTH );
DelayCount = 0;
strcpy( ModuleTxBuffer, Sms_PowerOff1 );
ConventPhoneNo2USC2( Phone2, ModuleTxBuffer +9 );
strcat( ModuleTxBuffer, "\"\r\n");
//strcat( ModuleTxBuffer, Sms_PowerOff3 );
j = strlen( ModuleTxBuffer );
memcpy( ModuleTxBuffer + j, PCRxBuffer+mark, len );
StrCatChar( ModuleTxBuffer, 0x1a );
Sms_edit_mode = 1;
strcpy(PCTxBuffer, dog_reply[i]);
break;
case 4:/*读取第一个紧急号码*/
len = GetConcentFromString( PCRxBuffer, '(', ')', &mark );
memset( Lcd_buffer, 0x20, 21 );
memcpy( Lcd_buffer, PCRxBuffer+mark, len );
Display_LCD1( Lcd_buffer );
strcpy(PCTxBuffer, dog_reply[i]);
break;
case 5:
len = GetConcentFromString( PCRxBuffer, '(', ')', &mark );
memset( Lcd_buffer, 0x20, 21 );
memcpy( Lcd_buffer, PCRxBuffer+mark, len );
Display_LCD2( Lcd_buffer );
strcpy(PCTxBuffer, dog_reply[i]);
break;
case 6:
LCDRefreshFlag = 1;
LedFlashFlag = 0;
strcpy(PCTxBuffer, dog_reply[i]);
break;
case 7:
strcpy(PCTxBuffer, dog_reply[i]);
if( NetFoxPowerOpenFlag && NetFoxConnectOpenFlag )
{
strcat( PCTxBuffer, "3)\r\n" );
}
else if( NetFoxPowerOpenFlag )
{
strcat( PCTxBuffer, "1)\r\n" );
}
else if( NetFoxConnectOpenFlag )
{
strcat( PCTxBuffer, "2)\r\n" );
}
else
{
strcat( PCTxBuffer, "0)\r\n" );
}
break;
case 8:
Display_LCD1( Alarm_Title );
len = GetConcentFromString( PCRxBuffer, '(', ')', &mark );
memset( Lcd_buffer, 0x20, 21 );
memcpy( Lcd_buffer, PCRxBuffer+mark, len );
Display_LCD2( Lcd_buffer );
strcpy(PCTxBuffer, dog_reply[i]);
LedFlashFlag = 3;
break;
case 9:
LCDRefreshFlag = 1;
LedFlashFlag = 0;
strcpy(PCTxBuffer, dog_reply[i]);
break;
case 11:
strcpy(PCTxBuffer, dog_reply[i]);
GetFirPhoneNo(PCTxBuffer + strlen(dog_reply[i]), 0 );
strcat(PCTxBuffer, ")\r\n" );
break;
case 12:
strcpy(PCTxBuffer, dog_reply[i]);
GetSecPhoneNo(PCTxBuffer + strlen(dog_reply[i]), 0 );
strcat(PCTxBuffer, ")\r\n" );
break;
case 13:
len = GetConcentFromString( PCRxBuffer, '(', ')', &mark );
SetFirPhoneNo(PCRxBuffer+mark, len);
memset( Phone1, 0, 32 );
memcpy( Phone1, PCRxBuffer+mark, len );
strcpy(PCTxBuffer, dog_reply[i]);
break;
case 14:
len = GetConcentFromString( PCRxBuffer, '(', ')', &mark );
SetSecPhoneNo(PCRxBuffer+mark, len);
memset( Phone2, 0, 32 );
memcpy( Phone2, PCRxBuffer+mark, len );
strcpy(PCTxBuffer, dog_reply[i]);
break;
case 15:
len = GetConcentFromString( PCRxBuffer, '(', ')', &mark );
EEPR_DT_data = *(PCRxBuffer+mark);
SetDisconnectTime( *(PCRxBuffer+mark)-0x30 );
strcpy(PCTxBuffer, dog_reply[i]);
break;
case 16:
strcpy(PCTxBuffer, dog_reply[i]);
ch = GetDisconnectTime( );
StrCatChar(PCTxBuffer, ch+0x30);
strcat(PCTxBuffer, ")\r\n" );
break;
case 17:
len = GetConcentFromString( PCRxBuffer, '(', ')', &mark );
EEPR_AT_data = *(PCRxBuffer+mark);
SetSMSSendTimes( *(PCRxBuffer+mark)-0x30 );
strcpy(PCTxBuffer, dog_reply[i]);
break;
case 18:
strcpy(PCTxBuffer, dog_reply[i]);
ch = GetSMSSendTimes( );
//ch = ReadEEPROMonebyte( NETDOG_CONNECT_OPEN_ADDR );
StrCatChar(PCTxBuffer, ch+0x30);
strcat(PCTxBuffer, ")\r\n" );
break;
case 19:
WriteEEPROMonebyte( NETDOG_POWER_OPEN_ADDR, 1 );
NetFoxPowerOpenFlag = 1;
if( NetFoxConnectOpenFlag == 1 )
Display_LCD( Work_Title );
else
Display_LCD( WorkAC_Title );
strcpy(PCTxBuffer, dog_reply[i]);
PowerOffDelayCount = 0;
break;
case 20:
WriteEEPROMonebyte( NETDOG_POWER_OPEN_ADDR, 0 );
NetFoxPowerOpenFlag = 0;
if(NetFoxConnectOpenFlag == 0 )
{
Display_LCD( Wait_Title );
}
else
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -