📄 gsm_main.c
字号:
#include <iom8v.h>
#include <macros.h>
#include "define.h"
#include "iic.h"
/***********************define iic paramer***********************/
uchar buf[18];
uchar cmd=0;//i2c数据缓存
uchar cmd_num=0;//i2c数据计数
uchar flag=0; //标记
uchar j=0; //i2c发送数据记数
uchar *data;//i2c发送数据缓存
uchar xk=0;
uchar req_flag=0,start_flag=0,vision_flag=0,cmd_flag=0;//定义来自pc端不同数据的标记
uchar hand[]={0x0f,0x34,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
uchar ring[]={0x01,0x36,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
uchar telnum[14];//拨出的电话号码
uchar num=0;//电话号码长度
uchar num_end_flag=0;//电话号码结束标记
uchar hkon[]={0x01,0x31,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
uchar hkoff[]={0x01,0x30,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
uchar mton[]={0x01,0x44,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
uchar mtoff[]={0x01,0x43,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
uchar idnum[14];
uchar hookon=0,hookoff=0,muteon=0,muteoff=0;
/****************************************************************/
void Delay(uint num )
{
uint i;
for(;num>0;num--)
{
i=600;
while(i)
{
i--;
}
}
}
void main()
{
DDRC |=0x38; //设置SDA SCL MUTE即port3 portc4 portc5为输出
DDRB |=0x20;//设置pwr 即portb5为输出
DDRD |=0x04;//设置gsm_rst即portd2为输出
/*********IIC初始化******************/
TWBR=0;
TWSR=00;
TWAR=0x20;
Twi_ACK();
/***********系统功能初始化***************/
PWRON;
PORTD |=0x04;
Delay(500);
PORTD &=0xfb;
USART_Init();
SREG |= 0x80;
Delay(1000);
Usart_Command("AT",2);
Usart_Tx(0x0d);
// Delay(30000);
Usart_Command("AT+CLIP=1",9); //设置来电显示
Usart_Tx(0x0d);
while(1)
{
if(start_flag) //如果接受到的是0x0f
{
start_flag=0;
cmd_num=0;
data=hand;//准备握手数据
}
if(vision_flag)//接收到请求ID命令
{
vision_flag=0;
cmd_num=0;
data=idnum;//准备ID数据
}
if(req_flag)
{
if(hookon) //Hook on置位
{
data=hkon;//准备hookon数据
hookon=0;
}
else if(hookoff)//hook off置位
{
data=hkoff;//准备hook off数据
hookoff=0;
}
else if(muteon) //静音关闭标记置位
{
data=mton;//准备静音数据
muteon=0;
}
else if(muteoff)//静音打开标记置位
{
data=mtoff;//准备静音打开数据
muteoff=0;
}
req_flag=0;
cmd_num=0;
}
if(cmd_flag)
{
cmd_flag=0;
cmd_num=0;
if(buf[1]==0x08 && buf[2]==0x31 && buf[3]==0x30 )//如果接受到握手请求[0x01 0x08 0x31 0x30 0xff]
{
PWRON;
}
else if (buf[1]==0x06 && buf[2]==0x34 &&buf[3]==0xff) //软件Mute键
{
muteon=1;
Delay(15);
PWROFF;
}
else if (buf[1]==0x06 && buf[2]==0x35 &&buf[3]==0xff) //软件Mute按下
{
muteoff=1;
Delay(15);
PWROFF;
}
else if (buf[1]==0x06 && buf[2]==0x31 &&buf[3]==0xff) //按下hook on键
{
Usart_Command("ata",3); //设置来电显示
Usart_Tx(0x0d);
hookon=1;
Delay(15);
PWROFF;
}
else if (buf[1]==0x06 && buf[2]==0x32 && buf[3]==0xff)//按下hook off键
{
Usart_Command("ath",3); //设置来电显示
Usart_Tx(0x0d);
hookoff=1;
Delay(15);
PWROFF;
}
else if (buf[1]==0x02) //拨号
{
for(xk=0;xk<18;xk++)
{
if(buf[xk+2]==0xff)
{
num_end_flag=1;
break;
}
if(buf[xk+2] !=0x01 && buf[xk+2] !=0x02)
{
telnum[num]=buf[xk+2];
num++;
}
}
if(num_end_flag)
{
Usart_Command("ATD",3);
Usart_Command(telnum,num);
Usart_Tx(';');
Usart_Tx(0x0d);
num_end_flag=0;
num=0;
}
}
}//end if(cmd_flag)
}//end while(1)
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -