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

📄 gsm_main.c

📁 实现机于通讯芯片的电话接听 拨出 以及来电振领提示
💻 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 + -