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

article/2025/10/11 20:43:49

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

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


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

使用方法:
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位数据到串口SBUFES=0;                  SBUF=dat;          while(TI!=1);  TI=0;                  ES=1;                  
}void SendString(unsigned char *s){  // 发多个8位数据到串口SBUFwhile(*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.0592MHzPCON &= 0x7F;          //波特率不倍速SCON  = 0x50;          //8位数据,可变波特率AUXR &= 0xBF;          //定时器1时钟为Fosc/12,即12T

http://chatgpt.dhexx.cn/article/Yvth9EIP.shtml

相关文章

基于STC89C51单片机,CH340芯片的下载电路

前几天看到了卓晴公众号写的三篇关于STC系列单片机的下载电路&#xff0c;然后结合了其他的文章&#xff0c;对下载电路有了更加深入的了解&#xff0c;在这里我梳理一下自己的学习过程&#xff0c;附上完整的资料&#xff0c;方便日后查看&#xff0c;也方便有兴趣的同学交流讨…

C51单片机简易密码锁(课程设计)

已经过测试&#xff0c;全部可用。手机好像不能发博客&#xff0c;相册提取图片代码粘黏复制可用。 本密码锁用于开门关门。绿灯保持常亮状态&#xff0c;表示一直通电状态。如果处于开门状态&#xff0c;则红灯也会亮起。&#xff08;单片机上无法显示红绿灯&#xff0c;仿真…

51单片机的架构与原理(STC89C51)

前言 学习单片机&#xff0c;不管怎么学都是要走一些弯路的&#xff0c;有的人弯路走得多&#xff0c;有多人弯路走得少&#xff0c;有些人中途就放弃了&#xff0c;也有不少人成功上岸&#xff0c;掌握了各式各样的单片机、处理器。用51单片机来学习是最合适不过的&#xff0c…

C51单片机利用HC-05蓝牙模块实现手机点灯

蓝牙通信&#xff0c;实现手机端远程(15米)控制单片机&#xff0c;这听起来对于初学者的我来说&#xff0c;是那么不可思议&#xff0c;经过不断地实验&#xff0c;阅读其他大佬的文章&#xff0c;终于实现了。 在有基础的通信原理知识的前提下&#xff0c;知&#xff0c;HC-05…

基于C51单片机的ESP8266Wifi模块(ESP-01s)编程(详细)

1、模块简介 ESP-01S 是由安信可科技开发的 Wi-Fi 模块&#xff0c;该模块核心处理器为ESP8266。ESP8266 拥有完整的且自成体系的 Wi-Fi 网络功能&#xff0c;既能够独立应用&#xff0c;也可以作为从机搭载于其他主机 MCU 运行。当 ESP8266 独立应用时&#xff0c;能够直接从外…

(可远程)开源手机app控制c51单片机,附微信小程序控制

开源手机app控制c51单片机 第一 、先上效果图第二、原理讲解第三、下载程序到c51第四 app inventor 开发第五、微信小程序开发第六 可能遇到的一些小问题 第一 、先上效果图 第二、原理讲解 原理简述&#xff1a;利用发布订阅模式。第一步&#xff0c;新建主题&#xff0c;第二…

java实例内部类

内部类&#xff1a;可以将一个类定义在另一个类或者一个方法的内部。描述一个事物的一个完整结构的描述。内部类包括&#xff1a;实例内部类&#xff08;普通内部类&#xff09;&#xff0c;静态内部类&#xff0c;局部内部类&#xff08;定义在方法里&#xff0c;几乎不用&…

Java内部类介绍 - 局部内部类和匿名内部类

文章目录 内部类局部内部类匿名内部类匿名内部类介绍常见的使用形式开发中使用场景 内部类 局部内部类 局部内部类 &#xff08;鸡肋语法&#xff0c;了解即可&#xff09; 局部内部类, 在方法、代码块、构造器等执行体中创建一个类, 称为为局部内部类(但是我们一般都不会这样…

夯实Java基础系列8:深入理解Java内部类及其实现原理

本系列文章将整理到我在GitHub上的《Java面试指南》仓库&#xff0c;更多精彩内容请到我的仓库里查看 https://github.com/h2pl/Java-Tutorial 喜欢的话麻烦点下Star、Fork、Watch三连哈&#xff0c;感谢你的支持。 文章首发于我的个人博客&#xff1a; www.how2playlife.c…

初识JAVA内部类

1 内部类概述 如果一个类存在的意义就是为指定的另一个类&#xff0c;可以把这个类放入另一个类的内部。 就是把类定义在类的内部的情况就可以形成内部类的形式。 A类中又定义了B类&#xff0c;B类就是内部类,B类可以当做A类的一个成员看待: 2 特点 1) 内部类可以直接访问外…

java 内部类怎么调用成员变量_JAVA内部类之成员内部类

JAVA有一个特殊的类形式——内部类(这个词有点为难普通话不好的南方朋友)。今天我们就来聊聊内部类的一种&#xff1a;成员内部类。 如何定义成员内部类 那要如何定义成员内部类呢。 既然叫成员内部类&#xff0c;说明和成员变量是有类似的地方。从代码的层次结构上来看他是和成…

Java内部类(匿名内部类)

Java内部类&#xff08;匿名内部类&#xff09; 一、内部类二、静态内部类三、成员内部类四、局部内部类&#xff08;了解即可&#xff09;五、匿名内部类&#xff08;重要&#xff09; 一、内部类 1、概述 内部类就是一个定义在一个类里面的类&#xff0c;里面的类可以理解为…

Java 内部类的四种实现方式

Java 内部类的四种实现方式 前言 今天的话我将为大家介绍Java的四种内部类&#xff0c;他们分别是普通内部类&#xff0c;静态内部类&#xff0c;局部内部类&#xff0c;匿名内部类。 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 一、内部类是什么&…

Java内部类

Java内部类 内部类成员内部类局部内部类匿名内部类静态内部类常规面试案例内部类实例化对象重名变量的引用 内部类 是什么&#xff1f; 字面意思&#xff0c;在类的内部编写的类就叫内部类&#xff01; 为了方便区分、学习、理解我们一般将内部类分为以下几种&#xff01; 内部…

java内部类赋值_详解 Java 内部类

内部类在 Java 里面算是非常常见的一个功能了,在日常开发中我们肯定多多少少都用过,这里总结一下关于 Java 中内部类的相关知识点和一些使用内部类时需要注意的点。 从种类上说,内部类可以分为四类:普通内部类、静态内部类、匿名内部类、局部内部类。我们来一个个看: 普通…

java new 一个内部类_java内部类

java内部类的几种类型:成员内部类,静态内部类,方法内部类,匿名内部类。 成员内部类:成员内部类是类内部的非静态类。成员内部类不能定义静态方法和变量(final修饰的除外)。这是因为成员内部类是非静态的,类初始化的时候先初始化静态成员,如果允许成员内部类定义静态变量…

java中的内部类

java中的内部类主要分为两类四种&#xff1a; 第一类&#xff1a;定义在外部类局部位置上&#xff0c;分为局部内部类( 有 类名)、匿名内部类(没有类名)。 第二类&#xff1a;定义在外部类的成员位置上&#xff0c;分为成员内部类(没有static修饰)、静态内部类(使用static修饰…

java内部类最全详解

1、成员内部类 内部类与外部类的关系 a.成员内部类的创建需要依赖于外部类对象-&#xff08;成员方法必须通过对象调用&#xff09;&#xff0c;在没有外部类实例之前无法创建成员内部类对象 b.内部类与外部类相对独立&#xff0c;不是is a 的关系&#xff08;发动机-汽车&am…

Java内部类详解(含:成员内部类、局部内部类、匿名内部类、静态内部类)

内部类是什么&#xff1f; 字面意思&#xff0c;在类的内部编写的类就叫内部类&#xff01;即一个类的内部又完整的嵌套了另一个类结构&#xff0c;被嵌套的类称为内部类(inner class),嵌套其他类的类称为外部类(outer class)。 内部类是类的第五大成员→【提示:类的五大成员…

分享15款很棒的 JavaScript 开发工具javascript

在开发中,借助得力的工具可以事半功倍。今天,这篇文章向大家分享最新收集的15款非常有用的 javascript 开发工具。 testswarm: continious & distributed js testing testswarm是mozilla实验室推出的一个开源项目,它旨在为开发者提供在多个浏览器版本上快速轻松测试自己j…