毕业设计 基于51单片机环境监测设计 光照 PM2.5粉尘 温湿度 2.4G无线通信

0、毕业设计选题原则说明(重点)

  • 选题之前,同学们要弄明白一件事情,做毕业设计是干什么用的!
  • 这里我告诉大家,毕业设计对于你来说,不是让你去搞研究,掌握运用所学知识的,也不是让你去比谁做的毕业设计多么牛逼,多么厉害。
  • 说白点,它的作用就是一个,让你顺利毕业,能够拿到学位证,毕业证而已!!!
  • 当你明白这一点后,作毕业设计的要求就是在满足老师的要求后,越简单越好,这样不但容易去做,而且你自己也容易去理解,掌握,同样也能花最少的钱!!!
  • 满足老师的要求,这个没办法,毕竟他是决定你是否能通过答辩的人。
  • 每年都有很多同学找到我的时候,后悔当初为什么要把功能写的那么复杂,后悔没有提前找我咨询一下!所以在这里提醒同学们,提交开题报告之前一定要多想想,咨询下以往的学长学姐,不要自己随便写一堆提交上去!!!
  • 大家找不到学长学姐的话,也可以找我咨询,我可以给大家一些建议
  • 点击此处即可咨询

1、项目简介

1.1 系统构成

本设计共两块电路板,无线环境参数采集板将各项信息通过2.4G无线模块传给显示板,显示板完成显示及报警功能
接收板电路:由NRF24L01无线模块电路+LCD12864屏幕显示电路+按键电路+ds1302实时时钟电路+报警电路+STC89C52单片机最小系统电路构成
发送板电路:STC89C52单片机最小系统电路+PM2.5检测电路+dht11温湿度传感器电路+bh1750光照传感器电路+NRF24L01无线模块电路构成

1.2 系统功能

  • 1.设计采用2.4G的NRF24L01无线模块实现无线通信。
  • 2.设计采用温湿度传感器DHT11完成温湿度的采集。
  • 3.设计采用PM2.5传感器GP2Y1050AU0F(或可互换型号)粉尘参数的采集。
  • 4.光强传感器BH1750FVI(或可互换型号)完成环境光照强度参数的采集。
  • 5.按键可设置温湿度上下限报警值、PM2.5上限报警值,蜂鸣器报警、LED报警提示。
  • 6.按键可设置日期时间参数。
  • 7.按设置键进入设置功能,再按加减按键设置对应参数,按设置按键切换设置项。
  • 8.设计采用LCD12864液晶中文显示,各项监测值均在液晶上直观显示。

2、部分电路设计

2.1 STC89C52单片机核心系统电路设计

STC89C52是一个低功耗,高性能CMOS 8位单片机,片内含8k Bytes ISP(In-system programmable)的可反复擦写10000次的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及80C51引脚结构,芯片内集成了通用8位中央处理器和ISP Flash存储单元,功能强大的微型计算机的ST89C52可为许多嵌入式控制应用系统提供高性价比的解决方案

STC89C52单片机最小系统电路由复位电路、时钟电路和电源电路。拥有这三部分电路后,单片机即可正常工作。

单片机最小系统原理图如下图所示:

实物图:

2.2 dht11温湿度检测电路设计

DHT11 是一款湿温度一体化的数字传感器。

该传感器包括一个电阻式测湿元件和一个 NTC测温元件,并与一个高性能 8 位单片机相连接。通过单片机等微处理器简单的电路连接就能够实时的采集本地湿度和温度。DHT11 与单片机之间能采用简单的单总线进行通信,仅仅需要一个 I/O 口。

传感器内部湿度和温度数据 40Bit 的数据一次性传给单片机,数据采用校验和方式进行校验,有效的保证数据传输的准确性。DHT11 功耗很低,5V 电源电压下,工作平均最大电流 0.5mA。

其具体电路原理图如下图所示:

实物图如下图所示:

2.3 NRF24L01无线通信电路设计

NRF24L01是NORDIC公司生产的一款无线通信通信芯片,采用FSK 调制,集成NORDIC自家的Enhanced Short Burst协议。可以实现点对点或是1对6的无线通信。无线通信速度最高可达到2Mbps。

NRF24L01采用SPI通信,可以很方便的连接到MCU上面。

特点:

  • 2.4G全球开放的ISM频段,免许可证使用。
  • 126个可选的频道,满足多点通信和调频通信的需要。
  • 最高工作速率2Mbps,高校的GFSK调制,抗干扰能力强。
  • 内置CRC检错和点对多点的通信地址控制。
  • 可设置自动应答,确保数据可靠传输。

其具体电路原理图如下图所示:
在这里插入图片描述

实物图如下:

3、部分代码展示

3.1 NRF24L01初始化

由于需要对模拟信号进行处理,所以使用到STM32中的ADC

