|
楼主 |
发表于 2010-10-7 10:33:59
|
显示全部楼层
这是我编的发送中文的短信,内容是固定的,但内容不固定的就不会了,比如温度,谢谢楼上的指点,谁还能指点我下吗?
/**********************************************
GSM_TC35I_中文短信发送程序测试
程序功能:发中文短信
晶振:11.0592M
版本:V1.0
作者:*****
日期:2010-10-4
应用软件:keil3
**********************************************/
#include <reg52.h>
#include <string.h>
#include <stdio.h>
#define uint unsigned int
#define uchar unsigned char
sbit key1 = P0^1; //按键定义,当按键按下,则发送短信
char code num[] = "15871095395F";//要接收短信的号码,这里我写的是天俊的号码,号码后面记得要加F
char code sms[] = "5929751F82F14FCAFF0C795D4F60751F6D3B61095FEBFF01";//短信内容:"天生英俊,祝你生活愉快!"Unicode码
char code str1[] = "AT\n"; //发送AT,握手指令
char code str2[] = "AT+CMGF=0\n"; //定义发送的短信为PDU格式,即短信内容为中文
char code str3[] = "AT+CSCS=GSM\n"; // 使用GSM字符集
char code str4[] = "AT+CSMP=17,167,0,8\n"; //长度
char code str5[] = "AT+CMGS=";
char code str6[] = "0891683108704705F011000D9168"; //短信信息中心号码设置
char code str7[] = "000800";
void Serial_Init(void); //声明串口初始化函数
void Delay_ms(uint time); //声明延时函数
void Send_PDU_Message(char num[], char sms[]); //声明给指定号码发送PDU模式短信息函数
//=====主函数=====//
void main(void)
{
Serial_Init();
TI = 1;
while(1)
{
if (key1 == 0)
{
Delay_ms(20);
if (key1 == 0)
{
Delay_ms(20);
Send_PDU_Message(num, sms);
}
}
}
}
//=====串口初始化函数=====//
void Serial_Init(void)
{
SCON = 0X50; //串口:方式1,允许发送和接收
TMOD = 0x20; //定时器1:模式2,8位自动重装模式,用于产生波特率
TH1 = 0XFD; //11.0592MHZ晶振,设置波特率为9600
TL1 = 0XFD;
TR1 = 1; //开启定时器1
}
//=====延时函数=====//
void Delay_ms(unsigned int time)
{
unsigned int i;
for (; time>0; time--)
{
i=1500;
while(i--);
}
}
//=====串口中断=====//
/*void Serial_Int() interrupt 4
{
ES = 0;
if(TI)
{
TI = 0;
}
if(RI)
{
RI = 0;
}
} */
//=====中文短信内容发送函数=====//
//=函数功能:给指定号码发送中文短信。num[]=接收端号码;Sms[]=发送中文内容的Unicode编码
//=
//=
//==============================//
void Send_PDU_Message(char num[], char sms[])
{
uchar i;
printf("%s", str1); //发送握手指令
Delay_ms(200);
printf("%s", str2); //设置为PDU模式,适合发送短信内容为中文
Delay_ms(200);
printf("%s", str3); //使用GSM字符集
Delay_ms(200);
printf("%s", str4); //设置PDU模式参数,8为使用Unicode编码
Delay_ms(200);
printf("%s", str5);
printf("%d\n", 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); //中文短信内容字数
printf("%s\x1a", sms); //发送内容的Unicode编码字符串+(CTRL+Z)
Delay_ms(200);
} |
|