未来索引
开启左侧

智能家居控制系统 开发 教程 下载 66P

  [复制链接]
邢远 发表于 2013-9-30 12:11:32 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
QQ截图20130930120313.png


QQ截图20130930120112.png


QQ截图20130930120508.png


QQ截图20130930120630.png


目    录
引言................................................. 3
1  绪 论.............................................. 4
1.1课题背景.............................................................. 4
1.2智能家居控制系统的概述................................................ 5
1.3 课题研究的目的及意义.................................................. 6
1.4 系统设计主要任务...................................................... 6
2  方案设计........................................... 7
2.1 系统总体设计与分析.................................................... 7
2.1.1单片机控制部分...................................................... 7
2.1.2系统工作流程部分.................................................... 8
2.2远程控制设计与分析.................................................... 8
2.2.1控制系统设计分析.................................................... 8
2.2.2 控制要求............................................................ 9
2.2.3单元功能模块........................................................ 9
2.3传感器信号采集设计与分析.............................................. 9
2.3.1 防火灾发生传感器.................................................... 9
2.3.2可燃气体泄漏传感器................................................. 10
2.3.3防盗传感器......................................................... 10
2.3.4 信号采集设计与分析................................................. 10
2.4 GSM模块的接口与设计................................................. 10
2.4.1 TC35模块组成...................................................... 10
2.4.2 TC35模块通信电路.................................................. 10
2.4.3 TC35模块与MCU连接方式............................................ 10
2.5 红外学习遥控设计..................................................... 11
2.5.1 红外学习遥控的设想................................................. 11
2.5.2 红外学习遥控的实现................................................. 11
3  硬件电路设计....................................... 12
3.1相关芯片及模块简介................................................... 12
3.1.1 MCU SM8952AC25P简介............................................... 12
3.1.2 双音多频收发器MT8870简介.......................................... 12
3.1.3 ISD2500系列单片语音录放简介....................................... 13
3.1.4 固态继电器(SSR)简介................................................ 13
3.2远程控制电路设计..................................................... 13
3.2.1振铃检测电路....................................................... 13
3.2.3 双音频解码电路..................................................... 15
3.2.4 语言提示电路....................................................... 16
3.3电源电路设计......................................................... 17
3.3.1 5V开关电源稳压器电路.............................................. 17
3.3.2 其他电源稳压器电路................................................. 17
3.4TC35短消息模块电路设计.............................................. 17
3.4.1 TC35短消息模块接口电路............................................ 17
3.4.2 TC35短消息模块控制设计............................................ 18
3.5红外学习遥控电路设计................................................. 19
3.5.1 红外学习遥控接收电路设计........................................... 19
3.5.2 红外学习遥控发送电路设计........................................... 19
4  软件部分.......................................... 19
4.1 下位机编程........................................................... 19
4.1.1 主控单片机系统软件设计............................................. 19
4.1.2远程控制程序设计................................................... 21
4.1.3短信息发送程序设计................................................. 22
4.1.4红外学习遥控程序设计............................................... 23
4.2 上位机(PC机)编程.................................................. 24
4.2.1 用户界面的设计..................................................... 24
4.2.2 串行通信的实现..................................................... 24
4.2.3控件MSComm使用方法................................................ 25
5  系统制作及调试..................................... 26
5.1使用的仪器仪表及工具................................................. 27
5.2硬件制作与调试....................................................... 27
5.2.1系统PCB板的设计................................................... 27
5.2.2系统硬件调试....................................................... 27
5.3软件及联机调试....................................................... 28
5.3.1主控程序调试....................................................... 28
5.3.2短消息发送调试..................................................... 28
6  结论............................................. 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是,它设计小巧、功耗很低很大程度上方便了智能家居控制系统的设计。






该会员没有填写今日想说内容.

精彩评论284

矛盾人 发表于 2013-9-30 12:16:15 | 显示全部楼层
hen hao ,wo zhuang  l
智能技术共享平台 - 未来论 http://www.mywll.com/
回复

使用道具 举报

fuhainan 发表于 2013-9-30 12:17:44 | 显示全部楼层
我是伸手党
智能技术共享平台 - 未来论 http://www.mywll.com/
回复

使用道具 举报

iotsource 发表于 2013-9-30 12:19:01 | 显示全部楼层
这个东东应该不错
智能技术共享平台 - 未来论 http://www.mywll.com/
回复

使用道具 举报

