毕业设计 基于51单片机的室内环境监测系统的设计

2024-03-04 01:10

本文主要是介绍毕业设计 基于51单片机的室内环境监测系统的设计,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!


🔥 毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。
为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项目,今天要分享的是:基于51单片机的室内环境监测系统的设计 

1 硬件设计

1.1 控制系统的选型

在选用控制系统时,需要对市面上各种芯片进行对比,选用最适合的芯片。为了应对zigbee和RF4CE应用难题,TI公司研发了一款能够结合这类应用的cc2530芯片。cc2530是一款高性能、高标准的芯片,具有多种标准接口,是一款兼具性能和性价比的芯片产品,而且这类芯片的型号较多,具有兼容多种型号的引脚,也可以兼容各种开发软件,从而可以适用于多款应用。更方便于个体研究。性能方面,这款芯片配备高效RF收发器。是标准的增强型8051CPU。cc2530具备不同的运行模式,且备较高的抗干扰和穿透。,很适用于低功耗无线传感网络中。所以cc2530很适合作为此设计的控制芯片。

1.2模块电路

1.2.1 系统单片机核心电路

cc2530通过引出一系列的外接引脚,用于控制系统各模块。单片机系统的核心电路图如下图3所示:

单片机系统核心电路图

1.2.2 系统的晶振电路

此单片机晶振电路用引脚PC14和引脚PC15连接到单片机,再通过单片机介入osc-in和osn-out,提供了稳定时序进入单片机,为使晶振能够谐振,加入了电容,方便产生时间的序列。在偏激中最为重要的就是时钟。

晶振电路原理如图4所示:

晶振电路原理图

1.2.3 复位电路设计

当系统监测到环境中有数据超标之后会触发系统报警。当问题得以解决之后,要使系统回复之处状态继续运行。我们就需要设计一个复位电路,复位电路图如图5所示:

复位电路原理图

1.2.4 呼吸灯原理

本课题设计基于cc2530单片机系统的呼吸灯要求在报警时能够频闪。单片机上的灯只有两种状态,通电时亮,断电时灭。要让灯由暗到亮再到暗,原理就是让灯以肉眼观察不到的频率闪烁,灯暗的时候其实是灯闪烁频率较低,逐渐加快频率,小灯就越来越亮,在到达设置的最高频率时灯就最亮,然后又降低频率,灯又慢慢变暗。以这种规律重复让灯闪烁就达到呼吸灯的效果。

1.2.5 电源电路设计

    系统需要供给5V直流电工作。在调试时直接使用电脑USB进行供电即可。在进行远距离测试时,用干电池对其供电。安装时需要常用的5V充电头持续稳定的供电。

1.2.6烟雾浓度检测模块

市面上有已存在的烟雾检测模块,因此只需将其介入到电路当中即可。烟雾传感器是要连接在从机的,当烟雾传感器采集到数据之后会通过从机的zigbee节点发送到协调器,协调器会在12864显示上显示出对应值,因为烟雾传感器是环境中烟雾浓度达到报警值之后就会报警,所以协调器显示屏上只会显示1和2,不会显示烟雾具体浓度。1表示报警2表示不报警。

2软件设计

2.1 软件开发环境

本设计使用的编译软件是IAR。在开发过程中,要尽量做到简单编译,语法通俗易懂。因此在对开发环境的选择时需要对软件各方面综合考虑选择。IAR作为一款优秀的开发工具广泛应用于嵌入式系统。这款C编译器可支持众多半导体材料微处理器。它具有丰富的函数库和强大的开发与调试的能力,含有的PROMable代码效率极高。面对不同的芯片有相应的速度和相应的大小优化器。是调试本课题设计的系统的很好的选择。

2.2 主机及从机电路设计

在本课题研究中,在单片机的控制下,通过温湿度传感器采集温湿度数据,烟雾传感器采集烟雾浓度。传感器收集到室内环境中的数据后,通过zigbee模块将数据发送到主机单片机,通过对数据的处理之后。在液晶显示屏上显示出室内温湿度数据及单位。

