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

📄 main.c

📁 单片机外部中断 串口中断 定时中断单片机外部中断 串口中断 定时中断单片机外部中断 串口中断 定时中断单片机外部中断 串口中断 定时中断
💻 C
字号:
#include "STC12C2052AD.H"
#include <string.h>

sbit TC35_KEY = P1^7;
sbit BEEP = P1^0;
sbit TC35_IGT = P1^1;



/********************************************
延时5MS程序
********************************************/
void DELAY_5ms(unsigned int delay_num)
{
   TMOD=TMOD | 0x01;//设置为方式
   ET0=0; //关定时器0中断
   TL0=0x0;	//装载数 定时 5ms
   TH0=0xEE;
   TR0=1;
   	 while (delay_num--)
    {   while (!TF0);
	     TH0 = 0xEE;
		 TF0 = 0;  }
    TR0 = 0;
}


void TC35_poweron()
{
   TC35_KEY=0;	 // 打开TC35供电部分
   DELAY_5ms(10);

   TC35_IGT=0;
   DELAY_5ms(40); //
   TC35_IGT=1;
}


void UART_init()
{
    SCON=0x50;
	TMOD=TMOD | 0x20;
    TH1=TL1=0xFD;
	TR1=1;
}	

/*************************发送字符函数***********************/
void UART_send_char(unsigned char ch)  
{
    SBUF=ch;
    while(TI==0);
    TI=0;
}

/*************************发送字符串函数**********************/
void UART_send_string(unsigned char *str,unsigned int strlen)
{
    unsigned int k=0;
    do 
    {
        UART_send_char(*(str + k));
        k++;
		//delay_ms(1);
    } while(k < strlen);
	//delay_ms(1);
}

TC35_send_chinese_message(char *p_target_phone_number,char *p_message_center_number)
{

	unsigned int i;
//	unsigned int TEXT_length;
	char j;
//	char temp[13];

   unsigned char temp[2];
    char abc[]="0891";	//短信中心号码长度(固定)
	
    char message_center_number[]="6813800755500F"; //信息中心号码
	char pdu_message_type[]="11000D91";	//信息类型 (固定)
	char target_phone_number[]="6800000000000F";//目标手机号码
    char pdu_message_id[]="000800";//信息标示(固定)
	char message_length[3]="00"; //正文长度


	   
//	char message_text[]="4E3B4EBAFF0C63077EB995018BE5636275356C604E8630024E86";//短信正文
    char message_text[]="4E3B4EBAFF0C67094EBA975E6CD5752894A553195F0095E8FF0C5FEB62A58B665440FF01";//短信正文
	message_length[0]=strlen(message_text)/2/16+0x30;
    message_length[1]=strlen(message_text)/2%16+0x30;
	if(message_length[1]>0x39)
	{
	 message_length[1]=message_length[1]%16+0x37;
	
	}
//UART_send_char(message_length[0]);
//UART_send_char(message_length[1]);


    	for(i=0;i<11;i++) //接收传入得目标号码
   {
      message_center_number[2+i]=*(p_message_center_number+i);   
   }


       for(i=0;i<6;i++)	 //转换短信中心号码号码
   {
   	  j = message_center_number[2+2*i];
	  message_center_number[2+2*i] = message_center_number[2+2*i+1];
	  message_center_number[2+2*i+1] = j;
   } 



	for(i=0;i<11;i++) //接收传入得目标号码
   {
      target_phone_number[2+i]=*(p_target_phone_number+i);   
   }

   for(i=0;i<6;i++)	 //转换目标手机号码
   {
   	  j = target_phone_number[2+2*i];
	  target_phone_number[2+2*i] = target_phone_number[2+2*i+1];
	  target_phone_number[2+2*i+1] = j;
   } 

   temp[0]=(strlen(message_text)/2+15)/10+0x30;
   temp[1]=(strlen(message_text)/2+15)%10+0x30;
 // UART_send_char(temp[0]);
 // UART_send_char(temp[1]);
 

	//合并需要发送得字符串
    strcat(abc,message_center_number);
	strcat(abc,pdu_message_type);
	strcat(abc,target_phone_number);
	strcat(abc,pdu_message_id);
	strcat(abc,message_length);
	strcat(abc,message_text);





		  
	UART_send_string("at+cmgf=0",9);                     	         				 
	UART_send_char(0x0d);	//回车
	UART_send_char(0x0a);	//换行
	DELAY_5ms(100);

	UART_send_string("at+cmgs=",8); //发送前计算长度
	UART_send_char(temp[0]);
	UART_send_char(temp[1]);
	UART_send_char(0x0d);	//回车
	UART_send_char(0x0a);	//换行

	DELAY_5ms(100);
				
    UART_send_string(abc,strlen(abc));
				
	UART_send_char(0x1a);//CZ回车
	
				
	

/*	   		 //测试参考代码 可发送短信
	unsigned int i;
	char j;
	char temp[13];

    char abc[]="0891";	//短信中心号码长度(固定)
	char message_center_number[]="683108705505F0"; //信息中心号码
	char pdu_message_type[]="11000D91";	//信息类型 (固定)
	char target_phone_number[]="683114005163F0";//目标手机号码
    char pdu_message_id[]="000800";//信息标示(固定)
	char message_length[]="02"; //短信正文长度
	   	   
	char message_text[]="4E2D";//短信正文

    strcat(abc,message_center_number);
	strcat(abc,pdu_message_type);
	strcat(abc,target_phone_number);
	strcat(abc,pdu_message_id);
	strcat(abc,message_length);
	strcat(abc,message_text);
		  
	UART_send_string("at+cmgf=0",9);                     	         				 
	UART_send_char(0x0d);	//回车
	UART_send_char(0x0a);	//换行
	DELAY_5ms(100);

	UART_send_string("at+cmgs=17",10); //发送前计算长度
	UART_send_char(0x0d);	//回车
	UART_send_char(0x0a);	//换行

	DELAY_5ms(100);
				
    UART_send_string(abc,52);
				
	UART_send_char(0x1a);//CZ回车
	
	*/				

}


