基于51单片机NRF24L01的远程水压监控及控制proteus仿真原理图PCB

功能介绍:
0.本系统采用STC89C52作为单片机
1.系统分为主机和从机。
2.从机负责设定压力阈值、屏幕显示及蜂鸣器报警。
3.从机负责检测当前的水压值,并通过对比设定压力阈值,控制水泵继电器
4.主机和从机通过NRF24L01定时传输设定的压力阈值和当前水压值
5.当水压低于设定阈值时,水泵开始工作,当水压低于设定阈值5%时,蜂鸣器报警。
6.按键可设定阈值
收起
7.采用DC002作为电源接口可直接输入5V给整个系统供电

原理图:
上位机
在这里插入图片描述
下位机
在这里插入图片描述

PCB:
上位机
在这里插入图片描述
下位机
在这里插入图片描述

主程序:

#include "reg52.h"
#include <stdio.h>
#include "eeprom52.h"
#include "lcd1602.h"
#include "nrf24l01.h"
#include "delay.h"

#define ON 0
#define OFF 1

#define TX_MODE 0
#define RX_MODE 1
#define CNT_MAX 10 //连续发送或接收最大值

sbit KEY_ADD = P3^4;
sbit KEY_SUB = P3^6;
//sbit MOTOR = P1^3;
sbit BUZZER = P3^7;

bit refreshFlag = 1;
bit rekey = 0;
unsigned char dis[16];
bit modeFlag = TX_MODE;
unsigned char txCnt = 0;
unsigned char rxCnt = 0;



void Timer0_Init(void); //函数声明
void KeyProcess(void);

void main(void)
{
    DelayMs(250);

    EEPROM52_Init(); //初始化内部EEPROM
    Timer0_Init(); 
    DelayMs(20);
    nRF24L01_Init();
    DelayMs(20);
    LCD_Init();  //初始化液晶
    DelayMs(20); //延时有助于稳定
    LCD_Clear(); //清屏

    while (1) //主循环
    {

        if (refreshFlag == 1)
        {
            EA = 0;
            refreshFlag = 0;
            if (modeFlag == TX_MODE) //发送模式
            {
                if (nRF24L01_TxPacket(TxBuf) || txCnt > CNT_MAX) //发送成功
                {
                    txCnt = 0;
                    modeFlag = RX_MODE; //切换至接收模式
                    SetRX_Mode();
                }
                txCnt++;
            }
            else
            {
                if (nRF24L01_RxPacket(RxBuf) || rxCnt > CNT_MAX) //接收成功
                {
                    rxCnt = 0;
                    modeFlag = TX_MODE; //切换至发送模式
                    SetTX_Mode();
                }
                rxCnt++;
            }
            
            if (RxBuf[0] < TxBuf[0] - 5) //水压低于设定阈值5%,蜂鸣器报警
            {
                //MOTOR = ON;
                BUZZER = ON;
            }
            else
            {
                BUZZER = OFF;
                //MOTOR = OFF;
            }

            sprintf (dis, "Set Pressure:%02d%%", (int)TxBuf[0]);
            LCD_DispStr(0, 0, dis);
            sprintf (dis, "Now Pressure:%02d%%", (int)RxBuf[0]);
            LCD_DispStr(0, 1, dis);

            EA = 1;
        }

        KeyProcess();
    }
}

void KeyProcess(void)
{
    if (!KEY_ADD || !KEY_SUB)
    {
        DelayMs(20);
        if (!KEY_ADD && !rekey)
        {
            rekey = 1;

            TxBuf[0]++;
            if (TxBuf[0] > 99)
            {
                TxBuf[0] = 5;
            }
            EEPROM52_Write(); //写入EEPROM
        }

        if (!KEY_SUB && !rekey)
        {
            rekey = 1;
            if (TxBuf[0] == 5)
            {
                TxBuf[0] = 100;
            }
            TxBuf[0]--;
            EEPROM52_Write(); //写入EEPROM
        }
    }
    else
    {
        rekey = 0;
    }
}

void Timer0_Init(void)
{
    TMOD |= 0x01;                //使用模式1,16位定时器,使用"|"符号可以在使用多个定时器时不受影响
    TH0 = (65536 - 18432) / 256; //重新赋值 20ms
    TL0 = (65536 - 18432) % 256;
    EA = 1;  //总中断打开
    ET0 = 1; //定时器中断打开
    TR0 = 1; //定时器开关打开
}

void Timer0_isr(void) interrupt 1
{
    static unsigned int time_20ms = 0; //定时器计数

    TH0 = (65536 - 18432) / 256; //重新赋值 20ms
    TL0 = (65536 - 18432) % 256;

    time_20ms++;
    if (time_20ms > 10) //定时
    {
        refreshFlag = 1; //刷新
        time_20ms = 0;  
    }
}

仿真演示视频:
https://www.bilibili.com/video/BV1kv4y1A7nB/

实物演示视频:
https://www.bilibili.com/video/BV1W3411P7h7/

  • 0
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
基于51单片机控制nRF24L01是一种无线通信模块,它可以提供可靠的远程数据传输功能。如今,无线通信技术在许多领域得到广泛应用,包括智能家居、物联网和工业自动化等。与其他传统通信方式相比,nRF24L01具有低功耗、远距离传输和高数据传输速率等优势。 在基于51单片机控制系统中,nRF24L01模块起到了重要的通信桥梁作用。它通过SPI接口与单片机进行通信,实现数据的传输和接收。使用51单片机控制nRF24L01,可以轻松实现无线传感器网络,将传感器采集到的数据通过无线方式发送到远程主机进行处理和监控。 基于51单片机控制nRF24L01还可以实现无线遥控功能。通过编程控制,可以将51单片机设置为遥控器,通过nRF24L01与相应的接收器进行通信,实现对其他设备的控制。这对于家庭自动化系统或无人机等应用中的远程控制是非常有用的。 在应用开发过程中,我们需要掌握51单片机的编程技巧,了解nRF24L01的通信协议和工作原理。此外,还需要注意信号的干扰和距离的限制等问题,在设计过程中保证信号的稳定性和可靠性。 总而言之,基于51单片机控制nRF24L01是一种非常有用的无线通信模块。它可以广泛应用于各种领域,提供稳定可靠的远程数据传输和遥控功能。随着物联网应用的不断增加,对于掌握这项技术的工程师和开发人员来说,必将有更多的机会和挑战。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值