OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 7970|回复: 6

基于TC35I模块的51单片机家庭防盗报警系统

[复制链接]

1

主题

2

帖子

0

精华

新手入门

积分
26
金钱
26
注册时间
2015-5-20
在线时间
0 小时
发表于 2015-5-20 20:50:20 | 显示全部楼层 |阅读模式
5金钱
本人买了一块TC35I模块(程序中用的是TC35),想利用开发板设计一个防盗报警的毕设。程序如下,能生成hex文件。但不知道如何连接实物图,准确的说是TC35I与单片机之间只需连TXD,RXD,GND这几个引脚吗???那么该系统里传感器有改接单片机哪个引脚???因为程序中好像把P3^0定义为光电传感器的输出信号端了。还望大神能帮我看看,感激不尽。


程序功能:是入室开门触发光电传感器输出信号电平取反,51单片机IO口识别并触发TC35向客户端间隔1min发送报警短信,若客户端未及时回复短信系统默认客户未发现已收到短信,触发TC35拨打客户手机
#include <reg52.h> 
#include <intrins.h> 
#include <string.h>   //字符串处理函数
#include <stdio.h>     //文件类型指针
#define uint unsigned int 
#define uchar unsigned char   
#define RxIn 90    //定义接收的数组长度为90
uchar idata SystemBuf[RxIn];    //储存出口接收数据
uchar code AT[]="AT"; //握手信号 
uchar code ATE[]="ATE";  //关回显  
uchar code AT_CNMI[]="AT+CNMI=2,1";//设置这组参数来了新信息直接显示到串口,不作存储  uchar code AT_CSCA[]="AT+CSCA=\"+8618860905485\"";//设置服务中心号码 AT+CSCA=\"+8613010360500\"  
uchar code AT_CMGF[]="AT+CMGF=1";//设置短信的格式为text格式
uchar code AT_CSCA[]="AT+CSCA=\"+8613800391500\"";//设置服务中心号码
uchar code godphone[11]="18236882422";//客户端号码  
uchar code AT7[]={0x41,0x54,0x2B,0x43,0x4D,0x47,0x53,0x3D};//AT+CMGS=     即发送短信客户端号码指令   eg:AT+CMGS=13771992474  回车 发送  
uchar code AT12[]={0x41,0x54,0x44,0x3E};//ATD>    即拨打客户端电话指令   eg:呼叫13973292929,则为ATD13973292929  
uchar code warning[]="warning! if you get it, please send get it to me"; 
uchar Rx=0;
uchar i;  
uchar rec_flag=0; 
uchar flag=0;  
sbit sig=P3^0; //检测信号源的高低电平
void Delay_ms(uint ms)// 延时子程序 

uchar i;     
while(ms--)     
       { 
        for(i=0;i<120;i++);     
  } 
}

void sendchar(uchar ch)//发送单个字符 
{      
SBUF=ch; //送入缓冲区,SBUF串口的缓冲寄存器      
while(TI!=1); //等待发送完毕     
TI=0; //软件清零 ,串口通信工作原理
}


void sendstring(uchar *str)//通过串口发送字符串 
{      
while(*str!='\0')    //"\0"的ASCII码为0,作为字符串结束打的标志 
{          
sendchar(*str);         
Delay_ms(2);         
str++;     
}   
sendchar(0x0D);   
sendchar(0x0A); 
}


void senddata(uchar dat) /*发送数据函数*/ 
{       
SBUF =dat;      
while(!TI);      
TI = 0; 
}