TC35_read_message_center()
{	 
     unsigned int i;
     char receive_temp;
	 //unsigned char receive_buffer[27];
	  UART_send_string("at+csca=?",9);  //发送读取短信中心号码命令
	  DELAY_5ms(10);
	 
	 for(i=0;i<35;i++)
	 {
	      
		  while(!RI);
	      receive_temp = SBUF;
		  if(i>10 && i< 22 )
		     
		  
		  //receive_buffer[i] = SBUF;	
     	  RI=0;
	  }
}


TC35_send_message()
{
           //      UART_send_string("at",2);
			//	 UART_send_char(0x0d);
			//	 UART_send_char(0x0a);
				 //delay_ms(1000);
			//	 DELAY_5ms(200);

                 UART_send_string("at+cmgf=1",9);
				 UART_send_char(0x0d);	//回车
				 UART_send_char(0x0a);	//换行

				 DELAY_5ms(200);
				 //delay_ms(1000);
				 UART_send_string("at+cmgs=\"+8613410015360\"",24);
                 UART_send_char(0x0d);
				 UART_send_char(0x0a);

				 DELAY_5ms(200);
				 //delay_ms(1000);
                 UART_send_string("hello",5);
				 UART_send_char(0x1a);//CZ回车

}

//钥匙开锁报警
void TC35_key_warm()
{
    unsigned int i;
    //读取号码5个号码
	
	for(i=0;i<5;i++) // 发送5条短信给读取得号码
	{
		TC35_send_message(); //传入号码
		//等待发送成功	
	}

	//打电话报警循环拨号5次
}


//欠压报警
void TC35_lowpower()
{
    unsigned int i;
	//发送5条短信报告欠压
     for(i=0;i<5;i++) // 发送5条短信给读取得号码
	{
		TC35_send_message(); //传入号码
		//等待发送成功	
	}

	//亮一个指示灯提示电压低

}



void main()
{
   TC35_KEY=1; //关闭电源   
   EX0=1;  //允许外部中断
   EX1=1; 
  
  
   UART_init();
   EA=1; //允许外部总中断


   PCON=0x02; //进入休眠  
   while(1);


}


  void Eint0() interrupt 0  //外部中断0程序
{	 
     EA=0; //禁止中断
   DELAY_5ms(10); //延时去抖动
  
   TC35_poweron();

//   UART_send_string(receive_buffer,15);
  
  /*  BEEP=0;
	DELAY_5ms(10); //延时去抖动
	DELAY_5ms(10); //延时去抖动'
	DELAY_5ms(10); //延时去抖动
	BEEP=1; 
		DELAY_5ms(10); //延时去抖动'
	DELAY_5ms(10); //延时去抖动 
	    BEEP=0;
	DELAY_5ms(10); //延时去抖动
	DELAY_5ms(10); //延时去抖动'
	DELAY_5ms(10); //延时去抖动
	BEEP=1; 
		DELAY_5ms(10); //延时去抖动'
	DELAY_5ms(10); //延时去

//	 TC35_KEY=0;//TC35电源启动
	*/
	 EA=1;
	 PCON=0x02; //进入休眠  
}


  void Eint1() interrupt 2  //外部中断0程序
{//	 unsigned  char code num[]="13410015360";
code char TC35_target_phone_number[]="13798233255";
code char TC35_message_center_number[]="13800755500";
     EA=0; //禁止中断
   DELAY_5ms(500); //延时去抖动 
      
	 
	 // TC35_read_message_center();

	 TC35_send_chinese_message(TC35_target_phone_number,TC35_message_center_number);
	 //TC35_send_message();
	 //TC35_KEY=1;//TC35电源启动
	 EA=1;
	 PCON=0x02; //进入休眠  
}


⌨️ 快捷键说明

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