新手入门 
 
	- 积分
 - 26
 
        - 金钱
 - 26 
 
       - 注册时间
 - 2015-5-20
 
      - 在线时间
 - 0 小时
 
 
 
 | 
 
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;   
}  
} |   
 
 
 
 
 
 |