2.2.1 协调器程序设计

协调器部分也称主机部分,由一个cc2530、一个蜂鸣器和一个12864显示屏组成。功能是受到从机部分采集到的数据后,通过单片机处理在显示屏上显示出来,当各项数据超标后控制蜂鸣器报警。

主机程序代码如下:

uint8 wen[]={

if(KEY1==0)

                           {

                                if(wendu_worn>=65)  wendu_worn=1;

                                else wendu_worn++;                             

                                LCD_disp_char(2, 110,wendu_worn);                                

                            }

                            if(KEY2==0)

                            {

                                if(shidu_worn>=100)  shidu_worn=1;

                                else shidu_worn++;

                                LCD_disp_char(4, 110,shidu_worn);  

                            }                            

                            if((Temp>=wendu_worn)||(Humi>=shidu_worn)||(Smoke==0x01))

                            {

                              BEEP=0;D2=0;

                            }

                            Else

                            

                            if(KEY1==0)

                            {

                                if(wendu_worn>=65)  wendu_worn=1;

                                else wendu_worn++;                             

                                LCD_disp_char(2, 110,wendu_worn);                                

                            }

                            if(KEY2==0)

                            {

                                if(shidu_worn>=100)  shidu_worn=1;

                                else shidu_worn++;

                                LCD_disp_char(4, 110,shidu_worn);  

                            }                            

                            if((Temp>=wendu_worn)||(Humi>=shidu_worn)||(Smoke==0x01))

                            {

                              BEEP=0;D2=0;

                            }

                            else

                            {

                                (shidu_worn>=100)  shidu_worn=1;

                                else shidu_worn++;

                                LCD_disp_char(4, 110,shidu_worn);  

                            }                            

                            if((Temp>=wendu_worn)||(Humi>=shidu_worn)||(Smoke==0x02))

                            {

                              BEEP=0;D2=0;

                            }

2.2.2 从机程序设计

从机部分是在单片机控制下,通过DHT11传感器和烟雾传感器采集环境中的数据,再靠zigbee与协调器进行数据传输,我们还需对从机部分进行编译程序并拷入。

从机部分代码如下:

     while(1)

{

If(GPIO_ReadlnputDataBit(GDPIO_GPIO_Pin_1)==0)

{

UART1-sENDdATA(0*FC);

UART1-sENDdATA(0*07);

UART1-sENDdATA(0*01);

UART1-sENDdATA(0*01);

UART1-sENDdATA(0*FF);

UART1-sENDdATA(0*FD);

UART1-sENDdATA(0*00);

UART1-sENDdATA(0*01);

UART1-sENDdATA(0*FF);

}

else

{

UART1-sENDdATA(0*FC);

UART1-sENDdATA(0*07);

UART1-sENDdATA(0*01);

UART1-sENDdATA(0*01);

UART1-sENDdATA(0*FF);

UART1-sENDdATA(0*FD);

UART1-sENDdATA(0*00);

UART1-sENDdATA(0*01);

UART1-sENDdATA(0*FF);

}

Delay_ms(1000);delay_ms(1000); Delay_ms(1000);delay_ms(1000); Delay_ms(1000);delay_ms(1000);

}

2.2.3 LED12864显示模块

系统选用的是12864液晶显示屏,这个名字来源于横向128纵向64的点阵排列。这类显示屏在单片机领域应用广泛。8位并口的数据总线也很适合我们的cc2530单片机。

如果你需要帮助、建议或解决问题,不要犹豫,可以随时向老师提问或寻求支持。专注于单片机的解决方案可以为你提供有关电子设计、嵌入式系统、编程和硬件方面的宝贵信息。无论你的问题涉及到哪个方面,都可以向老师咨询,以获得有针对性的建议和指导。祝愿你在单片机设计领域取得成功!

这篇关于毕业设计 基于51单片机的室内环境监测系统的设计的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/771537

相关文章

JAVA系统中Spring Boot应用程序的配置文件application.yml使用详解

《JAVA系统中SpringBoot应用程序的配置文件application.yml使用详解》:本文主要介绍JAVA系统中SpringBoot应用程序的配置文件application.yml的... 目录文件路径文件内容解释1. Server 配置2. Spring 配置3. Logging 配置4. Ma

2.1/5.1和7.1声道系统有什么区别? 音频声道的专业知识科普

《2.1/5.1和7.1声道系统有什么区别?音频声道的专业知识科普》当设置环绕声系统时,会遇到2.1、5.1、7.1、7.1.2、9.1等数字,当一遍又一遍地看到它们时,可能想知道它们是什... 想要把智能电视自带的音响升级成专业级的家庭影院系统吗?那么你将面临一个重要的选择——使用 2.1、5.1 还是

高效管理你的Linux系统: Debian操作系统常用命令指南

《高效管理你的Linux系统:Debian操作系统常用命令指南》在Debian操作系统中,了解和掌握常用命令对于提高工作效率和系统管理至关重要,本文将详细介绍Debian的常用命令,帮助读者更好地使... Debian是一个流行的linux发行版,它以其稳定性、强大的软件包管理和丰富的社区资源而闻名。在使用

Ubuntu系统怎么安装Warp? 新一代AI 终端神器安装使用方法

《Ubuntu系统怎么安装Warp?新一代AI终端神器安装使用方法》Warp是一款使用Rust开发的现代化AI终端工具,该怎么再Ubuntu系统中安装使用呢?下面我们就来看看详细教程... Warp Terminal 是一款使用 Rust 开发的现代化「AI 终端」工具。最初它只支持 MACOS,但在 20

windows系统下shutdown重启关机命令超详细教程

《windows系统下shutdown重启关机命令超详细教程》shutdown命令是一个强大的工具,允许你通过命令行快速完成关机、重启或注销操作,本文将为你详细解析shutdown命令的使用方法,并提... 目录一、shutdown 命令简介二、shutdown 命令的基本用法三、远程关机与重启四、实际应用

Debian如何查看系统版本? 7种轻松查看Debian版本信息的实用方法

《Debian如何查看系统版本?7种轻松查看Debian版本信息的实用方法》Debian是一个广泛使用的Linux发行版,用户有时需要查看其版本信息以进行系统管理、故障排除或兼容性检查,在Debia... 作为最受欢迎的 linux 发行版之一,Debian 的版本信息在日常使用和系统维护中起着至关重要的作

Python中的可视化设计与UI界面实现

《Python中的可视化设计与UI界面实现》本文介绍了如何使用Python创建用户界面(UI),包括使用Tkinter、PyQt、Kivy等库进行基本窗口、动态图表和动画效果的实现,通过示例代码,展示... 目录从像素到界面:python带你玩转UI设计示例:使用Tkinter创建一个简单的窗口绘图魔法:用

什么是cron? Linux系统下Cron定时任务使用指南

《什么是cron?Linux系统下Cron定时任务使用指南》在日常的Linux系统管理和维护中,定时执行任务是非常常见的需求,你可能需要每天执行备份任务、清理系统日志或运行特定的脚本,而不想每天... 在管理 linux 服务器的过程中,总有一些任务需要我们定期或重复执行。就比如备份任务,通常会选在服务器资

TP-LINK/水星和hasivo交换机怎么选? 三款网管交换机系统功能对比

《TP-LINK/水星和hasivo交换机怎么选?三款网管交换机系统功能对比》今天选了三款都是”8+1″的2.5G网管交换机,分别是TP-LINK水星和hasivo交换机,该怎么选呢?这些交换机功... TP-LINK、水星和hasivo这三台交换机都是”8+1″的2.5G网管交换机,我手里的China编程has

基于Qt实现系统主题感知功能

《基于Qt实现系统主题感知功能》在现代桌面应用程序开发中,系统主题感知是一项重要的功能,它使得应用程序能够根据用户的系统主题设置(如深色模式或浅色模式)自动调整其外观,Qt作为一个跨平台的C++图形用... 目录【正文开始】一、使用效果二、系统主题感知助手类(SystemThemeHelper)三、实现细节