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

📄 plc_demo.c

📁 该原代码应用在cpu(st89le516AD+)上,控制GPRS模块sim100,通过检测系统状态(通电状态,运行状态,AD采样值),通过GPRS模块的短信功能,实现无线报警.
💻 C
📖 第 1 页 / 共 5 页
字号:
						Display_LCD( WorkLink_Title );
					}
					strcpy(PCTxBuffer, dog_reply[i]);
					
					break;	
				case 21:
					WriteEEPROMonebyte( NETDOG_CONNECT_OPEN_ADDR, 1 );
					NetFoxConnectOpenFlag = 1;
					if( NetFoxPowerOpenFlag == 1 )
						Display_LCD( Work_Title );
					else
						Display_LCD( WorkLink_Title );
					
					strcpy(PCTxBuffer, dog_reply[i]);
					PCConnectCount = 0;

					break;
				case 22:
					WriteEEPROMonebyte( NETDOG_CONNECT_OPEN_ADDR, 0 );
					NetFoxConnectOpenFlag = 0;
					if(NetFoxPowerOpenFlag == 0 )
					{
						Display_LCD( Wait_Title );
					}
					else
					{
						Display_LCD( WorkAC_Title );
					}
					strcpy(PCTxBuffer, dog_reply[i]);



					
					break;	
				case 23:
					len = GetConcentFromString( PCRxBuffer, '(', ')', &mark );

					memset( ModuleTxBuffer, 0, LINE_LENGTH );
					DelayCount = 0;
					strcpy( ModuleTxBuffer, "AT+CSCA=\"" );
					
					memcpy( ModuleTxBuffer+9, PCRxBuffer+mark, len ); 
					strcat( ModuleTxBuffer, "\",145\r\n");
					
					strcpy(PCTxBuffer, dog_reply[i]);
					
					
					break;
				case 24:
					strcpy( ModuleTxBuffer, "AT+CSCA?\r\n" );
					
					break;	
				case 25:
					DelayCount = 0;
					strcpy( ModuleTxBuffer, "AT+CSCS=\"GSM\"\r\n" );
					strcpy(PCTxBuffer, "NF:OK\r\n" );
					
					break;
				case 26:
					DelayCount = 0;
					strcpy( ModuleTxBuffer, "AT+CSCS=\"UCS2\"\r\n" );
					strcpy(PCTxBuffer, "NF:OK\r\n" );
					
					break;	
				case 27:
					strcpy(PCTxBuffer, dog_reply[i]);
//					WDTD = 0x10;
//					WDRE = 1;
//					WDT  = 1;
//					SWDT = 1;
//					WDOUT= 1;
					
					break;
				case 28:
					len = GetConcentFromString( PCRxBuffer, '(', ')', &mark );
					if( len > 32 )
						len = 32;
					WriteEEPROMonestring( PCRxBuffer+mark, len, NETDOG_NAME_ADDR );
					memcpy( Name, PCRxBuffer+mark, len  );
					Name[len] = 0;
					strcpy(PCTxBuffer, dog_reply[i]);
					
					break;
				case 29:
					strcpy(PCTxBuffer, dog_reply[i]);
					GetStringFromEEPROM(PCTxBuffer + strlen(dog_reply[i]), NETDOG_NAME_ADDR );
					strcat(PCTxBuffer, ")\r\n" );
					break;
				case 30:
					NetFoxUseNameOpenFlag = 1;
					WriteEEPROMonebyte(USE_NAME_OPEN_ADDR, 1);
					strcpy(PCTxBuffer, dog_reply[i]);
					
					break;
				case 31:
					NetFoxUseNameOpenFlag = 0;
					WriteEEPROMonebyte(USE_NAME_OPEN_ADDR, 0);
					strcpy(PCTxBuffer, dog_reply[i]);
					
					break;
				case 32:
					len = GetConcentFromString( PCRxBuffer, '(', ')', &mark );
					if( len > 16 )
						len = 16;
					WriteEEPROMonestring( PCRxBuffer+mark, len, NETDOG_SERIAL_NO_ADDR );
					strcpy(PCTxBuffer, dog_reply[i]);
					
					break;
				case 33:
					strcpy(PCTxBuffer, dog_reply[i]);
					GetStringFromEEPROM(PCTxBuffer + strlen(dog_reply[i]), NETDOG_SERIAL_NO_ADDR );
					strcat(PCTxBuffer, ")\r\n" );
					
					break;
				default:
					strcpy(PCTxBuffer, dog_reply[i]);
					break;
			}
			PCRxBuffer[0] = 0;
			PCReceiveCount = 0;
			
			PCConnectCount = 0;

			if( ConnectSmsHasSent == 1 )
			{	
				ConnectSmsHasSent = 0;
				RePCDisconnectFlag = 1;
				LCDRefreshFlag = 1;
			}
			SendStringToPC();
			return;
		}
	}
	strcpy(PCTxBuffer, "ERROR COMMAND\r\n");
	PCRxBuffer[0] = 0;
	PCReceiveCount = 0;
	SendStringToPC();
}


