智能家居控制系统 开发 教程 下载 66P
目 录引言................................................. 31绪 论.............................................. 41.1课题背景.............................................................. 41.2智能家居控制系统的概述................................................ 51.3 课题研究的目的及意义.................................................. 61.4 系统设计主要任务...................................................... 62方案设计........................................... 72.1 系统总体设计与分析.................................................... 72.1.1单片机控制部分...................................................... 72.1.2系统工作流程部分.................................................... 82.2远程控制设计与分析.................................................... 82.2.1控制系统设计分析.................................................... 82.2.2 控制要求............................................................ 92.2.3单元功能模块........................................................ 92.3传感器信号采集设计与分析.............................................. 92.3.1 防火灾发生传感器.................................................... 92.3.2可燃气体泄漏传感器................................................. 102.3.3防盗传感器......................................................... 102.3.4 信号采集设计与分析................................................. 102.4 GSM模块的接口与设计................................................. 102.4.1 TC35模块组成...................................................... 102.4.2 TC35模块通信电路.................................................. 102.4.3 TC35模块与MCU连接方式............................................ 102.5 红外学习遥控设计..................................................... 112.5.1 红外学习遥控的设想................................................. 112.5.2 红外学习遥控的实现................................................. 113硬件电路设计....................................... 123.1相关芯片及模块简介................................................... 123.1.1 MCU SM8952AC25P简介............................................... 123.1.2 双音多频收发器MT8870简介.......................................... 123.1.3 ISD2500系列单片语音录放简介....................................... 133.1.4 固态继电器(SSR)简介................................................ 133.2远程控制电路设计..................................................... 133.2.1振铃检测电路....................................................... 133.2.3 双音频解码电路..................................................... 153.2.4 语言提示电路....................................................... 163.3电源电路设计......................................................... 173.3.1 5V开关电源稳压器电路.............................................. 173.3.2 其他电源稳压器电路................................................. 173.4TC35短消息模块电路设计.............................................. 173.4.1 TC35短消息模块接口电路............................................ 173.4.2 TC35短消息模块控制设计............................................ 183.5红外学习遥控电路设计................................................. 193.5.1 红外学习遥控接收电路设计........................................... 193.5.2 红外学习遥控发送电路设计........................................... 194软件部分.......................................... 194.1 下位机编程........................................................... 194.1.1 主控单片机系统软件设计............................................. 194.1.2远程控制程序设计................................................... 214.1.3短信息发送程序设计................................................. 224.1.4红外学习遥控程序设计............................................... 234.2 上位机(PC机)编程.................................................. 244.2.1 用户界面的设计..................................................... 244.2.2 串行通信的实现..................................................... 244.2.3控件MSComm使用方法................................................ 255系统制作及调试..................................... 265.1使用的仪器仪表及工具................................................. 275.2硬件制作与调试....................................................... 275.2.1系统PCB板的设计................................................... 275.2.2系统硬件调试....................................................... 275.3软件及联机调试....................................................... 285.3.1主控程序调试....................................................... 285.3.2短消息发送调试..................................................... 286结论............................................. 29谢辞.............................................. 30附录1............................................... 32附录2............................................... 54附录3............................................... 62
引言
21世纪是信息化的世纪,各种电信和互联网新技术推动了人类文明的巨大进步。本文介绍的数字化家居控制系统可以使得人们可以通过手机或电话在任何时候、任意地点对家中的任意电器(空调、热水器、电饭煲、灯光、音响、DVD录像机)进行远程控制;也可以在下班途中,预先将家中的空调打开、让热水器提前烧好热水、电饭煲煮好香喷喷的米饭……;而这一切的实现都仅仅是打一个简单的电话。此外,该系统还可使家庭具有多途径报警、远程监控等多种功能,如果不幸出现某种险情,您和110可以在第一时间获得通知以便进一步采取行动。舒适、时尚的家居生活是社会进步的标志,智能家居控制系统能够在不改变家中任何家电的情况下,对家里的电器、灯光、电源、家庭环境进行方便地控制,使人们尽享高科技带来的简便而时尚的现代生活。实现智能化离不开运算和控制单元,本系统采用MCU(SM8952AC25P)作为主控器件,单片机应用系统由硬件和软件组成。硬件由单片机扩展的存储器、输入/出设备以及各种实现单片机系统控制要求的接口电路和有关的外围电路芯片或部件组成;软件由单片机应用系统实现其特定控制功能的各种工作程序和管理程序组成。在单片机应用系统开发的过程中,应不断调整软、硬件,协调地进行软、硬件设计,以提高工作效率,当系统硬件和软件紧密配合、协调一致,就可以组成高性能的单片机应用系统。本课题完成了单片机应用系统其开发过程的系统的总体设计、硬件设计、软件设计和系统调试,根据开发的实际需要,相互协调、交叉,有机的进行。本设计的MCU与各个芯片和模块的接口、各项标准都严格遵循国家有关标准,为以后的产品化提供了良好的基础。本系统的电话远程控制是基于电话交换网络的国际双音频通信标准DTMF通信方式,程控交换信令作为系统控制命令,采用MT8870双音频编解码电路实现,单片机通过MT8870识别来自电话程控交换机的网络的控制信号,用户只需拨通家中的电话可以根据系统的语音提示进行按键选择以实现用户身份的识别、远程控制和安防操作;各种传感器的检测是利用数据采集系统将多路被测量值转换成数字量,再经过单片机进行数据处理,实现实时测控;短消息发送部分采用基于SIEMENS TC35 GSM模块TC35 modem 和TI公司的电平转换芯片MAX3238等器件构成的移动终端的硬件电路可以完成短消息收发等功能。在设计本系统时,面对各种检测对象和大量控制单元,需要利用各种接口标准和MCU进行连接,再经过MCU进行数据处理,实现实时测控。而此时采用单片机来实现智能家居控制系统不仅具有采集控制方便、简单、灵活等优点,而且可以大幅度提高采各模块和芯片的协调性,从而大大提高系统的可利用性。此次系统设计统正是把MT8870、TC35 modem与SM8952AC25P单片机有机的结合起来,顺利的完成了本设计的要求。并且实现了学习型远程红外遥控功能,为控制红外家电和设备提供了良好的基础。本系统也可应用于工农业中,实现对无人值守岗位的远程监控等。1 绪 论1.1 课题背景21世纪是信息时代,各种电信新技术推动了人类文明的进步。自从1876年,Alexander Graham Bell(贝尔)发明电话以来,世界各国的电话网络发展非常迅速,近十年来,中国的固定电话业务呈现出举世瞩目的快速增长。1997年8月局用电话交换机总容量突破1亿门,网络规模跃居世界第二位,2006年初固定电话用户总数达到35539.2万户,移动电话用户达到40407.2万户,现代电话网络是由程控交换机进行交换传输,移动通信也从模拟时代走向了高度数字化时代,它们的性能已经有了很大的进展,而且可靠性非常高。正是因为通信技术、计算机技术、网络技术、控制技术的迅猛发展与提高,促使了家庭实现了生活现代化,居住环境舒适化、安全化。这些高科技已经影响到人们生活的方方面面,改变了人们生活习惯,提高了人们生活质量,家居智能化也正是在这种形势下应运而生的。智能家居控制系统的主要功能包括通信、设备自动控制、安全防范三个方面。随着新技术和自动化的发展,传感器的使用数量越来越大,功能也越来越强,各种传感器都已经标准化、模块化这给智能家居控制系统的设计提供极大方便。电话远程控制作为一较新的课题与常规的遥控方式相比,显示出一定的优越性,不需进行专门的布线,不占用无线电频率资源,避免了电磁污染。同时,由于电话线路各地联网,可以充分利用现有的电话网,因此遥控距离可跨省市,甚至跨越国家。另外电话属双工通信手段。因此,这可以大大体现出利用电话进行遥控的更大优越性。操作者可以通过各种提示音即时了解受控对象的有关信息,从而进行进一步的操作。电话遥控部分课题目前已有涉足者,但是只是还只限于实验室阶段,因而距离实际应用,尤其是对于日常生活尚有一定的差距,并不能完全体现出电话遥控方式的双工通信特点。本设计正是针对这一点进行了较大改进,采取单片机智能控制,利用不同的提示音达到对于不同操作的提示及对受控方状态的信息反馈,从而使操作者能够及时了解受控方信息,使产品达到交互式与智能化。而且本设计的调试都是在线调试,已经在电信、铁通的交换机实验并且能够成功的使用移动电话进行操作。
短信息服务(ShortMessage Service,SMS)是GSM(Global System for Mobile Comm unication)系统中提供的一种GSM终端(手机)之间,通过服务中心(service center)进行文本信息收发的应用服务,其中服务中心完成信息的存储和转发功能。短信息服务作为GSM网络的一种基本业务,已得到越来越多的系统运营商和系统开发商的重视,基于这种业务的各种应用也蓬勃发展起来。由于GSM网络在全国范围内实现了联网和漫游,具有网络能力强的特点,用户无需另外组网,在极大提高网络覆盖范围的同时为客户节省了昂贵的建网费用和维护费用。同时,他对用户的数量也没有限制,克服了传统的专网通信系统投资成本大、维护费用高、且网络监控的覆盖范围和用户数量有限的缺陷。比传统的集群系统在无线网络覆盖上具有无法比拟的优势,加上GSM的SMS本身具备的数据传送功能,都使得这些应用得到迅速的普及。利用GSM短信息系统进行无线通信还具有双向数据传输功能,性能稳定,为远程数据传送和监控设备的通信提供了一个强大的支持平台。在此以GSM网络作为数据无线传输网络,它可以应用在银行、储蓄点机房监控、电信机房动力环境监控、通信行业远端无人值守站机房监控和远程维护(如移动通信基站、微波站、光纤中继站等)及其他无人值守点(如仓库、办公楼等)监控及城市公用事业实时监控维护系统像煤气调压站、自来水、污水管网和热力系统、电力系统城市中电网等情况中。在此本系统采用了Siemens公司新一代无线通信GSM模块TC35是,它设计小巧、功耗很低很大程度上方便了智能家居控制系统的设计。
http://bbs.mywll.com/thread-68862-1-1.html
hen hao ,wo zhuangl :lol:lol:lol:lol我是伸手党 这个东东应该不错:P:lol /*****************************************************************************
* 智能家居控制系统程序
* 单片机采用AT89S52,晶振频率为:12.00MHz。
/******************************************************************************/
#include <AT89X55.H>
bit r_flag;
enumeepromtype{M2401,M2402,M2404,M2408,M2416,M2432,M2464,M24128,M24256};
extern bit RW24XX(unsigned char *DataBuff,unsigned char ByteQuantity,unsigned int Address,
unsigned char ControlByte,enum eepromtype EepromType);
sbit key = P2^0;
bit key_flag;
sbit dog = P0^7;
sbit LED = P0^0;
sbit TELA = P3^6;
sbit TEL= P3^7;
sbit RING= P3^2;
sbit switching =P0^4;
unsigned char mode;
bit passwordflag;
unsigned char password;
unsigned char passwordtest;
void dlms(unsigned int x);
void reset(void);
void open(void);
//****************************************************************//
// INT1中断服务程序 //
//****************************************************************//
unsigned char ring_fluctuation;
unsigned char ring_count;
bit ring_flag;
void service_int0() interrupt 0 using 1
{
if(ring_fluctuation<10)
{
ring_fluctuation++;
}
}
//****************************************************************//
// t1 定时中断 //
//****************************************************************//
unsigned char ring_dlsm;
unsigned char ring_time;
unsigned int ring_reset_time;
unsigned char dlms_time;
void timer1 (void) interrupt 3 using 0
{
TH1=0x3c;
TL1=0xb0;
dlms_time++;
if(ring_fluctuation>5)
{
EX0=0;//INT1_OFF;
ring_dlsm++;
if(ring_dlsm==20)//等待一秒
{
ring_dlsm=0;
EX0=1;//INT1_ON;
ring_fluctuation=0;
ring_count++;//震铃次数
if(ring_flag)//有效振铃
{
if(ring_count==6)
{
ring_count=7;
mode=1;
}
}
else//无效振铃
{
if(ring_count>2)
{
ring_reset_time=800;
}
}
}
}
if((ring_count==2)|(ring_count==1))
{
ring_time++;
if(ring_time==200)
{
ring_flag=1;
}
}
if((ring_count>0)&(ring_count<6))
{
LED=INT0;
}
else if(passwordflag)
{
LED=~LED;
}
if(ring_count>0)
{
ring_reset_time++;
if(ring_reset_time==1100)//55s
{
reset();
LED=0;
dlms(100);
LED=1;
dlms(100);
LED=0;
dlms(100);
LED=1;
dlms(100);
LED=0;
dlms(100);
LED=1;
dlms(100);
LED=0;
dlms(100);
LED=1;
dlms(100);
LED=0;
dlms(100);
LED=1;
dlms(100);
LED=0;
dlms(100);
LED=switching;
}
}
}
//****************************************************************//
// INT1中断服务程序 //
//****************************************************************//
unsigned char DTMF;
void service_int1() interrupt 2 using 1
{
EX1=0;
DTMF=P1;
DTMF=DTMF>>4;
}
void main(void)
{
TMOD=0x11;
TH1=0x3c;
TL1=0xb0;
TR1=1;
ET1=1;
IT0=1;
EX0=1;
IT1=0;
EX1=1;
reset();
EA=0;
r_flag=RW24XX(password,6,0x0000,0xa1,M2402);//R
if(P2_0==0)
dlms(20);
if(P2_0==0)
{
ring_flag=1;
mode=1;
passwordflag=1;
ring_count=7;
ring_fluctuation=6;
}
EA=1;
while(1)
{
open();
dog=~dog;
switch(mode)
{
case 0:;
break;
case 1:
TEL=1;
LED=0;//
dlms_time=0;
ring_reset_time=0;
while(dlms_time<40)
{
dlms(1);
TELA=~TELA;
}
ring_reset_time=0;
LED=1;//
TELA=0;
mode++;
DTMF=255;
EX1=1;
LED=switching;
break;
case 2://password
if(DTMF!=255)
{
passwordtest=DTMF;
if(INT1==1)
{
dlms_time=0;
while(dlms_time<2);
if(INT1==1)
{
DTMF=255;
mode++;
dlms_time=0;
while(dlms_time<10)
{
dlms(2);
TELA=~TELA;
}
EX1=1;
TELA=0;
}
}
}
break;
case 3://password
if(DTMF!=255)
{
passwordtest=DTMF;
if(INT1==1)
{
dlms_time=0;
while(dlms_time<2);
if(INT1==1)
{
DTMF=255;
mode++;
dlms_time=0;
while(dlms_time<10)
{
dlms(2);
TELA=~TELA;
}
EX1=1;
TELA=0;
}
}
}
break;
case 4://password
if(DTMF!=255)
{
passwordtest=DTMF;
if(INT1==1)
{
dlms_time=0;
while(dlms_time<2);
if(INT1==1)
{
DTMF=255;
mode++;
dlms_time=0;
while(dlms_time<10)
{
dlms(2);
TELA=~TELA;
}
EX1=1;
TELA=0;
}
}
}
break;
case 5://password
if(DTMF!=255)
{
passwordtest=DTMF;
if(INT1==1)
{
dlms_time=0;
while(dlms_time<2);
if(INT1==1)
{
DTMF=255;
mode++;
dlms_time=0;
while(dlms_time<10)
{
dlms(2);
TELA=~TELA;
}
EX1=1;
TELA=0;
}
}
}
break;
case 6://password
if(DTMF!=255)
{
passwordtest=DTMF;
if(INT1==1)
{
dlms_time=0;
while(dlms_time<2);
if(INT1==1)
{
DTMF=255;
mode++;
dlms_time=0;
while(dlms_time<10)
{
dlms(2);
TELA=~TELA;
}
EX1=1;
TELA=0;
}
}
}
break;
case 7://password
if(DTMF!=255)
{
passwordtest=DTMF;
if(INT1==1)
{
dlms_time=0;
while(dlms_time>2);
if(INT1==1)
{
DTMF=255;
mode++;
//EX1=1;
}
}
}
break;
case 8:
if(passwordflag==0)
{
if((passwordtest==password)&(passwordtest==password)&(passwordtest==password)&(passwordtest==password)&(passwordtest==password)&(passwordtest==password))
{
mode++;
dlms_time=0;
}
else
{
reset();
}
}
else
{
dlms_time=0;
while(dlms_time<10)
{
dlms(2);
TELA=~TELA;
}
TELA=0;
password=passwordtest;
password=passwordtest;
password=passwordtest;
password=passwordtest;
password=passwordtest;
password=passwordtest;
EA=0;
r_flag=RW24XX(password,6,0x0000,0xa0,M2402);//W
EA=1;
reset();
}
break;
case 9:
while(dlms_time<20)
{
dlms(1);
TELA=~TELA;
}
while(dlms_time<25)
{
}
while(dlms_time<45)
{
dlms(1);
TELA=~TELA;
}
TELA=0;
EX1=1;
mode++;
break;
case 10:
switch(DTMF)
{
case 1:
if(ring_reset_time<1050)
{
dlms_time=0;
switching=0;
LED=0;
while(dlms_time<10)
{
}
while(dlms_time<20)
{
dlms(2);
TELA=~TELA;
}
while(dlms_time<30)
{
}
while(dlms_time<40)
{
dlms(2);
TELA=~TELA;
}
TELA=0;
DTMF=255;
EX1=1;
}
break;
case 2:
if(ring_reset_time<1050)
{
dlms_time=0;
switching=1;
LED=1;
while(dlms_time<10)
{
}
while(dlms_time<20)
{
dlms(4);
TELA=~TELA;
}
while(dlms_time<30)
{
}
while(dlms_time<40)
{
dlms(4);
TELA=~TELA;
}
TELA=0;
DTMF=255;
EX1=1;
}
break;
case 12:
reset();
break;
}
break;
//--------------------------------------------------------------------//
default:;
//--------------------------------------------------------------------//
}
}
}
void reset(void)
{
TEL=0;
TELA=0;
ring_fluctuation=0;
ring_count=0;
ring_flag=0;
ring_dlsm=0;
ring_time=0;
dlms_time=0;
ring_reset_time=0;
key_flag=0;
mode=0;
EX1=1;
DTMF=255;
LED=switching;
passwordflag=0;
passwordtest=255;
passwordtest=255;
passwordtest=255;
passwordtest=255;
passwordtest=255;
passwordtest=255;
}
void open(void)
{
if((key==0)&(key_flag==0)&(passwordflag==0))
{
dlms_time=0;
while(dlms_time<2);
if(key==0)
{
reset();
key_flag=1;
switching=~switching;
LED=switching;
dlms_time=0;
}
}
if((key==1)&(dlms_time>10))
{
key_flag=0;
}
}
void dlms(unsigned int x)
{
unsigned int i;
while (x-->0)
{
dog=~dog;
for (i=0;i<163;i++)
{;}
}
}
//24cxx
//----------------------------------------------START----------------------------------------------//
//enumeepromtype{M2401,M2402,M2404,M2408,M2416,M2432,M2464,M24128,M24256};
//extern bit RW24XX(unsigned char *DataBuff,unsigned char ByteQuantity,unsigned int Address,
// unsigned char ControlByte,enum eepromtype EepromType);
//flag=RW24XX(&x,1,0x0000,0xa0,M24256);//W24C256
//flag=RW24XX(&x,1,0x0000,0xa1,M24256);//R24C256
#include <AT89X55.H>
//#pragmaot(6,SIZE)
#include <intrins.h>
#defineERRORCOUNT 10
sbit SDA=P2^7;//对应硬件
sbit SCL=P2^6;//对应硬件
enumeepromtype{M2401,M2402,M2404,M2408,M2416,M2432,M2464,M24128,M24256};
enumeepromtype EepromType;
/***********************************************************************************/
//DataBuff为读写数据输入/输出缓冲区的首址
//ByteQuantity 为要读写数据的字节数量
//Address 为EEPROM的片内地址
//ControlByte 为EEPROM的控制字节,具体形式为(1)(0)(1)(0)(A2)(A1)(A0)(R/W),其中R/W=1,
//表示读操作,R/W=0为写操作,A2,A1,A0为EEPROM的页选或片选地址;
//EepromType为枚举变量,需为M2401至M24256中的一种,分别对应24C01至24C256;
//函数返回值为一个位变量,若返回1表示此次操作失效,0表示操作成功;
//ERRORCOUNT为允许最大次数,若出现ERRORCOUNT次操作失效后,则函数中止操作,并返回1
/***********************************************************************************/
extern bit RW24XX(unsigned char *DataBuff,unsigned char ByteQuantity,unsigned int Address,
unsigned char ControlByte,enum eepromtype EepromType)
{
void Delay(unsigned char DelayCount);
void IICStart(void);
void IICStop(void);
bitIICRecAck(void);
void IICNoAck(void);
void IICAck(void);
unsigned char IICReceiveByte(void);
void IICSendByte(unsigned char sendbyte);
unsigned char data j,i=ERRORCOUNT;
bit errorflag=1;
while(i--)
{
IICStart();
IICSendByte(ControlByte&0xfe);
if(IICRecAck())
continue;
if(EepromType>M2416)
{
IICSendByte((unsigned char)(Address>>8));
if(IICRecAck())
continue;
}
IICSendByte((unsigned char)Address);
if(IICRecAck())
continue;
if(!(ControlByte&0x01))
{
j=ByteQuantity;
errorflag=0; //********clr errorflag
while(j--)
{
IICSendByte(*DataBuff++);
if(!IICRecAck())
continue;
errorflag=1;
break;
}
if(errorflag==1)
continue;
break;
}
else
{
IICStart();
IICSendByte(ControlByte);
if(IICRecAck())
continue;
while(--ByteQuantity)
{
*DataBuff++=IICReceiveByte();
IICAck();
}
*DataBuff=IICReceiveByte(); //read last byte data
IICNoAck();
errorflag=0;
break;
}
}
IICStop();
if(!(ControlByte&0x01))
{
Delay(255);
Delay(255);
Delay(255);
Delay(255);
}
return(errorflag);
}
/*****************以下是对IIC总线的操作子程序***/
/*****************启动总线**********************/
void IICStart(void)
{
SCL=0; //
SDA=1;
SCL=1;
_nop_();
_nop_();
_nop_();
SDA=0;
_nop_();
_nop_();
_nop_();
_nop_();
SCL=0;
SDA=1; //
}
/*****************停止IIC总线****************/
void IICStop(void)
{
SCL=0;
SDA=0;
SCL=1;
_nop_();
_nop_();
_nop_();
SDA=1;
_nop_();
_nop_();
_nop_();
SCL=0;
}
/**************检查应答位*******************/
bit IICRecAck(void)
{
SCL=0;
SDA=1;
SCL=1;
_nop_();
_nop_();
_nop_();
_nop_();
CY=SDA; //因为返回值总是放在CY中的
SCL=0;
return(CY);
}
/***************对IIC总线产生应答*******************/
void IICACK(void)
{
SDA=0;
SCL=1;
_nop_();
_nop_();
_nop_();
_nop_();
SCL=0;
_nop_();
SDA=1;
}
/*****************不对IIC总线产生应答***************/
void IICNoAck(void)
{
SDA=1;
SCL=1;
_nop_();
_nop_();
_nop_();
_nop_();
SCL=0;
}
/*******************向IIC总线写数据*********************/
void IICSendByte(unsigned char sendbyte)
{
unsigned char data j=8;
for(;j>0;j--)
{
SCL=0;
sendbyte<<=1; //无论C51怎样实现这个操作,始终会使CY=sendbyte^7;
SDA=CY;
SCL=1;
}
SCL=0;
}
/**********************从IIC总线上读数据子程序**********/
unsigned char IICReceiveByte(void)
{
register receivebyte,i=8;
SCL=0;
while(i--)
{
SCL=1;
receivebyte=(receivebyte<<1)|SDA;
SCL=0;
}
return(receivebyte);
}
/***************一个简单延时程序************************/
void Delay(unsigned char DelayCount)
{
while(DelayCount--);
}
/*****************************************************************************
* 智能家居控制系统VB上的代码
* 单片机采用AT89S52,晶振频率为:12.00MHz。
/******************************************************************************/
PC上位机调试程序
Private Declare Function TextToSms Lib "SMSDLL.dll" (ByVal csc As String, ByVal ToNum As String, ByVal smsnr As String, ByVal flash As Integer, ByVal reportit As Integer, ByRef sms_len As Integer, ByVal retSms As String) As Integer
Private Declare Function About Lib "SMSDLL.dll" ()
Private Declare Function SmsToText Lib "SMSDLL.dll" (ByVal sms As String, ByVal csca As String, ByRef caca_len, ByVal ToNum As String, ByRef ToNum_len As Integer, ByVal sendtime As String, ByRef time_len As Integer, ByVal smsnr As String) As Integer
Dim i(6) As Byte 'tl
Dim display() As Byte 'tl
Dim test As Byte 'tl
Dim j As Byte
Private Sub Command1_Click()
'将信息编码成一条短消息
Dim s As String
Dim s1 As String
Dim s2 As String
Dim r As Integer
Dim f As Integer
Dim sms_len As Integer
r = CInt(Check1.Value)
f = CInt(Check2.Value)
Dim rsms As String * 400
If Text3.Text = "" Then
MsgBox "请输入短消息内容"
Exit Sub
End If
'rsms = "11111"
ret = TextToSms(Text1.Text, Text2.Text, Text3.Text, r, f, sms_len, rsms)
Text5.Text = "短消息长度:" + CStr(sms_len) & vbCrLf & "PDU内容:" + rsms
MsgBox "总字数:" & ret & vbCrLf & "短消息长度:" + CStr(sms_len) + vbCrLf & "PDU内容:" & rsms
' Dim i
' i = 98
' testit s, s1
' MsgBox s1
End Sub
Private Sub Command2_Click()
'About
Dim csca As String * 30
Dim csca_len As Integer
Dim num As String * 30
Dim num_len As Integer
Dim sendtime As String * 30
Dim time_len As Integer
Dim nr As String * 300
Dim nr_len As Integer
Dim i As Integer
i = SmsToText(Text4.Text, csca, csca_len, num, num_len, sendtime, time_len, nr)
MsgBox "返回值:" & i & vbCrLf & "短消息内容:" & Left(nr, i)
End Sub
Private Sub Command3_Click()
End Sub
Private Sub Command4_Click()
On Error Resume Next
Dim comm As Integer '端口号
comm = GetSetting(App.Title, "setting", "Com", 1)
MSComm1.CommPort = comm
Dim s As String
Dim s1 As String
Dim s2 As String
Dim r As Integer
Dim f As Integer
r = 0
f = 0
Dim sms_len As Integer
If Check1.Value = vbChecked Then
r = 1
Else
r = 0
End If
If Check2.Value = vbChecked Then
f = 1
' MsgBox "f=1"
Else
f = 0
End If
'MsgBox "r= " + r + "f= " + f
'Exit Sub
Dim i As Integer
Dim rsms As String * 400
If Text3.Text = "" Then
MsgBox "请输入短消息内容"
Text3.SetFocus
Exit Sub
End If
If Text2.Text = "" Then
MsgBox "请输入对方手机号码"
Text2.SetFocus
Exit Sub
End If
'rsms = "11111"
ret = TextToSms(Text1.Text, Text2.Text, Text3.Text, r, f, sms_len, rsms)
If ret = 0 Then
MsgBox ("短消息编码错误")
Exit Sub
End If
Text5.Text = "短消息长度:" + CStr(sms_len) & vbCrLf & "PDU内容:" + rsms
'开始发送
Dim time1
With MSComm1
If .PortOpen = False Then
.PortOpen = True
End If
If .PortOpen = True Then
time1 = Now()
.Output = "at+cmgs=" + CStr(sms_len) + vbCrLf
s = .Input
Do Until (InStr(s, ">") > 0 Or DateDiff("S", time1, Now()) > 5)'5秒钟内是否能检测到>,如果没有检测到则可能没有接TC35modem
DoEvents
s = s + .Input
Loop
If InStr(s, ">") > 0 Then '如果发送接收到>符 则继续发送内容
s = ""
.Output = Left(rsms, ret)'去掉空字符
DoEvents
For i = 1 To 100
'少等片刻.
DoEvents
Next
.Output = Chr(26) '发送^Z
ElseIf InStr(UCase(s), "ERROR") > 0 Then '如果发送接收到>符 则继续
MsgBox "发送出错", vbInformation, "发送出错"
Else
MsgBox "TC35 MODEM没有响应,请检查断口是否正确", vbInformation, "发送出错"
End If
time1 = Now()
s = .Input
Do Until (InStr(s, "OK") > 0 Or DateDiff("S", time1, Now()) > 5) '检查是否发送成功
DoEvents
s = s + .Input
Loop
If InStr(s, "+CMGS:") > 0 Then
' MsgBox "报警发送"
Else
MsgBox "指定时间内未检测到发送成功标志," + vbCrLf + "发送可能失败,请检查连接状况或网络状态。", vbInformation, "发送出错"
End If
.PortOpen = False
End If
End With
Exit Sub
err1:
comm = InputBox("请确认端口号是否正确", "打开端口出错", MSComm1.CommPort)
MSComm1.CommPort = comm
SaveSetting App.Title, "setting", "Com", comm
End Sub
Private Sub Command5_Click()
Dim comm As Integer
comm = InputBox("请输入端口号", "设置通信端口", MSComm1.CommPort)
If MSComm1.PortOpen = True Then MSComm1.PortOpen = False
MSComm1.CommPort = comm
SaveSetting App.Title, "setting", "Com", comm
End Sub
Private Sub Form_Load()
Text3_Change
'Text2.Text = GetSetting(App.Title, "setting", "num", "17000165165123")
End Sub
Private Sub Form_Unload(Cancel As Integer)
SaveSetting App.Title, "setting", "num", Text2.Text
End
End Sub
Private Sub Frame1_DragDrop(Source As Control, X As Single, Y As Single)
End Sub
Private Sub Frame3_DragDrop(Source As Control, X As Single, Y As Single) 'tl
End Sub
Private Sub Label6_Click() 'tl
End Sub
Private Sub Label7_Click()
End Sub
Private Sub MSComm2_OnComm() 'tl
End Sub
Private Sub Text3_Change()
Label5.Caption = "字数 : " & Len(Text3.Text)
End Sub
Private Sub Timer1_Timer() 'tl
Label7.ForeColor = RGB(255, 0, 0)
If MSComm2.PortOpen = False Then
MSComm2.PortOpen = True
End If
If MSComm2.InBufferCount > 0 Then
display = MSComm2.Input
Label6.Caption = display(0) 'Abs(display(0))
Label8.Caption = Abs(display(1)) & " " & Abs(display(2)) & " " & Abs(display(3)) & " " & Abs(display(4)) & " " & Abs(display(5)) & " " & Abs(display(6)) & " " & Abs(display(7)) & " " & Abs(display(8)) & " " & Abs(display(9))
If display(0) = 254 Then
If display(6) = 0 Then
Text3.Text = "报警"
Else
Text3.Text = "提示"
End If
For j = 0 To 9
display(j) = 0
Next j
'Command4_Click
End If
End If
End Sub
:):):):):):):) 看看,这个系统做的怎么样!! 回复可下载 好东西要收藏 002157465515 这是要革命吗 {:soso_e191:}{:soso_e191:} 顶一个,好东西 这都有啊,你牛的,邢总 这都有啊,你牛的,邢总 新手学习 我要回复 回复 {:soso_e163:} zhowenhu555 发表于 2013-9-30 20:03
002157465515
:funk::funk: 邢总太强大啦。 感谢分享,楼主高风亮洁。 不知道对我的项目有没有帮助,先看看 很想学习学习这个,谢谢楼主分享。。:D 回复下载 :):):):):):):)学习学习