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

📄 fangdao.c

📁 本代码是用C51开发的
💻 C
📖 第 1 页 / 共 2 页
字号:

    }
    	receive_count=0;
		AT_Command_Status=COMMAND_WAIT;	//设置接收成功标志
      	send_count=0xff;timer_200S_cnt=0;
      	while(timer_200S_cnt<40&&(AT_Command_Status==COMMAND_WAIT))
       		{   if(strsearch("+CMGS:"))    break;
       		    else if(txd_rxd_bit)  break;
       			system_sleep;
       		}

      para_temp[0]=(num_tmp1/10)+0x30;para_temp[1]=(num_tmp1%10)+0x30; para_temp[2]=0x0d;para_temp[3]=0x00;

	  Send_AT_Command(SMS_CMGD);
	  timer_200S_cnt=0; while(timer_200S_cnt<2&&(AT_Command_Status==COMMAND_WAIT)) system_sleep;


}
//======================================================================
//================进行SIM卡的电话本读======================================================
//======================================================================
uchar PHONE_RD( )      //read_tmp=0x30+i;  要读的电话号码
{       uchar j;

     	Send_AT_Command(PHONE_READ);
     	send_count=0;
     	timer_200S_cnt=0; while(timer_200S_cnt<2&&(AT_Command_Status==COMMAND_WAIT)) system_sleep;

     	if(j=strsearch("+CPBR:"))    //+CPBW: 1,"13818120592",129,"chia"
     	{ 	j=j+9;

       		 do
        	{
   			 	para_temp[TMP_BUF++]= uart_buff[j++];
   				if( uart_buff[j]=='"')
   				{
   				   return(TMP_BUF);
   			   	}


   	    	}while(j<=24);


    	}

        else  return(0);
}

//======================================================================
//========================进行SIM卡中的1到20条短信号码的读==============================================
//======================================================================
uchar   READ_TEL(uchar r)                //读短信号码1-20个
{     //  uchar r;
	 para_temp[0]=(r/10)+0x30;para_temp[1]=(r%10)+0x30; para_temp[2]=0x0d;para_temp[3]=0x00;

        timer_200S_cnt=0; while(timer_200S_cnt<2&&(AT_Command_Status==COMMAND_WAIT)) system_sleep;
     	Send_AT_Command(SMS_CMGR);
     	timer_200S_cnt=0; while(timer_200S_cnt<2&&(AT_Command_Status==COMMAND_WAIT)) system_sleep;
     	send_count=0;
     	if(strsearch("+CMGR: 0,,0"))     //+CMGR: 0,,0    没有短信返回
     	{       return(FALSE);

    	}
        else
        {  if(txd_rxd_bit==1)
        	return(TRUE);
          else  return(FALSE);

        }

}


void Initialize_Model(void)    //PIN检测
{

	uchar i;
    Sys_Init();
    LED_INT1=0;
	sbc_bit=0;
	IO_IGT=0;
	//INT_TMP2=1;
    P0=0x01;
	for(i=0;i<10;i++)
	{//进行初始化,并显示
		Send_AT_Command(TC35_INIT);
		// INT1=~INT1;
		if(uart_buff[1]==0x0d&&uart_buff[0]==0x30)
		//if(AT_Command_Status==COMMAND_OK)
		    {  break;}

		if((i%4)==0)     //开启模块
		{
			IO_IGT=1;
		}
		else if((i%2)==0)
		{
			IO_IGT=0;
		}

   		timer_200S_cnt=0; while(timer_200S_cnt<2&&(AT_Command_Status==COMMAND_WAIT)) system_sleep;

	}

	for(i=0;i<20;i++)
    	{
    		if(Send_AT_Command(CHECK_PIN))
    		{//如有收到回应进行分析收到的信息,
				uart_buff[receive_count]=0;
				if(strsearch("READY")!=0)
        			break;
        	}
          timer_200S_cnt=0; while(timer_200S_cnt<2&&(AT_Command_Status==COMMAND_WAIT)) system_sleep;

     }


     BELL=0;
	IO_IGT=0;
	Send_AT_Command(SMSS_ID);
	timer_200S_cnt=0; while(timer_200S_cnt<2&&(AT_Command_Status==COMMAND_WAIT)) system_sleep;
   	Send_AT_Command(SMS_CNMI);
   	timer_200S_cnt=0; while(timer_200S_cnt<2&&(AT_Command_Status==COMMAND_WAIT)) system_sleep;
   	Send_AT_Command(SIM_ID);
   	timer_200S_cnt=0; while(timer_200S_cnt<2&&(AT_Command_Status==COMMAND_WAIT)) system_sleep;
    LED_INT1=1;



}





