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 + -
显示快捷键?