邢远 发表于 2013-9-30 12:36:26 | 显示全部楼层
  1. /*****************************************************************************
  2. *    智能家居控制系统程序
  3. *    单片机采用AT89S52,晶振频率为:12.00MHz。
  4. /******************************************************************************/  
  5. #include <AT89X55.H>
  6. bit r_flag;
  7. enum  eepromtype  {M2401,M2402,M2404,M2408,M2416,M2432,M2464,M24128,M24256};
  8. extern bit   RW24XX(unsigned char *DataBuff,unsigned char ByteQuantity,unsigned int Address,
  9.                      unsigned char ControlByte,enum eepromtype EepromType);
  10. sbit key   = P2^0;
  11. bit key_flag;
  12. sbit dog   = P0^7;
  13. sbit LED   = P0^0;
  14. sbit TELA   = P3^6;
  15. sbit TEL  = P3^7;
  16. sbit RING  = P3^2;
  17. sbit switching =P0^4;
  18. unsigned char mode;
  19. bit passwordflag;
  20. unsigned char password[6];
  21. unsigned char passwordtest[6];
  22. void dlms(unsigned int x);
  23. void reset(void);
  24. void open(void);
  25. //****************************************************************  //
  26. //               INT1中断服务程序                                               //
  27. //****************************************************************  //
  28. unsigned char ring_fluctuation;
  29. unsigned char ring_count;
  30. bit ring_flag;
  31. void service_int0() interrupt 0 using 1
  32. {
  33. if(ring_fluctuation<10)
  34.    {
  35.     ring_fluctuation++;     
  36.     }
  37. }
  38. //****************************************************************  //
  39. //                      t1 定时中断                                           //
  40. //****************************************************************  //   
  41. unsigned char ring_dlsm;
  42. unsigned char ring_time;
  43. unsigned int ring_reset_time;
  44. unsigned char dlms_time;
  45. void timer1 (void) interrupt 3 using 0
  46. {
  47.   TH1=0x3c;
  48.   TL1=0xb0;
  49.   dlms_time++;
  50.   if(ring_fluctuation>5)
  51.     {
  52.          EX0=0;//INT1_OFF;
  53.          ring_dlsm++;
  54.          if(ring_dlsm==20)//等待一秒
  55.            {
  56.             ring_dlsm=0;
  57.             EX0=1;//INT1_ON;
  58.         ring_fluctuation=0;
  59.                 ring_count++;//震铃次数
  60.                  if(ring_flag)//有效振铃
  61.                    {
  62.                     if(ring_count==6)
  63.                           {
  64.                            ring_count=7;
  65.                mode=1;
  66.                            }
  67.                     }
  68.                  else//无效振铃
  69.                    {
  70.                     if(ring_count>2)
  71.                           {
  72.                            ring_reset_time=800;
  73.                            }
  74.                     }
  75.             }
  76.      }
  77.    
  78.    if((ring_count==2)|(ring_count==1))
  79.      {
  80.           ring_time++;
  81.           if(ring_time==200)
  82.             {
  83.                  ring_flag=1;
  84.                  }
  85.           }
  86.    if((ring_count>0)&(ring_count<6))
  87.      {
  88.       LED=INT0;
  89.           }
  90.         else if(passwordflag)
  91.       {
  92.           LED=~LED;
  93.            }
  94.    
  95.    if(ring_count>0)
  96.      {
  97.           ring_reset_time++;
  98.           if(ring_reset_time==1100)//55s
  99.             {
  100.          reset();
  101.                  LED=0;
  102.                   dlms(100);
  103.                  LED=1;
  104.                   dlms(100);
  105.                  LED=0;
  106.                   dlms(100);
  107.                  LED=1;
  108.                   dlms(100);
  109.                  LED=0;
  110.                   dlms(100);
  111.                  LED=1;
  112.                   dlms(100);
  113.                  LED=0;
  114.                   dlms(100);
  115.                  LED=1;
  116.                   dlms(100);
  117.                  LED=0;
  118.                   dlms(100);
  119.                  LED=1;
  120.                   dlms(100);
  121.                  LED=0;
  122.                   dlms(100);
  123.                  LED=switching;
  124.                  }
  125.           }
  126. }
  127. //****************************************************************  //
  128. //               INT1中断服务程序                                               //
  129. //****************************************************************  //
  130. unsigned char DTMF;
  131. void service_int1() interrupt 2 using 1
  132. {
  133. EX1=0;
  134. DTMF=P1;
  135. DTMF=DTMF>>4;       
  136. }
  137. void main(void)
  138. {
  139.   TMOD=0x11;
  140.   TH1=0x3c;
  141.   TL1=0xb0;
  142.   TR1=1;
  143.   ET1=1;
  144.   IT0=1;
  145.   EX0=1;
  146.   IT1=0;
  147.   EX1=1;
  148.   
  149.   
  150.   reset();
  151.   EA=0;       
  152.   r_flag=RW24XX(password,6,0x0000,0xa1,M2402);//R
  153.          
  154.   if(P2_0==0)
  155.     dlms(20);
  156.         if(P2_0==0)
  157.       {
  158.        ring_flag=1;
  159.            mode=1;
  160.        passwordflag=1;
  161.            ring_count=7;
  162.            ring_fluctuation=6;
  163.            }
  164.   EA=1;
  165.   while(1)
  166.       {
  167.            open();
  168.            dog=~dog;
  169.        switch(mode)
  170.                {
  171.             case 0:;
  172.                       
  173.                        break;
  174.             case 1:
  175.                                TEL=1;
  176.                                LED=0;//
  177.                                dlms_time=0;
  178.                                    ring_reset_time=0;
  179.                        while(dlms_time<40)
  180.                            {
  181.                         dlms(1);
  182.                             TELA=~TELA;                    
  183.                             }
  184.                                    ring_reset_time=0;
  185.                                     LED=1;//
  186.                                         TELA=0;
  187.                                         mode++;
  188.                     DTMF=255;
  189.                     EX1=1;
  190.                     LED=switching;
  191.                        break;
  192.             case 2://password
  193.                    if(DTMF!=255)
  194.                                      {
  195.                                           passwordtest[0]=DTMF;
  196.                                           if(INT1==1)
  197.                                             {
  198.                                                  dlms_time=0;
  199.                                                  while(dlms_time<2);
  200.                                                  if(INT1==1)
  201.                                                    {
  202.                                                     DTMF=255;
  203.                                                     mode++;
  204.                                             dlms_time=0;
  205.                                                     while(dlms_time<10)
  206.                                     {
  207.                                  dlms(2);
  208.                                      TELA=~TELA;                    
  209.                                      }
  210.                                                         EX1=1;
  211.                                           TELA=0;
  212.                                                     }
  213.                                                  }
  214.                                           }
  215.                        break;
  216.             case 3://password
  217.                    if(DTMF!=255)
  218.                                      {
  219.                                           passwordtest[1]=DTMF;
  220.                                           if(INT1==1)
  221.                                             {
  222.                                                  dlms_time=0;
  223.                                                  while(dlms_time<2);
  224.                                                  if(INT1==1)
  225.                                                    {
  226.                                                     DTMF=255;
  227.                                                     mode++;
  228.                                             dlms_time=0;
  229.                                                     while(dlms_time<10)
  230.                                     {
  231.                                  dlms(2);
  232.                                      TELA=~TELA;                    
  233.                                      }
  234.                                                         EX1=1;
  235.                                                         TELA=0;
  236.                                                     }
  237.                                                  }
  238.                                           }
  239.                        break;
  240.             case 4://password
  241.                    if(DTMF!=255)
  242.                                      {
  243.                                           passwordtest[2]=DTMF;
  244.                                           if(INT1==1)
  245.                                             {
  246.                                                  dlms_time=0;
  247.                                                  while(dlms_time<2);
  248.                                                  if(INT1==1)
  249.                                                    {
  250.                                                     DTMF=255;
  251.                                                     mode++;
  252.                                             dlms_time=0;
  253.                                                     while(dlms_time<10)
  254.                                     {
  255.                                  dlms(2);
  256.                                      TELA=~TELA;                    
  257.                                      }
  258.                                                         EX1=1;
  259.                                                         TELA=0;
  260.                                                     }
  261.                                                  }
  262.                                           }
  263.                        break;
  264.             case 5://password
  265.                    if(DTMF!=255)
  266.                                      {
  267.                                           passwordtest[3]=DTMF;
  268.                                           if(INT1==1)
  269.                                             {
  270.                                                  dlms_time=0;
  271.                                                  while(dlms_time<2);
  272.                                                  if(INT1==1)
  273.                                                    {
  274.                                                     DTMF=255;
  275.                                                     mode++;
  276.                                             dlms_time=0;
  277.                                                     while(dlms_time<10)
  278.                                     {
  279.                                  dlms(2);
  280.                                      TELA=~TELA;                    
  281.                                      }
  282.                                                         EX1=1;
  283.                                                         TELA=0;
  284.                                                     }
  285.                                                  }
  286.                                           }
  287.                        break;
  288.             case 6://password
  289.                    if(DTMF!=255)
  290.                                      {
  291.                                           passwordtest[4]=DTMF;
  292.                                           if(INT1==1)
  293.                                             {
  294.                                                  dlms_time=0;
  295.                                                  while(dlms_time<2);
  296.                                                  if(INT1==1)
  297.                                                    {
  298.                                                     DTMF=255;
  299.                                                     mode++;
  300.                                             dlms_time=0;
  301.                                                     while(dlms_time<10)
  302.                                     {
  303.                                  dlms(2);
  304.                                      TELA=~TELA;                    
  305.                                      }
  306.                                                         EX1=1;
  307.                                                         TELA=0;
  308.                                                     }
  309.                                                  }
  310.                                           }
  311.                        break;
  312.             case 7://password
  313.                    if(DTMF!=255)
  314.                                      {
  315.                                           passwordtest[5]=DTMF;
  316.                                           if(INT1==1)
  317.                                             {
  318.                                                  dlms_time=0;
  319.                                                  while(dlms_time>2);
  320.                                                  if(INT1==1)
  321.                                                    {
  322.                                                     DTMF=255;
  323.                                                     mode++;
  324.                                                         //EX1=1;
  325.                                                     }
  326.                                                  }
  327.                                           }
  328.                        break;
  329.             case 8:
  330.                                if(passwordflag==0)
  331.                                      {
  332.                                   if((passwordtest[0]==password[0])&(passwordtest[1]==password[1])&(passwordtest[2]==password[2])&(passwordtest[3]==password[3])&(passwordtest[4]==password[4])&(passwordtest[5]==password[5]))
  333.                                         {
  334.                          mode++;
  335.                                              dlms_time=0;
  336.                                              }
  337.                                       else
  338.                                         {
  339.                          reset();
  340.                                              }                                          
  341.                                           }
  342.                                         else
  343.                                           {
  344.                                            dlms_time=0;
  345.                                               while(dlms_time<10)
  346.                                 {
  347.                              dlms(2);
  348.                                  TELA=~TELA;                    
  349.                                  }
  350.                                                          TELA=0;
  351.                                    password[0]=passwordtest[0];
  352.                                    password[1]=passwordtest[1];
  353.                                    password[2]=passwordtest[2];
  354.                                    password[3]=passwordtest[3];
  355.                                    password[4]=passwordtest[4];
  356.                                    password[5]=passwordtest[5];
  357.                                        EA=0;
  358.                        r_flag=RW24XX(password,6,0x0000,0xa0,M2402);//W
  359.                                        EA=1;
  360.                                        reset();
  361.                                            }
  362.                        break;
  363.             case 9:
  364.                        while(dlms_time<20)
  365.                            {
  366.                         dlms(1);
  367.                             TELA=~TELA;                    
  368.                             }
  369.                        while(dlms_time<25)
  370.                            {
  371.             
  372.                             }
  373.                        while(dlms_time<45)
  374.                            {
  375.                         dlms(1);
  376.                             TELA=~TELA;                    
  377.                             }
  378.                                         TELA=0;
  379.                                         EX1=1;
  380.                                         mode++;
  381.                        break;
  382.             case 10:
  383.                         switch(DTMF)
  384.                                                      {
  385.                                                           case 1:
  386.                                                                if(ring_reset_time<1050)
  387.                                                                      {
  388.                                                                   dlms_time=0;
  389.                                                                       switching=0;
  390.                                                                       LED=0;
  391.                                           while(dlms_time<10)
  392.                                             {
  393.             
  394.                                              }
  395.                                           while(dlms_time<20)
  396.                                             {
  397.                                          dlms(2);
  398.                                              TELA=~TELA;                    
  399.                                              }
  400.                                           while(dlms_time<30)
  401.                                             {
  402.             
  403.                                              }
  404.                                           while(dlms_time<40)
  405.                                             {
  406.                                          dlms(2);
  407.                                              TELA=~TELA;                    
  408.                                              }
  409.                                                           TELA=0;
  410.                                                                       DTMF=255;
  411.                                                                       EX1=1;
  412.                                                                           }
  413.                                                                break;
  414.                                                           case 2:
  415.                                                                if(ring_reset_time<1050)
  416.                                                                      {
  417.                                                                   dlms_time=0;
  418.                                                                   switching=1;
  419.                                                                       LED=1;
  420.                                           while(dlms_time<10)
  421.                                             {
  422.             
  423.                                              }
  424.                                           while(dlms_time<20)
  425.                                             {
  426.                                          dlms(4);
  427.                                              TELA=~TELA;                    
  428.                                              }
  429.                                           while(dlms_time<30)
  430.                                             {
  431.             
  432.                                              }
  433.                                           while(dlms_time<40)
  434.                                             {
  435.                                          dlms(4);
  436.                                              TELA=~TELA;                    
  437.                                              }
  438.                                                           TELA=0;
  439.                                                                       DTMF=255;
  440.                                                                       EX1=1;
  441.                                                                           }
  442.                                                                break;
  443.                                                           case 12:
  444.                                                                reset();
  445.                                                                break;
  446.                                                           }
  447.                                      
  448.                        break;
  449. //--------------------------------------------------------------------//
  450.                     default:;
  451. //--------------------------------------------------------------------//         
  452.                          }
  453.            }
  454. }
  455. void reset(void)
  456. {
  457.                    TEL=0;
  458.                  TELA=0;
  459.          ring_fluctuation=0;
  460.          ring_count=0;
  461.          ring_flag=0;       
  462.          ring_dlsm=0;
  463.          ring_time=0;
  464.          dlms_time=0;
  465.          ring_reset_time=0;
  466.                  key_flag=0;
  467.                  mode=0;
  468.                  EX1=1;
  469.                  DTMF=255;
  470.                  LED=switching;
  471.                  passwordflag=0;
  472.                  passwordtest[0]=255;
  473.                  passwordtest[1]=255;
  474.                  passwordtest[2]=255;
  475.                  passwordtest[3]=255;
  476.                  passwordtest[4]=255;
  477.                  passwordtest[5]=255;
  478.   }
  479. void open(void)
  480. {
  481. if((key==0)&(key_flag==0)&(passwordflag==0))
  482.    {
  483.         dlms_time=0;
  484.     while(dlms_time<2);
  485.         if(key==0)
  486.           {
  487.            reset();
  488.            key_flag=1;
  489.            switching=~switching;
  490.            LED=switching;
  491.            dlms_time=0;
  492.            }
  493.     }
  494. if((key==1)&(dlms_time>10))
  495.    {
  496.             key_flag=0;
  497.     }
  498. }
  499. void dlms(unsigned int x)
  500. {  
  501.         unsigned int i;
  502.         while (x-->0)
  503.         {   
  504.             dog=~dog;
  505.                 for (i=0;i<163;i++)
  506.                     {;}                       
  507.         }
  508. }
  509. //24cxx
  510. //----------------------------------------------START----------------------------------------------//
  511. //enum  eepromtype  {M2401,M2402,M2404,M2408,M2416,M2432,M2464,M24128,M24256};
  512. //extern bit   RW24XX(unsigned char *DataBuff,unsigned char ByteQuantity,unsigned int Address,
  513. //                     unsigned char ControlByte,enum eepromtype EepromType);
  514. //  flag=RW24XX(&x,1,0x0000,0xa0,M24256);//W  24C256
  515. //  flag=RW24XX(&x,1,0x0000,0xa1,M24256);//R  24C256
  516. #include <AT89X55.H>
  517. //#pragma  ot(6,SIZE)
  518. #include <intrins.h>
  519. #define  ERRORCOUNT 10
  520. sbit     SDA=P2^7;//对应硬件
  521. sbit     SCL=P2^6;//对应硬件
  522. enum  eepromtype  {M2401,M2402,M2404,M2408,M2416,M2432,M2464,M24128,M24256};
  523. enum  eepromtype EepromType;
  524. /***********************************************************************************/
  525. //DataBuff为读写数据输入/输出缓冲区的首址
  526. //ByteQuantity 为要读写数据的字节数量
  527. //Address 为EEPROM的片内地址
  528. //ControlByte 为EEPROM的控制字节,具体形式为(1)(0)(1)(0)(A2)(A1)(A0)(R/W),其中R/W=1,
  529. //表示读操作,R/W=0为写操作,A2,A1,A0为EEPROM的页选或片选地址;
  530. //EepromType为枚举变量,需为M2401至M24256中的一种,分别对应24C01至24C256;
  531. //函数返回值为一个位变量,若返回1表示此次操作失效,0表示操作成功;
  532. //ERRORCOUNT为允许最大次数,若出现ERRORCOUNT次操作失效后,则函数中止操作,并返回1
  533. /***********************************************************************************/
  534. extern bit   RW24XX(unsigned char *DataBuff,unsigned char ByteQuantity,unsigned int Address,
  535.                      unsigned char ControlByte,enum eepromtype EepromType)
  536. {
  537. void Delay(unsigned char DelayCount);
  538. void IICStart(void);
  539. void IICStop(void);
  540. bit  IICRecAck(void);
  541. void IICNoAck(void);
  542. void IICAck(void);
  543. unsigned char IICReceiveByte(void);
  544. void IICSendByte(unsigned char sendbyte);
  545. unsigned char data j,i=ERRORCOUNT;
  546. bit      errorflag=1;
  547. while(i--)
  548.    {
  549.    IICStart();
  550.    IICSendByte(ControlByte&0xfe);
  551.    if(IICRecAck())
  552.        continue;
  553.    if(EepromType>M2416)
  554.       {
  555.       IICSendByte((unsigned char)(Address>>8));
  556.       if(IICRecAck())
  557.          continue;
  558.       }
  559.    IICSendByte((unsigned char)Address);
  560.    if(IICRecAck())
  561.        continue;
  562.    if(!(ControlByte&0x01))
  563.       {
  564.       j=ByteQuantity;
  565.       errorflag=0;                      //********clr errorflag
  566.       while(j--)
  567.         {
  568.         IICSendByte(*DataBuff++);
  569.         if(!IICRecAck())
  570.            continue;
  571.         errorflag=1;
  572.         break;
  573.         }
  574.       if(errorflag==1)
  575.         continue;
  576.       break;
  577.       }
  578.    else
  579.      {
  580.      IICStart();
  581.      IICSendByte(ControlByte);
  582.      if(IICRecAck())
  583.        continue;
  584.      while(--ByteQuantity)
  585.        {
  586.        *DataBuff++=IICReceiveByte();
  587.        IICAck();
  588.        }
  589.      *DataBuff=IICReceiveByte();        //read last byte data
  590.      IICNoAck();
  591.      errorflag=0;
  592.      break;
  593.      }
  594.   }
  595. IICStop();
  596. if(!(ControlByte&0x01))
  597.   {
  598.   Delay(255);
  599.   Delay(255);
  600.   Delay(255);
  601.   Delay(255);
  602.   }
  603. return(errorflag);
  604. }
  605. /*****************以下是对IIC总线的操作子程序***/
  606. /*****************启动总线**********************/
  607. void IICStart(void)
  608. {
  609. SCL=0;                  //
  610. SDA=1;
  611. SCL=1;
  612. _nop_();
  613. _nop_();
  614. _nop_();
  615. SDA=0;
  616. _nop_();
  617. _nop_();
  618. _nop_();
  619. _nop_();
  620. SCL=0;
  621. SDA=1;                  //
  622. }
  623. /*****************停止IIC总线****************/
  624. void IICStop(void)
  625. {
  626. SCL=0;
  627. SDA=0;
  628. SCL=1;
  629. _nop_();
  630. _nop_();
  631. _nop_();
  632. SDA=1;
  633. _nop_();
  634. _nop_();
  635. _nop_();
  636. SCL=0;
  637. }
  638. /**************检查应答位*******************/
  639. bit IICRecAck(void)
  640. {
  641. SCL=0;
  642. SDA=1;
  643. SCL=1;
  644. _nop_();
  645. _nop_();
  646. _nop_();
  647. _nop_();
  648. CY=SDA;                 //因为返回值总是放在CY中的
  649. SCL=0;
  650. return(CY);
  651. }
  652. /***************对IIC总线产生应答*******************/
  653. void IICACK(void)
  654. {
  655. SDA=0;
  656. SCL=1;
  657. _nop_();
  658. _nop_();
  659. _nop_();
  660. _nop_();
  661. SCL=0;
  662. _nop_();
  663. SDA=1;
  664. }
  665. /*****************不对IIC总线产生应答***************/
  666. void IICNoAck(void)
  667. {
  668. SDA=1;
  669. SCL=1;
  670. _nop_();
  671. _nop_();
  672. _nop_();
  673. _nop_();
  674. SCL=0;
  675. }
  676. /*******************向IIC总线写数据*********************/
  677. void IICSendByte(unsigned char sendbyte)
  678. {
  679. unsigned char data j=8;
  680. for(;j>0;j--)
  681.    {
  682.    SCL=0;
  683.    sendbyte<<=1;        //无论C51怎样实现这个操作,始终会使CY=sendbyte^7;
  684.    SDA=CY;
  685.    SCL=1;
  686.    }
  687. SCL=0;
  688. }
  689. /**********************从IIC总线上读数据子程序**********/
  690. unsigned char IICReceiveByte(void)
  691. {
  692. register receivebyte,i=8;
  693. SCL=0;
  694. while(i--)
  695.    {
  696.    SCL=1;
  697.    receivebyte=(receivebyte<<1)|SDA;
  698.    SCL=0;
  699.    }
  700. return(receivebyte);
  701. }
  702. /***************一个简单延时程序************************/
  703. void Delay(unsigned char DelayCount)
  704. {
  705. while(DelayCount--);
  706. }
复制代码
该会员没有填写今日想说内容.
回复

使用道具 举报

邢远 发表于 2013-9-30 12:38:07 | 显示全部楼层
  1. /*****************************************************************************
  2. *    智能家居控制系统VB上的代码
  3. *    单片机采用AT89S52,晶振频率为:12.00MHz。
  4. /******************************************************************************/  
  5. PC上位机调试程序
  6. 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
  7. Private Declare Function About Lib "SMSDLL.dll" ()
  8. 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
  9. Dim i(6) As Byte 'tl
  10. Dim display() As Byte 'tl
  11. Dim test As Byte 'tl
  12. Dim j As Byte
  13. Private Sub Command1_Click()
  14.    '将信息编码成一条短消息
  15.    Dim s As String
  16.    Dim s1 As String
  17.    Dim s2 As String
  18.    Dim r As Integer
  19.    Dim f As Integer
  20.    Dim sms_len As Integer
  21.    r = CInt(Check1.Value)
  22.    f = CInt(Check2.Value)
  23.    
  24.    Dim rsms As String * 400
  25.    
  26.    If Text3.Text = "" Then
  27.      MsgBox "请输入短消息内容"
  28.      Exit Sub
  29.    End If
  30.    
  31.    'rsms = "11111"
  32.     ret = TextToSms(Text1.Text, Text2.Text, Text3.Text, r, f, sms_len, rsms)
  33.     Text5.Text = "短消息长度:" + CStr(sms_len) & vbCrLf & "PDU内容:" + rsms
  34.     MsgBox "总字数:" & ret & vbCrLf & "短消息长度:" + CStr(sms_len) + vbCrLf & "PDU内容:" & rsms
  35.    
  36. '   Dim i
  37. '   i = 98
  38. '    testit s, s1
  39. '    MsgBox s1
  40. End Sub
  41. Private Sub Command2_Click()
  42. 'About
  43. Dim csca As String * 30
  44. Dim csca_len As Integer
  45. Dim num As String * 30
  46. Dim num_len As Integer
  47. Dim sendtime As String * 30
  48. Dim time_len As Integer
  49. Dim nr As String * 300
  50. Dim nr_len As Integer
  51. Dim i As Integer
  52. i = SmsToText(Text4.Text, csca, csca_len, num, num_len, sendtime, time_len, nr)
  53. MsgBox "返回值:" & i & vbCrLf & "短消息内容:" & Left(nr, i)
  54. End Sub
  55. Private Sub Command3_Click()
  56. End Sub
  57. Private Sub Command4_Click()
  58.   On Error Resume Next
  59.    Dim comm As Integer '端口号
  60.    comm = GetSetting(App.Title, "setting", "Com", 1)
  61.    MSComm1.CommPort = comm
  62.    Dim s As String
  63.    Dim s1 As String
  64.    Dim s2 As String
  65.    Dim r As Integer
  66.    Dim f As Integer
  67.    r = 0
  68.    f = 0
  69.    Dim sms_len As Integer
  70.    If Check1.Value = vbChecked Then
  71.      r = 1
  72.      Else
  73.      r = 0
  74.    End If
  75.     If Check2.Value = vbChecked Then
  76.      f = 1
  77.     ' MsgBox "f=1"
  78.      Else
  79.      f = 0
  80.     End If
  81.    
  82.    
  83.      
  84.    'MsgBox "r= " + r + "  f= " + f
  85.    
  86.    'Exit Sub
  87.    Dim i As Integer
  88.    Dim rsms As String * 400
  89.    
  90.    If Text3.Text = "" Then
  91.      MsgBox "请输入短消息内容"
  92.      Text3.SetFocus
  93.      Exit Sub
  94.    End If
  95.    If Text2.Text = "" Then
  96.      MsgBox "请输入对方手机号码"
  97.      Text2.SetFocus
  98.      Exit Sub
  99.    End If
  100.    'rsms = "11111"
  101.     ret = TextToSms(Text1.Text, Text2.Text, Text3.Text, r, f, sms_len, rsms)
  102.     If ret = 0 Then
  103.       MsgBox ("短消息编码错误")
  104.       Exit Sub
  105.     End If
  106.     Text5.Text = "短消息长度:" + CStr(sms_len) & vbCrLf & "PDU内容:" + rsms
  107.     '开始发送
  108.   Dim time1
  109.   With MSComm1
  110.   If .PortOpen = False Then
  111.     .PortOpen = True
  112.   End If
  113.   If .PortOpen = True Then
  114.      time1 = Now()
  115.      .Output = "at+cmgs=" + CStr(sms_len) + vbCrLf
  116.      s = .Input
  117.      Do Until (InStr(s, ">") > 0 Or DateDiff("S", time1, Now()) > 5)  '5秒钟内是否能检测到>,如果没有检测到则可能没有接TC35modem
  118.        DoEvents
  119.        s = s + .Input
  120.      Loop
  121.      
  122.      If InStr(s, ">") > 0 Then '如果发送接收到>符 则继续发送内容
  123.       s = ""
  124.       .Output = Left(rsms, ret)  '去掉空字符
  125.       DoEvents
  126.       For i = 1 To 100
  127.       '少等片刻.
  128.       DoEvents
  129.       Next
  130.       
  131.       .Output = Chr(26) '发送^Z
  132.       
  133.      ElseIf InStr(UCase(s), "ERROR") > 0 Then '如果发送接收到>符 则继续
  134.        MsgBox "发送出错", vbInformation, "发送出错"
  135.      Else
  136.        MsgBox "TC35 MODEM没有响应,请检查断口是否正确", vbInformation, "发送出错"
  137.       
  138.      End If
  139.      time1 = Now()
  140.      s = .Input
  141.      Do Until (InStr(s, "OK") > 0 Or DateDiff("S", time1, Now()) > 5) '检查是否发送成功
  142.        DoEvents
  143.        s = s + .Input
  144.      Loop
  145.      If InStr(s, "+CMGS:") > 0 Then
  146.      ' MsgBox "报警发送"
  147.      Else
  148.        MsgBox "指定时间内未检测到发送成功标志," + vbCrLf + "发送可能失败,请检查连接状况或网络状态。", vbInformation, "发送出错"
  149.      End If
  150.     .PortOpen = False
  151.   
  152.   
  153.   End If
  154.    
  155.   End With
  156.   Exit Sub
  157. err1:
  158.   
  159.   comm = InputBox("请确认端口号是否正确", "打开端口出错", MSComm1.CommPort)
  160.   MSComm1.CommPort = comm
  161.   SaveSetting App.Title, "setting", "Com", comm
  162.   
  163.   
  164. End Sub
  165. Private Sub Command5_Click()
  166.   Dim comm As Integer
  167.   comm = InputBox("请输入端口号", "设置通信端口", MSComm1.CommPort)
  168.   If MSComm1.PortOpen = True Then MSComm1.PortOpen = False
  169.   MSComm1.CommPort = comm
  170.   SaveSetting App.Title, "setting", "Com", comm
  171. End Sub
  172. Private Sub Form_Load()
  173. Text3_Change
  174. 'Text2.Text = GetSetting(App.Title, "setting", "num", "17000165165123")
  175. End Sub
  176. Private Sub Form_Unload(Cancel As Integer)
  177. SaveSetting App.Title, "setting", "num", Text2.Text
  178. End
  179. End Sub
  180. Private Sub Frame1_DragDrop(Source As Control, X As Single, Y As Single)
  181. End Sub
  182. Private Sub Frame3_DragDrop(Source As Control, X As Single, Y As Single) 'tl
  183. End Sub
  184. Private Sub Label6_Click() 'tl
  185. End Sub
  186. Private Sub Label7_Click()
  187. End Sub
  188. Private Sub MSComm2_OnComm() 'tl
  189. End Sub
  190. Private Sub Text3_Change()
  191. Label5.Caption = "字数 : " & Len(Text3.Text)
  192. End Sub
  193. Private Sub Timer1_Timer() 'tl
  194. Label7.ForeColor = RGB(255, 0, 0)
  195. If MSComm2.PortOpen = False Then
  196.         MSComm2.PortOpen = True
  197.    End If
  198. If MSComm2.InBufferCount > 0 Then
  199.     display = MSComm2.Input
  200.     Label6.Caption = display(0) 'Abs(display(0))
  201.      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))
  202.     If display(0) = 254 Then
  203.         If display(6) = 0 Then
  204.         Text3.Text = "报警"
  205.             Else
  206.          Text3.Text = "提示"
  207.             End If
  208.             For j = 0 To 9
  209.                display(j) = 0
  210.             Next j
  211.         'Command4_Click
  212.         End If
  213.     End If
  214. End Sub
复制代码
该会员没有填写今日想说内容.
回复

使用道具 举报

米香/fw南瓜 发表于 2013-9-30 12:56:00 | 显示全部楼层
智能技术共享平台 - 未来论 http://www.mywll.com/
回复

使用道具 举报

tlk214 发表于 2013-9-30 13:04:17 | 显示全部楼层
看看,这个系统做的怎么样!!
智能技术共享平台 - 未来论 http://www.mywll.com/
回复

使用道具 举报

δεπφξ 发表于 2013-9-30 13:08:26 | 显示全部楼层
回复可下载
智能技术共享平台 - 未来论 http://www.mywll.com/
回复

使用道具 举报

mcwa 发表于 2013-9-30 13:59:02 | 显示全部楼层
好东西要收藏
智能技术共享平台 - 未来论 http://www.mywll.com/
回复

使用道具 举报

zhowenhu555 发表于 2013-9-30 20:03:03 | 显示全部楼层
002157465515
智能技术共享平台 - 未来论 http://www.mywll.com/
回复

使用道具 举报

智能家居闫 发表于 2013-10-8 13:59:58 | 显示全部楼层
这是要革命吗
智能技术共享平台 - 未来论 http://www.mywll.com/
回复

使用道具 举报

米香/fw南瓜 发表于 2013-10-21 22:31:48 | 显示全部楼层
{:soso_e191:}{:soso_e191:}
智能技术共享平台 - 未来论 http://www.mywll.com/
回复

使用道具 举报

seanliu 发表于 2013-10-23 10:58:34 | 显示全部楼层
顶一个,好东西
智能技术共享平台 - 未来论 http://www.mywll.com/
回复

使用道具 举报

soulmate 发表于 2013-10-24 09:16:02 | 显示全部楼层
这都有啊,你牛的,邢总
智能技术共享平台 - 未来论 http://www.mywll.com/
回复

使用道具 举报

soulmate 发表于 2013-10-24 09:16:15 | 显示全部楼层
这都有啊,你牛的,邢总
智能技术共享平台 - 未来论 http://www.mywll.com/
回复

使用道具 举报

kt79c 发表于 2013-10-27 22:35:24 | 显示全部楼层
新手学习
智能技术共享平台 - 未来论 http://www.mywll.com/
回复

使用道具 举报

JustinRamos 发表于 2013-10-28 11:14:15 | 显示全部楼层
我要回复 回复 {:soso_e163:}
智能技术共享平台 - 未来论 http://www.mywll.com/
回复

使用道具 举报

pbboby 发表于 2013-10-29 00:06:26 | 显示全部楼层
智能技术共享平台 - 未来论 http://www.mywll.com/
回复

使用道具 举报

陈仙余 发表于 2013-11-8 17:00:37 | 显示全部楼层
邢总太强大啦。
智能技术共享平台 - 未来论 http://www.mywll.com/
回复