void  Sys_Init(void)//话机启动的初始化程序,包含键盘与定时器,串口等
{
			//TH0=(65536-46080)/256;//重新装入定时25mS的初值到TH0,TL0
  			//TL0=(65536-46080)%256;
			//65536-(11.0592/12)*25MS*1000=To
			//1ms定时
			//11.0592/12 = 0.9216 M (记数频率)
			//1ms记数 921.6次
			//16位 2^16 - x = 922 x=64614 FC66
			//定时器里不断放fc66,不用怀疑51定时器得到的 1ms的精确性吗



    TH0 = 0xB8;
	TL0 = 0x00; //20ms的时钟基准
    //TH0 = 0xB1;
	//TL0 = 0xE0; //20ms的时钟基准
  //串口中断
    TI=0;
    RI=0;
    SCON=0x50;        		//选用方式1
    TMOD=0x20;
    TMOD = (TMOD & 0xf0) | 1;//MODE 1
    //TH1=0xe8;              //波特率为9600
   // TL1=0xe8;
    TH1=0xfd;              //波特率为9600
    TL1=0xfd;
    PCON=0x00;            //倍频0x80

    IE = 0xb0;  	// EA XX ET2 ES ET0 EX0 ET1 EX1
    TR1=1;  		//enable TIMER1
    //TF0=0;
    //PT0=1; //Set Timer0 interrupt as highest priority level'
   // PT0=1; //Set Timer0 interrupt as highest priority level
    ES=1;
    TR0=1;
    ET0=1;
    ET1=0;
    EA=1;
    P0=0xC3;
    P1=0xFE;
    P2=0xFF;
    P3=0xFF;
   // P4=0xff;
    timer_1S_cnt=0;
    receive_count=0;
    send_count=0xff;		//表示禁止发送,可以接收
   sync_count=0;
   int_case=0;
   ring_pin_flag=1;
   IO_OUT=1;
   //INT_TMP1=0;
   //INT_TMP2=0;


}



uchar  Send_AT_Command( uchar type)
//拨号时号码放在phone.number
//其他用para_temp
{
	AT_Command_Type=type;
	send_count=0;
    switch(type)
    {

	case VOICE_DIAL:   	//语音拨号
        strcpy(uart_buff,"ATD");
        strcat(uart_buff,para_temp);
      // strcpy(uart_buff,"ATD10086;");
       //strcat(uart_buff,";");

        break;
     // case RESET_TC35:		//复位TC35
     // 	strcpy(uart_buff,"AT+CFUN=1,1");
     // 	break;
      case CHECK_PIN:		//检查当前是否要输入PIN码
        strcpy(uart_buff,"AT+CPIN?");
        break;

      case TC35_INIT:		//TC35初始化命令
        strcpy(uart_buff,"ATE0V0");
        break;
      case TC35_SBC:      //检查信号
      	 strcpy(uart_buff,"AT^SBC?");
        break;

      case VOICE_HANDSET:	//手柄方式
      	strcpy(uart_buff,"AT^SNFS=4^SNFO=2,8000,14000,20000,26000,32700,0,512^SNFI=5,10000");
      	break;
      case SIM_CARD_CHECK://查询是否有插入SIM卡 ^SCKS: 0,1
      	strcpy(uart_buff,"ate0v0^scks?");
      	break;

      case SIM_ID:
          strcpy(uart_buff,"AT+CMGF=1");
        break;
        case SMSS_ID:
          strcpy(uart_buff,"AT^SSMSS=1");
        break;
      case HOOKOFF:			//挂机,停止通话
        strcpy(uart_buff,"AT+CHUP");
        break;
      case SMS_CNMI:	//SMS 接收方式,
        strcpy(uart_buff,"AT+CNMI=1,1");
        break;
      case  TC35_VERSION:   //读取TC35的版本号
      	strcpy(uart_buff,"AT+GMR");
      	break;

      case PHONE_WRITE:  	//存电话号码
        strcpy(uart_buff,"AT+CPBW=");
        strcat(uart_buff,para_temp);
        break;
     case PHONE_SET:
        strcpy(uart_buff,"AT+CPBW=");
        strcat(uart_buff,para_temp);
        break;
      case PHONE_READ:  	//读电话本
        strcpy(uart_buff,"AT+CPBR=");
        strcat(uart_buff,&read_tmp);
        uart_buff[9]=0x0d; uart_buff[10]=0x0a;
        uart_buff[11]=0x00;   uart_buff[12]=0x00;
        break;
      case SMS_CMGR:		//读一个短信
        strcpy(uart_buff,"AT+CMGR=");
        strcat(uart_buff,para_temp);
        break;
       case SMS_CMGS:		//写一个短信
        strcpy(uart_buff,"AT+CMGS=");
        strcat(uart_buff,para_temp);

        break;
       case SMS_CMGD:		//删除一个短信
        strcpy(uart_buff,"AT+CMGD=");
        strcat(uart_buff,para_temp);
        break;
      // case  CMGS_MUB:    //发报警短信内容
       // strcpy(uart_buff,para_temp);
       //  break;

      case AT_COMMAND:
      	break;
      default:
      	receive_count=0;
      	return(TRUE);
    }
    ES=1;
    strcat(uart_buff,"\x0d\x00");//在命令后加入CR
    send_count=0;			//设置发送指针
    receive_count=0;
    AT_Command_Status=COMMAND_WAIT;	//设置接收成功标志

    txd_rxd_bit=0;
     at_send_bit=0;
    TI=1;					//开始发送数据
    RI=0;					//清除接收标志


  if((type==SMS_CMGR)||(type==MONITOR_ID))
    {
        while (timer_200S_cnt<15)
 		{

        	if (AT_Command_Status!=COMMAND_WAIT||txd_rxd_bit==1)
        	return(TRUE);
    	}
    }
   else if(type==SMS_CMGS)
   {      while (timer_200S_cnt<5)
 		{
        	if (AT_Command_Status!=COMMAND_WAIT||txd_rxd_bit==1)
        	return(TRUE);
    	}

   	}
    else
    {
    	 while (timer_200S_cnt<15)
 		{
    		system_sleep;
        	if (AT_Command_Status!=COMMAND_WAIT||txd_rxd_bit==1)
        	return(TRUE);
    	}
    }
    return(FALSE);
}