void init_NRF24L01(void)
{
    inerDelay_us(100);
 	CE=0;    // chip enable
 	CSN=1;   // Spi disable 
 	SCK=0;   // Spi clock line init high
	SPI_Write_Buf(WRITE_REG + TX_ADDR, TX_ADDRESS, TX_ADR_WIDTH);    // 写本地地址	
	SPI_Write_Buf(WRITE_REG + RX_ADDR_P0, RX_ADDRESS, RX_ADR_WIDTH); // 写接收端地址
	SPI_RW_Reg(WRITE_REG + EN_AA, 0x01);      //  频道0自动	ACK应答允许	
	SPI_RW_Reg(WRITE_REG + EN_RXADDR, 0x01);  //  允许接收地址只有频道0,如果需要多频道可以参考Page21  
	SPI_RW_Reg(WRITE_REG + RF_CH, 0);        //   设置信道工作为2.4GHZ,收发必须一致
	SPI_RW_Reg(WRITE_REG + RX_PW_P0, RX_PLOAD_WIDTH); //设置接收数据长度,本次设置为32字节
	SPI_RW_Reg(WRITE_REG + RF_SETUP, 0x07);   		//设置发射速率为1MHZ,发射功率为最大值0dB	
	SPI_RW_Reg(WRITE_REG + CONFIG, 0x0e);   		 // IRQ收发完成中断响应,16位CRC,主发送
}	

3.2 NRF24L01的SPI写时序

uint SPI_RW(unsigned char uchar)
{
	unsigned char  bit_ctr;
   	for(bit_ctr=0;bit_ctr<8;bit_ctr++) // output 8-bit
   	{
		MOSI = (uchar & 0x80);         // output 'uchar', MSB to MOSI
		uchar = (uchar << 1);           // shift next bit into MSB..
		SCK = 1;                      // Set SCK high..
		uchar |= MISO;       		  // capture current MISO bit
		SCK = 0;            		  // ..then set SCK low again
   	}
    return(uchar);           		  // return read uchar
}

3.3 读取BH1750光照数据

void Read_BH1750(void)
{   
  uchar i;	
  BH1750_Start();                          //起始信号
  BH1750_SendByte(SlaveAddress+1);         //发送设备地址+读信号
	
 for (i=0; i<3; i++)                      //连续读取6个地址数据,存储中BUF
  {
      BUF[i] = BH1750_RecvByte();          //BUF[0]存储0x32地址中的数据
      if (i == 3)
      {

         BH1750_SendACK(1);                //最后一个数据需要回NOACK
      }
      else
      {		
        BH1750_SendACK(0);                //回应ACK
     }
 }
  BH1750_Stop();                          //停止信号
  Delay5ms();
}

3.3 串口初始化

void UartInit(void)		//2400bps@11.0592MHz
{
  SCON = 0x50;            //8-bit variable UART
  PCON=0X00;
  TMOD = 0x20;            //Set Timer1 as 8-bit auto reload mode
  TH1 = TL1 = 0XF4; //Set auto-reload vaule
  TR1 = 1;                //Timer1 start run

  ES = 0;                 //Enable UART interrupt
  EA = 0;                 //Open master interrupt switch
} 

实物图

  • 5
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
本资料是基于51单片机环境监测系统 /*--------------------------------------------------------------------- ds18b20.h文件 ds18b20的函数 作者: 创建日期:2008.05.05 最后修改日期:2008.05.10 版本:2.0 1 单线单口的ds18b20的温度读取。 2 复位状态连续读取。 3 转换温度值在Disbuf[5];。 所有子程序: delay_ds18b20(unsigned int t) //延时US unsigned char ReadOneChar(void) //读一个字节 void WriteOneChar(unsigned char dat) //写一个字节 bit Init_DS18B20(void) //初始化函数 void TemperatuerResult(void) //复位 void r_ds18b20() //读取并转换温度值到Disbuf[]! ----------------------------------------------------------------------*/ #ifndef __ds18b20_1_H__ #define __ds18b20_1_H__ #include #define uchar unsigned char #define uint unsigned int /*--------------------------------------------------------- ds18b20数据、控制口定义 ---------------------------------------------------------*/ /*--------------------------------------------------------- void r_ds18b20(void) //读取并转换温度值到Disbuf[]! { TemperatuerResult(); xiaoshu = tplsb&0x0f; tpmsb = tpmsb<>4; xiaoshutemp = xiaoshu *625; xiaoshutemp = xiaoshutemp/100; zhengshu = tpmsb + tplsb; if(zhengshu = 0x64)&&(zhengshu <= 0x7d)) { Disbuf[0] = zhengshu/100; Disbuf[1] = zhengshu%100/10; Disbuf[2] = zhengshu%10+10; Disbuf[3] = xiaoshutemp/10; Disbuf[4] = xiaoshutemp%10; } else; } #include "reg52.h" #include "ds18b20.h" #define uchar unsigned char #define uint unsigned int void main() //主函数 { Init_DS18B20(); while(1) { r_ds18b20(); } } ---------------------------------------------------------*/ #endif

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

嵌入式基地

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值