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

📄 mobile.c

📁 这个是我为大四毕业生写的手机模式的C51程序,绝对能用的,不是拼积分的,呵呵 ~
💻 C
字号:
#include <reg52.h>
#include<string.h>	  
unsigned char code send_comm_text[]={"at+cmgf=1\r"};
unsigned char code TEXT_OK[]={0x61,0x74,0x2B,0x63,0x6D,0x67,0x66,
	0x3D,0x31,0x0D,0x0D,0x0A,0x4F,0x4B,0x0D,0x0A,0x00};
unsigned char code send_phone1[]={0x61,0x74,0x2B,0x63,0x6D,0x67,0x73,
	0x3D,0x22}; //发送at+cmgs="
unsigned char code send_phone2[]={"13884354148"}; //发送13884354148
unsigned char code send_phone3[]={0x22,0x0d}; //发送"
unsigned char code PHONE_OK[]={0x22,0x31,0x33,0x38,0x38,0x34,0x33,
	0x35,0x34,0x31,0x34,0x38,0x22,0x3E,0x00};
unsigned char code s_at[]={"at\r"};                  //发送AT测试指令   
unsigned char code ATOK[]={0x61,0x74,0x0D,0x0D,0x0A,0x4F,0x4B,0x0D,0x0A,0x00};  
unsigned char code s_read_msg[]={"at+cmgr=1\n"};         //发送读取信息命令 
unsigned char code READ_MSG[]={0x2B,0x43,0x4D,0x47,0x52,0x3A,0x20,
	0x22,0x52,0x45,0x43,0x20,0x52,0x45,0x41,0x44,0x22,0x00};         //有已读信息 
unsigned char code UNREAD_MSG[]={0x2B,0x43,0x4D,0x47,0x52,0x3A,0x20,
	0x22,0x52,0x45,0x43,0x20,0x55,0x4E,0x52,0x45,0x41,0x44,0x22,0x00};         //有未读信息

unsigned char code s_delete_msg[]={"at+cmgd=1\r"};       //发送删除信息命令 
unsigned char code s_open_ok[]={"open_ok\r"};         //发送信息开灯正常
unsigned char code s_open_error[]={"open_error\r"};   //发送信息开灯异常
unsigned char code s_close_ok[]={"close_ok\r"};       //发送信息关灯正常
unsigned char code s_close_error[]={"close_error\r"}; //发送信息关灯异常
unsigned char code s_star_ok[]={"star_ok\r"};         //发送信息清洗开始正常 
unsigned char code s_star_error[]={"star_error\r"};   //发送信息清洗开始异常
unsigned char code s_clear_ok[]={"clear_ok\r"};       //发送信息清洗完成
unsigned char code send_ok[]={0x1a,0x0d};       //发送信息开灯正常

unsigned char code OPEN[]={"open_light"};         //开灯
unsigned char code CLOSE[]={"close_light"};          //关灯
unsigned char code CLEAR[]={"clear_light"};         //清洗

//unsigned char code s_clear_error[];  //发送信息开灯正常

bit send_flag;
bit receive_flag;
bit receive_ok;
bit bit_text;
unsigned char *send_pointer ; //指向数组的指针
unsigned char *p_code ; //指向数组的指针
unsigned char send_amount;
unsigned char i,receive_i;
unsigned char receive_amount;	 
unsigned char receive_mode;  //接收模式
unsigned char idata receive_buffer[100]="atcmgatcmgatcmgatcmgatcmgatcmgatcmgatcmgatcmgatcmgatcmgatcmgatcmgatcmgatcmgatcmgatcmgatcmgatcmgatcmg";

unsigned int temp_text;

void delay(unsigned long int ms)
{
	unsigned long int tms;
	tms=46*ms;
	while(tms)
	{
		tms--;
	}
}
void system_init()
{

	EA    = 0;         // CPU关中断
	SCON  = 0x50;
	PCON  = 0x00;
	TMOD  = 0x20;
	TH1   = 0xFD;    //波特率为9600  晶振11.0592MHZ的TH1=TL1=0xFD
	TL1   = 0xFD;
	TR1   = 1;       //定时器1启动计数
	ES    = 1;       //串口开中断
	//  PX1   = 1;       //串口低优先级   =1可能不进中断
	EA=1;
}

void mobile_init()
{	
	unsigned char yanshi;
/*	yanshi=30; //  4*1000ms
	while(yanshi--)//测试模块发送AT
	{
		delay(1000);
	} */
	while(1)//测试模块发送AT
	{
		send_pointer=s_at;
		send_amount=sizeof(s_at)-1;
		send_flag=1;
		TI=1;
		//while(send_flag);
		delay(1000);
		p_code=strstr(receive_buffer,ATOK);
		if(p_code!=NULL)
		{
			i--;
			break;
		}
		else
			i++;
	}
	bit_text=0;
	receive_i=0;
	for(i=0;i<50;i++)
		receive_buffer[i]=0xff;
	while(0==bit_text)//设定信息模式发送AT+CMGF=1
	{
		send_pointer=send_comm_text;
		send_amount=10;
		send_flag=1;
		TI=1;
		delay(500);
		p_code=strstr(receive_buffer,TEXT_OK);//
		if(p_code!=NULL)
		{
			break;
		}
	}
	receive_i=0;
	for(i=0;i<50;i++)
		receive_buffer[i]=0xff;

}

