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

📄 短信家电程序.c

📁 GSM@C51.rar
💻 C
字号:
   #include <reg51.h>
   #include "string.h"
   #define uchar unsigned char
    sfr RH= 0x0CB;						  //定义波特率参数9600
    sfr RL =0x0CA;
    sfr T2C= 0x0C8;

   sbit P10= P1^0;						 //输出口
   sbit P11= P1^1;
   sbit P12= P1^2;
   sbit P13= P1^3;
   sbit P14= P1^4;
   sbit P15= P1^5;
  
    sbit P20= P2^0;					//键盘口
	sbit P21= P2^1;
	sbit P22= P2^2;
	sbit P23= P2^3;
	sbit P24= P2^4;
    sbit P25= P2^5;
		
	uchar j,i=0,k,*p;
	uchar xdata jia[2]={0};				//状态缓冲区
	uchar xdata neirong[12]={0};		//发送缓冲区
    uchar resbuf[52]={0};				//中断接受缓冲区
    uchar xdata  C_MGS[19]="AT+CMGS=15979042724"; //目标手机
    uchar xdata A_T[2]="AT";   
    uchar xdata C_MT[4]="+CMT";  			  //
    uchar xdata O_K[2]="OK";
    uchar xdata H_UICHE[1]="/";
  // uchar flag=0,a=0,b=0,c=0,d=0,f=0;
  //  uchar t=0;fangdao=0; 
	bit flag=0;							 //主函数执行标志位
    bit a=0;							 //控制开关1
    bit b=0;							 //	2
    bit c=0;							 //	3
    bit d=0;							//	4
    bit f=0;						   //返回状态
    bit t=0;						   //防盗标志
    bit fangdao=0; 

   void delay(uchar gg) 				//延时1毫秒函数
    {
	uchar i,j,k;
	for(k=0;k<5;k++)
		for(i=0;i<gg;i++)
			for(j=0;j<245;j++);
     }


  void sendchar(uchar ascll)		 //发送单个字符
	   {	   	   
	    TI=0;
	    SBUF=ascll;
	    while(!TI);
	    TI=0;
         }
  
   void sendmany(uchar *ll,uchar lnng)  //发送字符串
       {while(lnng--)
	    sendchar(*ll++);
	   } 

  
  void atinit(void)				    //AT联机初始化
     {		  
	 // while(1)
		 //    {
    sendmany(A_T,2);
	 sendchar(0x0d);			 //0D为回车,0A为换行,1A为发送
		//	 for(i=0;i<9;i++)
		//	    {
		//		 RI=0;
		//		  while(!RI);
	//			 resbuf[i]=SBUF;
		//		 RI=0;
	//			 }			 

	//		  if((resbuf[5]==0x4f)&&(resbuf[6]==0x4b)) break;
	//		 }
	 
		  				
      }  							  
 
    void allinit(void)	                           //gsm初始化
        {
        uchar  xdata  C_NMI[17]="AT+CNMI=2,2,0,0,1";
        uchar  xdata  C_MGF[9]="AT+CMGF=1";
   	    uchar  xdata  C_SCA[22]="AT+CSCA=+8613800791500";
        uchar  xdata  A_TE0[4]="ATE0";
		  sendmany(C_MGF,9);
                   sendchar(0x0d);
				   sendchar(0x0a);
				   delay(20);
		  sendmany(A_TE0,4);
                    sendchar(0x0d);
					sendchar(0x0a);
					delay(20);
		 sendmany(C_NMI,17);
                     sendchar(0x0d);
					 sendchar(0x0a);
					 delay(20);
		   sendmany(C_SCA,22);
                     sendchar(0x0d);
					 sendchar(0x0a);
					 delay(20);
		 }
	void utar(void)					   //串口初始化9600波特率
	   {EA=1;	    	  
	   RH=0x0ff;
	   RL=0x0d9;  
	   SCON=0x50;
	   T2C=0x34;
	   }  
  
    uchar getkey(void)     //获得键值函数
      {	uchar PIC=10;
    	if(!(P20&P21&P22&P23&P24&P25)) 
	    delay(10);
         if(!(P20&P21&P22&P23&P24&P25))            
           { if(P20==0) PIC=0;	
	         if(P21==0) PIC=1; 	
	         if(P22==0) PIC=2;
             if(P23==0) PIC=3;
             if(P24==0) PIC=4;
	         if(P25==0) PIC=5;
	        }
     while(!(P20&P21&P22&P23&P24&P25)); //等待键释放
     return (PIC);
       }

   void zhuangtai(void)					   //读状态子程序
       {
	    if(P10==0) strcpy(neirong,"A1");	   //A\B\C\D为四个电器,0\1表示状态
	    if(P10==1) strcpy(neirong,"A0");
		if(P11==0) {strcpy(jia,"B1");strcat(neirong,jia); }
		if(P11==1) {strcpy(jia,"B0");strcat(neirong,jia); }
		if(P12==0) {strcpy(jia,"C1");strcat(neirong,jia); }
		if(P12==1) {strcpy(jia,"C0");strcat(neirong,jia); }
		if(P13==0) {strcpy(jia,"D1");strcat(neirong,jia); }
		if(P13==1) {strcpy(jia,"D0");strcat(neirong,jia); } 
	   }
												 //由GSM向手机发送短信,8个字节
  void huifu(uchar *sss,uchar lo)	   							  
 	  {	uchar n; 
          sendmany(C_MGS,19);					//发送AT+CMGS=15979042724 目标手机
	      sendchar(0x0D);						 //发送回车
	        for(n=0;n<20;n++)						 //	等待>符号
	          {delay(125);}
	      sendmany(sss,lo);						 //发送数组SSS的内容
	      sendchar(0x1A);						 //发送发送符号
		    for(n=0;n<20;n++)
	          {delay(125);}
		  atinit(); 							  //重新发送AT指令,不可少
	  }	 
		  
  void rezhongduan(void) interrupt 4 			   //中断接收
      {	if(RI==1)  						//由接收引起的中断才有效
	     {RI=0; 
		  if((SBUF=='C')&&(!flag))  	 //当首字母为C时开始接收
		    {flag=1;
	         i=0;			  
		    }
          if(flag==1)
	         {	
		        resbuf[i++]=SBUF; 			   	 
		         if(resbuf[47]=='A') {a=1;resbuf[47]=0;	 } //命令1,2,3,4,5,6
				 if(resbuf[47]=='B') {b=1;resbuf[47]=0;	 }
				 if(resbuf[47]=='C') {c=1;resbuf[47]=0;  }
			     if(resbuf[47]=='D') {d=1;resbuf[47]=0;	 } 
				 if(resbuf[47]=='F') {f=1;resbuf[47]=0;	 }
				 if(resbuf[47]=='T') {t=1;resbuf[47]=0;	 }
				 if(resbuf[48]=='B') {b=1;resbuf[48]=0;	 }
				 if(resbuf[49]=='C') {c=1;resbuf[49]=0;	 }
				 if(resbuf[50]=='D') {d=1;resbuf[50]=0;	 }	   	      
		         if(i==51) 
		           {flag=0;
			        i=0;
			       }
		     }
		}	 		    
	  }	
 
 /*主程序暗暗暗暗暗暗暗暗暗暗******************/
   main()   
   { uchar  key,gong=0;
     P1=0XFF; 
	 utar();
     atinit();
     allinit();	 
	 delay(100);
	 P15=0;
	 EA=1;
	 ES=1;
	 while(1)
	  { /****************手机控制部分**********/	
	    if(a==1) {P10=~P10;delay(200);}// zhuangtai(); huifu(neirong,8);}	      //开关状态取反       
	   	if(b==1) {P11=~P11;delay(200);}//zhuangtai(); huifu(neirong,8);}
		if(c==1) {P12=~P12;delay(200);}// zhuangtai(); huifu(neirong,8);}
		if(d==1) {P13=~P13;delay(200);}// zhuangtai(); huifu(neirong,8);}
		    if((a|b|c|d)) {a=0;b=0;c=0;d=0;zhuangtai(); huifu(neirong,8);}		  //自动短信返回状态
		if(f==1) { f=0;	zhuangtai(); huifu(neirong,8);}					 //发送F返回状态
		if(t==1) {t=0;fangdao=1;P1=0x0f;P14=0;}	//发送T,关闭所有电器,启动防盗								
		    if((fangdao==1)&&(P1!=0x0f))
			 {fangdao=0;zhuangtai();huifu(neirong,8);P14=1;}
		/*****************键盘控制部分**********************/
		key=getkey();
		    switch(key)
			   {//case 5:P15=~P15;delay(500); break;  //初始化成功指示
			    case 0:P10=~P10;delay(200); break;   			        
			    case 1:P11=~P11;delay(200); break; 				   
			    case 2:P12=~P12;delay(200); break;
			    case 3:P13=~P13;delay(200);	break; 
			//	case 4:P14=~P14;delay(500); break;	  //返回信息指示			    
			   // case 6:gong=~gong; 	 break;				   
			   //case 6:P15=~P15;   break;				    
			   // case 0x30:P17=~P17;	  break;				    			     
			    default:break;
			    } 

      }
   }

⌨️ 快捷键说明

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