2023-5-20基于52单片机的智能家居系统(蓝牙)

news2024/10/6 2:32:03

资料已上传在微信公众号:风吹摇铃 奔赴星海

此系统可根据开发板原理图搭配外载模块实现功能,也可以根据原理图焊接或者PCB焊接。

注意:根据开发板搭载外部模块实现功能,需根据开发板原理图修改代码

0、整理及编写了19个常用的51单片机Proteus仿真,如下所示(可在压缩包第十个文件夹中的链接中下载):

1、系统功能:(系统内的AD传感器可根据需要自行选择)

(0)系统共有5个模式:日期闹钟模式、温湿度模式、光照检测模式、AD类传感器I类模数、AD类传感器II类模式。

(1)采用DS1302模块,实现日期和时间的读取,日期和时间均可通过独立按键设置。内设一个闹钟,闹钟可以通过按键设置,打开或者关闭等。日期、时间、闹钟等数据通过蓝牙模块上传至手机端显示。(闹钟响时显示屏显示当前是闹钟时间,时间是XXXXX字样,以英文呈现,手机端以中文呈现)

(2)通过DHT11温湿度传感器采集环境的温湿度,同时设有温湿度上限,上限可通过按键设置,当转换的温湿度超过阈值,则启动风扇降温降湿,蜂鸣器报警,温湿度数据通过蓝牙上传在手机端显示。

(3)通过BH1750光照传感器采集环境光照强度,设有上限阈值,可通过按键设置,超过阈值报警,同时显示屏显示:请注意光照过高字样,以英文形势呈现。

(4)通过ADC0832转换3和4路AD类传感器采集的数据,设有上限值,可通过按键设置,超过上限阈值,报警,风扇排风。数据通过蓝牙上传手机端显示。

(5)通过ADC0832转换1和2路AD类传感器采集的数据,设有上限值,可通过按键设置,超过上限阈值,报警,风扇排风。数据通过蓝牙上传手机端显示。

2、系统组成:单片机最小系统、LCD1602液晶显示屏、独立按键、高电平有效蜂鸣器,AD类传感器模块4个、ADDC0832模数转换芯片2块、DS1302、DHT11温湿度传感器、蓝牙模块、小风扇、S8050三极管、BH1750光照传感器、LED等等。

3、下载后请认真阅读下列文档,此文档包含了大量问题及解决方法:

4、文末的链接中下载全套资料,全套资料包括如下内容:(请详细阅读使用前必读和必读文件)

4.1、程序,附有注释:

4.2、仿真:

(1)系统初始界面

(2)日期闹钟界面

(3)温湿度界面

(4)BH1750光照检测界面(此界面无法仿真)

(5)AD传感器I类检测

(6)AD传感器II类检测

4.3、参考文献包含以下内容:

4.4、嘉立创EDA原理图,包含以下内容:

4.4.0、工程源文件

4.4.1、PCB制版文件为一压缩包文件,可直接制版:

4.4.2、PDF为原理图:

4.4.3、工程源文件下包含工程的原理图和PCB工程,可解压后由嘉立创EDA软件直接打开进行编辑:

4.4.4、PCB3D预览图:(注意给大家的PCB制板文件打出来的板如下排版,和我手里的排版略微不同,但都是一样的,只是元器件放的位置有所变化,大家也可以自己打开源文件工程修改自己想要的排版,这个在视频里面有讲到)

5、51单片机学习资料内包含了51单片机使用手册,1602使用手册以及C语言手册等大量学习资料:

6、器件清单:(请参照下面的元器件购买视频购买)

7、51单片机烧录软件说明,此资料为将程序烧录到开发板或者芯片的说明,内含下载链接:

8、主要软件下载链接,内部包含了Proteus各版本,KEIL、字模取模等单片机类各设计软件:

9、模块资料:包含传感器使用说明,原理图等:

10、下面是部分代码:

