基于ATtiny85与动态扫描的BCD数码管手表DIY全解析
1. 项目概述当复古数码管遇上微型单片机几年前我在一个旧货市场淘到几块老旧的七段数码管它们那种暖黄色的辉光瞬间就把我拉回了童年。当时就在想能不能用现在唾手可得的微型单片机给这些老物件注入新的灵魂做一块能戴在手上的、纯粹由数字显示时间的“数码管手表”这个想法一直萦绕心头直到我遇到了ATtiny85这颗芯片。它只有8个引脚体积小巧到惊人但功能却足够驱动几个数码管并实现一个简易的时钟核心。于是“用ATtiny85自制一个BCD手表”这个项目就从构想变成了我工作台上的一堆零件和代码。简单来说这个项目的目标就是打造一块完全由自己设计、焊接和编程的电子手表。它的核心显示部件是4位七段数码管用来以“时-分”的格式例如 12:34显示时间而大脑则是一颗售价仅几块钱的ATtiny85单片机。之所以叫“BCD手表”是因为在驱动数码管时我们常会用到一种叫做“二进制编码十进制”Binary-Coded Decimal, BCD的数据格式来处理和显示数字这既是技术上的一个关键点也成了这个项目的名字。最终成品不会追求智能手表的繁杂功能它要的就是那种极致的简洁、复古的视觉观感以及从零开始创造的成就感。无论你是刚接触Arduino想找个有趣项目练手的新人还是玩腻了集成模块想挑战底层硬件的爱好者这个项目都能带你深入理解单片机I/O控制、时序管理和电源优化的精髓。2. 核心思路与方案选型为什么是ATtiny85和数码管2.1 主控芯片ATtiny85的极致性价比之选选择ATtiny85作为核心是经过一番权衡的。市面上常见的单片机如Arduino UnoATmega328P或ESP8266功能更强大但用于手表首先面临的就是体积和功耗的挑战。ATtiny85的吸引力在于其极致的“小而美”。首先看体积它采用8引脚的SOP或DIP封装面积比一枚指甲盖还小这对于需要佩戴在手腕上的设备是决定性优势。其次是功耗ATtiny85在掉电模式Power-down下的电流可以低至微安级别这对于依靠纽扣电池供电的手表至关重要我们可以通过编程让芯片大部分时间在睡眠仅定时唤醒更新显示从而极大延长续航。尽管它只有8个引脚其中6个可以作为数字I/O口使用但这恰恰是设计的乐趣所在。我们需要用有限的资源驱动4位数码管这通常需要至少12个IO口这就必须采用“动态扫描”技术。简单来说就是让4个数码管轮流点亮利用人眼的视觉暂留效应看起来像是同时显示。ATtiny85的6个IO口刚好可以分配为4个位选信号选择点亮哪一位数码管和8个段选信号控制显示哪个数字中的一部分通过一些简单的逻辑芯片如74HC595移位寄存器进行扩展完美解决了引脚不足的问题。这种“戴着镣铐跳舞”的设计比直接使用IO口富余的芯片更有挑战性和学习价值。2.2 显示方案七段数码管的复古魅力与驱动挑战为什么不用更现代、更省电的OLED或LCD答案就在于“味道”。七段数码管那种清晰、锐利、带有轻微光晕的显示效果是液晶屏无法替代的复古美学。尤其是共阳型数码管其发光二极管LED的阳极连接在一起接电源正极我们通过控制阴极各段的电位来使其发光这种驱动方式与ATtiny85的输出特性配合良好。然而直接驱动4位数码管对单片机是巨大的负担。一位数码管有7段加上小数点就是8段如果同时点亮4位最坏情况下可能需要32个LED同时工作总电流可能超过100mA这远超ATtiny85单个引脚的驱动能力通常20-40mA和总功耗限制。因此动态扫描不仅是节省IO口的方案更是必须的电源管理方案。在任一时刻实际上只有一位数码管被点亮其他三位处于熄灭状态这样峰值电流就被限制在一位数码管全亮时的电流约20-40mA内。通过以足够快的频率通常60Hz轮流点亮每一位人眼就无法察觉闪烁。2.3 时间基准与电源精准与持久的平衡手表的核心是计时精准。ATtiny85内部有一个RC振荡器但它的精度较差常温下可能有±10%的误差这意味着一天可能会慢或快几分钟这对于手表是不可接受的。因此我们必须引入外部时钟源。有两种主流方案一是使用32.768kHz的晶振这是手表和实时时钟RTC芯片的标配频率经过分频后恰好能得到1Hz的秒信号精度很高二是直接使用高精度的外部有源晶振或温补晶振但成本较高。对于这个DIY项目一个几毛钱的32.768kHz晶振配合两个负载电容就能将走时误差控制在每天数秒之内是性价比最高的选择。电源方面为了追求小巧CR2032纽扣电池是首选它提供3V电压。但需要注意的是ATtiny85的工作电压范围是2.7V-5.5V3V处于下限边缘虽然可以工作但需要确保在电池电压随着使用下降后系统仍能稳定运行。另一种方案是使用可充电的锂聚合物电池配合微型充电管理电路但这会增加体积和复杂度。本项目为了极致简洁选择了单颗CR2032供电这就要求我们在软件上必须做好功耗优化。3. 硬件电路设计与核心器件解析3.1 电路总览与引脚分配策略整个手表的电路可以划分为几个模块ATtiny85最小系统、数码管驱动电路、电源模块。ATtiny85最小系统包括芯片本身、复位电路一个10k上拉电阻到VCC、电源滤波电容一个0.1uF陶瓷电容靠近VCC和GND引脚以及外部晶振电路32.768kHz晶振搭配两个12-22pF的负载电容接在PB3/PB4引脚。最核心的设计在于引脚分配。ATtiny85有6个可用I/OPB0-PB5其中PB5/RESET通常用作I/O时需要先禁用复位功能。我们的目标是驱动4位共阳数码管。假设使用一片74HC595移位寄存器来扩展IO口控制段选8段那么需要占用ATtiny85的3个引脚数据、时钟、锁存。剩下的3个引脚则可以直接作为位选控制信号但我们需要控制4位所以这里需要一点“技巧”可以使用一个2-4译码器芯片如74HC139用2个ATtiny85引脚就能生成4个位选信号或者更巧妙一点利用三极管或MOS管配合通过控制电流路径来实现。我选择了一种更直接且节省成本的方法使用一片双路2通道的模拟开关芯片如CD4066配合少量三极管用2个IO口通过特定的时序逻辑产生4个位选信号。这样我们总共使用了3段选控制 2位选逻辑 5个IO口完美适配ATtiny85的6个IO甚至还留有一个备用引脚可以接按钮用来调时。3.2 数码管动态扫描驱动电路详解驱动电路是硬件部分的关键。我们使用一片74HC595串行输入/并行输出移位寄存器来控制所有数码管的段选信号。ATtiny85的PB0数据、PB1时钟、PB2锁存连接到74HC595。程序将要显示的数字所对应的段码一个8位字节每一位对应一段LED的阴极串行送入74HC595然后锁存输出。74HC595的输出引脚通过限流电阻连接到所有数码管对应的段引脚a, b, c, d, e, f, g, dp。位选电路则更为精巧。我使用了4个PNP三极管如8550分别作为4位数码管公共阳极的开关。ATtiny85的PB3和PB4引脚连接到一片CD4066模拟开关的输入控制端。通过编写程序让PB3和PB4输出特定的二进制序列00, 01, 10, 11并配合CD4066的通断依次导通连接在对应通道上的三极管基极电阻从而使得该三极管导通为对应的数码管公共阳极供电。每个三极管的发射极接电源VCC集电极接数码管的公共阳极。基极通过一个电阻约1kΩ连接到控制信号。注意这里使用PNP三极管是因为我们要控制电源高电位的导通。当基极为低电平时PNP三极管导通。务必在基极和发射极之间连接一个下拉电阻如10kΩ确保在控制信号悬空时三极管可靠截止防止数码管乱亮。限流电阻的计算很重要它决定了数码管的亮度和寿命。假设使用CR2032电池标称3V工作后期可能降至2.8V红色数码管一段LED的正向压降Vf约为1.8V-2.0V。当三极管导通时其集电极-发射极饱和压降Vce_sat很小约0.2V。那么限流电阻R上的电压降Vr Vcc - Vf - Vce_sat ≈ 3V - 1.9V - 0.2V 0.9V。我们希望单段LED电流在5-10mA以获得良好亮度且不过热。根据欧姆定律 R Vr / I取I8mA则 R 0.9V / 0.008A 112.5Ω。我们可以选择一个接近的标准值如100Ω或120Ω。实际焊接前最好用可变电阻测试一下亮度找到视觉舒适且功耗平衡的阻值。3.3 电源管理与低功耗设计要点硬件层面的低功耗设计是延长电池寿命的基础。除了选择低功耗器件以下几点至关重要未用引脚处理将ATtiny85未使用的引脚如果有设置为输出低电平或输入上拉避免浮空输入导致内部振荡和额外功耗。外围器件电源控制如果可能可以用一个ATtiny85的IO口控制74HC595和CD4066等外围芯片的电源。当单片机进入深度睡眠时将这些芯片的VCC断电。但在本设计中为了简化我们依靠软件让这些芯片处于静态低功耗状态。消除静态电流泄漏检查所有上拉/下拉电阻的阻值。阻值太小如1kΩ会形成较大的静态电流通路。在满足逻辑可靠性的前提下尽量使用大阻值电阻如10kΩ以上。优化晶振电路32.768kHz晶振的驱动电路本身功耗很低但两个负载电容的容值要严格按照晶振数据手册推荐选择过大或过小都会增加振荡器的工作电流。4. 软件程序设计驱动、计时与功耗管理4.1 开发环境搭建与核心库选择为ATtiny85编程最常用的方式是使用Arduino IDE配合额外的板卡支持。你需要安装attiny核心库例如由David A. Mellis开发的。安装后在“工具”菜单下选择开发板为“ATtiny25/45/85”处理器选择“ATtiny85”时钟选择“内部8MHz”因为我们已经使用了外部32.768kHz晶振作为计时基准系统时钟仍可使用内部RC以降低复杂度但更精准的做法是让系统时钟也由外部晶振驱动这需要烧写熔丝位对新手稍复杂。编程器可以选择“USBtinyISP”或你实际使用的ISP编程器。核心的代码将不依赖复杂的第三方库我们自己实现动态扫描、BCD转换和时间管理。这能保证代码极度精简对芯片的Flash和SRAM占用最小。4.2 时间管理逻辑与BCD转换实现时间管理的核心是一个基于定时器中断的计数器。我们配置ATtiny85的定时器如Timer1使其基于系统时钟或外部晶振产生一个精确的溢出中断例如每1/256秒一次。在中断服务程序ISR中我们维护一个软件计数器累计到1秒时更新“秒”变量并进一步更新“分”和“时”。这里就涉及到BCD码。在计算机内部我们通常用二进制整数存储时间比如14点35分存储为hour14 (0x0E)minute35 (0x23)。但数码管显示需要的是十位和个位分开的数字。BCD码用4位二进制数表示一个十进制数字0-9。因此我们需要一个函数将二进制数转换为两个BCD数字。// 将一个0-99的二进制数转换为两个BCD码十位和个位 void bin2bcd(byte bin, byte *tens, byte *ones) { *tens bin / 10; *ones bin % 10; } // 在中断中更新时间 volatile byte seconds0, minutes35, hours14; // 示例初始时间 void updateTime() { seconds; if(seconds 60) { seconds 0; minutes; if(minutes 60) { minutes 0; hours; if(hours 24) hours 0; } } }显示时我们调用bin2bcd(hours, h_tens, h_ones)和bin2bcd(minutes, m_tens, m_ones)得到四个需要显示的数字小时十位、小时个位、分钟十位、分钟个位然后通过查表法将这些数字转换为对应的7段码。4.3 动态扫描显示函数与中断协同显示必须在主循环或一个高优先级定时器中断中持续进行不能停顿否则数码管就会闪烁。我们通常设置一个定时器如Timer0产生一个频率较高的中断例如1kHz在这个中断里执行动态扫描。// 7段码表共阳0点亮1熄灭注意取决于电路是共阳还是共阴以及段码是阳极有效还是阴极有效 // 这里假设共阳数码管段选信号低电平有效即0点亮LED const byte digitPattern[10] { 0b11000000, // 0 0b11111001, // 1 0b10100100, // 2 0b10110000, // 3 0b10011001, // 4 0b10010010, // 5 0b10000010, // 6 0b11111000, // 7 0b10000000, // 8 0b10010000 // 9 }; volatile byte displayDigits[4]; // 存储当前要显示的4个数字0-9 volatile byte currentDigit 0; // 当前正在点亮哪一位0-3 ISR(TIMER0_COMPA_vect) { // 定时器0比较匹配中断 // 1. 关闭所有位选防止鬼影 turnOffAllDigits(); // 2. 准备当前位的段码 byte pattern digitPattern[displayDigits[currentDigit]]; // 如果是第2位分钟十位且分钟十位为0则实现“小时十位为0时不显示”的类似逻辑 // 这里可以添加额外的消隐逻辑 sendToShiftRegister(pattern); // 将段码发送到74HC595 // 3. 打开当前位的位选 selectDigit(currentDigit); // 4. 移动到下一位 currentDigit; if(currentDigit 4) currentDigit 0; }sendToShiftRegister函数通过模拟SPI时序将数据送入74HC595。selectDigit函数则根据currentDigit的值设置PB3和PB4的输出通过CD4066和三极管电路导通对应的数码管。4.4 低功耗睡眠模式与定时唤醒这是实现长续航的关键。ATtiny85可以在完成一次显示扫描循环后立即进入睡眠模式。我们使用一个外部中断如引脚电平变化中断或者看门狗定时器Watchdog Timer, WDT来唤醒它。看门狗定时器原本用于防止程序跑飞但可以配置为在超时后产生中断而非复位从而用作低功耗定时器。ATtiny85的看门狗定时器可以在多种时间间隔后唤醒例如1秒。策略如下在每次更新完时间每秒一次并刷新了显示缓冲区displayDigits后主循环让芯片进入深度睡眠Power-down模式。配置看门狗定时器在1秒后产生中断。在看门狗中断服务程序中不做复杂操作仅设置一个标志位。主循环被唤醒后检查标志位如果为真则更新时间然后再次进入睡眠。这样单片机99%以上的时间都处于极低功耗的睡眠状态只有每秒被唤醒一次进行时间更新和短暂的显示扫描显示扫描由另一个定时器中断维持该定时器在睡眠时可能停止唤醒后需重新初始化并快速扫描几次以刷新视觉。代码框架如下#include avr/sleep.h #include avr/wdt.h volatile bool wdt_flag false; void setup() { // ... 初始化IO、定时器、中断等 setupWDT(); // 配置看门狗为中断模式1秒超时 set_sleep_mode(SLEEP_MODE_PWR_DOWN); } void loop() { updateDisplayBuffer(); // 根据当前时间更新displayDigits数组 // 短暂开启显示定时器进行几次扫描让肉眼可见 enableDisplayTimer(); delay(50); // 显示50毫秒足以被清晰看到 disableDisplayTimer(); // 进入睡眠 sleep_enable(); sleep_cpu(); // 程序在此处挂起直到被WDT中断唤醒 // 唤醒后 sleep_disable(); if(wdt_flag) { wdt_flag false; updateTime(); // 更新时分秒 // 清除WDT中断标志 WDTCSR | (1WDIE); } } ISR(WDT_vect) { wdt_flag true; }5. 焊接、组装与调试实录5.1 PCB设计与元件布局考量对于手表这种小型设备使用万用板洞洞板进行焊接是可行的但为了更好的可靠性和美观设计一块简单的PCB是值得的。使用KiCad或EasyEDA等免费工具即使新手也能在几小时内学会绘制单面PCB。布局时要遵循以下原则核心居中ATtiny85和32.768kHz晶振放在板子中央减少走线长度提高时钟稳定性。电源路径清晰从电池座正负极引出粗壮的电源线VCC和GND并立刻接上滤波电容。VCC和GND走线应尽可能覆盖整个板子形成“地平面”效应减少噪声。模拟与数字分离虽然本电路数字信号为主但仍应将晶振这类模拟敏感元件远离74HC595等快速开关的数字芯片晶振下方避免走线。连接器规划预留出ISP编程接口6针或5针的焊盘方便后续烧录和调试。按钮开关的焊盘也要预留。如果使用洞洞板建议先在一张纸上画出元件布局和连线图用不同颜色的笔区分电源、地和信号线。从核心芯片开始焊接逐步向外围扩展。5.2 焊接顺序与静电防护要点焊接顺序很重要应遵循“先低后高先内后外”的原则焊接贴片元件如果有0805或0603封装的电阻、电容先焊接它们。使用细尖烙铁头少量焊锡和助焊剂。焊接集成电路底座ATtiny85建议使用DIP-8插座先焊接插座再插入芯片。这样避免芯片因过热损坏也便于更换。焊接74HC595和CD4066也是如此。焊接直插元件电阻、电容、三极管、晶振、按钮等。焊接连接器和电池座最后焊接这些较大的机械部件。实操心得焊接晶振时速度要快烙铁温度不要过高建议350°C左右防止内部石英晶体因过热而频率漂移甚至损坏。晶振的金属外壳不要与任何走线短路。静电防护不容忽视尤其是在干燥环境下。工作台铺上防静电垫佩戴防静电手环。在拿取ATtiny85、74HC595等CMOS芯片时尽量避免触摸其引脚。5.3 上电调试与常见故障排查焊接完成后不要急于插入电池。先进行目视检查和连通性测试检查是否有焊桥相邻引脚被焊锡短路。检查二极管、电解电容等有极性元件方向是否正确。用万用表二极管档或电阻档检查VCC和GND之间是否短路阻值不应接近零欧姆。确认无误后可以连接一个可调限流电源将电压设置在3V电流限制在50mA然后上电。观察电流读数正常情况电流应在几毫安到几十毫安之间跳动动态扫描时。电流过大100mA立即断电可能存在短路或某个IO口配置错误直接驱动LED导致电流失控。重点检查位选和段选电路的三极管、电阻连接。电流几乎为零可能电源未接通或主控未工作。检查ATtiny85的VCC和GND电压检查复位引脚是否为高电平检查晶振是否起振需要用示波器或逻辑分析仪探头接触晶振引脚注意探头电容可能影响振荡。如果电流正常但数码管不亮或显示乱码进入逻辑调试测试段选写一个简单程序让74HC595输出固定的段码如全亮显示“8.”绕过动态扫描和位选。如果所有数码管都显示相同的乱码说明段选信号或74HC595电路有问题。如果显示正确则问题在动态扫描或位选部分。测试位选写程序让4个位选信号依次单独输出高/低电平根据你的电路逻辑用万用表测量对应三极管基极或数码管公共阳极的电压变化确认控制信号能否正确导通每一路。检查时序如果显示闪烁严重或有重影鬼影通常是动态扫描的时序问题。“鬼影”是因为在切换位选信号时段码还没有准备好或还没有稳定导致上一个数字的段码残影显示在了下一个数字上。解决方法是在切换位选前先关闭所有位选turnOffAllDigits送入新段码再打开对应的位选。确保这个“消隐”时间足够。6. 优化、扩展与个性化改造6.1 精度校准与功耗实测优化走时精度取决于32.768kHz晶振的精度。你可以通过连续运行24小时或更长时间与标准时间对比计算出日误差。ATtiny85的定时器可以配置一个校正寄存器OSCCAL通过微调内部RC振荡器的频率来补偿系统时钟的误差但这主要影响程序运行速度对依赖外部晶振的定时器中断影响不大。更根本的校准方法是调整负载电容的容值。可以在晶振两端并联一个几皮法到几十皮法的可调电容通过测量和调整将误差降到最小。功耗优化需要实际测量。使用万用表的微安档串联在电池和电路板之间分别测量以下模式下的电流全速运行模式芯片和显示全开。睡眠模式显示关闭看门狗唤醒但关闭显示扫描定时器。深度睡眠模式看门狗唤醒显示扫描定时器关闭所有外围芯片处于静态。我们的目标是让平均电流尽可能低。假设手表每秒唤醒一次工作10毫秒更新时间和显示消耗10mA电流睡眠990毫秒消耗5μA电流。那么平均电流 I_avg (0.01s * 0.01A 0.99s * 0.000005A) / 1s ≈ 0.0001 A 0.00000495 A ≈ 0.000105 A 105μA。一颗CR2032电池的典型容量是220mAh那么理论续航时间 T 220mAh / 0.105mA ≈ 2095小时 ≈ 87天。这是一个非常理想的值实际会因元件差异、温度、电池自放电等因素缩短但达到一个月以上的续航是完全可行的。6.2 功能扩展思路基础版本完成后你可以根据自己的兴趣添加更多功能添加按钮利用剩余的IO口添加1-2个贴片按钮实现时间调整、亮度调节通过PWM控制段码电流、显示模式切换12/24小时制甚至简单的闹钟功能。环境光传感添加一个光敏电阻或光电二极管自动调节显示亮度。在黑暗环境下降低亮度甚至关闭显示进一步省电。蓝牙连接进阶如果追求智能连接可以换用体积稍大但集成蓝牙的芯片如ATtiny1614配合蓝牙模块但这会极大增加功耗和复杂度可能就需要考虑充电电池了。外壳设计与佩戴使用3D打印或手工打磨亚克力板为手表制作一个专属外壳。表带可以选择尼龙、皮革或者直接集成一个硅胶腕带。这是让项目从“开发板”变成“产品”的关键一步非常考验动手能力。6.3 项目总结与心得反思回顾整个项目从构思到实现最大的挑战不是编写代码而是在极其有限的资源引脚、功耗、空间下做出稳定可靠的系统设计。ATtiny85就像一位严格的老师逼迫你去深入理解每一个IO口的状态、每一微安电流的流向、每一条时序的先后。我踩过最大的一个“坑”是在早期版本中没有处理好数码管的消隐导致显示重影严重长时间观看容易视觉疲劳。后来通过仔细分析动态扫描的时序图在切换位选前增加了足够的延时或硬件上的关断控制才解决了这个问题。另一个教训是关于电源噪声最初我将数字开关信号走线与晶振走线靠得太近导致走时偶尔出现跳秒重新布局PCB后问题消失。这个项目的魅力在于它的完整性。它涵盖了嵌入式开发的硬件设计、单片机编程、低功耗优化和动手焊接调试的全流程。最终当这块自己制作的手表在手腕上跳动出准确的时间那种满足感远超购买任何一款成品手表。它不仅仅是一个计时工具更是一个承载了知识与创造力的个人作品。如果你也心动不妨现在就拿起烙铁从点亮第一个数码管开始这段旅程。

