毕业设计 基于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

相关文章

Python FastAPI+Celery+RabbitMQ实现分布式图片水印处理系统

《PythonFastAPI+Celery+RabbitMQ实现分布式图片水印处理系统》这篇文章主要为大家详细介绍了PythonFastAPI如何结合Celery以及RabbitMQ实现简单的分布式... 实现思路FastAPI 服务器Celery 任务队列RabbitMQ 作为消息代理定时任务处理完整

Linux系统中卸载与安装JDK的详细教程

《Linux系统中卸载与安装JDK的详细教程》本文详细介绍了如何在Linux系统中通过Xshell和Xftp工具连接与传输文件,然后进行JDK的安装与卸载,安装步骤包括连接Linux、传输JDK安装包... 目录1、卸载1.1 linux删除自带的JDK1.2 Linux上卸载自己安装的JDK2、安装2.1

Linux系统之主机网络配置方式

《Linux系统之主机网络配置方式》:本文主要介绍Linux系统之主机网络配置方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、查看主机的网络参数1、查看主机名2、查看IP地址3、查看网关4、查看DNS二、配置网卡1、修改网卡配置文件2、nmcli工具【通用

Linux系统之dns域名解析全过程

《Linux系统之dns域名解析全过程》:本文主要介绍Linux系统之dns域名解析全过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、dns域名解析介绍1、DNS核心概念1.1 区域 zone1.2 记录 record二、DNS服务的配置1、正向解析的配置

Linux系统中配置静态IP地址的详细步骤

《Linux系统中配置静态IP地址的详细步骤》本文详细介绍了在Linux系统中配置静态IP地址的五个步骤,包括打开终端、编辑网络配置文件、配置IP地址、保存并重启网络服务,这对于系统管理员和新手都极具... 目录步骤一:打开终端步骤二:编辑网络配置文件步骤三:配置静态IP地址步骤四:保存并关闭文件步骤五:重

Windows系统下如何查找JDK的安装路径

《Windows系统下如何查找JDK的安装路径》:本文主要介绍Windows系统下如何查找JDK的安装路径,文中介绍了三种方法,分别是通过命令行检查、使用verbose选项查找jre目录、以及查看... 目录一、确认是否安装了JDK二、查找路径三、另外一种方式如果很久之前安装了JDK,或者在别人的电脑上,想

Linux系统之authconfig命令的使用解读

《Linux系统之authconfig命令的使用解读》authconfig是一个用于配置Linux系统身份验证和账户管理设置的命令行工具,主要用于RedHat系列的Linux发行版,它提供了一系列选项... 目录linux authconfig命令的使用基本语法常用选项示例总结Linux authconfi

Nginx配置系统服务&设置环境变量方式

《Nginx配置系统服务&设置环境变量方式》本文介绍了如何将Nginx配置为系统服务并设置环境变量,以便更方便地对Nginx进行操作,通过配置系统服务,可以使用系统命令来启动、停止或重新加载Nginx... 目录1.Nginx操作问题2.配置系统服android务3.设置环境变量总结1.Nginx操作问题

CSS3 最强二维布局系统之Grid 网格布局

《CSS3最强二维布局系统之Grid网格布局》CS3的Grid网格布局是目前最强的二维布局系统,可以同时对列和行进行处理,将网页划分成一个个网格,可以任意组合不同的网格,做出各种各样的布局,本文介... 深入学习 css3 目前最强大的布局系统 Grid 网格布局Grid 网格布局的基本认识Grid 网

在不同系统间迁移Python程序的方法与教程

《在不同系统间迁移Python程序的方法与教程》本文介绍了几种将Windows上编写的Python程序迁移到Linux服务器上的方法,包括使用虚拟环境和依赖冻结、容器化技术(如Docker)、使用An... 目录使用虚拟环境和依赖冻结1. 创建虚拟环境2. 冻结依赖使用容器化技术(如 docker)1. 创