/*-----------------------------------------
JudgeModuleString
判断来自模块的字符串是什么
------------------------------------------*/
void JudgeModuleString( )
{
	unsigned char i, j, k;
	

	if(ModuleRxBuffer[0] == 0)
		return;

	switch( Initialized )
	{
		case 0:
		case 1:
		case 2:
		case 3:
		case 4:
		case 7:
		case 6:
			if( StrStr(ModuleRxBuffer, module_reply[0]) )
			{
				Initialized ++;
				ModuleWaitFlag = 0;
			}
			break;
		case 5:
			if( StrStr(ModuleRxBuffer, module_reply[1]) )
			{

				ModuleWaitFlag = 0;
				Initialized ++;
			}
			else if( StrStr(ModuleRxBuffer, "ERROR") )
			{
				strcpy( PCTxBuffer, "NF:NOSimCard\r\n" );
				Display_LCD2( "NO SIMCARD.......   " );
				LedFlashFlag = 1;
				SendStringToPC();
			}
			break;
		case 8:
			if( StrStr(ModuleRxBuffer, module_reply[2]) )
			{
				ModuleWaitFlag = 0;
				Initialized ++;
			}
			break;
		default:
			if( StrStr( ModuleRxBuffer, module_reply[3]) )
			{
				ModuleWaitFlag = 0;
				Initialized ++;
			}
			else if( StrStr( ModuleRxBuffer, ">") )
			{
				ModuleWaitFlag = 0;
				Initialized ++;
			}
			else if( StrStr( ModuleRxBuffer, module_reply[2]) )
			{
				strcpy(PCTxBuffer, "NF:CSQ: ");
				strcat( PCTxBuffer, ModuleRxBuffer );
				SendStringToPC();
			}
			else if( StrStr( ModuleRxBuffer, module_reply[4]) )
			{
//				strcpy(PCTxBuffer, dog_reply[17]);
//				strcat( PCTxBuffer, ModuleRxBuffer );
//				SendStringToPC();
				//+CMTI:<mem>,<index>
				//get index
				strcpy( ModuleTxBuffer, "AT+CMGR=" );
				i = strlen(ModuleRxBuffer);
				i --;
				j = 0;
				while( ModuleRxBuffer[i] != ',' && i > 0)
				{
					i --;
					j ++;
				}
				for( k = 0; k < j; k ++ )
				{
					ModuleTxBuffer[8+k] = ModuleRxBuffer[i+k];
				}
				ModuleTxBuffer[8+k] = 0;
				ModuleTxBuffer[8+k+1] = '\r';
				ModuleTxBuffer[8+k+2] = '\n';
			}
			else
			{
				strcpy( PCTxBuffer, ModuleRxBuffer );
				SendStringToPC();
			}
			break;
	}

	ModuleRxBuffer[0] = 0; 
	ModuleReceiveCount = 0;
}


