|
/**********************************************************
TC35I手機模塊測試程序1
程序功能:1、打電話。
2、接電話。
3、掛電話。
4、發(fā)送英文和中文信息。
單片機型號:STC10F08XE 晶振:11.0592M
應(yīng)用軟件:Keil2或Keil3
發(fā)布時間:2010-04-20
說 明:若用于商業(yè)用途,請保留此段文字或注明代碼來源
天祥電子有限公司保留所有版權(quán)
作 者:陳志良
**********************************************************/
#include<reg51.h>
#include<string.h>
#include<stdio.h>
//#define buf_max 72//定義緩存長度為72
sbit KEY1 = P0^0; //按鍵1,撥打電話
sbit KEY2 = P0^1; //按鍵2,掛斷電話
sbit KEY3 = P0^2; //按鍵3,接聽電話
sbit KEY4 = P0^3; //按鍵4,發(fā)送一條英文短信息
sbit KEY5 = P0^4; //按鍵5,發(fā)送一條中文短信息
//sbit LED1 = P2^0; //第一個指示燈
//sbit LED2 = P2^1; //第二個指示燈
//sbit LED3 = P2^2; //第三個指示燈
//sbit LED4 = P2^3; //第四個指示燈
//sbit IGT = P2^4; //點火信號線
//unsigned char code trec_buf[buf_max];//定義接收緩存
char code num[]="13101601289F"; //定義要撥打的電話號碼,撥打其它電話在這時修改
char code sms[]="6E295EA6FF1A003300350043"; //"溫度:35C"的Unicode碼,發(fā)送其它中文,可在這里修改
char code str1[]="AT\n"; //定義字符串1
char code str2[]="AT+CMGF=0\n"; //定義字符串2
char code str3[]="AT+CSCS=GSM\n"; //定義字符串3
char code str4[]="AT+CSMP=17,167,0,8\n"; //定義字符串4
char code str5[]="AT+CMGS="; //定義字符串5
char code str6[]="0891683110901105F011000D9168"; //定義字符串6
char code str7[]="000800"; //定義字符串7
char code str8[]="AT\n"; //定義字符串8
char code str9[]="AT+CMGF=1\n"; //定義字符串9
char code str10[]="AT+CSCS=GSM\n"; //定義字符串10
char code str11[]="AT+CSMP=17,167,0,0\n"; //定義字符串11
char code str12[]="AT+CMGS=13101601289\n"; //定義字符串12
char code str13[]="Hello world!!"; //定義字符串13
char code str14[]="\x1a"; //定義字符串14
void Serial_Init(void); //聲明串口初始化函數(shù)
void GSM_Call(unsigned char *num); //聲明撥打指定電話函數(shù)
void GSM_Hang(void); //聲明掛電話函數(shù)
void GSM_Answer(void); //聲明接電話函數(shù)
void Delay_ms(unsigned int time); //聲明延時函數(shù)
void GSM_Sent_Text_Message(void); //聲明給指定號碼發(fā)送TEXT模式短信息函數(shù)
void GSM_Sent_PDU_Message(char num[],char sms[]); //聲明給指定號碼發(fā)送PDU模式短信息函數(shù)
/********************************主函數(shù)********************************/
/*函數(shù)原型:void main(void)
/*函數(shù)功能:主函數(shù)
/*輸入?yún)?shù):無
/*輸出參數(shù):無
/**********************************************************************/
void main(void)
{
Serial_Init(); //調(diào)用串口初始化函數(shù)
TI = 1;
while(1)
{
if(KEY1==0) //如果是按鍵1按下,則給13101601289 這個號碼打電話
{
Delay_ms(20);
while(KEY1==0);
{
Delay_ms(20);
GSM_Call(num);
}
}
if(KEY2==0) //如果是按鍵2按下,則掛斷電話
{
Delay_ms(20);
while(KEY2==0);
{
Delay_ms(20);
GSM_Hang();
}
}
if(KEY3==0) //如果是按鍵3按下,則接聽電話
{
Delay_ms(20);
while(KEY3==0);
{
Delay_ms(20);
GSM_Answer();
}
}
if(KEY4==0) //如果是按鍵4按下,則向13101601289 發(fā)送一條英文信息
{
Delay_ms(20);
while(KEY4==0);
{
Delay_ms(20);
GSM_Sent_Text_Message();
}
}
if(KEY5==0) //如果是按鍵5按下,則向13101601289 發(fā)送一條中文信息
{
Delay_ms(20);
while(KEY5==0);
{
Delay_ms(20);
GSM_Sent_PDU_Message(num,sms);
}
}
}
}
/***************************串口初始化函數(shù)*****************************/
/*函數(shù)原型:void Serial_Init(void)
/*函數(shù)功能:串口初始化
/*輸入?yún)?shù):無
/*輸出參數(shù):無
/**********************************************************************/
void Serial_Init(void)//串口初始化函數(shù)
{
SCON = 0x50;//串口:方式1,允許發(fā)送和接收
TMOD = 0x20;//定時器1:模式2,8位自動重裝模式,用于產(chǎn)生波特率
TH1 = 0xFD; //11.0592MHZ晶振,波特率為9600
TL1 = 0xFD;
TR1 = 1; //開啟定時器1
//ES = 1; //開啟串口中斷
//EA = 1; //開啟全局中斷
}
/****************************串口中斷處理函數(shù)**************************/
/*函數(shù)原型:void Serial_Int(void)
/*函數(shù)功能:串口中斷處理
/*輸入?yún)?shù):無
/*輸出參數(shù):無
/**********************************************************************/
void Serial_Int() interrupt 4
{
ES=0; //關(guān)串口中斷,防止中斷嵌套
if(TI) //如果是發(fā)送中斷,則不做任何處理
{
TI = 0; //清除發(fā)送中斷標(biāo)志位
}
if(RI) //如果是接送中斷,則進行處理
{
RI = 0; //清除接收中斷標(biāo)志位
}
ES = 1; //開啟串口中斷
}
/****************************time ms延時函數(shù)***************************/
/*函數(shù)原型:Delay_ms(unsigned int time)
/*函數(shù)功能:延時time ms
/*輸入?yún)?shù):time
/*輸出參數(shù):無
/**********************************************************************/
void Delay_ms(unsigned int time)
{
unsigned int i;
for(;time>0;time--)
{
i=1500;
while(i--);
}
}
/****************************撥打指定電話函數(shù)**************************/
/*函數(shù)原型: GSM_Call(unsigned char *num)
/*函數(shù)功能:撥打指定電話
/*輸入?yún)?shù):num
/*輸出參數(shù):無
/**********************************************************************/
void GSM_Call(unsigned char *num)
{
printf("ATD");
printf("%s;\n",num);
Delay_ms(100);
}
/*********************************掛機函數(shù)*****************************/
/*函數(shù)原型: void GSM_Hang(void)
/*函數(shù)功能:掛斷電話
/*輸入?yún)?shù):無
/*輸出參數(shù):無
/**********************************************************************/
void GSM_Hang(void)
{
printf("ATH\n");
Delay_ms(100);
}
/********************************接電話函數(shù)****************************/
/*函數(shù)原型: void GSM_Answer(void)
/*函數(shù)功能:接聽電話
/*輸入?yún)?shù):無
/*輸出參數(shù):無
/**********************************************************************/
void GSM_Answer(void)
{
printf("ATA\n");
Delay_ms(100);
}
/***********************給指定號碼發(fā)送TEXT模式短信*********************/
/*函數(shù)原型:GSM_Sent_Text_Message(void)
/*函數(shù)功能:給指定號碼發(fā)送英文短信息。num[]=接收端號碼
/*輸入?yún)?shù):無
/*輸出參數(shù):無
/**********************************************************************/
void GSM_Sent_Text_Message(void)
{
printf("%s",str8); //以下幾個為GSM的AT串口指令,設(shè)置短信發(fā)送類型
Delay_ms(200);
printf("%s",str9); //設(shè)置為TEXT模式,適合發(fā)送短信內(nèi)容為英文
Delay_ms(200);
printf("%s",str10); //使用GSM字符集
Delay_ms(200);
printf("%s",str11); //設(shè)置TEXT模式參數(shù)
Delay_ms(200);
printf("%s",str12); //設(shè)置接收端電話號碼
Delay_ms(200);
printf("%s",str13); //具體發(fā)送的內(nèi)容在此修改
printf("%s",str14); //結(jié)束符,相當(dāng)于鍵盤的CTRL+Z
Delay_ms(200);
}
/***********************給指定號碼發(fā)送PDU模式短信*********************/
/*函數(shù)原型:GSM_Sent_PDU_Message(void)
/*函數(shù)功能:給指定號碼發(fā)送中文短信。num[]=接收端號碼;Sms[]=發(fā)送中文內(nèi)容的Unicode編碼
/*輸入?yún)?shù):無
/*輸出參數(shù):無
/**********************************************************************/
void GSM_Sent_PDU_Message(char num[],char sms[])
{
unsigned char i;
printf("%s",str1);
Delay_ms(200);
printf("%s",str2); //設(shè)置為PDU模式,適合發(fā)送短信內(nèi)容為中文
Delay_ms(200);
printf("%s",str3); //使用GSM字符集
Delay_ms(200);
printf("%s",str4); //設(shè)置PDU模式參數(shù),8為使用Unicode編碼
Delay_ms(200);
printf("%s",str5);
printf("%d\n",strlen(sms)/2+15); //字節(jié)長度,與實際短信內(nèi)容長度有關(guān)
Delay_ms(200);
printf("%s",str6); //一開始發(fā)送的字符,包括短信中心號碼等,這部分一般都是固定不變的,可以不用管它
//strcat(num,"F"); //在接收端號碼后面補F,使之成為12位字符
for(i=0;i<6;i++) //然后再兩位兩位分別調(diào)換位置
{
printf("%c%c",num[2*i+1],num[2*i]);
}
printf("%s",str7); //固定字符
printf("%02x",strlen(sms)/2); //中文短信內(nèi)容字數(shù)
printf("%s\x1a",sms); //發(fā)送內(nèi)容的Unicode編碼字符串+(CTRL+Z)
Delay_ms(200);
}
|
評分
-
查看全部評分
|