附录Ⅰ
主要程序代码
1、MAIN.C 主程序代码如下: #include
LED1=0; //注册指示灯 开 Start_GSM(); //开启TC35 Delay_ms(46000); //延时大约20秒 ,等待模块联网/ UART_init(); //串口初始化/ GSM_INIT(); //对tc35模块进行初始化 //Write_Password(); Read_Password();
LED1=1; //注册指示灯 开 while(1) { receive_ready(); //此函数的功能是判断是否有新短信来,如果来的话就置位 receiveready 为1 if(receiveready==1) { LED2=0; read_message(); //发送读取短信指令 receiveready=0; sendready=1; // LED2=1; } Delay_ms(300); message_read(); //判断短信,准备是否回复短信给目标号码 if(send==1) { Delay_ms(2000); readcommend(); //读取短信内容,做出相应操作:开关继电器等 sendmessage(); //发送回复短信指令 其中 包含提取对方手机号操作 Delay_ms(1000); delete_message(); //删除读短信指令
39
flag=0; for(Rx=0;Rx if(BaoJing==1) { sendBaoJing(); BaoJing=0; Delay_ms(6000); LED4=1; } } } /******************************************************************************************************************/ ////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ///////////////////函数void receive(void) interrupt 4 using 1;实现功能:通过串口接收数据/////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////////////////////////////////// /******************************************************************************************************************/ void receive(void) interrupt 4 { if(RI) { if(Rx SystemBuf[Rx]=SBUF; Rx++; } RI=0; } } /****************************************************************************************************** 40 ////////////////////////////////////void int0(void) interrupt 0 :实现功能: 实现紧急短信报警 ********************************************************************************************************/ void int0(void) interrupt 0 { BaoJing=1; LED4=0; } /************************************************************************************** //////////////////////////// ***************************************************************************************/ 2、TC35.C #include uchar code AT[]=\ //握手信号 uchar code ATE[]=\ //关回显 uchar code AT_CNMI[]=\ //设置这组参数来了新信息直接显示到串口,不作存储 uchar code AT_CSCA[]=\//设置服务中心号码 徐州移动 +8613800516500 徐州联通 +8613010350500 uchar code AT_CMGF[]=\ //设置短信的格式为text格式 uchar code AT_CMGR[]=\ //读取短信指令 uchar code AT_CMGS[]=\ //发送短信指令 uchar code AT_CMGD[]=\ //删除短信指令 uchar code successfully[]=\//发送操作成功信息到目标号码 uchar code fail[]=\ //发送操作失败信息到目标号码 uchar code danger[]=\ //发送警报信息 提示有人闯入、煤气泄漏、失火的信息 uchar code MyTel[]=\ //我的手机号码 41 uchar AT_delete[12]; uchar AT_Read[12]; //用来存储发送读取短信指令 uchar AT_SendNumber[25]; //用来存储发送短信号码指令 uchar numberbuf[3]; //用来保存短信条数 uchar idata SystemBuf[RxIn]; //储存出口接收数据 uchar CommandBuf[8]; //用来储存指令 uchar Rx=0; // uchar idata state[17]; //用来存储IO口状态 //uint temp; //记录状态 //uchar temp1; //用于记录P0口状态 //uchar temp2; //用于记录P2口状态 //bit check=0; //查询标志位 bit receiveready=0; //接收短信标志位 bit sendready=0; //发送短信准备标志位 bit send=0; //发送短信标志位 bit flag=0; //指令标志位 bit BaoJing=0; //报警标志位! /******************************************************************************************************************/ ////////////////////////////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////函数void UART_init;实现功能:对串口进行初始化//////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////////////////////////////////// /******************************************************************************************************************/ void UART_init (void) { TMOD=0x20; //选择定时器1 PCON=0x00; ///波特率不加倍 SCON=0x50; //串行工作方式1允许串行接收 TH1=0xFD; //实验板上晶振位11.0592MHZ,选择波特率为9600 TL1=0xFD; //在相应计数器上赋值 EA=1; //总中断开启 EX0=1; //外部中断0允许位 IT0=0; //跳变沿触发方式,从高-->低的负跳变有效 ES=1; //串行中断开启 TR1=1; //开启定时器1 } /******************************************************************************************************************/ ////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 42 /////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////函数void sendchar(uchar ch);实现功能:发送一字节数据//////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////////////////////////////////// /******************************************************************************************************************/ void sendchar(uchar ch) { SBUF=ch; while(TI==0); TI=0; } /******************************************************************************************************************/ ////////////////////////////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////函数void sendstring(uchar *p);实现功能:通过串口发送字符串///////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////////////////////////////////// /******************************************************************************************************************/ void sendstring(uchar *p) { while(*p) { sendchar(*p); p++; } sendchar(0x0D);//? 回车 sendchar(0x0A);//? 换行 } /******************************************************************************************************************/ ////////////////////////////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////函数void Start_GSM(void);实现功能:对TC35进行启动,开启TC35/////////////////////////////////// //功能详述:单片机上的IGT管脚是跟TC35的IGT管脚相连;需要启动TC35,必须在 15脚(/IGT)加时长至少为100ms的低电平信号, ///且该信号下降沿时间小于1ms。启动后,15 脚的信号应保持高电平. /////////////////////////////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////////////////////////////////// /******************************************************************** 43