/*-----------------------------------------
SendStringToPC
发送字串到PC
------------------------------------------*/
void SendStringToPC(  )
{
	PCTxCount = 0;
	if(PCTxBuffer[PCTxCount] == 0 )
	{
		PCTxBuffer[0] = 0;
		return;
	}

	TI = 1;
}


/*-----------------------------------------
SendStringToModule
发送字串到模块
------------------------------------------*/
void SendStringToModule(  )
{
	if(ModuleTxBuffer[ModuleTxCount] == 0)
	{
		ModuleTxCount = 0;
		memset( ModuleTxBuffer, 0, LINE_LENGTH );
		Sms_edit_mode = 0;
		return;
	}
	
	if( SendByteToModule(ModuleTxBuffer[ModuleTxCount]) )
	{
		if(ModuleTxBuffer[ModuleTxCount] == 0x0a)
		{
			ModuleWaitFlag = 1;
			DelayCount = 0;
			ModuleTxCount ++;
		}
		else if( ModuleTxBuffer[ModuleTxCount] == 0x1a )
		{
			ModuleWaitFlag = 1;
			DelayCount = 0;
			ModuleTxCount = 0;
			ModuleTxBuffer[0] = 0;
			Sms_edit_mode = 0;
		}
		else
		{
			ModuleTxCount ++;
		}
	}
}




/*EEPROM function */
unsigned char ReadEEPROMonebyte(unsigned char addr)
{
	unsigned char xsla;
	unsigned char xsuba;
	unsigned char xsuba1;
	unsigned char ret;

	xsla = EEPRom_SLA;
	xsuba= EEPRom_SUBA;
	xsuba1 = addr;
	return IRcvChar(xsla,xsuba,xsuba1,ret);
}
void WriteEEPROMonebyte( unsigned char addr, unsigned char ch )
{
	unsigned char xsla;
	unsigned char xsuba;
	unsigned char xsuba1;

	/* less than 32*/
	xsla = EEPRom_SLA;
	xsuba= EEPRom_SUBA;
	xsuba1=addr;
	ISendChar(xsla,xsuba,xsuba1,ch);
}

void WriteEEPROMonestring( unsigned char *str, int len, unsigned char addr )
{
	unsigned char ch;
	unsigned char xsla;
	unsigned char xsuba;
	unsigned char xsuba1;
	int i;
	/* less than 32*/
	xsla = EEPRom_SLA;
	xsuba= EEPRom_SUBA;
	xsuba1=addr;
	ISendChar(xsla,xsuba,xsuba1,(unsigned char)len);
	for ( i= 0; i < len; i ++ )
	{
		DelayCount = 0;
		while( DelayCount < 100 );
		ISendChar(xsla,xsuba,xsuba1+i+1,str[i]);
	}
}
unsigned char GetStringFromEEPROM( unsigned char *str, unsigned char addr )
{
	unsigned char xsla;
	unsigned char xsuba;
	unsigned char xsuba1;
	unsigned char len;
	int i;

	xsla = EEPRom_SLA;
	xsuba= EEPRom_SUBA;
	xsuba1=addr;
	len = IRcvChar(xsla,xsuba,xsuba1,len);
	for ( i= 0; i < len; i ++ )
	{
		str[i] = IRcvChar(xsla,xsuba,xsuba1+1+i,str[i]);
		str[i+1] = 0;
	}
	
	return len;
}

