main.c

来自「使用CYAN单片机的ECOG1开发板连接SIM300C的GSM模块开发的短信收发」· C语言 代码 · 共 307 行

C
307
字号
/******************************************************************************
MODE:		AML--#GPS+accelerator+compass
MCU:		Cyan eCOG1k
COMPILER:	CyanIDE v1.41
FILE NAME:	main C source code files
******************************************************************************/
#define main_code

/******************************************************************************
Project level include files.
******************************************************************************/
#include <ecog.h>
#include <ecog1.h>
#include "gps.h"
#include "key_scan.h"
#include "cyan_base_driver.h"

/******************************************************************************
Global variables.
******************************************************************************/
unsigned int	led_timer_count = 0;
unsigned int	a_baud_save = 162;

char			send_latitude[10];
char			send_latitude_aspect[2];
char			send_longitude[11];
char			send_longitude_aspect[2];
char			send_antenna_height[9];
char			send_gps_state[2];

char			receive_temp_buf[20];
unsigned int	receive_p;
/******************************************************************************
Private constants and types.
******************************************************************************/
#define RESPONSE_TIME		1000//ms
#define CTRL_Z 				26
/******************************************************************************
Declaration of static functions.
******************************************************************************/
void SIM300C_initialization(void);
/******************************************************************************
main functions.
******************************************************************************/
int main(int argc, char* argv[])
{
	unsigned int i,key_value = 0;
	
	timer_initialization();
	uart_initialization();
	gps_initialization();
	
	delay_ms(5000);
	delay_ms(5000);
	
	SIM300C_initialization();
	delay_ms(1000);
	SIM300C_initialization();
	delay_ms(1000);
	
	fd.tim.int_en1.cnt1_exp = 1;		//LED3 flash indicate normal operation,
										//Timer1 control it.
	while(1)
	{	
		if(GPS_RECEIVE_DONE_FLAG)
		{
			if(GPGSA.position_MSG[0] < '2')
			{
				rg.io.gp0_3_out = IO_GP0_3_OUT_SET0_MASK;		//LED0 indicate GPS in position.
			}
			else
			{
				rg.io.gp0_3_out = IO_GP0_3_OUT_CLR0_MASK;
			}
			
			GPS_RECEIVE_DONE_FLAG = 0;
			for(i = 0;i < 2;i++)
			{
				send_gps_state[i] = GPGSA.position_MSG[i];
				if(send_gps_state[i] == ',')
					send_gps_state[i] = 0;
			}
			for(i = 0;i < 10;i++)
			{
				send_latitude[i] = GPGGA.latitude[i];
				if(send_latitude[i] == ',')
					send_latitude[i] = 0;
			}
			for(i = 0;i < 2;i++)
			{
				send_latitude_aspect[i] = GPGGA.latitude_aspect[i];
				if(send_latitude_aspect[i] == ',')
					send_latitude_aspect[i] = 0;
			}
			for(i = 0;i < 11;i++)
			{
				send_longitude[i] = GPGGA.longitude[i];
				if(send_longitude[i] == ',')
					send_longitude[i] = 0;
			}
			for(i = 0;i < 2;i++)
			{
				send_longitude_aspect[i] = GPGGA.longitude_aspect[i];
				if(send_longitude_aspect[i] == ',')
					send_longitude_aspect[i] = 0;
			}
			for(i = 0;i < 9;i++)
			{
				send_antenna_height[i] = GPGGA.antenna_height[i];
				if(send_antenna_height[i] == ',')
					send_antenna_height[i] = 0;
			}
		}
		
		key_value = key_scan();
		if(	(key_value == KEY1_PRESS) 
			|| (key_value == KEY2_PRESS)
			|| (key_value == KEY3_PRESS) )		//send GPS msg
		{
			rg.io.gp0_3_out = IO_GP0_3_OUT_CLR1_MASK;		//LED1 indicate send message.
			switch(key_value)
			{
				case KEY3_PRESS :	
					printf("AT+CMGS=\"13416913930\"\r\n");			//david:13416913930
					break;
			
				case KEY2_PRESS :	
					printf("AT+CMGS=\"13829245043\"\r\n");			//hoson:13829245043
					break;
			
				case KEY1_PRESS :	
					printf("AT+CMGS=\"13147501639\"\r\n");			//Visitor:13147501639
					break;
			
				default :
					break;
			}
			delay_ms(RESPONSE_TIME);
				
			//printf("Hello Evan.zou");
			//delay_ms(RESPONSE_TIME);
			switch(send_gps_state[0])
			{
				case '1' :
				{
					printf("Non position message!\r\n");
					delay_ms(RESPONSE_TIME);
					printf("Please check GPS antenna!");
					delay_ms(RESPONSE_TIME);
				}
				break;
				
				case '2' :
				{
					printf("You are in ZMT.\r\n");
					delay_ms(RESPONSE_TIME);
					printf("Position message : 2D,\r\n");
					delay_ms(RESPONSE_TIME);
					printf("Latitude :\r\n");
					delay_ms(RESPONSE_TIME);
					printf("  %s%s,\r\n",&send_latitude_aspect[0],&send_latitude[0]);
					delay_ms(RESPONSE_TIME);
					printf("longitude :\r\n");
					delay_ms(RESPONSE_TIME);
					printf("  %s%s .",&send_longitude_aspect[0],&send_longitude[0]);
					delay_ms(RESPONSE_TIME);
					
				}
				break;
				
				case '3' :
				{
					printf("You are in ZMT.\r\n");
					delay_ms(RESPONSE_TIME);
					printf("Position message : 3D,\r\n");
					delay_ms(RESPONSE_TIME);
					printf("Latitude :\r\n");
					delay_ms(RESPONSE_TIME);
					printf("  %s%s,\r\n",&send_latitude_aspect[0],&send_latitude[0]);
					delay_ms(RESPONSE_TIME);
					printf("longitude :\r\n");
					delay_ms(RESPONSE_TIME);
					printf("  %s%s,\r\n",&send_longitude_aspect[0],&send_longitude[0]);
					delay_ms(RESPONSE_TIME);
					printf("Height :\r\n");
					printf("  %sM.",&send_antenna_height[0]);
					delay_ms(RESPONSE_TIME);
				}
				break;
				
				default	:
				{
					printf("GPS mode error!\r\n");
					delay_ms(RESPONSE_TIME);
					printf("Please check it!");
					delay_ms(RESPONSE_TIME);
				}
				break;
			}
			putchar(CTRL_Z); //CTRL+Z = 26
			delay_ms(2000);
			putchar(CTRL_Z); //CTRL+Z = 26
			delay_ms(5000);
			delay_ms(5000);
			
			while(key_scan())
				;
			
			rg.io.gp0_3_out = IO_GP0_3_OUT_SET1_MASK;
		}
		
		if(key_scan() == KEY4_PRESS)		//call with a number.
		{
			rg.io.gp0_3_out = IO_GP0_3_OUT_CLR1_MASK;
			
			printf("ATD13790127305;\r\n");
			delay_ms(RESPONSE_TIME);
			while(key_scan())
				;
			for(i = 0;i < 600;i++)
			{
				delay_ms(50);
				if(key_scan() == KEY4_PRESS) break;
			}
			
			printf("ATH\r\n");
			delay_ms(RESPONSE_TIME);
			
			while(key_scan())
				;
			rg.io.gp0_3_out = IO_GP0_3_OUT_SET1_MASK;
		}
	}
}

