#include
#define uint unsigned int
#define uchar unsigned char
#define ulong signed long
sbit led1=P1^0;//指示灯0
sbit led2=P1^1;//指示灯1
sbit START_TC=P3^6; //启动TC35i的控制端
uchar num,temp,num1,key;
uint count;
ulong i;
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71,0};
uchar code wetable[]={
0xf8,0xf9,0xfa,0xfb,
0xfc,0xfd,0xfe,0xff};
uchar keyscan();
uchar data PhoneCall[]={"15836174074"};
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void display()
{
P2=wetable[0];
P0=table[PhoneCall[0]];
delay(1);
P2=wetable[1];
P0=table[PhoneCall[1]];
delay(1);
P2=wetable[2];
P0=table[PhoneCall[2]];
delay(1);
P2=wetable[3];
P0=table[PhoneCall[3]];
delay(1);
P2=wetable[4];
P0=table[PhoneCall[4]];
delay(1);
P2=wetable[5];
P0=table[PhoneCall[5]];
delay(1);
P2=wetable[6];
P0=table[PhoneCall[6]];
delay(1);
P2=wetable[7];
P0=table[PhoneCall[7]];
delay(1);
}
uchar keyscan ()
{
P3=0xfe;
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
delay(10);
P3=temp;
temp=temp&0xf0;
if(temp!=0xf0)
{
switch(temp)
{
case 0xe0:num=3;
break;
case 0xd0:num=2;
break;
case 0xb0:num=1;
break;
case 0x70:num=0;
break;
}
}
}
P3=0xfd;
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
delay(10);
P3=temp;
temp=temp&0xf0;
if(temp!=0xf0)
{
switch(temp)
{
case 0xe0:num=7;
break;
case 0xd0:num=6;
break;
case 0xb0:num=5;
break;
case 0x70:num=4;
break;
}
}
}
P3=0xfb;
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
delay(10);
P3=temp;
temp=temp&0xf0;
if(temp!=0xf0)
{
switch(temp)
{
case 0xe0:num=11;
break;
case 0xd0:num=10;
break;
case 0xb0:num=9;
break;
case 0x70:num=8;
break;
}
}
}
P3=0xf7;
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
delay(10);
P3=temp;
temp=temp&0xf0;
if(temp!=0xf0)
{
switch(temp)
{
case 0xe0:num=15;
break;
case 0xd0:num=14;
break;
case 0xb0:num=13;
break;
case 0x70:num=12;
break;
}
}
}
return num;
}
uchar code PhoneCallhead[]={"ATD"};//打电话的AT头文件
uchar code TxtMode[9]={"AT+CMGF=0"}; //短信模式设置PDU模式
uchar code mess_qian[8]={"AT+CMGS="};// 短信 长度设置
uchar code length[2]={"29"}; //短信的长度 2个数(根据短信内容不同要改变)
uchar code cnum[18]={"0891683108301705F0"};//18个数(中心号码设置)
uchar code pdu1[10]={"11000D9168"};//10个(短信格式设置可以为固定+86的手机)
uchar code pnum[12]={"5138164770F4"};//12个数(短信接收手机号码设置)
uchar code pdu2[6]={"0008A7"};//6个 (短信有效期,可以固定不变)
uchar code lenmsg[2]={"0E"}; //短信内容的长度 2个数(16进制)
//uchar code pdumessage[28] = {"8B6662A5FF0C95E85F004E863002"};//12个数。内容PDU码。
uchar code AT[]={"AT"}; //联机命令
init_chuankou()
{
EA=0; //关总中断
ET1=0;//定时器中断1
SCON=0X50;
TMOD=0X20;
TH1=0XFD;
TL1=0XFD;//波特率为9600
TR1=1;
}
delay_Xms(uint t)
{
uint i,j;
for(i=t;i>0;i--)
for(j=113;j>0;j--);
}
/*******************************************************/
Print_Char(uchar ch)//发送单个字符
{
SBUF = ch; //送入缓冲区
while(TI == 0); //等待发送完毕
TI = 0; //软件清零
}
Print_Str(uchar * str,uint len)//发送字符串,调用Send_Char() len字符串长度
{
while(len--)
{
Print_Char(*str++);
}
}
/********************************************************/
start_TC35i() //启动TC35i的函数
{
delay_Xms(500);
delay_Xms(500);
led1=0;
delay_Xms(2000);
led1=1; //灯1工作一次
led2=0;
delay_Xms(2000);
led2=1; //灯2工作一次
START_TC=0;//启动TC35i
delay_Xms(1500);// 时间必须大于100ms
START_TC=1;//完成启动 //此后一直保持高电平
}
void GSM_AT() //发“AT”的函数
{
Print_Str(AT,2);
Print_Char('\r'); //以回车作为结束符号,手机才能识别
ES=1;
delay_Xms(1000); //延时
}
/***************************短信**********************************/
void GSM_TXT() //发送AT+cmgf=0 设置短信模式PDU
{
Print_Str(TxtMode,9);
Print_Char('\r');
ES=1;
delay_Xms(1000);
}
void GSM_CMGS() //发送AT+cmgs= (发短信的命令)
{
Print_Str(mess_qian,8);
}
void GSM_length() //设置短信的长度,length(本例为27,实际不同而不同)
{
Print_Str(length,2);
Print_Char('\r');
ES=1;
delay_Xms(1000);
}
/**********************以下是发PDU码的程序*********************************/
void centernum() //发中心号码
{
Print_Str(cnum,18);
}
void PDU_1() //发PDU1(短信格式设置可以为固定+86的手机)
{
Print_Str(pdu1,10);
}
void pdu_phonenum() //发PDU_phonenum(短信接收手机号码设置)
{
Print_Str(pnum,12);
}
void PDU_2() //发PDU2 (短信有效期,可以固定不变)
{
Print_Str(pdu2,6);
}
void Len_msg() //{"0C"}; //短信内容的长度 2个数(16进制)
{
Print_Str(lenmsg,2);
}
void pdu_message() ////短信内容24/2=12个数()
{
Print_Str(pdumessage,28);
Print_Char(0x1a); //发送结束标志位(CTRL+Z )
delay_Xms(1000);
}
/**********************拨号的程序*********************************/
void phone()
{ Print_Str(PhoneCallhead,3);
Print_Str(PhoneCall,11);//{"ATD13795568363;"};//打电话数据
Print_Char(';');
Print_Char('\r');
ES=1;
delay_Xms(5000);
delay_Xms(5000);
}
/*************************************************************/
void main()
{ yang=1;
init_chuankou(); //串口初始化
start_TC35i();
num=16;
count=0 ;
key=keyscan();
i=-50000;
while(1)
{
while((key==keyscan())&&(i<70000))
{ i++;}
if(i==70000)
i=-50000;
key=keyscan();
if(count==11)
count=0;
PhoneCall[count]=key;
count++;
delay(1000);
if(count==1)
{
while(1)
{//{display();}
display();
TI=0;
GSM_TXT();// TxtMode//发送AT+cmgf=0
delay_Xms(100);
GSM_CMGS(); //发送AT+cmgs=
GSM_length(); //发 27
delay_Xms(100);
centernum(); //发中心号码 PDU_1(); //11000D9168
pdu_phonenum(); //发PDU_phonenum:
PDU_2(); //发PDU2 :
Len_msg();
// pdu_message();
//CTRL+Z
//delay_Xms(3000);
delay_Xms(500);
led2=0;
GSM_AT();//发 At
phone();
delay_Xms(500);
delay_Xms(500);
led1=0;
led2=1;
}
}