C51单片机 SIM900A 手机给门禁解锁 智能家居 【C程序代码已开源,更新至Ver4.0】...

为何要实施这个项目?
一般小区楼下,每幢都会有一个门禁系统,
可以使用钥匙打开门禁,
有的可以使用刷卡打开门禁,
有的可以使用密码打开门禁,
但是,长期下来,因为小区人多,锁的钥匙孔会被捅坏,物业修起来也很怠慢
使用密码按键解锁门禁,按键也会失灵
每家都会安装一个【楼宇对讲器】,用来与楼下人对话,或者可以从视频看出,是哪位亲朋,并且可以门禁解锁。

目标:
使用智能家居,嵌入楼宇对讲机,模拟开门按键,完成开门动作。


适用对象:
家里人多,拥有门禁的钥匙不够用的家庭
出入门禁不想带钥匙的人
大冬天,懒得拿冰冷的钥匙开门的人
物业门禁钥匙,密码不好使的人

使用方法:
1,给模块插入一张有来电显示功能的移动/联通SIM卡,上电初始化,一个短的嘀的一声提示,初始化完成。
2,在任何时候任何地点,手机呼叫SIM900A GSM通信模块的号码,门禁解锁。


【小区楼幢-门禁外观】钥匙+键盘+刷卡+摄像头

 

【小区楼幢-门禁外观】键盘+摄像头+刷卡

 

【小区楼幢-门禁外观】  钥匙

 

室内【楼宇对讲机】外观

 

室内【楼宇对讲机】内部图

 

室内【楼宇对讲机】结合单片机

 

【SIM900A模块】结合单片机

 

【单片机串口通信  波特率计算器】

 

 

Ver2.0版本程序

C51  SIM900A 判断来电身份,蜂鸣器响起 远程控制

工程名  :手机呼叫SIM900A,门禁解锁
1  先用USB转TTL模块测试模块好用,发送AT,波特率到9600同步
2  STC12C4052AD单片机晶振 11.0592MHz,12M不可以用  
版本号:V1.0
手机呼叫SIM900A的号码,蜂鸣器亮500MS;

具体实现看程序,注释我写的非常详细了

/******************************
工程名  :手机呼叫SIM900A,门禁解锁
1 先用USB转TTL模块测试模块好用,发送AT,波特率到9600同步
2 51单片机晶振 11.0592MHz,12M不可以用  
 
手机呼叫SIM900A的号码,LED亮500MS;
*******************************/
#include "string.h"
#include "STC12C2052AD.h"
#define cache_max 200                      //串口接收缓存长度
xdata unsigned char uart_cache[cache_max]; // xdata 把变量存在flash中,而不存在RAM中
                                           //code 定义的数据要放在ROM里面,写入后就不能再更改
bdata unsigned char Flag;    //定时器标志位  bdata 把变量定义为可拆成8位寻址
sbit Timer_start =Flag^0;    //延时计数功能开关
sbit RUNING  = P3^7;         //SIM900A运行指示灯,1秒闪烁一次
sbit unlock  = P1^7;         //解锁
unsigned char code *ring="CLIP";           //来电标记
unsigned char code *phone1="1336218****";  //管理员1的手机号
unsigned char code *phone2="1395804****";  //管理员2的手机号
unsigned char code *phone3="1776715****";  //管理员3的手机号
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){  // 发多个8位数据到串口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 Uart1Init(void)   {   //9600bps@11.0592MHz
    PCON &= 0x7F;          //波特率不倍速
    SCON  = 0x50;          //8位数据,可变波特率
    AUXR &= 0xBF;          //定时器1时钟为Fosc/12,即12T
   
  • 0
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值