
简介本资源是一套面向高校电子类专业本科生的毕业设计与课程设计实践方案聚焦基于单片机的多功能智能婴儿车系统开发解决传统婴儿车缺乏环境感知、状态监测与人机交互等智能化能力的问题。资源包共41个文件涵盖Protues仿真工程.pdsprj/.pdsbak、Keil工程源码.uvproj/.c/.h/.hex、原理图.SchDoc/.PDF、器件清单.xlsx、功能说明与程序流程图.bmp/.png/.txt等核心内容完整呈现从电路设计、代码编写、仿真验证到功能实现的全流程。压缩包大小为1.45MB结构清晰模块划分明确——含传感器驱动DHT11、HC_SR04、ADC0832、显示控制LCD1602、音乐播放、超声波避障及远程监控等关键功能源码与对应流程图便于学习者理解系统逻辑、复现实验并开展二次开发。目前已有69人下载学习适合单片机初学者巩固C语言编程、外设驱动与嵌入式系统集成能力。1. 项目背景与整体方案选择1.1 为什么选“多功能智能婴儿车”这个题目每年的单片机课程设计或者毕业设计热门方向无外乎智能家居、环境监测、小车控制这几类。而“智能婴儿车”这个题目恰恰是把传感器检测、电机驱动、人机交互、无线通信这几个单片机经典模块全部揉在了一起。从评审老师的角度看它功能覆盖面广、贴近实际生活场景、可扩展空间大从学生或者刚入行的工程师角度看它比单纯做一棵流水灯或者一个温度采集系统的技术含量高出一个量级但又不至于像四轴飞行器那样难以上手。我这次做的项目文件编号是175标题全称是“基于单片机的多功能智能婴儿车设计”。整套系统规划下来核心功能包括环境温湿度检测、婴儿状态监测主要是哭声检测与尿湿检测、自动遮阳/摇篮功能、手动与遥控两种驱动模式、夜间照明与报警提示。这套功能组合几乎把51单片机常规外设全部用上了ADC采集、外部中断、定时器中断、PWM输出、LCD显示、无线串口通信。1.2 主控选型对比STC89C52还是STM32拿到题目以后第一个要决策的问题就是主控芯片用哪个。在“STM32烂大街51看起来不够高级”这两种声音之间我最终选了STC89C52RC作为主控理由非常现实成本低整套板子加模块控制在70元以内51单片机资料丰富遇到问题随便一搜就有参考代码课程设计/毕设的评审重点在“系统设计的完整性”和“功能逻辑的合理性”大部分情况下并不要求你上Cortex-M3写RTOS从功耗和外围电路复杂度来说51单片机驱动液晶屏、传感器、直流电机完全够用。有人可能会问既然标题写的是“单片机”而不是“51单片机”那用STM32做方案会不会更吃香确实STM32主频高、外设多、能跑复杂的控制算法但相应带来的是电路设计难度上升、PCB打样成本增加、代码量指数级膨胀。在有限的开发周期内方案能跑通才是王道。“先完成再完善”是我一贯的做法包括把遥控功能从蓝牙模块降级为普通无线收发模块也是基于同样的逻辑。2. 硬件系统设计解析2.1 整车硬件模块清单先把我这次用到的全部硬件模块列一个清单方便后面动手的朋友按图索骥模块型号/规格数量作用主控芯片STC89C52RCDIP401核心处理与控制温湿度传感器DHT111采集环境温湿度声音传感器LM393音频检测模块模拟量输出1检测婴儿哭声人体红外传感器HC-SR501PIR1检测婴儿活动状态尿液检测传感器自制电极探头 ADC采样电路1检测尿湿状态超声波传感器HC-SR042避障测距直流减速电机3-6V N20带霍尔编码器可选2驱动后轮电机驱动芯片L298N模块或TB66121电机正反转/PWM调速液晶屏LCD1602I2C转接板可选1状态显示无线遥控模块315MHz EV1527遥控套件1远程方向控制震动模块扁平振动马达 ULN2003驱动1尿湿报警震动照明LED灯5mm白光LED若干2夜间照明电源模块18650锂电池组2节串联 LM2596降压模块1供电系统蜂鸣器有源蜂鸣器 5V1报警提示这里面有几个模块是后面调试过程中逐步加进去的比如震动马达一开始不在方案里后来发现单纯靠蜂鸣器报警不够直观才决定加上物理震动反馈。这种“做加法”的过程其实特别符合实际项目演进的节奏不可能一步到位。2.2 STC89C52最小系统电路怎么搭STC89C52RC是51系列里最经典的芯片之一相信绝大多数人都用过但正因为太熟了很多人反而会在最小系统电路上翻车。这里再啰嗦一遍核心电路要点。最小系统包含四部分电源电路、复位电路、晶振电路、下载电路。电源电路我用的是USB 5V供电口加ASM1117-3.3稳压。这里要特别说明虽然STC89C52官方标称工作电压是4.0V-5.5V实际控制在5V左右比较稳妥。如果外接模块特别多5V压降会比较明显建议在电源线上并一个大容量电解电容470uF/16V并且在每个传感器模块的VCC和GND之间加一个0.1uF的瓷片电容做去耦。复位电路采用的是经典10uF电解电容加10K电阻的上电自动复位方案。这个10uF电容在选择时要注意使用钽电容或者低漏电流的电解电容有些劣质电解电容在低温环境下漏电流变大会出现上电复位不彻底导致程序跑飞的现象。晶振选的是11.0592MHz选择这个频率而不是12MHz的核心原因是为了让串口波特率能够精确分频。如果用12MHz晶振在9600波特率下会出现3.6%左右的误差连续传输多个字节后累积误差增大就会出现乱码。这个坑我在项目前期用蓝牙调试时踩过一次后来换回11.0592MHz立刻就稳定了。2.3 电源系统设计锂电池供电与降压策略婴儿车是移动设备不能像实验室电源那样拖着线所以电池方案需要仔细考虑。我最终采用的是两节18650锂电池串联组成7.4V标称电压的电池组经过LM2596-ADJ降压模块稳定输出5V再供给整机电路。这里有一个非常关键的注意点。电机启动瞬间的电流可以达到1A以上如果用普通7805线性稳压器输入7.4V输出5V压差2.4V1A电流下损耗功率将近2.4W7805直接发烫严重时热保护会切断输出。用LM2596开关降压模块效率能做到85%左右发热小很多。我实测在电机堵转的极端情况下LM2596模块上的电感略微温热但完全在可接受范围内。另外还要单独提一下电源分路设计。整个系统的电源分成两路一路是不受单片机控制的常电直接给电机驱动模块的电机电源端供电另一路是经过LM2596稳压后的5V给单片机、传感器、LCD屏幕供电。这样设计的好处是即便电机启动导致电池电压瞬间跌落MCU和传感器的供电也不会受到明显干扰避免单片机意外复位。如果手头没有LM2596模块用MP1584或TPS5430模块替代也可以但要注意这些模块的高频开关噪声可能会通过地线干扰ADC采集所以在DHT11或者自制尿湿检测电路附近要用地线隔离或者说把传感器模块的地单独走一段较粗的线再汇总。3. 软件逻辑与核心代码实现3.1 软件总体架构前后台系统思路单片机工程规模不大我不建议在这个项目里硬上RTOS用经典的前后台系统主循环中断最合适。把实时性要求高的任务放在中断服务函数里比如超声波测距的计时捕获、PWM波形的产生把实时性要求低的任务放在主循环里比如LCD刷新、按键扫描。整个程序可以分为以下几层底层驱动层包含各个传感器模块的初始化和数据读取函数如DHT11_Delay、Read_ADC、Ultrasonic_Start等中间逻辑层负责将底层数据转换成系统可理解的状态比如判断“温湿度是否超限”、“是否检测到哭声”、“距离是否小于安全阈值”上层应用层根据逻辑层的状态决定执行动作比如遮阳棚是否打开、电机是否转向、蜂鸣器是否报警。这种分层设计虽然让代码量增加了一些但调试和维护的时候幸福感极高。比如后面我临时加了一个“自动播放摇篮曲”的功能只需要在应用层加一个判断条件再调用音乐播放函数即可完全不影响底层。3.2 主循环框架与关键代码主循环的框架如下void main(void) { System_Init(); // 系统初始化包含定时器、串口、LCD、传感器 while(1) { Data_Collect(); // 采集所有传感器数据非阻塞方式 State_Update(); // 更新系统状态机 Display_Show(); // 刷新LCD屏幕显示 Action_Execute(); // 根据状态执行风扇/遮阳/报警/摇篮动作 Remote_Check(); // 检查无线遥控指令 } }要注意的是在Data_Collect函数里读取DHT11的时候我使用了定时器辅助延时而不是简单的delay循环。原因在于DHT11的时序要求非常严格读数据时拉低起始信号后再释放等待响应信号的窄脉冲宽度都要保证微秒级准确。如果用普通延时函数一旦定时器中断嵌套进来时序就会被破坏读取结果偶发性出错。使用定时器定时1us计数的方式可以保证时序稳定。// 读取DHT11单个字节采用定时器辅助延时 unsigned char DHT11_ReadByte(void) { unsigned char i, dat 0; for(i0; i8; i) { while(DHT11_PIN 0); // 等待电平拉高 Delay_1us(40); // 延时40us判断电平宽度 dat 1; if(DHT11_PIN 1) { dat | 0x01; while(DHT11_PIN 1); // 等待一轮结束 } } return dat; }3.3 传感器数据采集设计与防误判传感器部分我重点说两个哭声检测和尿湿检测。这两个功能是“多功能”里的核心卖点也是最容易做成“摆设”的地方。哭声检测我最初想用声音传感器模块的模拟量输出直接接ADC去判断分贝值后来发现根本不行。婴儿哭声和环境噪声电视声、家里人说话声在频谱特征上差别很大单纯看幅值会频繁误报。改进方案是用LM393模块输出的开关量数字量并且把灵敏度电位器调到合适位置只有声音响度超过阈值时输出低电平。这样虽然牺牲了区分功能但至少能保证报警不遗漏。如果要做更精准的哭声识别需要换成带频谱分析的模块比如MAX9814配合FFT变换但这对于51单片机来说计算量太大了方案优先级排在后边。尿湿检测方面市面上没有现成的模块可以直接买我采用的是自制电极法。用万能板刻出两片平行铜箔电极间隔5mm贴在婴儿车坐垫底下用防水布包裹两根引线分别接ADC通道和GND。正常状态电极间是干燥的电阻无穷大ADC读数接近满量程尿湿后电极间阻抗下降ADC读数变化明显。unsigned int Get_Urine_Value(void) { unsigned int adc_value Read_ADC(2); // 通道2采集电极电压 return adc_value; }这里有一个校准技巧。由于不同尿布材质的吸水速度不一样不能只凭单次ADC值就判断尿湿。我的做法是连续采样三次每次间隔500ms如果三次结果都小于设定阈值经过实验我设定为满量程的65%才判定为尿湿并触发报警。这样做的原因是如果婴儿只是轻微出汗导致电极周围略微潮湿单次采样可能会误判但连续三次采样仍能触发阈值的话说明湿度确实已经渗透到电极附近。3.4 超声波避障与电机驱动逻辑超声波避障模块的电路连接非常简单Trig引脚接P1.0Echo引脚接P1.1。源码部分最关键的是计时问题。我通过外部中断或者定时器捕获Echo引脚的高电平脉宽void Ultrasonic_Start(void) { TRIG 0; Delay_10us(2); TRIG 1; Delay_10us(10); TRIG 0; } unsigned int Get_Distance(void) { unsigned int time_cnt 0; while(!ECHO); // 等待高电平出现 while(ECHO) // 计算高电平持续时间 { time_cnt; Delay_10us(1); if(time_cnt 4000) // 超过40ms视为超时 { return 0xFF; // 返回一个超时错误码 } } unsigned int distance_cm time_cnt * 0.017; // 声速340m/s换算 return distance_cm; }电机驱动我采用的是L298N模块。虽然L298N比较老旧且管压降大但胜在电路简单逻辑清晰。用P1.2、P1.3控制左电机方向P1.4、P1.5控制右电机方向P1.6输出PWM波控制左电机速度P1.7输出PWM波控制右电机速度两条使能通道ENA、ENB接高电平常开。实际测试中L298N模块在PWM频率为1kHz左右工作最为安静。我发现如果PWM频率设置太低比如50Hz电机会有明显的“咔咔”声频率太高超过20kHz则会超出L298N的开关能力导致输出效率下降。使用STC89C52的定时器1产生PWM设置初始值使得频率落在1.2kHz附近效果很理想。调方向时注意PWM死区问题。当电机从一个方向突然反转时如果直接切换会产生很大的反向电动势严重时可能损坏驱动芯片。我的做法是先拉低PWM输出延时50ms让电机停稳再切换方向最后恢复PWM输出。这个软切换逻辑代码就三行但保护作用非常明显。4. 功能扩展与用户交互设计4.1 无线遥控方案315MHz射频还是蓝牙/WiFi最初方案里无线遥控我想用HC-05蓝牙模块配合手机APP控制但仔细评估后放弃了。原因如下HC-05蓝牙模块价格略高配对流程复杂如果丢了对不上码现场演示翻车概率极大手机APP开发工作量不小不管是Android Studio还是微信小程序都需要额外的时间和精力课程设计/答辩的现场环境往往有多台设备同时工作蓝牙信号拥挤偶尔会遇到连接不稳定的情况。315MHz EV1527无线遥控模块的解决方案就比较粗暴有效。发射端就四颗按键面板非常直观——前进、后退、左转、右转。接收端模块输出四路TTL电平信号并联到单片机的外部中断引脚P3.2、P3.3和普通IO口P1.0、P1.1上。按下按键后接收模块对应引脚输出低电平单片机检测下降沿触发外部中断后执行对应动作。这个方案的缺点是只能单向控制不能做到反馈双向通信。但在遥控婴儿车这个场景里用户根本不关心婴儿车那边反馈回来的温度数据毕竟车上的LCD屏已经能显示本地信息了所以单向遥控完全够用。4.2 遮阳棚与摇篮功能的结构设计和实现自动遮阳棚是一个容易被忽略但很体现“多功能”的亮点。设计思路是通过伺服舵机带动一个由轻量不透光帆布折叠而成的遮阳棚骨架遮阳棚平时收纳在车篷后方需要遮阳时舵机旋转90度将帆布展开覆盖在婴儿车上方。舵机使用的是SG90 9g舵机PWM频率50Hz控制信号脉宽范围1ms-2ms对应0-180度。我用定时器2产生一个周期20ms的PWM波并通过调整比较值改变脉宽void Servo_SetAngle(unsigned char angle) { unsigned int pwm_val; // 角度0-180映射到0.5ms-2.5ms脉宽安全起见限制在1ms-2ms pwm_val angle * 11 50; // 粗略映射 CCAP0H pwm_val; CCAP0L pwm_val; }当系统判断光照过强我用光敏电阻模块检测ADC读数低于阈值即代表光照强且温度高于28摄氏度时自动展开遮阳棚。同时给出一个延时让遮阳棚展开动作持续2秒后再继续后续检测避免舵机频繁动作。摇篮功能是另一个特色。我使用的是扁平振动马达固定在婴儿车底部支架上通过ULN2003达林顿管来驱动。当检测到哭声后系统先播放一段简单的摇篮曲驱动蜂鸣器同时开启振动马达模仿摇篮的轻微晃动。实测这种振动反馈对安抚婴儿会有一定效果原理上有点类似手机振动功能。4.3 LCD界面设计与人机交互体验LCD1602虽然只有两行每行16个字符但合理地分配显示内容还是能够提升使用体验的。我的显示方案如下第一行显示T:26.5C H:60%RH温度和湿度第二行显示URINE:OK SOUND:NO尿布状态和声音状态这样设计的好处是答辩时老师扫一眼屏幕就能看出系统正在正常采集数据并且工作状态一目了然不需要过多解释。如果后续加了更复杂的菜单可以考虑使用OLED显示屏加分。关于LCD1602驱动我强烈建议使用I2C转接板。普通LCD1602需要接8个数据线再加上RS、RW、EN总共至少11根线系统连线复杂不说还容易插错。I2C转接板用四根线VCC、GND、SDA、SCL就够了程序用老外写的LiquidCrystal_I2C库修改端口定义后即可直接使用。这个改造极大地简化了硬件结构降低了接线出错的风险。5. 实物调试过程与问题排查5.1 硬件焊接与上电调试流程所有模块在面包板/洞洞板上测试完成后我最终用了一块10cm × 15cm的万能板来搭建完整系统。焊接顺序非常关键我的经验是从低到高。先焊电阻、电容、晶振、复位电路等贴片/直插小元件然后焊STC89C52RC芯片座和接线端子最后焊液晶屏排针和排母这样方便后续更换模块。上电调试前务必做以下检查这块如果出了错后面所有工作都会白费万用表二极管档测量电源正负极之间是否短路正常时读数为几百欧姆以上分别测量5V与GND之间的电压确认电源稳压输出正常用手触摸各芯片表面温度上电半分钟后如果某个芯片明显发烫立即断电排查用示波器或逻辑分析仪查看晶振引脚是否有正常振荡波形STC89C52的X1、X2引脚。我把这些检查项挨个执行之后才敢给单片机烧写程序。STC89C52的下载方式是通过USB转TTL模块冷启动下载先点击下载软件STC-ISP的“下载”按钮再给单片机重新上电。如果在调试过程中发现“始终检测不到目标单片机”大概率是USB-TTL模块的TXD和RXD接反了对调两根线再试。5.2 调试中遇到的几个经典问题及解决我在整个项目中遇到了很多问题这里挑几个最典型的写出来应该能帮后来的朋友省下不少时间。第一个问题是DHT11读数偶发性错误表现为温度跳变几十度。排查后发现是因为DHT11和电机驱动模块共用一条5V电源线电机启动瞬间的电流波动污染了DHT11供电。解决办法是在DHT11附近加一个100uF电解电容并把DHT11的VCC和GND用独立杜邦线从主电源滤波电容处引出。本质上就是给传感器提供一条尽可能“干净”的电源线。第二个问题是HC-SR501人体红外模块误触发严重。这个模块默认灵敏度太高且延时时间设置在5秒左右稍微有人从旁边走过就会触发。调节模块上的两个电位器把“Sensitivity”顺时针调到最小大概在60%位置把“Time Delay”调到最小档这样只有人靠近婴儿车时才会检测到。第三个问题是红外遥控接收端电平状态不稳定。315MHz接收模块在没有信号的时候输出高电平有信号时输出低电平但实际测量发现它在高电平时会不定期出现窄脉冲的低电平毛刺。这些毛刺直接接到了外部中断引脚上导致系统频频误动作。解决办法是在硬件上加入一个RC低通滤波电路1K电阻加0.1uF电容截止频率约1.6kHz把窄脉冲毛刺滤除同时在软件上加上去抖确认机制在触发中断后延时20ms再读一次引脚电平如果不为低电平就认为是毛刺并忽略。5.3 程序逻辑Bug排查案例程序逻辑层面我印象最深的是“摇篮曲播放与超声波避障冲突”的问题。一开始我写了一个阻塞式的蜂鸣器播放函数每次播放一个音符都使用空循环延时几百毫秒。在播放摇篮曲的整个过程中主循环卡住了导致超声波避障失效。当时调试的现象是只要孩子一哭触发摇篮曲婴儿车就完全听不到遥控指令和避障信号变成一个“短暂失聪”的状态。解决思路是把播放音乐改成非阻塞模式。用定时器中断每隔10ms调用一次音乐播放状态机每次只判断当前音符是否需要改变蜂鸣器频率不需要延时等待。如果在播放过程中收到更紧急的报警比如尿湿检测触发就把音乐播放状态复位并优先处理报警。void Music_ISR(void) interrupt 1 { static unsigned int time_cnt 0; time_cnt; if(music_playing_flag 1) { if(time_cnt music_note_duration[music_note_index]) { time_cnt 0; music_note_index; if(music_note_index music_note_count) { music_playing_flag 0; // 播放完毕 return; } Set_PWM_Frequency(music_note_freq[music_note_index]); } } }经过这样改造音乐播放完全不再阻塞主循环避障和遥控功能同时正常工作。调试后我专门把阻塞版和非阻塞版各跑了几轮直观感受是系统响应速度从原来的“等音乐放完”改善到“毫秒级响应”效果立竿见影。6. 系统优化与后续扩展方向6.1 当前方案的性能瓶颈分析目前的系统其实还存在几个明显短板。一是STC89C52的8位CPU在多个传感器同时工作时略显吃力特别是超声波测距采用阻塞式延时计时的方式一旦处理距离计算就会占用较长的CPU时间。二是DHT11的精度有限温度±2℃湿度±5%RH如果用在真正医疗级别的婴儿护理场景里当然不达标但对于课程设计/样机展示完全足够。三是存储空间只有8KB Flash代码一复杂就捉襟见肘我在固化功能后代码已经占了将近7KB基本没有太多继续堆功能的余地了。如果后续做迭代主控可以换到STC15系列或者STM32F103C8T6代码框架保持不变把底层的延时、ADC、PWM这些驱动函数替换成新平台对应版本即可。届时还有余力加上蜂窝网络通信模块比如NB-IoT/4G模组实现远程婴儿状态推送。6.2 电池管理与续航优化电池续航是另一个值得深入优化的方向。当前两节18650电池每节约2600mAh串联后整机满负载运行大约能坚持4到5个小时。如果电机频繁启动或者摇篮功能持续开启续航会进一步缩短。优化方向有两个。第一个是采用低功耗模式在系统空闲时让单片机进入掉电模式STC89C52的PCON寄存器IDL1时进入空闲模式时钟停止通过外部中断唤醒。这样在无人操作、无报警的状态下待机电流能降到几mA级别大幅延长续航。第二个是改用BLDC无刷减速电机替代有刷N20减速电机。无刷电机效率普遍高20%-30%而且噪声小、寿命长缺点是驱动电路复杂、成本高。这个要根据实际预算来选择。6.3 设计文档与演示注意事项如果这个项目是拿去答辩或者是个人作品展示我再分享一些实操经验。硬件图纸、源码、PCB文件如果是自己打板一定要整理好版本号我习惯在项目文件夹下建三个子目录01_Hardware、02_Software、03_Docs每个文件的文件名都带日期版本。比如“Schematic_V1.2_20250318.pdf”就一直沿用。现场演示非常重要的一点是提前一晚把全部电池充满准备一套备用18650电池和一台备用笔记本电脑然后把工程在备用电脑上重新编译一遍确认环境正常。我在一次展示中就遇到过笔记本USB口供电不足导致USB-TTL下载异常的情况后来换了另一个USB口解决这种细枝末节虽然小但如果当场卡壳就很尴尬。7. 常见问题速查表与资源指引7.1 调试常见问题速查表现象可能原因排查与解决单片机无法下载程序USB-TTL接线错误、单片机未冷启动检查TXD/RXD是否交叉先点下载再上电LCD1602无显示或乱码对比度电位器未调整、接线错误调节电位器到1/3处检查时序初始化函数是否延时充分电机不转动驱动使能脚未拉高、PWM占空比为0检查INA/INB及ENA/ENB电平先用全速测试DHT11读数为0或错误线序接错、上拉电阻缺失确认VCC、GND、DATA接线数据线加4.7K上拉电阻蜂鸣器不响驱动引脚电平极性搞反有源蜂鸣器低电平触发检查端口初始状态超声波测距一直为0Echo引脚未接对、回波信号丢失检查Echo连接是否正确尝试在面包板上短距离单独测试遥控无响应电池电压低、接收模块天线未展开检查发射/接收模块编码是否一致天线尽量拉直并远离电机系统上电重启电机启动电流太大导致电压跌落在电源端增加大容量电解电容或者给电机单独供电RS485/RF模块导致死机地线串扰、大电流毛刺增加去耦电容、优化地线布线、软件加看门狗7.2 如何把项目做得更出彩如果这篇文章对你有所启发你打算基于同样的思路做一个自己的版本我给几个方向上“锦上添花”的建议。第一在遮阳棚的自动控制里加入光照强度阈值可调逻辑用两个按键手动增加/降低阈值。答辩时为了让老师看到效果你可以用手指遮挡光敏电阻遮阳棚立即展开松开后收回去展示效果非常直观。第二加一个RFID刷卡模块比如RC522模拟“只有家长刷卡才能解锁婴儿车的电子锁”功能。这个功能放在实物的安全性卖点上会使得项目的完整立意高一大截。第三把源代码中所有关键步骤加上详细中文注释。答辩时老师大概率会翻看代码清晰规范的注释不仅体现了你的工程素养还会成为答辩的良好“提词器”。7.3 总结性学习建议我在把这个项目从头到尾做完以后最大的感触是单片机项目的核心不在于某段代码有多巧妙而在于整个系统的整合能力。传感器、驱动、显示、通信、电源管理任何一块出问题都会导致整体不可用。对于正在做这个课题的朋友我个人建议是先把最小系统跑通再一步一步“加功能”每加一个功能就完整地测试一轮千万不要全部搭好了再上电——那样排查问题会让你怀疑人生。这个项目的所有源码和原理图文件我建议都按照功能模块做好分支管理后续无论是换主控还是加外设都有据可依。本文还有配套的精品资源点击获取