void mingling(uchar zijie,uchar *p) /*发送数组函数*/
 {   
uchar m;      
for(m=0;m<zijie;m++)   
{    
senddata(p[m]);   

}



void clearBuff(void)  //清空
{      
for(Rx=0;Rx<RxIn;Rx++)     
{           
SystemBuf[Rx]=0x00;     
}      
Rx=0;
 }   


/*void Start_GSM(void) 
{    
IGT=0;    
Delay_ms(1000);   
IGT=1; 
Delay_ms(1000);
} */ 




void UART_init (void) /*对串口进行初始化*/ 
{      
TMOD=0x20;  //选择定时器1,T1方式2,用于UART波特率      
PCON=0x00; ///波特率不加倍      
SCON=0x50; //串行工作方式1允许串行接收         
TH1=0xFD; //实验板上晶振位11.0592MHZ,选择波特率为9600      
TL1=0xFD; //在相应计数器上赋值      
EA=1;  //总中断开启      
ES=1;  //串行中断开启      
TR1=1;  //开启定时器1
}   


void receive() interrupt 4 using 1 //通过中断,单片机串口接收TC35回复的数据 
{  
if(RI)   //RI为接收中断标志
{   
if(Rx<RxIn)   
{     
SystemBuf[Rx]=SBUF;    
Rx++;   
}   
RI=0; 
}
}    




void GSM_INIT(void)  /*初始化TC35模块*/ 
{  
LOOP:  
Delay_ms(1000);  
sendstring(AT);  
Delay_ms(1000);     
sendstring(ATE);   
Delay_ms(1000);    
sendstring(AT_CNMI);  
Delay_ms(1000);    
sendstring(AT_CSCA);  
Delay_ms(1000);   
clearBuff();       
sendstring(AT_CMGF);    
Delay_ms(1000);    
if((SystemBuf[2]=='O')&&(SystemBuf[3]=='K'))  //判断是否模块初始化成功,成功的话模块会回复"OK"给单片机     
{           //如果单片机没有收到OK,就继续发送初始化指令/   
clearBuff();      
}     
else      
{                         
clearBuff();          
goto LOOP;                

}    


void receivedmessage_flag(void)  /*接收短信准备*/  
{  
if((SystemBuf[5]==0x54)&&SystemBuf[6]==0x49)   //如果有新短信来,模块会通过串口向单片机发送字符串, TI  
{              // 此函数的功能是判断是否有新短信来,如果来的话就置位准备接受位标志为1   
rec_flag=1;  
}  
else  
{   
clearBuff();  
}  
clearBuff(); 
}   


void call(void) 
{  
uint x;  
mingling(3,AT12);  
for(x=0;x<11;x++)  
{   
senddata(godphone[x]);  
}  
senddata(0x3b);//打电话的时候需要在电话号面跟随一个分号  
senddata(0x0D);//回车  
}   


void sendmessage(void)
{  
uint x;  
mingling(8,AT7);
for(x=0;x<11;x++)  
{   
senddata(godphone[x]);  
}  
senddata(0x0D);  
Delay_ms(100);  
sendstring(warning); 
}   



void main() 
{  
//Start_GSM();   
Delay_ms(10000);  
UART_init();  
GSM_INIT();  
while(sig==1&&flag==0)  
{    
while(rec_flag==0&&i<3)//flag=1表示客户端已看到发送过去的短信并回复了get it;系统未收到回复短信则默认客户端没发现收到的短信                         
//当对客户端发送第三次短信时若有回复flag=1 i=3;若无回复则flag=0 i=3    
{  
sendmessage();      
Delay_ms(60000);     
receivedmessage_flag();     
i=i+1;    
}    
if(rec_flag==0&&i==3)    
{     
call();    
}   
i=0;   
flag=1;  

}

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165369
金钱
165369
注册时间
2010-12-1
在线时间
2110 小时
发表于 2015-5-20 23:02:44 | 显示全部楼层
回复

使用道具 举报

48

主题

132

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
359
金钱
359
注册时间
2015-4-6
在线时间
3 小时
发表于 2015-5-20 23:21:40 | 显示全部楼层
TC35I不是停产了吗
回复

使用道具 举报

11

主题

193

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
425
金钱
425
注册时间
2013-3-19
在线时间
20 小时
发表于 2015-5-21 12:47:36 | 显示全部楼层
TXD,RXD,GND只需要好单片机连接着三个就可以了,当然也要给TC35模块供电。P1,P2口都可以接传感器啊!!
回复

使用道具 举报

1

主题

2

帖子

0

精华

新手入门

积分
26
金钱
26
注册时间
2015-5-20
在线时间
0 小时
 楼主| 发表于 2015-5-22 19:58:56 | 显示全部楼层
回复【4楼】精神不死6530:
---------------------------------
试过这个,程序应该没错,但还是发送不了。大神,已把细节短信发给你了。希望能帮本人看看,感激不尽。
回复

使用道具 举报

1

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
56
金钱
56
注册时间
2018-7-22
在线时间
6 小时
发表于 2018-8-28 17:17:57 | 显示全部楼层
987695640 发表于 2015-5-20 23:21
TC35I不是停产了吗

15年就停产了?
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
3
金钱
3
注册时间
2019-9-22
在线时间
0 小时
发表于 2019-9-23 17:46:15 | 显示全部楼层
这个我也想问
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-1 06:47

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表