📄 tc35i.c
字号:
SendCmdToTc35i("AT+CSCA=+8613800769500"); //信息中心号码
SBUF = 0x0d; longdelay(20);
SBUF = 0x0a; longdelay(20);
SendCmdToTc35i("AT+CMGS=15999741627");//("AT+CMGS=\r");13728247589
SBUF = 0x0d; longdelay(20);
SBUF = 0x0a; longdelay(20);
TH0=0x4C;
TL0=0;
time=0;
TR0=1;
while(1)
{
tmp=SBUF;
RI=0;
if(tmp==0x3e||tmp==0x41) //">||A";"||"逻辑或,当tmp==0x3e和tmp==0x41都为假时,表达式为假,否则为真。
//">" 表示可以接收数据
{
break;
}
if(time>100)
{
time=0;
TR0=0;
break;
}
}
SendCmdToTc35i(h);// //发送内容
SendASC(0X1A); //发送结束标志,一定要十六进制大写,不是ASIC码
ES=1;
}
void initGSM(void)
{
TC35iOpen =1; //P0_7脚
longdelay(20);//延时100m秒
TC35iOpen=0;
longdelay(200);//延时100m秒
TC35iOpen =1;
longdelay(100);//开机延时,等候登录GSM网
}
/****************************************************************************/
void T0_intsvr(void) interrupt 1
{
TH0=0x4C; //Timer0产生50ms的中断
TL0=0;
time++;
}
/////////////////////////////////////////////////////////////////////////////////
static void TransmitInterrupt (void)
{
TI=0;
}
static void ReceiveInterrupt (void) //接收处理
{
RI=0;
// flag=0;
if(havemess==0 ) // 当前没有处理新消息
{
datesbuf=SBUF; // DATA4变化:串口在接收一般字符
switch(num2) // 握手信号 连续收到字符:+CMTI: 就认为有新到消息
{
case 1:
num2 = datesbuf=='+' ? ++num2 : 1;
break;
case 2:
num2 = datesbuf=='C' ? ++num2 : 1;
break;
case 3:
num2 = datesbuf=='M' ? ++num2 : 1;
break;
case 4:
num2 = datesbuf=='T' ? ++num2 : 1;
break;
case 5:
num2 = datesbuf=='I' ? ++num2 : 1;
break;
case 6:
num2 = datesbuf==':' ? ++num2 : 1;
break;
case 7:
num2 = datesbuf==32 ? ++num2 : 1; ///空格
break;
case 8:
num2 = datesbuf=='\"' ? ++num2 : 1;
break;
case 9:
num2 = datesbuf=='S' ? ++num2 : 1;
break;
case 10:
num2 = datesbuf=='M' ? ++num2 : 1;
break;
case 11:
num2 = datesbuf=='\"' ? ++num2 : 1;
break;
case 12:
num2 = datesbuf==',' ? ++num2 : 1;
break;
case 13:
if (1 != num2) // :
{
zone=datesbuf;// 信息所在的内存区间代码
havemess = 1; // 新到消息标志置1
num2=1;// num2复位,重新接收"+".....
i=0;
delchar=0;
for(k=0;k<40;k++)
{
redata[k]=0; //为 redata[k]留40空间
}
}
break;
default:
num2=1;
break;
}
}
else
{
delchar++;
if(delchar>28)//28//65 ////忽略点前面65个字节//28电话号码//65信息内容
{
redata[i]=SBUF; ////接收信息的内容数据
i++;
/* Telnum[0]=redata[0];
Telnum[1]=redata[1];
Telnum[2]=redata[2];
Telnum[3]=redata[3];
Telnum[4]=redata[4];
Telnum[5]=redata[5];
Telnum[6]=redata[6];
Telnum[7]=redata[7];
Telnum[8]=redata[8];
Telnum[9]=redata[9];
Telnum[10]=redata[10];
Telnum[11]=0; */
}
}
}
//接收数}
static void com_isr(void) interrupt 4 using 1 //串口中断
{
EA=0;
if (RI) ReceiveInterrupt ();
if (TI) TransmitInterrupt ();
EA=1;
}
/*************************************************************************************/
void main(void)
{
float vtemp;
int redtime;
P3_6 = 0;
P3_7 = 0;
Bell=0;
RedwornOne=0;
RedwornTwo=0;
EquipOne=0;
EquipTwo=0;
EquipThree=0;
num2=1;// num2复位,重新接收"+".....
ST=0;
OE=0;
TMOD=0x20; //定时器1方式2
TL1=0xfd; //fd为9600,fa为4800,f4为2400,e8为1200 ,D0为600
TH1=0xfd; //
SCON=0x50; //串口工作方式3
PCON=0x00;
IE=0x90; //开串口中断
TR1=1; //启动定时器
EA=1;
//IT0=1; // 外部中断边沿触发,0电平触发
// EX0=1; // 开外部0中断
initGSM();
initlcm();
delays(200);
SendCmdToTc35i("AT\r\n"); //开机发送AT握手指令!
delays(50);
SendCmdToTc35i("ATE\r\n"); //开机发送ATE不回显指令!
delays(50);
sendCNMI(); //发送(AT+CNMI=1,1,0,0,1),短信到达TE; //( 设置短消息到达自动提示)
delays(50);
SendCmdToTc35i("AT+CMGF=1\r\n"); //设置为0,PDU模式 1,文本格式发送
delays(50);
EraseMsgAll(); //删除sim卡内全部短信息
display(0x80,0xa1,0xe6);//`C
display(0x84,0xa3,0xd6);//V
//----------第二行---------------------//
display(0x90,0xc9,0xe8);//设
display(0x91,0xb1,0xb8);//备
display(0x92,0xa3,0xb1);//1
SendDat(0x3a);//:
//----------第三行---------------------//
display(0x88,0xc9,0xe8);//设
display(0x89,0xb1,0xb8);//备
display(0x8a,0xa3,0xb2);//2
SendDat(0x3a);//:
//----------第四行---------------------//
display(0x98,0xc9,0xe8);//设
display(0x99,0xb1,0xb8);//备
display(0x9a,0xa3,0xb3);//3
SendDat(0x3a);//
RedwornOne=0;
RedwornTwo=0;
while(1)
{
if(havemess==1)
{
longdelay(20);
read_msg(zone);
longdelay(300); //30000
delete_msg(zone);
longdelay(300); //30000
havemess=0;
}
tempdate=ReadTemperature()*10; // 显示当前的温度
//----------第一行---------------------//
Tem[0]=0x30+(int)tempdate/100;
Tem[1]=0x30+(int)tempdate%100/10;
Tem[2]=0x2e; //.
Tem[3]=0x30+(int)tempdate%100%10;
SendCMD(0x81);
SendDat(0x3a);//:
SendDat(0x30+(int)tempdate/100);
SendDat(0x30+(int)tempdate%100/10);
SendDat(0x2e);//.
SendDat(0x30+(int)tempdate%100%10);
//---------------------------------------------------------------
if(EOC==1)
{
OE=1;
getdata=P0;
OE=0;
vtemp=(getdata/51.4)*100;
Volt[0]=0x30+(int)vtemp/100;
Volt[1]=0x2e; //.
Volt[2]=0x30+(int)vtemp%100/10;
Volt[3]=0x30+(int)vtemp%100%10;
//----------第一行---------------------//
SendCMD(0x85);
SendDat(0x3a);//
SendDat(0x30+(int) vtemp/100);
SendDat(0x2e);//.
SendDat(0x30+(int) vtemp%100/10);
SendDat(0x30+(int) vtemp%100%10);
ST=1;
ST=0;
}
/////////////////////////////////////////////////////////////////////////////////////////////////////
/*/--------------------后门报警--------------------------------------- ////////
if( RedwornOne==1|| RedwornTwo==1)// P3_4 || RedwornTwo==P3.5 ////////
{ ////////
longdelay(40); ////////
if(RedwornOne==1) ////////
{ longdelay(40);
SendText_SMS(Homeworn); ////////
for( redtime=20;redtime>0;redtime--) ////////
{ Bell=~Bell; ////////
P3_6 =~ P3_6; ////////
longdelay(200); ////////
////////
} ////////
}
} ////////
////////
//--------------------------煤气检测报警-------------------------------------- ////////
if( P2_0==1 )// RedwornOne==1|| RedwornTwo==1
{ ////////
longdelay(80); ////////
if(P2_0==1 ) // RedwornOne==1|| RedwornTwo==1 ////////
{ longdelay(40);
SendText_SMS(Meiqiworn); ////////
for(redtime=20;redtime>0;redtime--) ////////
{ ////////
P3_7 =~ P3_7;
Bell =~ Bell;
////////
longdelay(200); ////////
////////
} ////////
}
longdelay(5000);
////////
}*/ ////////
////////
/////////////////////////////////////////////////////////////////////////////////////////////////////
//********00(4848)设备1关*********//
if(redata[38]/10==4&redata[38]%10==8&redata[39]/10==4&redata[39]%10==8)
{
redata[38]=0x20;
EquipOne=0;
display(0x94,0xb9,0xd8); //关
longdelay(2000);
SendText_SMS(mgsOK);
//SendTextT_SMS(Telnum,mgsOK);
}
//********01(4849)设备1开*********//
if(redata[38]/10==4&redata[38]%10==8&redata[39]/10==4&redata[39]%10==9)
{
redata[38]=0x20;
EquipOne=1; //开
display(0x94,0xbf,0xaa);
longdelay(1800);
SendText_SMS(mgsOK);
//SendTextT_SMS(Telnum,mgsOK);
}
//********10(4948)设备2关*********//
if(redata[38]/10==4&redata[38]%10==9&redata[39]/10==4&redata[39]%10==8)
{
redata[38]=0x20;
EquipTwo=0; //关
display(0x8c,0xb9,0xd8);
longdelay(2000);
SendText_SMS(mgsOK);
// SendTextT_SMS(Telnum,mgsOK);
}
//********11(4949)设备2开*********//
if(redata[38]/10==4&redata[38]%10==9&redata[39]/10==4&redata[39]%10==9)
{
redata[38]=0x20;
EquipTwo=1; //开
display(0x8c,0xbf,0xaa);
longdelay(2000);
SendText_SMS(mgsOK);
// SendTextT_SMS(Telnum,mgsOK);
}
//********20(5048)设备3关*********//
if(redata[38]/10==5&redata[38]%10==0&redata[39]/10==4&redata[39]%10==8)
{
redata[38]=0x20;
EquipThree=0; //关
display(0x9c,0xb9,0xd8);
longdelay(2000);
SendText_SMS(mgsOK);
//SendTextT_SMS(Telnum,mgsOK);
}
//********21(5049)设备3开*********//
if(redata[38]/10==5&redata[38]%10==0&redata[39]/10==4&redata[39]%10==9)
{
redata[38]=0x20;
EquipThree=1;//开
display(0x9c,0xbf,0xaa);
longdelay(2000);
SendText_SMS(mgsOK);
// SendTextT_SMS(Telnum,mgsOK);
}
//********查温度*********//接收到"TP"时
if(redata[38]/10==8&redata[38]%10==4&redata[39]/10==8&redata[39]%10==0)
{
redata[38]=0x20;
longdelay(2000);
SendText_SMS(Tem);
//SendTextT_SMS(Telnum,Tem);
}
//********查电压*********//接收到"VO"时
if(redata[38]/10==8&redata[38]%10==6&redata[39]/10==7&redata[39]%10==9)
{
redata[38]=9;
longdelay(2000);
SendText_SMS(Volt);
//SendTextT_SMS(Telnum,Volt);
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -