智能家居 Ver2.0

/******************************
工程名  :手机呼叫SIM900A,门禁解锁
1 先用USB转TTL模块测试模块好用,发送AT,波特率到9600同步
2 51单片机晶振 11.0592MHz,12M不可以用  
手机呼叫SIM900A的号码,LED亮500MS;
*******************************/
#include "string.h"
#include "STC12C2052AD.h"
#define cache_max 100                      //串口接收缓存长度
xdata unsigned char uart_cache[cache_max]; // xdata 把变量存在flash中,而不存在RAM中
                                           //code 定义的数据要放在ROM里面,写入后就不能再更改
bdata unsigned char Flag;    //定时器标志位  bdata 把变量定义为可拆成8位寻址
sbit RUNING  = P3^7;         //SIM900A运行指示灯,1秒闪烁一次
sbit beep    = P1^7;         //蜂鸣器
sbit action  = P1^5;         //解锁控制

unsigned char code *ring="CLIP";           //来电标记
unsigned char code *phone1="1395804****";  //管理员1的手机号
unsigned char code *phone2="1358812****";  //管理员2的手机号
sbit Timer_start =Flag^0;     //计时器,功能开关
unsigned char Times=0;        // 定时计数器
unsigned char First_Int = 0;  // 串口数组字符索引
unsigned char delay=0;        //中断定时器,实际数据delay*50次
  
  
void SendData(unsigned char dat){   // 发一个英文8位数据到串口SBUF
    ES=0;                  
    SBUF=dat;          
    while(TI!=1);  
    TI=0;                  
    ES=1;                  
}
  
void SendString(unsigned char *s){  // 发英文字符到串口SBUF
    while(*s)
    SendData(*s++);
}
void SendLR(void) {      // 发回车换行
    SendString("\r\n");
}
void DELAY_MS (unsigned int a){   // 延时
    unsigned int i;
    while ( --a != 0 )    
    for (i=0;i<=600;i++);
}
 
void Unlock(void)   {//发出嘀的一声
    beep = action=0;  
    DELAY_MS(500);  
    beep = action=1;  
}
void Warning(void)   {//发出嘀嘀警告声
    beep = 0;  
    DELAY_MS(100);  
    beep = 1;  
    DELAY_MS(50);  
    beep = 0;  
    DELAY_MS(100);  
    beep = 1;  
    DELAY_MS(50);  

}
 
void Uart1Init(void)   {   //[email protected]
    PCON &= 0x7F;          //波特率不倍速
    SCON  = 0x50;          //8位数据,可变波特率
    AUXR &= 0xBF;          //定时器1时钟为Fosc/12,即12T
    AUXR &= 0xFE;          //串口1选择定时器1为波特率发生器
    TMOD &= 0x0F;          //清除定时器1模式位
    TMOD |= 0x20;          //设定定时器1为8位自动重装方式
    TL1 = 0xFD;            //设定定时初值
    TH1 = 0xFD;            //设定定时器重装值
    ET1 = 0;               //禁止定时器1中断
    TR1 = 1;               //启动定时器1
    ES=1;                     //开串口中断
}
  
void Uart1() interrupt 4{
    uart_cache[First_Int] = SBUF;     //将接收到的字符串存到缓存中
    First_Int++;                      //缓存指针向后移动
    if(First_Int > cache_max)         //如果缓存满,将缓存指针指向缓存的首地址
      First_Int = 0;                  //数组索引,归位
    RI = 0;                           //清除RI位
}
  
void Timer0Init(void)  {   //20毫秒@11.0592MHz
    AUXR &= 0x7F;          //定时器时钟12T模式
    TMOD &= 0xF0;     
    TMOD |= 0x01;          //设置定时器模式,16位定时器
    TL0 = 0x00;            //设置定时器初值
    TH0 = 0xB8;            //设置定时器初值
    TF0 = 0;               //清TF0标志
    TR0 = 1;               //定时器0开始计时
    ET0 = 1;               //使能定时器0中断
    EA=1;                  //开总中断
}
  