使用道具 举报

hisnc.com 发表于 2013-11-8 22:59:25 | 显示全部楼层
感谢分享,楼主高风亮洁。
智能技术共享平台 - 未来论 http://www.mywll.com/
回复

使用道具 举报

赵云鹏 发表于 2013-11-9 18:20:08 | 显示全部楼层
不知道对我的项目有没有帮助,先看看
智能技术共享平台 - 未来论 http://www.mywll.com/
回复

使用道具 举报

ghhailang 发表于 2013-11-10 20:21:33 | 显示全部楼层
很想学习学习这个,谢谢楼主分享。。
智能技术共享平台 - 未来论 http://www.mywll.com/
回复

使用道具 举报

六识沉沦 发表于 2013-11-17 11:42:39 | 显示全部楼层
回复  下载
智能技术共享平台 - 未来论 http://www.mywll.com/
回复

使用道具 举报

米香/fw南瓜 发表于 2013-11-19 13:26:41 | 显示全部楼层
学习学习
智能技术共享平台 - 未来论 http://www.mywll.com/
回复

使用道具 举报

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

本版积分规则

关注2973

粉丝3237

帖子9933

发布主题
阅读排行 更多
广告位
!jz_fbzt! !jz_sgzt! !jz_xgzt! 快速回复 !jz_sctz! !jz_fhlb! 搜索

智能技术共享平台 - 未来论

关注服务号

进入小程序

全国服务中心:

运维中心:天津

未来之家:天津 青岛 济南 郑州 石家庄

                商务邮箱:xy@mywll.com

Copyright © 2012-2021 未来派 未来论 (津ICP备16000236号-5)