void SetFirPhoneNo( unsigned char *str, int len )
{
	unsigned char ch;
	unsigned char xsla;
	unsigned char xsuba;
	unsigned char xsuba1;
	int i;
	/* less than 32*/
	xsla = EEPRom_SLA;
	xsuba= EEPRom_SUBA;
	xsuba1=FIR_PHONE_NUMBER_ADDR;
	ISendChar(xsla,xsuba,xsuba1,(unsigned char)len);
	for ( i= 0; i < len; i ++ )
	{
		DelayCount = 0;
		while( DelayCount < 100 );
		ISendChar(xsla,xsuba,xsuba1+i+1,str[i]);
	}
}
void SetSecPhoneNo( unsigned char *str, int len )
{
	/* less than 32*/
	unsigned char ch;
	unsigned char xsla;
	unsigned char xsuba;
	unsigned char xsuba1;
	int i;
	/* less than 32*/
	xsla = EEPRom_SLA;
	xsuba= EEPRom_SUBA;
	xsuba1=SEC_PHONE_NUMBER_ADDR;
	ISendChar(xsla,xsuba,xsuba1,(unsigned char)len);
	for ( i= 0; i < len; i ++ )
	{
		DelayCount = 0;
		while( DelayCount < 100 );
		ISendChar(xsla,xsuba,xsuba1+i+1,str[i]);
	}
}
unsigned char GetFirPhoneNo( unsigned char *str, const char mode )
{
	unsigned char xsla;
	unsigned char xsuba;
	unsigned char xsuba1;
	unsigned char len;
	int i;

	xsla = EEPRom_SLA;
	xsuba= EEPRom_SUBA;
	xsuba1=FIR_PHONE_NUMBER_ADDR;
	len = IRcvChar(xsla,xsuba,xsuba1,len);
	for ( i= 0; i < len; i ++ )
	{
		if( mode == 1)
		{
			/* USC2 mode */
			str[i*4] = '0';
			str[i*4+1] = '0';
			str[i*4+2] = '3';
			str[i*4+3] = IRcvChar(xsla,xsuba,xsuba1+1+i,str[i*4+3]);
			str[i*4+4] = 0;
		}
		else
		{
			str[i] = IRcvChar(xsla,xsuba,xsuba1+1+i,str[i]);
			str[i+1] = 0;
		}
	}
	
	return len;
}
unsigned char GetSecPhoneNo( unsigned char *str, const char mode )
{
	unsigned char xsla;
	unsigned char xsuba;
	unsigned char xsuba1;
	unsigned char len;
	int i;

	xsla = EEPRom_SLA;
	xsuba= EEPRom_SUBA;
	xsuba1=SEC_PHONE_NUMBER_ADDR;
	len = IRcvChar(xsla,xsuba,xsuba1,len);
	for ( i= 0; i < len; i ++ )
	{
		if( mode == 1)
		{
			/* USC2 mode */
			str[i*4] = '0';
			str[i*4+1] = '0';
			str[i*4+2] = '3';
			str[i*4+3] = IRcvChar(xsla,xsuba,xsuba1+1+i,str[i*4+3]);
			str[i*4+4] = 0;
		}
		else
		{
			str[i] = IRcvChar(xsla,xsuba,xsuba1+1+i,str[i]);
			str[i+1] = 0;
		}
	}
	
	return len;
}

void SetDisconnectTime( unsigned char ch )
{
	unsigned char i, ch1;
	unsigned char xsla;
	unsigned char xsuba;
	unsigned char xsuba1;

	xsla = EEPRom_SLA;
	xsuba= EEPRom_SUBA;
	xsuba1=DISCONNECT_TIME_ADDR;
	ISendChar(xsla,xsuba,xsuba1,ch);
	
}
unsigned char GetDisconnectTime( )
{
	unsigned char xsla;
	unsigned char xsuba;
	unsigned char xsuba1;
	unsigned char len;

	xsla = EEPRom_SLA;
	xsuba= EEPRom_SUBA;
	xsuba1=DISCONNECT_TIME_ADDR;
	len = IRcvChar(xsla,xsuba,xsuba1,len);
	return len;
}
void SetSMSSendTimes( unsigned char ch )
{
	unsigned char i, ch1;		
	unsigned char xsla;
	unsigned char xsuba;
	unsigned char xsuba1;

	xsla = EEPRom_SLA;
	xsuba= EEPRom_SUBA;
	xsuba1=SMS_SEND_TINE_ADDR;
	ISendChar(xsla,xsuba,xsuba1,ch);
}
unsigned char GetSMSSendTimes()
{
	unsigned char xsla;
	unsigned char xsuba;
	unsigned char xsuba1;

⌨️ 快捷键说明

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