void main(void)
{
	Initialize_Model();

	system_server=SYS_SMSR;
	receive_count=0;
	 sms_tmp=0;
	 system_tep=1;

	while(1)
	{
		//-----------查询1到20条中的短信,只要有短信就处理------------------------------------------
		if(system_server==SYS_SMSR)			//读1-20条短信
			{
				read_sms();           		//timer_200S_cnt=0;
               P0=0x00;
            }
 		//----------------一些短信的发送---------------------------------------------------
		else if(system_server==SYS_SMSS)       //发送小区信息
 			{  LED_INT3=0;
 				send_sms();
			   system_server=SYS_SMSR;
			   LED_INT3=1;
		   }
		//---===============外部中断进行 报警状态=================================================================
		else if(system_server==SYS_RING)        //设备被盗功能开启
            {  LED_INT4=0;
            	 system_server=SYS_SMSR;
            	pickup_pin_flag=1;   ring_pin_flag=1;
            	if(system_tep)
                {  sms_tmp= smss_alarm;
					send_sms();
			    }
				system_server=SYS_SMSR;
               LED_INT4=1;
			}
			//===================设置报警时的延时时长==================================================
		else if(system_server==SYS_ALARM)
		  	{
		  		sms_tmp=smss_tel;
				system_server=SYS_SMSS;
		  	}

		  else if(system_server==SYS_START)
		  {
                LED_INT5=0;
		  		sms_tmp=smss_atart;
		  		send_sms();

		  		system_server=SYS_SMSR;
                LED_INT5=1;


		  }

			//========================用短信进行设备参数检查=============================================================
		 else if(system_server==SYS_PARA)          //设备参数查询
     			{
     				sms_tmp=smss_para;
		  		system_server=SYS_SMSS;
		  	}
		//==========================进行报警时的电话号码和手机号的设置===========================================================
		  else if(system_server==SYS_TEL)  //防盗电话号码设置
		  {                          //存储位于SIM卡的4,5,6三个位置
		  		sms_tmp=smss_tel;
		  		system_server=SYS_SMSS;

	      }
		//==================//电池电量不充报警=================================================================
		else if(system_server==SYS_SBC)          //电池电量不充报警
		{    sms_tmp=smss_sbc;
		  	 system_server=SYS_SMSS;

		}

	}


}





































⌨️ 快捷键说明

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