/******************************************************************************
SIM300C initialization
******************************************************************************/
void SIM300C_initialization(void)
{
	sim300C_CTS_Dis = 1;
	sim300C_RTS_En = 1;
	
	sim300C_RTS_Clr = 1;
	//sim300C send MSG initialization.
	printf("AT+CMGF=1\r\n");
	delay_ms(RESPONSE_TIME);
	
	printf("AT+CSCS=\"GSM\"\r\n");
	delay_ms(RESPONSE_TIME);
	
	printf("AT+CSCA=\"+8613800769500\",145\r\n");
	delay_ms(RESPONSE_TIME);
	
	printf("AT+CSMP=17,167,0,241\r\n");
	delay_ms(RESPONSE_TIME);
}
/******************************************************************************
Timing synchrony.
******************************************************************************/



/******************************************************************************
** timer1 ISR			@ 5MHz
** interrupt time = 0.2 * Divider * (loading value + 1) = 1ms.
** 				  = 0.2 * 8 * (12499 + 1) = 20ms.
******************************************************************************/
void __irq_entry timer1_isr(void)			//int time = 63ms
{
	fd.tim.int_clr1.cnt1_exp = 1;
	
	GPS_error_count++;
	if(GPS_error_count >= 250)
	{
		GPS_error_count = 0;
		send_gps_state[0] = '0';
	}
	
	led_timer_count++;
	if(led_timer_count >= 100)
	{
		led_timer_count = 0;
		fd.io.gp0_3_out.clr2 = 1;
	}
	else fd.io.gp0_3_out.set2 = 1;
	//rg.io.gp0_3_out = IO_GP0_3_OUT_CLR0_MASK | IO_GP0_3_OUT_SET0_MASK;
}

/******************************************************************************
** timer2 ISR		@ 5MHz
** interrupt time = 0.2 * Divider * (loading value + 1) = 1ms.
** 				  = 0.2 * 4 * (1249 + 1) = 1ms.
******************************************************************************/
void __irq_entry timer2_isr(void)
{
	fd.tim.int_clr1.cnt2_exp = 1;			// Clear Timer2 interrupt flag
	
    //rg.io.gp0_3_out = IO_GP0_3_OUT_CLR1_MASK | IO_GP0_3_OUT_SET1_MASK;
}

/******************************************************************************
end
******************************************************************************/


⌨️ 快捷键说明

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