void Timer0_ISR() interrupt 1{          //最高级别中断服务程序
    static unsigned char Time_count=0;  // 定时器计数器 static全局生命周期
    TR0=0;                              //关定时器
    TL0 = 0x00;                         //重设定时器初值
    TH0 = 0xB8;                         //重设定时器初值
    Time_count++;             
    if(Time_count>=50)   {
        Time_count = 0;
        RUNING =~RUNING;      //SIM900A运行指示灯,1秒闪烁一次
    }
    if(Timer_start) Times++;  //如果收到允许定时,开始计时
    if(Times > (50*delay)){   //如果Times 到达设定时间
        Timer_start = 0;      // 完成定时,自己关闭定时功能Timer_start=0
        Times = 0;            // 完成定时,清空定时计数器
    }
    TR0=1;                     //开定时器
}
  
void CLR_Buf1(void){
    unsigned int k;
    for(k=0;k<cache_max;k++)     //将缓存内容清零
    uart_cache[k] = 0x00;
    First_Int = 0;              //接收字符串的起始存储位置
}
  
void Send_Command(unsigned char *command,unsigned char *ack,unsigned char wait_time){         
    unsigned char *pointer;
    pointer = command;                     //保存字符串command的首地址到c
    CLR_Buf1(); 
    while(1) { 
        if(!strstr(uart_cache,ack))  {     //查找需要应答的字符
            if(Timer_start == 0){
                command = pointer;               //将字符串地址给b
                for (command; *command!=‘\0‘;command++)
                   SendData(*command);
                SendLR();  
                Times = 0;
                delay = wait_time;
                Timer_start = 1;           // 开启定时器,
              }
          }
        else{
            Timer_start = 0;
					  Warning();         //与SIM900A连接成功提示音
            break; 
        }
     }
     CLR_Buf1();
}

void Wait_CREG(void) {          //等待模块注册成功
    unsigned char i;
    unsigned char k;
    i = 0;
    CLR_Buf1();
    while(i == 0) {  
        CLR_Buf1(); 
        SendString("AT+CREG?");  //查询模块网络注册状态
        SendLR();
        DELAY_MS(1000);                  
        for(k=0;k<cache_max;k++) {
        if(uart_cache[k] == ‘:‘)  {
            if((uart_cache[k+4] == ‘1‘)||(uart_cache[k+4] == ‘5‘)){  //表明网络注册成功
                i = 1; 
                break;
            }
        }
     }
  }
}

void Check_Ring(void)   {                       
    if(strstr(uart_cache,ring)!=NULL)  {        //检测是否有来电标记
         DELAY_MS(100);                         //等待数据全部接收完成
        if((strstr(uart_cache,phone1))||(strstr(uart_cache,phone2)))  
          Unlock();    //如果管理员来电,就解锁
 				else 
				  Warning();   //如果不是来电,就发警告提示音
        CLR_Buf1();    // 清空SBUF缓存
    }
}

void main(void){
    Timer0Init();                      //初始化定时器0
    Uart1Init();                       //初始化串口9600
    Send_Command("AT","OK",3);         //波特率同步
    Send_Command("ATE0","OK",3);       //取消AT回显 
    Send_Command("AT+CLIP=1","OK",3);  //开启来电显示
    Wait_CREG();                       //查询等待模块注册成功
    while(1){
      Check_Ring();
   }
}

编译结果:

Rebuild target ‘Target 1‘
compiling MyC51.C...
linking...
Program Size: data=42.0 xdata=100 code=1064
creating hex file from "Myproject"...
"Myproject" - 0 Error(s), 0 Warning(s).
时间: 2024-08-27 13:19:26

智能家居 Ver2.0的相关文章

【智能家居v1.0项目】C#实现scoket通信

问题背景:在实现智能家居项目中,要实现服务器接受到zigbee模块采集到的信息,并且将该数据通过socket通信传输给客户端. 以下是服务器客户端 //以下的using是自己添加的 using System.IO.Ports; using System.Net; using System.Net.Sockets; using System.Threading; namespace NJGB智能家居系统V10 {     public partial class Form1 : Form     

第17期中国智能家居主题沙龙将于5月23日在京举行

中国智能家居主题沙龙已经办16期,为中国智能家居的发展贡献了自己的力量,在这轮智能家居热潮中,沙龙将继续为政府.投资机投.智能家居产品提供商.智能家居方案提供商,智能家居集成商,智能家居渠道提供多方位的合作,促进行业的快速爆发. 活动宗旨: 搭建行业用户与企业沟通的桥梁,以交流.合作.服务为目的,探讨行业现状及走势,推广普及新理念.建立智能家居沟通平台以宣传企业品牌,推广新技术,展示新产品.根据智能家居行业各产业链上下游人士的需求,有针对性地提供服务,促进行业发展. 活动背景: 2013年初<国