/*此处是头文件 内部包含一些定义及寄存器*/#include "reg52.h"       //此文件中定义了单片机的一些特殊功能寄存器#include "intrins.h"#define uchar unsigned char#define uint unsigned int
/**********************************1602PIN口定义 P0口数据驱动 P2引脚驱动**********************************/#define LCD1602_DATAPINS P0sbit LCD1602_RS=P2^7;  //1602引脚sbit LCD1602_RW=P2^6;sbit LCD1602_E=P2^5;
/*DS1302IO口定义引脚*///---定义ds1302使用的IO口---//sbit DSIO=P3^3;//DS1302的引脚接口sbit RST=P3^4;sbit SCLK=P3^2;/*1302初始化部分数组*///---DS1302写入和读取时分秒的地址命令---////---秒分时日月周年 最低位读写位;-------//uchar code READ_RTC_ADDR[7] = {0x81, 0x83, 0x85, 0x87, 0x89, 0x8b, 0x8d}; uchar code WRITE_RTC_ADDR[7] = {0x80, 0x82, 0x84, 0x86, 0x88, 0x8a, 0x8c};
//---DS1302时钟初始化2023年5月17日星期3   22点44分00秒。---////---存储顺序是秒分时日月周年,存储格式是用BCD码---//uchar TIME[7] = {0, 0x39, 0x08, 0x20, 0x05, 0x07, 0x23};unsigned int ti=0,alarm=0;       //修改第几个时间参数 、修改第几个闹钟参数unsigned char alarm_hour=0x17,alarm_min=0x47;   //闹钟时、分参数
enum Mode        //定义枚举、三种模式{  DISPLAYDATA,MODIFYDATA,SETALARMCLOCK,NONE,ALARMCLOCK}mode;

enum Alarmswitch   //定义闹钟开关{  OFF,ON}alarmswitch;
/*DHT11温湿度传感器数据端口*/sbit Data=P1^7;   //DHT11数据线接口P17
/*独立按键驱动定义,此处按键为多功能按键 在不同的界面下实现不同的功能*/sbit k1 = P1^0;    //时间和闹钟切换    //按键sbit k2 = P1^1;  //  时分秒年月日切换   sbit k3 = P1^2;  // 加sbit k4 = P1^3;  //  减sbit k5 = P1^4;  //  界面的选择
/*BH1750光照传感器IIC引脚驱动定义*/sbit    SCL=P3^6;      //IIC时钟引脚定义sbit      SDA=P3^7;      //IIC数据引脚定义#define    SlaveAddress   0x46 //定义器件在IIC总线中的从地址,根据ALT  ADDRESS地址引脚不同修改                              //ALT  ADDRESS引脚接地时地址为0x46,接电源时地址为0xB8/*定义1750的位以及存储变量 读取变量 上限变量*/typedef   unsigned char BYTE;typedef   unsigned short WORD;BYTE    BUF[8]; int     dis_data;                       //变量uint light_data_H=900;//光照上限    900LXuint light_data; //读取光照强度的变量

/*蜂鸣器和风扇的引脚*/sbit buzz = P1^6;      //蜂鸣器sbit motor = P1^5;      //风扇
/*切换 温湿度 各类变量*/uchar k5_flag=0; //多种界面的显示切换变量uchar  humi_value;//湿度uchar  temp_value;//温度uchar TH=30,RH=70;//温湿度的上限值bit DHT11_H_flag=0;  //温湿度上限切换标志
/*各AD传感器驱动引脚*/sbit ADCS1   =P2^0; //ADC0832 片选sbit ADCLK1  =P2^1; //ADC0832 时钟sbit ADDI1   =P2^2; //ADC0832 数据输入    /*因为单片机的管脚是双向的,且ADC0832的数据输入输出不同时进行,sbit ADDO1   =P2^2; //ADC0832 数据输出    /*为节省单片机引脚,简化电路所以输入输出连接在同一个引脚上
sbit ADCS2   =P2^3; //ADC0832 片选sbit ADCLK2  =P2^4; //ADC0832 时钟sbit ADDI2   =P3^5; //ADC0832 数据输入    /*因为单片机的管脚是双向的,且ADC0832的数据输入输出不同时进行,sbit ADDO2   =P3^5; //ADC0832 数据输出    /*为节省单片机引脚,简化电路所以输入输出连接在同一个引脚上
/*AD转换的各类变量*/// AD传感器1 2上限阈值初始值uint GasH1=600,GasH2=700;uint Gas1=0,Gas2=0; //AD传感器1  2读取变量bit ADC1_H_flag=0;  //ADC1上限切换标志// AD传感器3 4上限阈值初始值uint GasH3=800,GasH4=3000;uint Gas3=0,Gas4=0; //AD传感器3  4读取变量bit ADC2_H_flag=0;  //ADC2上限切换标志/*1602驱动函数定义*/
/*蓝牙模块 串口驱动*/void UART_Init(void);//串口初始化void uartSendByte(unsigned char dat);//发送数据void uartSendStr(unsigned char *s,unsigned char length);//发送字符串字符串

11、元器件购买视频(请认真看,购买正确的元器件)

公众号或者B站查看(名称已放在文章开头)

12、仿真功能演示视频:

公众号或者B站查看(名称已放在文章开头)

13、程序讲解视频

公众号或者B站查看(名称已放在文章开头)

14、硬件实物展示视频

公众号或者B站查看(名称已放在文章开头)

15、下面是实物展示图:

(1)硬件原图

(2)初始界面

(3)日期时间界面

(4)闹钟界面

(5)温湿度检测界面

(6)光照强度检测界面

(7)ADC1传感器检测转换界面

(8)ADC2传感器检测转换界面

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/548640.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

NameServer路由注册与发现

NameServer在RocketMQ中主要承担的就是路由的管理、服务注册、以及服务的发现。在RocketMQ这承担着很重要的责任。 整体架构: 消息生产者在发送消息前需要考虑的问题就是,我需要发给谁?地址在哪儿?对于消费者也一样。那么NameSer…

软件工程 | 期末复习

一、软件与软件危机 1、软件发展经历三个阶段:程序设计、程序系统、软件工程 2、软件的概念:软件是计算机系统与硬件相互依存的另一部分,包括程序、数据以及相关文档的完整集合,软件程序数据文档 数据:使程序能够适…

测试人员转型是大势所趋:我的十年经验告诉我,你必须要行动起来了。

做测试十多年,有不少人问过我下面问题: 现在的手工测试真的不行了吗? 测试工程师,三年多快四年的经验,入门自动化测试需要多久? 自学自动化测试到底需要学哪些东西? 不得不说,随着行…

学习open62541 --- [76] 使用智能指针处理内存释放问题

在使用监测项时,一般都会加一个context,然后在回调函数里使用这个context,这就需要保证context的内存空间在执行回调函数时是有效的。往往有以下三种方法: 使用静态内存空间:使用static创建静态变量,然后把…

【Python 爬虫常见的报错及其解决方法】零基础也能轻松掌握的学习路线与参考资料

Python 爬虫被广泛应用于数据采集和分析。然而,爬虫在运行过程中常常会遇到各种问题和错误,降低了爬虫效率、准确性和可靠性。因此掌握爬虫常见报错及其解决方法是非常关键的。本文将介绍 Python 爬虫常见的报错及其解决方法,并提供参考资料和…

内存泄漏的原因,内存泄漏如何避免?内存泄漏如何定位?

1. 内存溢出 内存溢出 OOM (out of memory),是指程序在申请内存时,没有足够的内存空间供其使用,出现out of memory;比如申请了一个int,但给它存了long才能存下的数,那就是内存溢出。 2. 内存泄…

PyTorch LSTM和LSTMP的原理及其手写复现

PyTorch LSTM和LSTMP的原理及其手写复现 0、前言全部参数的细致介绍代码实现Reference 0、前言 关于LSTM的原理以及公式其实在这篇博客一步一步详解LSTM网络【从RNN到LSTM到GRU等,直至attention】讲的非常清晰明了了。 这里就是写出LSTM的pytorch的实现,…

【随笔记】全志 T507 PF4 引脚无法被正常设置为中断模式的问题分析

相关信息 硬件平台:全志T507 系统版本:Android 10 / Linux 4.9.170 问题描述:PF4 无法通过标准接口设置为中断模式,PF1、PF2、PF3、PF5 都可以。 分析过程 一开始以为是引脚被其它驱动占用引起,或者该引脚不具备中断…

高光谱成像技术在果蔬品质检测中的应用

在当前市场经济背景下,食品安全问题是消费者最为关心的问题之一,尤其是果蔬产品,农药残留问题和品质问题直接关系着消费者的权益和人身安全。针对传统化学检测的缺陷,本文结合高光谱成像技术,对其在果蔬品质与安全无损…

【C++】多态的概念/重写/虚表/抽象类

多态 多态的概念多态的定义和实现重写抽象类多态的原理虚表的构建原理虚函数的调用原理 多态的概念 多态就是多种形态,传递不同的对象,会调用不同的方法。 多态的定义和实现 那么在C语法中,多态是如何实现的呢? 我们首先要在继承…

vue学习 - 基础篇

初始工程结构 这里我们使用script标签从cdn获取vue.js, 而不是使用脚手架vue-cli, 因为cdn比较方便一点, 也不用配置node之类的比较麻烦 index.html <!DOCTYPE html> <html><head><title>VueJS Course</title><link rel"stylesheet"…

第三篇、基于Arduino uno,用oled0.96寸屏幕显示dht11温湿度传感器的温度和湿度信息——结果导向

0、结果 说明&#xff1a;先来看看拍摄的显示结果&#xff0c;如果是你想要的&#xff0c;可以接着往下看。 1、外观 说明&#xff1a;本次使用的oled是0.96寸的&#xff0c;别的规格的屏幕不一定适用本教程&#xff0c;一般而言有显示白色、蓝色和蓝黄一起显示的&#xff0…

RabbitMQ日常使用小结

一、使用场景 削峰、解耦、异步。 基于AMQP(高级消息队列协议)协议来统一数据交互,通过channel(网络信道)传递信息。erlang语言开发&#xff0c;并发量12000&#xff0c;支持持久化&#xff0c;稳定性好&#xff0c;集群不支持动态扩展。 RabbitMQ的基本概念 二、组成及工作流…

可见性原子性有序性的+线程传参的方式+Java如何实现多个线程之间共享数据+线程间通信+死锁产生

//为了均衡CPU和内存的速度差异,增加了缓存 导致了可见性的问题; //操作系统增加了进程 线程 分时复用CPU,均衡CPU和io设备的速速差异 导致了原子性问题; //jvm指令重排序(优化指令排序) 导致了有序性的问题 可见性问题是指 线程A修改共享变量,修改后CPU缓存中的数据没有及时同…

Emacs之目前最快补全插件lsp-bridge(八十八)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 人生格言&#xff1a; 人生…

数据分析12——Pandas中数据合并方法

0、前言&#xff1a; 在pandas中进行数据合并的操作和数据库中的join操作非常类似。 1、merge横向合并&#xff1a; 前言&#xff1a;该函数只能做横向合并函数名&#xff1a;merge()函数参数&#xff1a; left: 数据类型为’DataFrame | Series’&#xff0c;需要进行合并的…

[CTF/网络安全] 攻防世界 PHP2 解题详析

[CTF/网络安全] 攻防世界 PHP2 解题详析 index.php.phps扩展名姿势 翻译&#xff1a;你能给这个网站进行身份验证吗&#xff1f; index.php index.php是一个常见的文件名&#xff0c;通常用于Web服务器中的网站根目录下。它是默认的主页文件名&#xff0c;在访问一个网站时&am…

说说计算这事儿:从开关到人工智能

目录 一 前言 二 计算历史 三 计算探秘 四 算力优化 五 未来展望 一 前言 计算本身其实是一个比较抽象的词&#xff0c;或者说比较笼统。很多场景都可能用到计算这个词&#xff0c;因此具体的含义就需要根据上下文来确定。今天我们讨论的计算&#xff0c;是比较狭义的计算…

【环境准备】在虚拟机的Ubuntu下安装VS Code并配置C/C++运行环境

1.点击进入 vscode官网 下载.deb安装包 2.启动虚拟机下的Ubuntu&#xff0c;Windows下的Xftp和Xshell Xftp&#xff1a;用于将刚刚在Windows下下载好的vscode.deb安装包传输到Ununtu中。Xshell&#xff1a;用于远程登录Ununtu&#xff0c;进行 vscode.deb 安装包安装&#xff…

算法26:递归练习

目录 题目1&#xff1a;给你一个字符串&#xff0c;要求打印打印出这个字符串的全部子序列&#xff08;子序列不能重复&#xff09; 题目2&#xff1a;打印一个字符串的全部排列。 题目3&#xff1a;针对题目2&#xff0c;要求去除重复元素 题目4&#xff1a;给定一个字符串…