相关新闻

2024年AI降重工具实测与选型指南

2024年AI降重工具实测与选型指南

1. 项目概述:AI内容处理工具的现状与需求 2023年被称为AIGC(AI生成内容)的爆发元年,随之而来的是学术界和内容平台对AI生成检测的日益重视。根据最新行业调研,超过67%的教育机构已部署AI内容识别系统,而主流…

2026/7/28 19:22:30 阅读更多 →
Vue报错之 [Vue warn]: Property or method list is not defined on the instance

Vue报错之 [Vue warn]: Property or method list is not defined on the instance

如图: 我的过来发现了是自己下开始写了个list 数组,后面由于加了个s, 而使用时 还是用了 {{list}}, 所以出现了这个问题, 主要还是命名这个东西,想好了就别改了, 后面突然想改的话,可能引发一系列的错误, 如果要改,可以先ctrlf找找,重名的做好一改全改的准备 2020/3/3,…

2026/7/28 19:22:30 阅读更多 →
IDEA恢复布局

IDEA恢复布局

如何快速恢复IDEA中的快速布局呢?点击Run ->左侧栏的这个按钮,即可快速恢复默认布局(把鼠标放在上面不懂,就会看到 Restore Layout翻译过来就是复原布局的意思,是不是很给力呢?)

2026/7/28 19:22:30 阅读更多 →

最新新闻

网络爬虫登录验证技术全解析:从表单到OAuth

网络爬虫登录验证技术全解析:从表单到OAuth

1. 网络爬虫登录场景的核心挑战在数据采集领域,登录环节往往是爬虫开发的第一道门槛。不同于公开页面的抓取,需要身份验证的网站通常会在登录流程中设置多重防护机制。根据我多年爬虫开发经验,常见的登录场景主要分为三类:基础表单…

2026/7/28 19:32:34 阅读更多 →
Windows C++项目集成jsoncpp:静态库与动态库的完整部署指南

Windows C++项目集成jsoncpp:静态库与动态库的完整部署指南

1. 项目概述:为什么我们需要关注jsoncpp的库部署方式? 如果你在Windows上用C处理过JSON数据,大概率听说过或者用过jsoncpp这个库。它是一个老牌的、纯C实现的JSON解析和生成库,由Google开源,以其稳定性和易用性在C社区…

2026/7/28 19:32:34 阅读更多 →
100dB的喇叭回音,一颗23mm的小模组就解决了——怎么做到的?

100dB的喇叭回音,一颗23mm的小模组就解决了——怎么做到的?

一、先讲一个场景想象一下:你正在做一个智能门禁对讲项目。喇叭开最大音量,麦克风离喇叭不到 5 厘米。通话时,对方说话 → 喇叭放出来 → 声音又被自家麦克风录回去 → 对方听到自己的回声。更头疼的是——这还是个全双工通话场景&#xff0c…

2026/7/28 19:32:34 阅读更多 →
QQ空间说说备份终极指南:GetQzonehistory免费工具完整教程

QQ空间说说备份终极指南:GetQzonehistory免费工具完整教程

QQ空间说说备份终极指南:GetQzonehistory免费工具完整教程 【免费下载链接】GetQzonehistory 获取QQ空间发布的历史说说 项目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory 还在为QQ空间里的珍贵回忆逐渐消失而担忧吗?GetQzoneh…

2026/7/28 19:32:34 阅读更多 →
5分钟快速解决:微信网页版访问限制完全指南

5分钟快速解决:微信网页版访问限制完全指南

5分钟快速解决:微信网页版访问限制完全指南 【免费下载链接】wechat-need-web 让微信网页版可用 / Allow the use of WeChat via webpage access 项目地址: https://gitcode.com/gh_mirrors/we/wechat-need-web 你是一个文章写手,你负责为开源项目…

2026/7/28 19:32:33 阅读更多 →
bugku——程序员本地网站

bugku——程序员本地网站

按照题目提示,必须要本地ip才可以访问用X-Forwarded-For: 127.0.0.1伪造本地地址拿到flag

2026/7/28 19:31:33 阅读更多 →

日新闻

告别臃肿!3步让你的暗影精灵笔记本重获新生