智能家居团战 海尔“造”用微软“智”?

近日,海尔在U+的基础上发布了"U+智慧生活"APP,而微软小冰则成为继魅族之后海尔又一重量级合作伙伴,在于小米美的的对阵中海尔魅族又添一强援.其实,不难看出,智能家居市场在经过一轮各自为战的吹捧期后,正逐渐呈现抱团打造生态系统,以团战方式打开新局面. 此前有观点对智能家居不屑一顾,认为概念大于实用,现在这么看确实不假,但我们应该用更长远的眼观来看待,智能家居赢在未来,而不是现在--但就在十年前,Nokia也是如此看待智能手机的.固然,短时间内智能家居仍会是概念大于实际,但长远来看,5

智能家居系统

0.引言 今日跟随我多年的电脑撂挑子了,经常性蓝屏,吓得赶快备份硬盘,发现硬盘了还存着毕设的课题,删也不是,留着又觉得这些资料用不上,想来想去,摘抄有意义的部分放到网上,然后剩下的清理了吧. 目录 智能家居系统-概述 智能家居系统-框架设计 智能家居系统-软件协议 智能家居系统-硬件设计 智能家居系统-软件设计 智能家居系统-测试

利用Node.js对某智能家居服务器重构

原文摘自我的前端博客,欢迎大家来访问 http://www.hacke2.cn 之前负责过一个智能家居项目的开发,外包重庆一家公司的,我们主要开发服务器监控和集群版管理. 移动端和机顶盒的远程通信是用中间服务器完成交互,服务器使用MINA NIO框架,非阻塞式的,可以看看以前博客了解下某智能家居项目框架学习总结,或者其他资料JAVA NIO原理,基于MINA框架快速开发网络应用程序. 在移动端或者机顶盒登录后会使用spring security 进行加密,主要是结合用户名和密码来加密,生成一个唯

智能家居系统-软件协议

3. 家庭网关的软件平台 随着嵌入式电子系统越来越复杂,系统软件的稳定性对系统的稳定运行显得愈发重要,在一些功能复杂的系统中,软件的工作量已经超过硬件开发.此时,嵌入式操作系统的作用凸显出来,操作系统可以把开发人员从无尽的软件编码工作中解放出来,只专注于应用开发,而系统资源的管理交与操作系统来完成,这种方式极大地提高了开发效率,缩短了开发周期.同时,基于操作系统的开发可以极大地提高系统的健壮性,各个任务并发执行,各自独立,即时有一个任务程序跑飞,但并不会造成系统的崩溃.另一方面,现代处理器的功能

基于Html5的智能家居手机客户端设计(一)——找到openhab的rest

今天开始我的毕业设计,基于HTML5的智能家居手机客户端设计.挑剔了好久,终于找到我可以使用国外开源项目智能家居核心,通过restful(我也不是很懂,毕竟我只是电子信息学院爱好网络). REST描述了一个架构样式的网络系统,比如 web 应用程序.在目前主流的三种Web服务交互方案中,REST相比于SOAP(Simple Object Access protocol,简单对象访问协议)以及XML-RPC更加简单明了,无论是对URL的处理还是对Payload的编码,REST都倾向于用更加简单轻量

智能家居系统-软件设计

1 智能家居远程控制系统的软件实现 1.1 基于uC/OS-II的中央控制器的软件设计 1.1.1 uC/OS-II系统移植 本设计使用uC/OS-II操作系统,uC/OS-II是一个源码公开.可移植.可固化.可剪裁和抢占式的实时多任务操作系统,uC/OS-II的大部分源码是用标准ANSI C编写,并且编程规范,可读性很高,内核中只有少量的与硬件相关的代码使用汇编语言编写,总共200余行,移植非常方便[37].uC/OS-II软件体系结构如图5-1所示.移植工作主要包括以下几个方面的内容: 1)

树莓派 百度语音 智能家居小助手

大体思路(程序写的有点乱,只是大体框架,还有好多坑留着慢慢填) 树莓派3通过USB声卡录音 ==>> 录音传给百度语音识别 ==>> 返回txt文本 ==>> IF TXT=操作智能家居的语句 THEN 执行相应动作 ELSE 将txt文本提交tuling123 ==>> 返回txt ==>> 传给百度语音文字转语音==>> 树莓派播放 import uuid import base64 import json import urll