这个程序是按郭天祥的改的,我使用的GSM模块通过串口助手调试是正常的,但是这个程序觉得是可以实现接打电话,发收短信的吧,
#include<reg52.h>
#include<stdio.h>
#include<string.h>
sbit key1=P0^0; //拨打电话
sbit key2=P0^1; //挂断电话
sbit key3=P0^2; //接听电话
sbit key4=P0^3; //发一条文本格式的信息
//sbit key5=P0^4; //PDU格式
char code num[]="17803855150F";
char code sms[]="6E295EA6FF1A003300350043";//温度35°的PDU编码
char code str1[]="AT
";
char code str2[]="AT+CMGF=0
";//PDUģʽ
char code str3[]="AT+CSCS=GSM
"; //ʹÓÃGSM×Ö·û¼¯
char code str4[]="AT+CSMP=17,167,0,8
";
char code str5[]="AT+CMGS=";
//char code str6[]="0891683110901105F011000D9168";
char code str6[]="0891683110701605F011000D9168";//设置短信中心号码
char code str7[]="000800";
char code str8[]="AT
";
char code str9[]="AT+CMGF=1
";//Îı¾Ä£Ê½
char code str10[]="AT+CSCS=GSM
"; //ʹÓÃGSM×Ö·û¼¯
char code str11[]="AT+CSMP=17,167,0,8
";
char code str12[]="AT+CMGS=17803855150
";
char code str13[]="Hello World";
char code str14[]="x1a";
//char code str15[]="ATE0
";
//char code str16[]="AT+COPS?
";
void delay_ms(unsigned int
time)
{
unsigned int i;
for(;time>0;time--)
{
i=1500;
while(i--);
}
}
void GSM_PDU_message(char num[],char sms[])
{
unsigned char i;
printf("%s",str1); //%s±íʾֱ½ÓÊä³öµØÖ·
delay_ms(200);
//printf("%s",str15);
//delay_ms(200);
//printf("%s",str16);
//delay_ms(200);
printf("%s",str2);
delay_ms(200);
printf("%s",str3);
delay_ms(200);
printf("%s",str4);
delay_ms(200);
printf("%s",str5);
printf("%d
",strlen(sms)/2+15); //¶ÌÐų¤¶ÈµÄ¼ÆËã
delay_ms(200);
printf("%s",str6);
for(i=0;i<6;i++)
{
printf("%c%c",num[2*i+1],num[2*i]); //Ææżµ÷»»
}
printf("%s",str7);
printf("%02x",strlen(sms)/2);//ת³ÉÁ½Î»16½øÖÆÊý
printf("%sx1a",sms);//´òÓ¡16½øÖÆÊý1a
delay_ms(200);
}
void GSM_TEXT_message(void)
{
printf("%s",str8);
delay_ms(200);
//printf("%s",str15); //%s±íʾֱ½ÓÊä³öµØÖ·
// delay_ms(200);
//printf("%s",str16); //%s±íʾֱ½ÓÊä³öµØÖ·
//delay_ms(200);
printf("%s",str9);
delay_ms(200);
printf("%s",str10);
delay_ms(200);
printf("%s",str11);
delay_ms(200);
printf("%s",str12);
delay_ms(200);
printf("%s",str13);
delay_ms(200);
printf("%s",str14);
delay_ms(200);
}
void GSM_CALL(unsigned char *num)
{
/*printf("%s",str15); //%s±íʾֱ½ÓÊä³öµØÖ·
delay_ms(200);
printf("%s",str16); //%s±íʾֱ½ÓÊä³öµØÖ·
delay_ms(200);*/
printf("ATD");
printf("%s;
",num);
delay_ms(100);
}
void GSM_HANG(void)
{
printf("ATH
");
delay_ms(100);
}
void GSM_ANSWER(void)
{
printf("ATAN");
delay_ms(100);
}
void ser_init(void)
{
SCON=0x50;//´®¿Ú·½Ê½1£¬ÔÊÐí·¢ËͺͽÓÊÕ
TMOD=0x20;//¶¨Ê±Æ÷1£¬Ä£Ê½2£¬8λ×Ô¶¯ÖØװģʽ
TH1=0xfd;
TL1=0xfd;//²¨ÌØÂÊΪ9600
TR1=1;
EA=1;
ES=1;
}
void main(void)
{
ser_init();
TI=1;
while(1);
{
if(key1==0)
{
delay_ms(20);
if(key1==0)
{
delay_ms(20);
GSM_CALL(num);
}
}
if(key2==0)
{
delay_ms(20);
if(key2==0)
{
delay_ms(20);
GSM_HANG();
}
}
if(key3==0)
{
delay_ms(20);
if(key3==0)
{
delay_ms(20);
GSM_ANSWER();
}
}
/* if(key5==0)
{
delay_ms(20);
if(key5==0)
{
delay_ms(20);
GSM_PDU_message(num,sms);
}
}*/
if(key4==0)
{
delay_ms(20);
if(key4==0)
{
delay_ms(20);
GSM_TEXT_message();
}
}
}
}
一周热门 更多>