• 大小: 10KB
    文件类型: .c
    金币: 1
    下载: 0 次
    发布日期: 2021-06-08
  • 语言: C/C++
  • 标签: GSM  GPS  c语言  单片机  

资源简介

GSM发短信 GPS 单片机C语言实现 代码实现了GSM的发短信功能以及GPS读取数据、数据处理

资源截图

代码片段和文件信息

#include 
#include 
#define  uchar unsigned char
#define  uint  unsigned int

#define  mclk   12000000
#pragma interrupt_handler uart_rx:12
uchar flag=0;
/*****GPS取数据变量参数定义*****/
uchar  comma;//逗号变量存储
//////////以下4个数组最后一个作为0,字符串结束标志/////////
uchar  Time[11];//时间hour-2 bytes minute-2 bytessecond-6 bytes
uchar  Data_YMD[7]; //日期
uchar  Longitude[11];//经度
uchar  Latitude[10];//纬度

////////时分秒///////////////
uchar  hour[3];//最后一个作为0,字符串结束标志显示时使用
uchar  minute[3];
uchar  second[7];

////////日月年///////////////
uchar  day[3];//最后一个作为0,字符串结束标志
uchar  month[3];
uchar  year[3];

////////////////////////////////////////////////////////////
uchar count_Tcount_Laticount_Longicount_Data;//串口接收 时间 纬度 经度 日期 接收数组计数
uchar num_comma;//逗号计数
uchar GPS_state;//GPS资料可用状态
uchar N_or_SE_or_W;//半球标志数据存储
uchar frame_flag;//接收到帧头标志
uchar data_flag;//接收数据标志
uchar frame_header[5];
uchar overflow_count;//定时器0溢出中断计数

/////////////GSM使用////////////////////////////////////////
uchar PhoneCall[]={“ATD13706405213;“};//打电话数据
uchar TxtMode[9]={“AT+CMGF=1“}; //AT+CMGF=1短信模式设置Text模式;AT+CMGF=0PDU模式
uchar MessCom_PhoneNum[21]={“AT+CMGS=\“15017506465\““};//发送短信AT指令头+接收短信号码
uchar CenterNum[24]={“AT+CSCA=\“+8613800200500\““};//24个数(短信息中心号码设置)格式:\位转义字符,将““转移成字符
uchar RecNum[11]={“15017506465“};//11个数(短信接收手机号码设置)
uchar message[6] = {“Hello!“};//发送的短信内容
uchar AT[2]={“AT“};  //联机命令
uchar Enter[1]={0x0D};//回车键“\r“
uchar ATCNMI[]=“AT+CNMI=21“;
//uchar idata send_data[11]={0x410x420x430x440x450x460x350x360x370x380};
uchar Frequency[5]={0x350x300x2E0x300x30};//测试使用
uint cnt=0;
void delay(uint ms)
{
        uint ij;
for(i=0;i    {
   for(j=0;j<1141;j++);
       }
}

void uart_init(uint baud)
{
   UCSRB=0x00; 
   UCSRA=0x00;      //控制寄存器清零
   UCSRC=(1<                                                        //选择UCSRC,异步模式,禁止                        
                                                     //   校验,1位停止位,8位数据位
   baud=mclk/16/baud-1 ;   //波特率最大为65K
   UBRRL=baud;          
   UBRRH=baud>>8;     //设置波特率
   UCSRB=(1<                                                       //接收、发送使能,接收中断使能
   SREG=BIT(7);                 //全局中断开放
   DDRD|=0X02;                 //配置TX为输出(很重要)

}
//发送函数
void sendchar(uchar data)
{
   while(!(UCSRA&(BIT(UDRE)))) ;
   UDR=data;
   while(!(UCSRA&(BIT(TXC))));
   UCSRA|=BIT(TXC);//因为是查询操作,不会自动清零,采用设置清零
   /*以备后面数据的发送*/
}
void sendstr(uchar *struint len)
{
while(len--)
{
sendchar(*str++);
}
}

void GSM_AT() //发“AT“的函数
{   
     sendstr(AT2);delay(100);
     sendchar(‘\r‘);delay(100); //以回车作为结束符号,手机才能识别
 delay(100);
}

void GSM_TXT() //发送AT+cmgf=1  设置短信模式Text
{   
     sendstr(TxtMode9);delay(100);
     sendchar(‘\r‘);delay(100);
     delay(100); 
}

void GSM_CMGS()  //发送AT+cmgs= (发短信的命令)
{   
     sendstr(MessCom_PhoneNum21);delay(1

评论

共有 条评论