告别臃肿!3步让你的暗影精灵笔记本重获新生

告别臃肿!3步让你的暗影精灵笔记本重获新生 【免费下载链接】OmenSuperHub Control Omen laptop performance, fan speeds, and keyboard lighting, and unlock power limits. 项目地址: https://gitcode.com/gh_mirrors/om/OmenSuperHub 你是否也曾为官方Om…

2026/7/28 0:00:43 阅读更多 →
RAG必踩坑!财报法规检索不准?这款开源工具让答案浮出水面,准确率飙升98.7%!

RAG必踩坑!财报法规检索不准?这款开源工具让答案浮出水面,准确率飙升98.7%!

做 RAG 的人应该都踩过这个致命的坑:把几百页的财报、法规、技术手册扔给向量库,问一个具体问题,搜出来的全是沾边但没用的内容 —— 关键信息要么被硬切块拆碎了,要么藏在几十条结果的最下面。语义相似≠真正相关,这个…

2026/7/28 0:00:43 阅读更多 →
抖音视频文案提取工具全指南:免费2026版、手机App、在线工具一网打尽

抖音视频文案提取工具全指南:免费2026版、手机App、在线工具一网打尽

2026年做短视频运营,从抖音上扒文案早就不是偷偷抄笔记的事了。我刚开始做内容的时候,每天刷半小时抖音,手动把爆款视频的口播敲进备忘录,一条2分钟的视频得花十来分钟,碰到语速快的还要反复回听。后来试了一圈工具&am…

2026/7/28 0:00:43 阅读更多 →

周新闻

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 数据集6000张 完整源码已标注数据集训练好的模型环境配置教程程序运行说明文档,可以直接使用!系统支持图片、视频、摄像头等多种方式检测裂缝,功能强大实用。 1数据集6000张 8各类别

2026/7/28 12:04:22 阅读更多 →
深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

pubg数据集 精选原图1.42万数据 1.49万标签 无任何重复、算法增强或冗余图像! pubg绝地求生目标检测数据集 1分类:e_body,14905个标签,txt格式 共计14244张图,99%为640*640尺寸图像 适合yolo目标检测、AI训练关键词&am…

2026/7/28 8:29:16 阅读更多 →
Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex检测数据集数据集详情检测类别: allies enemy tag图片总量:7247张训练集:5139张验证集:1425张测试集:683张标注状态:全部已标注,即拿即用数据格式:支持YOLO格式及其他格式&#…

2026/7/28 5:03:42 阅读更多 →

月新闻