void send_msg(unsigned char *p,unsigned char p_count)
{
	delay(100);//延时10MS
	send_pointer=send_phone1;
	send_amount=sizeof(send_phone1);
	send_flag=1;
	TI=1;
	delay(30);
	send_pointer=send_phone2;
	send_amount=sizeof(send_phone2)-1;
	send_flag=1;
	TI=1;
	delay(30);
	send_pointer=send_phone3;
	send_amount=sizeof(send_phone3);
	send_flag=1;
	TI=1;
	delay(10);
	send_pointer=p;
	send_amount=p_count;
	TI=1;
	delay(100);
	send_pointer=send_ok;
	send_amount=2;
	TI=1;
	delay(100);
}

void delete_msg()
{
	send_pointer=s_delete_msg;
	send_amount=9;
	send_flag=1;
	TI=1;
	delay(200);
	
}

void com_int_proc(void) interrupt 4 //using 3
{
	if (TI)                      //是发送中断
	{
		TI =0;
		if(send_amount)
		{
			SBUF = *send_pointer;
			send_pointer++;
			send_amount--;
		}
		else
		{
			send_flag=0;
		}

	}
	if(RI)
	{
		RI =0;
		temp_text++;
			if(temp_text==30)
			{	P0=~P0;	temp_text=0;	}
		receive_buffer[receive_i]=SBUF;
		receive_i++;
		if(receive_i==100)
			receive_i=0;
	}

}

void scan_msg()
{
	send_pointer=s_read_msg;
	send_amount=sizeof(s_read_msg)-1;
	send_flag=1;
	TI=1;
	delay(100);
	p_code=strstr(receive_buffer,UNREAD_MSG);
	if(p_code!=NULL)  //有已读信息
	{
		p_code=strstr(receive_buffer,OPEN);
		if(p_code!=NULL)
		{
			receive_mode=13;	////开灯
			receive_i=0;
		}
		p_code=strstr(receive_buffer,CLOSE);
		if(p_code!=NULL)
		{
			receive_mode=23;	//关灯
			receive_i=0;
		}
		p_code=strstr(receive_buffer,CLOSE);
		if(p_code!=NULL)
		{
			receive_mode=33;	//清洗灯
			receive_i=0;
		}
		return;	
	}
	p_code=strstr(receive_buffer,READ_MSG);
	if(p_code!=NULL)  //有已读信息
	{
		delete_msg();
		delay(1000);
	}
}

main()
{
	
	system_init();
	//send_msg(s_open_ok,8);
	mobile_init();
	
	
	send_msg(s_open_ok,sizeof(s_open_ok)-1);
	delay(5000);
	//delay(5000);
	send_msg(s_open_error,sizeof(s_open_error)-1);
	delay(5000);
	//delay(5000);
	send_msg(s_close_ok,sizeof(s_close_ok)-1);
	delay(5000);
	//delay(5000);

	send_msg(s_close_error,sizeof(s_close_error)-1);
	//delay(5000); 
	delay(5000);
	send_msg(s_star_ok,sizeof(s_star_ok)-1);
	delay(5000);
	//delay(5000);
	send_msg(s_star_error,sizeof(s_star_error)-1);
//	delay(5000);
	delay(5000);  
							 
	while(1)
	{	
		
		scan_msg();
		for(i=0;i<100;i++)
			receive_buffer[i]=0xff;
		switch(receive_mode)
		{
			/*case 1://收到信息
			{				
				send_pointer=s_read_msg;
				send_amount=11;
				TI=1;
				delay(200);
				break;
			}
			case 2://返回已读信息
			{
				
				break;
			}*/
			case 13://开
			{
				send_msg(s_open_ok,sizeof(s_open_ok)-1);
				delay(5000);
				receive_mode=0;
				break;
			}
			case 23://关
			{
				send_msg(s_close_ok,sizeof(s_close_ok)-1);
				delay(5000);
				receive_mode=0;
				break;
			}
			case 33://洗
			{
				send_msg(s_star_error,sizeof(s_star_error)-1);
				delay(5000);
				receive_mode=0;
				break;
			}
			case 4://无信息
			{
				
				break;
			}
			case 5://成功删除信息
			{
				
				break;
			}
			case 6://成功删除信息出错
			{
				
				break;
			}
			default:  break; 
   		}
		delay(1000);
	}
}

⌨️ 快捷键说明

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