一、项目概述本项目采用双 STC89C52RC 单片机架构分为水泵主控执行端、独立无线遥控端通信核心选用大夏龙雀 NR11 2.4G 串口透传模块依托模块高稳定性、强抗干扰、即插即用透传特性实现四模式智能水泵远程管控手动启停、定时供水、循环间歇供水、感应触发供水。 主控端集成继电器驱动 310 水泵、两位共阳极数码管、双色状态 LED、Type-C18650 双电源续航遥控端自主绘制 PCB搭载 8 路独立功能按键、3 路状态指示灯无数码管情况下通过 LED 闪烁组合反馈设备状态。整套项目硬件精简、协议闭环带校验适合 51 单片机学习、嵌入式无线通信实训、家用自动滴灌 / 小型水景落地。二、硬件整体架构2.1 水泵主控端硬件清单模块型号规格功能主控芯片STC89C52RC系统逻辑运算、指令解析、外设调度数码管两位共阳极定时时长、工作模式、倒计时显示状态 LED红、绿 LED 各 1绿色就绪、红色水泵运行 / 告警本地按键轻触按键现场本地启停与模式切换驱动单元5V 电磁继电器隔离驱动 310 微型直流水泵执行负载310 水泵供水执行机构无线模块大夏龙雀 NR113.3V UART2.4G 双向透传接收遥控指令、回传设备状态供电系统Type-C18650 电池座 切换开关市电 / 锂电池双电源无缝切换断电续航2.2 无线遥控端硬件清单模块型号规格功能主控STC89C52RC-40I-PDIP40按键扫描、串口指令封装、LED 状态逻辑复位电路SW222μF 电解 10k 电阻上电复位 手动硬件复位电源输入USB-A 5V外接 USB 供电稳压芯片AMS1117-3.35V 转 3.3V专为 NR11 无线模块稳压供电无线通信大夏龙雀 NR11远程指令发送、主控状态数据接收输入按键8 路 TS665CJ 轻触按键 (P2.0~P2.7)全功能远程操控状态指示3 路 LED (P1.0/P1.1/P1.2低电平点亮)连接、水泵、模式三色状态提示IO 上拉10k 排阻 (P0.0~P0.3)P0 开漏补全预留 OLED、蜂鸣器扩展系统晶振11.0592MHz标准串口晶振保障波特率精准匹配2.3 遥控端按键功能分配IO 引脚按键功能说明P2.0KEY1水泵开启P2.1KEY2水泵关闭P2.2KEY3四模式循环切换手动→定时→循环→感应P2.3KEY4定时 / 循环参数数值 1P2.4KEY5定时 / 循环参数数值 - 1P2.5KEY6紧急停止最高优先级锁泵P2.6KEY7主动查询主控整机状态P2.7KEY8NR11 无线配对重连2.4 遥控端 LED 状态定义引脚LED点亮逻辑P1.0绿色 LED无线连接常亮 已配对、闪烁 搜索、熄灭 断连P1.1红色 LED水泵状态常亮 运行、熄灭 停机P1.2黄 LED模式区分1 闪手动 / 2 闪定时 / 3 闪循环 / 4 闪感应三、双向自定义通信协议3.1 遥控→主控 下行控制指令指令码数据位含义0x010x00水泵关闭0x010x01水泵开启0x020x00~0x3C设置定时秒数 (0~60s)0x030x00~0x03模式选择 (0 手动 / 1 定时 / 2 循环 / 3 感应)0x040x00紧急停机0x050x00状态查询请求3.2 主控→遥控 上行状态帧字节序号内容说明Byte00xBB固定帧头帧起始识别Byte1Mode当前工作模式 0~3Byte2Pump_Sta水泵状态 0 停机 / 1 运行Byte3Time_Remain剩余计时秒数Byte4Bat_Level供电电量百分比 0~100Byte5Check_Sum前 5 字节累加校验和防干扰误判四、完整核心代码示例Keil C51 直接编译4.1 通用基础头文件定义public.h#ifndef PUBLIC_H #define PUBLIC_H #include reg52.h #include string.h typedef unsigned char u8; typedef unsigned int u16; // 遥控端LED引脚定义 sbit LED_LINK P1^0; // 无线连接指示灯 绿 sbit LED_PUMP P1^1; // 水泵状态指示灯 红 sbit LED_MODE P1^2; // 模式闪烁指示灯 黄 // 按键引脚 P2口8按键 sbit KEY_OPEN P2^0; sbit KEY_CLOSE P2^1; sbit KEY_MOD P2^2; sbit KEY_ADD P2^3; sbit KEY_SUB P2^4; sbit KEY_STOP P2^5; sbit KEY_QUERY P2^6; sbit KEY_PAIR P2^7; // 通信宏定义 #define FRAME_HEAD 0xBB #define BAUD_9600 0xFD // 11.0592晶振 9600波特率定时器初值 // 模式枚举 typedef enum { MODE_MANUAL 0, MODE_TIMER 1, MODE_LOOP 2, MODE_SENSE 3 }Work_Mode; #endif4.2 串口底层驱动#include public.h u8 uart_rx_buf[6]; u8 rx_cnt 0; u8 rec_flag 0; // 串口初始化 960011.0592 适配NR11透传 void UART_Init(void) { TMOD | 0x20; // 定时器2模式2自动重装 TH1 BAUD_9600; TL1 BAUD_9600; TR1 1; REN 1; // 接收使能 SM0 0; SM1 1; // 8位数据可变波特率 EA 1; ES 1; } // 单字节发送 void UART_Send_Byte(u8 dat) { SBUF dat; while(!TI); TI 0; } // 多字节批量发送 void UART_Send_Buf(u8 *buf, u8 len) { u8 i; for(i0;ilen;i) UART_Send_Byte(buf[i]); } // 串口中断服务函数 接收主控回传状态帧 void UART_ISR(void) interrupt 4 { u8 ch; if(RI) { RI 0; ch SBUF; if(ch FRAME_HEAD) // 检测帧头开始接收整帧 { rx_cnt 0; uart_rx_buf[rx_cnt] ch; } else if(rx_cnt 0 rx_cnt 6) { uart_rx_buf[rx_cnt] ch; if(rx_cnt 6) // 收满6字节完整帧 rec_flag 1; } } } // 校验和计算 u8 Check_Sum_Calc(u8 *buf, u8 len) { u8 sum 0,i; for(i0;ilen;i) sum buf[i]; return sum; }4.3 遥控端按键扫描 指令封装代码#include public.h extern void UART_Send_Byte(u8 dat); // 独立按键扫描返回按键编号无按键返回0 u8 Key_Scan(void) { if(KEY_OPEN 0) { delay_ms(20); while(!KEY_OPEN); delay_ms(20); return 1; } if(KEY_CLOSE 0) { delay_ms(20); while(!KEY_CLOSE);delay_ms(20); return 2; } if(KEY_MOD 0) { delay_ms(20); while(!KEY_MOD); delay_ms(20); return 3; } if(KEY_ADD 0) { delay_ms(20); while(!KEY_ADD); delay_ms(20); return 4; } if(KEY_SUB 0) { delay_ms(20); while(!KEY_SUB); delay_ms(20); return 5; } if(KEY_STOP 0) { delay_ms(20); while(!KEY_STOP); delay_ms(20); return 6; } if(KEY_QUERY 0) { delay_ms(20); while(!KEY_QUERY);delay_ms(20); return 7; } if(KEY_PAIR 0) { delay_ms(20); while(!KEY_PAIR); delay_ms(20); return 8; } return 0; } // 根据按键发送对应NR11无线指令 void Send_Cmd_ByKey(u8 key_val) { switch(key_val) { case 1: UART_Send_Byte(0x01);UART_Send_Byte(0x01); break; // 开泵 case 2: UART_Send_Byte(0x01);UART_Send_Byte(0x00); break; // 关泵 case 3: UART_Send_Byte(0x03);UART_Send_Byte(0x00); break; // 模式切换 case 4: UART_Send_Byte(0x02);UART_Send_Byte(0x01); break; // 参数 case 5: UART_Send_Byte(0x02);UART_Send_Byte(0xFF); break; // 参数- case 6: UART_Send_Byte(0x04);UART_Send_Byte(0x00); break; // 急停 case 7: UART_Send_Byte(0x05);UART_Send_Byte(0x00); break; // 状态查询 case 8: LED_LINK 1; delay_ms(500);LED_LINK0; break; // 配对指示灯提示 default: break; } }4.4 遥控端 LED 状态解析#include public.h extern u8 uart_rx_buf[6]; extern u8 rec_flag; void LED_State_Refresh(void) { u8 sum_calc; if(rec_flag 1) { rec_flag 0; // 校验数据合法性 sum_calc Check_Sum_Calc(uart_rx_buf,5); if(sum_calc ! uart_rx_buf[5]) return; // 校验失败丢弃帧 // 1.水泵状态LED LED_PUMP (uart_rx_buf[2]1) ? 0 : 1; // 2.模式LED闪烁次数 switch(uart_rx_buf[1]) { case MODE_MANUAL: LED_MODE0;delay_ms(200);LED_MODE1; break; case MODE_TIMER: LED_MODE0;delay_ms(200);LED_MODE1;delay_ms(200); LED_MODE0;delay_ms(200);LED_MODE1; break; case MODE_LOOP: // 3次闪烁省略逻辑一致 case MODE_SENSE: break; } LED_LINK 0; // 收到合法数据判定无线连接正常 } }4.5 遥控端主函数逻辑#include public.h extern void UART_Init(void); extern u8 Key_Scan(void); extern void Send_Cmd_ByKey(u8 key); extern void LED_State_Refresh(void); void main(void) { u8 key_buf; // 外设初始化 UART_Init(); LED_LINK 1; LED_PUMP 1; LED_MODE 1; while(1) { key_buf Key_Scan(); if(key_buf ! 0) { Send_Cmd_ByKey(key_buf); LED_LINK 0; // 发送指令标记链路活跃 } LED_State_Refresh(); delay_ms(10); } }4.6 主控端核心指令解析片段对接 NR11 接收指令// 主控串口接收中断解析遥控指令 void UART_Master_ISR(void) interrupt 4 { u8 dat; if(RI) { RI 0; dat SBUF; // 解析遥控下发指令执行水泵逻辑、模式切换 switch(dat) { case 0x01: Pump_Ctrl(SBUF); break; // 水泵启停 case 0x02: Set_Time_Param(SBUF); break; case 0x03: Switch_Mode(SBUF); break; case 0x04: Emergency_Stop(); break; case 0x05: Upload_Device_Status(); break; // 打包状态上传遥控端 } } }五、遥控端原理图分区讲解建议输入DC电源尽量稳定因硬件PCB设计对于电源部分的滤波处理较少需要外部提前保障电源的稳定。5.1 51 单片机最小系统区核心主控区供电引脚40 脚 VCC 接整机 5V20 脚 GND 全局共地31 脚 EA 引脚外接 10k 上拉电阻接 5V启用片内程序 ROM符合 STC52 标准上电配置。复位电路9 脚 RST 引脚搭配 22μF 电解电容接 5V、10k 电阻下拉 GND上电电容充电完成自动复位并联轻触按键 SW2支持手动强制复位调试阶段程序卡死可快速重启。晶振电路18、19 脚外接 11.0592MHz 无源晶振与起振电容为串口通信提供精准时钟基准保障和大夏龙雀 NR11 波特率严格对齐杜绝分频偏差导致乱码。5.2 电源与稳压分区输入USB-A 接口引入 5V 整机主电源USB 外壳与系统 GND 相连抗干扰接地。次级稳压AMS1117-3.3 线性稳压芯片输入端接 5V稳定输出 3.3V 专供大夏龙雀 NR11 模块前后端搭配滤波电容抑制电压纹波避免无线模块电压波动引发通信断连严禁 NR11 直接 5V 供电必须独立 3.3V 稳压这是模块稳定工作前提。5.3 大夏龙雀 NR11 无线通信分区硬件接线规则NR11 的 TXD 接单片机 P3.0 (RXD)NR11 的 RXD 接单片机 P3.1 (TXD)串口交叉收发模块 VCC 接 AMS1117 输出 3.3VGND 与单片机系统共地。设计优势模块自带 5V-TTL 电平兼容无需串联分压电阻简化布线串口直连硬件 UART不占用多余 IO通信实时性高。5.4 按键输入电路分区P2 口 (P2.0~P2.7) 八路独立轻触按键按键一端接 IO 口、一端直接接地利用 51 单片机 IO 内部上拉电阻默认高电平按键拉低触发电路极简无额外分压PCB 走线集中排布按键布局规整焊接容错率高。六、PCB 布局设计思路建议两层均进行GND铺铜确保内部信号稳定不受干扰。6.1 分区模块化布局原则核心设计思路严格按照功能分区隔离布局杜绝强弱电交叉干扰主控最小系统居中放置STC89C52 芯片放在 PCB 中心晶振紧贴单片机 18、19 引脚缩短晶振走线长度降低时钟信号干扰复位电容、电阻紧邻 RST 引脚保证复位时序稳定。电源稳压区靠近输入接口USB 电源入口就近摆放 AMS1117-3.3 稳压芯片输入、输出滤波电容紧贴稳压芯片引脚缩短电源回路降低纹波给 NR11 提供干净 3.3V 电源。无线模块独立分区大夏龙雀 NR11 模块放置在 PCB 板边缘开阔位置远离单片机时钟、按键开关等高干扰走线天线无金属遮挡提升无线收发灵敏度模块电源走线单独加粗不和数字 IO 走线共用回路。按键与 LED 布局板边8 个按键集中排布在 PCB 一侧边缘符合手持遥控握持操作习惯三颗状态 LED 集中在面板可视区域方便使用时观察链路、水泵、模式状态。6.2 布线与接地规范电源线加粗5V 主电源线、3.3V NR11 专用电源线线宽加宽至 1.5mm数字信号线 0.8mm满足电流承载压降最小化。大面积 GND 铺铜底层完整全覆盖接地铺铜所有器件 GND 就近打孔接铜单点共地降低地环路干扰进一步提升 NR11 无线抗干扰能力隔墙通信更稳定。串口走线短直单片机 P3.0、P3.1 串口走线直接短距离连接 NR11走线避开晶振、按键动态走线防止串口数据受干扰丢包。4.3 结构适配优化手持遥控便携设计PCB 外形做矩形规整适配手持外壳安装按键间距符合人体按压间距LED 朝向正面可视面板厚标准 1.6mm直插器件焊接方便新手焊接不易脱焊DIY 自制友好。五、核心硬件评价大夏龙雀 NR11 实际全程调试表现优异标准 3.3V 额定供电内置电平缓冲电路可直接兼容 51 单片机 5V TTL 串口无需额外分压电平转换搭配 11.0592MHz 标准晶振、9600 波特率下长时间双向收发零丢包居家 WiFi、蓝牙密集共存环境无乱码、无数据偏移纯串口透明传输原有有线串口代码无需大幅修改即可无缝迁移无线通信低功耗待机适配便携遥控设备室内隔墙通信距离满足家用全覆盖AT 指令简洁多设备场景可快速分频道防串扰是低成本嵌入式无线项目高性价比优选。六、拓展优化方向遥控端加装 TP4056 充电模块 18650 电池脱离 USB 有线供电实现完全便携遥控P0 口空余 IO 扩展 0.96 寸 OLED 屏替换 LED 闪烁直观显示剩余时长、电量、模式主控端叠加蓝牙模块实现手机 无线遥控双重控制拓展物联网属性升级通信校验为 CRC8进一步提升强电磁环境下数据可靠性。