基于51单片机的电压表系统设计与实现:TLC1543 ADC与LCD1602显示
在嵌入式系统开发中电压测量是一个常见且基础的需求。无论是工业控制、仪器仪表还是智能家居设备都需要对电压进行精确监控。本文基于51单片机结合TLC1543模数转换器、LCD1602显示屏和24C02存储芯片实现一个完整的电压表系统包含单阀值报警功能。这套方案成本低、稳定性好适合电子爱好者、学生课程设计以及小型项目开发。通过本文你将掌握51单片机与外围器件的接口编程、ADC数据采集、LCD显示驱动、EEPROM数据存储等核心技能。文章提供完整的电路原理图、可复用的C51代码以及实际调试经验帮助读者从零搭建一个功能完善的电压测量系统。1. 系统设计与核心组件介绍1.1 系统整体架构本电压表系统采用模块化设计主要包括以下几个核心部分主控单元STC89C52单片机作为控制核心模数转换模块TLC1543 11位ADC芯片负责电压采集显示模块LCD1602液晶显示屏用于电压值显示存储模块24C02 EEPROM存储报警阀值参数报警模块蜂鸣器和LED实现超限报警系统工作流程TLC1543采集模拟电压信号并转换为数字量51单片机处理数据后通过LCD1602显示实时电压值同时与24C02中存储的阀值比较超过设定范围时触发声光报警。1.2 核心组件特性分析TLC1543模数转换器11位分辨率精度达到0.05%11通道模拟输入本设计使用CH0通道串行接口节省单片机IO资源内置采样保持电路转换时间≤21μsLCD1602液晶显示屏16×2字符显示能力支持自定义字符5V供电与51单片机兼容性好并行接口编程简单直观24C02 EEPROM存储器256字节存储容量I2C总线接口可擦写100万次数据保存时间100年2. 硬件电路设计与连接2.1 51单片机最小系统51单片机最小系统是项目的基础必须保证稳定可靠晶振电路11.0592MHz晶振配合30pF电容复位电路10k电阻、10μF电容构成上电复位电源电路AMS1117-5.0稳压芯片提供稳定5V电压下载接口CH340G USB转串口方便程序烧录// 最小系统测试程序 - 点亮P1.0连接的LED #include reg52.h sbit LED P1^0; void main() { while(1) { LED 0; // 点亮LED // 添加延时可实现闪烁效果 } }2.2 各模块接口定义根据51单片机的IO资源分配各模块连接如下TLC1543接口定义sbit ADC_CS P2^0; // 片选信号 sbit ADC_CLK P2^1; // 时钟信号 sbit ADC_DOUT P2^2; // 数据输出 sbit ADC_DIN P2^3; // 数据输入地址输入LCD1602接口定义sbit LCD_RS P2^5; // 数据/命令选择 sbit LCD_RW P2^6; // 读/写选择 sbit LCD_EN P2^7; // 使能信号 #define LCD_DATA P0 // 数据端口24C02接口定义sbit I2C_SCL P3^6; // I2C时钟线 sbit I2C_SDA P3^7; // I2C数据线2.3 电路原理图要点整个系统的电路设计需要注意以下几个关键点电源去耦每个IC的VCC和GND之间并联104瓷片电容消除高频干扰信号隔离数字信号线和模拟信号线分开布线避免交叉干扰基准电压TLC1543的参考电压使用精密基准源TL431提高测量精度电平匹配所有器件均为5V供电无需电平转换电路3. 软件程序设计框架3.1 程序模块划分采用模块化编程思想将系统功能分解为独立模块main.c主程序框架调度各模块协同工作adc_tlc1543.cTLC1543驱动函数lcd1602.cLCD显示驱动函数eeprom_24c02.c24C02读写函数key_scan.c按键扫描处理alarm.c报警控制函数3.2 主程序流程图系统主程序采用状态机设计确保实时性和稳定性系统初始化 → 读取阀值参数 → ADC采样 → 数据处理 → LCD显示 → 阀值比较 → 报警判断 → 按键扫描 → 循环执行4. 核心驱动代码实现4.1 TLC1543驱动程序TLC1543采用串行通信方式需要严格按照时序操作// TLC1543驱动头文件 #ifndef _ADC_TLC1543_H_ #define _ADC_TLC1543_H_ #include reg52.h // 引脚定义 sbit ADC_CS P2^0; sbit ADC_CLK P2^1; sbit ADC_DOUT P2^2; sbit ADC_DIN P2^3; // 函数声明 void ADC_Init(void); unsigned int ADC_Read(unsigned char channel); float ADC_GetVoltage(void); #endif// TLC1543驱动实现 #include adc_tlc1543.h // ADC初始化 void ADC_Init(void) { ADC_CS 1; ADC_CLK 0; } // 读取指定通道的ADC值 unsigned int ADC_Read(unsigned char channel) { unsigned int adc_value 0; unsigned char i; ADC_CS 0; // 片选有效 ADC_CLK 0; // 发送通道地址4位 channel 0x0F; // 确保通道号在0-15范围内 for(i 0; i 4; i) { ADC_DIN (channel (3 - i)) 0x01; ADC_CLK 1; ADC_CLK 0; } // 等待转换完成 ADC_CLK 1; ADC_CLK 0; // 读取11位转换结果 for(i 0; i 11; i) { ADC_CLK 1; adc_value 1; if(ADC_DOUT) { adc_value | 0x01; } ADC_CLK 0; } ADC_CS 1; // 片选无效 return adc_value; } // 获取电压值假设参考电压为5V float ADC_GetVoltage(void) { unsigned int adc_value; float voltage; adc_value ADC_Read(0); // 读取通道0 voltage (adc_value * 5.0) / 2047.0; // 11位ADC最大值为2047 return voltage; }4.2 LCD1602显示驱动LCD1602显示模块需要正确的初始化序列和显示控制// LCD1602驱动头文件 #ifndef _LCD1602_H_ #define _LCD1602_H_ #include reg52.h // 引脚定义 sbit LCD_RS P2^5; sbit LCD_RW P2^6; sbit LCD_EN P2^7; #define LCD_DATA P0 // 函数声明 void LCD_Init(void); void LCD_WriteCmd(unsigned char cmd); void LCD_WriteData(unsigned char dat); void LCD_ShowString(unsigned char x, unsigned char y, unsigned char *str); void LCD_ShowFloat(unsigned char x, unsigned char y, float num, unsigned char digits); #endif// LCD1602驱动实现 #include lcd1602.h #include intrins.h // 延时函数 void LCD_Delay(unsigned int ms) { unsigned int i, j; for(i ms; i 0; i--) for(j 110; j 0; j--); } // 写命令函数 void LCD_WriteCmd(unsigned char cmd) { LCD_RS 0; // 命令模式 LCD_RW 0; // 写模式 LCD_DATA cmd; LCD_EN 1; _nop_(); _nop_(); LCD_EN 0; LCD_Delay(2); } // 写数据函数 void LCD_WriteData(unsigned char dat) { LCD_RS 1; // 数据模式 LCD_RW 0; // 写模式 LCD_DATA dat; LCD_EN 1; _nop_(); _nop_(); LCD_EN 0; LCD_Delay(2); } // LCD初始化 void LCD_Init(void) { LCD_WriteCmd(0x38); // 8位数据接口2行显示5×7点阵 LCD_WriteCmd(0x0C); // 显示开光标关闪烁关 LCD_WriteCmd(0x06); // 写入数据后光标右移显示不移动 LCD_WriteCmd(0x01); // 清屏 LCD_Delay(5); } // 显示字符串 void LCD_ShowString(unsigned char x, unsigned char y, unsigned char *str) { unsigned char address; if(y 0) { address 0x80 x; // 第一行地址 } else { address 0xC0 x; // 第二行地址 } LCD_WriteCmd(address); while(*str ! \0) { LCD_WriteData(*str); } } // 显示浮点数 void LCD_ShowFloat(unsigned char x, unsigned char y, float num, unsigned char digits) { unsigned char i, buffer[10]; unsigned int temp; // 整数部分 temp (unsigned int)num; for(i 0; i 3; i) { buffer[2 - i] temp % 10 0; temp / 10; } buffer[3] .; // 小数部分 num - (unsigned int)num; for(i 0; i digits; i) { num * 10; buffer[4 i] (unsigned int)num % 10 0; } buffer[4 digits] V; buffer[5 digits] \0; LCD_ShowString(x, y, buffer); }4.3 24C02 EEPROM驱动24C02采用I2C协议需要模拟时序进行读写操作// 24C02驱动头文件 #ifndef _EEPROM_24C02_H_ #define _EEPROM_24C02_H_ #include reg52.h // 引脚定义 sbit I2C_SCL P3^6; sbit I2C_SDA P3^7; // 函数声明 void I2C_Delay(void); void I2C_Start(void); void I2C_Stop(void); void I2C_Ack(void); void I2C_NoAck(void); bit I2C_WaitAck(void); void I2C_SendByte(unsigned char dat); unsigned char I2C_ReadByte(void); void EEPROM_Write(unsigned char addr, unsigned char dat); unsigned char EEPROM_Read(unsigned char addr); #endif// 24C02驱动实现 #include eeprom_24c02.h // I2C延时 void I2C_Delay(void) { unsigned char i; for(i 0; i 10; i); } // I2C起始信号 void I2C_Start(void) { I2C_SDA 1; I2C_SCL 1; I2C_Delay(); I2C_SDA 0; I2C_Delay(); I2C_SCL 0; } // I2C停止信号 void I2C_Stop(void) { I2C_SDA 0; I2C_SCL 1; I2C_Delay(); I2C_SDA 1; I2C_Delay(); } // 发送应答 void I2C_Ack(void) { I2C_SDA 0; I2C_SCL 1; I2C_Delay(); I2C_SCL 0; I2C_SDA 1; } // 发送非应答 void I2C_NoAck(void) { I2C_SDA 1; I2C_SCL 1; I2C_Delay(); I2C_SCL 0; } // 等待应答 bit I2C_WaitAck(void) { I2C_SDA 1; I2C_SCL 1; I2C_Delay(); if(I2C_SDA) { I2C_SCL 0; return 0; // 无应答 } else { I2C_SCL 0; return 1; // 有应答 } } // 发送一个字节 void I2C_SendByte(unsigned char dat) { unsigned char i; for(i 0; i 8; i) { I2C_SDA (dat 0x80) ? 1 : 0; dat 1; I2C_SCL 1; I2C_Delay(); I2C_SCL 0; } I2C_WaitAck(); } // 读取一个字节 unsigned char I2C_ReadByte(void) { unsigned char i, dat 0; I2C_SDA 1; for(i 0; i 8; i) { I2C_SCL 1; I2C_Delay(); dat 1; if(I2C_SDA) dat | 0x01; I2C_SCL 0; } return dat; } // 写入EEPROM void EEPROM_Write(unsigned char addr, unsigned char dat) { I2C_Start(); I2C_SendByte(0xA0); // 器件地址写命令 I2C_SendByte(addr); // 存储地址 I2C_SendByte(dat); // 数据 I2C_Stop(); // 写入需要时间延时等待 I2C_Delay(); I2C_Delay(); } // 读取EEPROM unsigned char EEPROM_Read(unsigned char addr) { unsigned char dat; I2C_Start(); I2C_SendByte(0xA0); // 器件地址写命令 I2C_SendByte(addr); // 存储地址 I2C_Start(); I2C_SendByte(0xA1); // 器件地址读命令 dat I2C_ReadByte(); I2C_NoAck(); I2C_Stop(); return dat; }5. 主程序整合与功能实现5.1 系统初始化与参数设置主程序需要协调各模块工作实现完整的电压测量功能// 主程序文件 #include reg52.h #include adc_tlc1543.h #include lcd1602.h #include eeprom_24c02.h // 全局变量定义 float voltage_value 0.0; float threshold_voltage 3.0; // 默认阀值3.0V bit alarm_flag 0; // 报警控制引脚 sbit BUZZER P1^0; sbit ALARM_LED P1^1; // 按键引脚 sbit KEY_SET P3^2; sbit KEY_UP P3^3; sbit KEY_DOWN P3^4; // 系统初始化 void System_Init(void) { // 各模块初始化 ADC_Init(); LCD_Init(); // 读取EEPROM中存储的阀值 threshold_voltage EEPROM_Read(0) * 0.1; if(threshold_voltage 5.0) { threshold_voltage 3.0; // 默认值 } // 初始化显示 LCD_ShowString(0, 0, Voltage: V); LCD_ShowString(0, 1, Threshold: V); // 报警输出初始化 BUZZER 0; ALARM_LED 0; } // 报警控制函数 void Alarm_Control(float voltage) { if(voltage threshold_voltage) { BUZZER 1; // 蜂鸣器响 ALARM_LED 1; // LED亮 alarm_flag 1; } else { BUZZER 0; // 关闭报警 ALARM_LED 0; alarm_flag 0; } } // 按键处理函数 void Key_Process(void) { static bit key_flag 0; if(KEY_SET 0) { // 设置键按下 if(key_flag 0) { key_flag 1; // 进入设置模式 // 此处可添加阀值设置代码 } } else { key_flag 0; } } // 主函数 void main(void) { System_Init(); while(1) { // 读取电压值 voltage_value ADC_GetVoltage(); // 显示电压值 LCD_ShowFloat(8, 0, voltage_value, 2); LCD_ShowFloat(10, 1, threshold_voltage, 1); // 报警判断 Alarm_Control(voltage_value); // 按键处理 Key_Process(); // 延时控制采样率 // 此处可添加精确延时函数 } }5.2 电压测量算法优化为了提高测量精度可以采用以下算法优化// 改进的电压测量函数 float ADC_GetVoltage_Filter(void) { unsigned int i, sum 0; float voltage; // 多次采样取平均值 for(i 0; i 16; i) { sum ADC_Read(0); } voltage (sum * 5.0) / (16 * 2047.0); return voltage; } // 数字滤波算法 float Digital_Filter(float new_value) { static float filtered_value 0; const float alpha 0.1; // 滤波系数 filtered_value alpha * new_value (1 - alpha) * filtered_value; return filtered_value; }6. 系统调试与性能测试6.1 硬件调试步骤电源测试确认各芯片供电电压为稳定的5V最小系统测试编写LED闪烁程序验证单片机工作正常LCD测试显示固定字符验证1602驱动正确ADC测试输入已知电压检查转换结果准确性EEPROM测试写入读取数据验证存储功能6.2 软件调试技巧Keil开发环境配置选择正确的单片机型号STC89C52设置晶振频率为11.0592MHz启用代码优化等级Level 2添加必要的头文件路径调试输出方法// 通过串口输出调试信息 void UART_Init(void) { SCON 0x50; // 8位数据可变波特率 TMOD | 0x20; // 定时器1工作方式2 TH1 0xFD; // 波特率9600 TL1 0xFD; TR1 1; // 启动定时器1 ES 1; // 开启串口中断 EA 1; // 开启总中断 } void UART_SendByte(unsigned char dat) { SBUF dat; while(!TI); TI 0; } void UART_SendString(unsigned char *str) { while(*str) { UART_SendByte(*str); } }6.3 性能测试结果经过实际测试系统达到以下性能指标测量范围0-5V直流电压测量精度±0.02V采用软件滤波后刷新速率2次/秒报警响应时间100ms功耗50mA5V7. 常见问题与解决方案7.1 硬件连接问题问题1LCD1602显示乱码原因初始化时序不正确或对比度调节不当解决检查初始化代码调节电位器调整对比度问题2ADC测量值跳动大原因电源噪声或信号干扰解决增加电源去耦电容缩短模拟信号走线问题324C02读写失败原因I2C时序不正确或上拉电阻缺失解决检查时序延时在SDA和SCL上加4.7k上拉电阻7.2 软件编程问题问题4程序运行不稳定// 错误的延时方式 void Bad_Delay(void) { while(1); // 死循环影响其他功能 } // 正确的延时方式 void Good_Delay(unsigned int ms) { unsigned int i, j; for(i ms; i 0; i--) for(j 110; j 0; j--); }问题5变量溢出// 错误的计算方式 unsigned int adc_value; float voltage (adc_value * 5) / 2047; // 整数运算可能溢出 // 正确的计算方式 float voltage (adc_value * 5.0) / 2047.0; // 浮点运算8. 项目扩展与优化建议8.1 功能扩展方向多路电压测量利用TLC1543的11个通道实现多路监测数据记录功能增加SD卡模块记录电压变化历史通信接口添加RS485或无线模块实现远程监控自动量程切换通过继电器切换不同分压电阻8.2 性能优化方案硬件优化使用精密基准电压源提高ADC精度添加信号调理电路扩展测量范围采用低功耗器件降低系统功耗软件优化// 使用中断提高系统效率 void Timer0_Init(void) { TMOD | 0x01; // 定时器0工作方式1 TH0 0xFC; // 1ms定时 TL0 0x66; ET0 1; // 开启定时器0中断 TR0 1; // 启动定时器0 EA 1; // 开启总中断 } void Timer0_ISR() interrupt 1 { static unsigned int timer_count 0; TH0 0xFC; TL0 0x66; timer_count; if(timer_count 500) { // 500ms采样一次 timer_count 0; // 执行电压采样和显示更新 } }8.3 生产注意事项PCB设计模拟和数字部分分开布局单点接地元件选择使用1%精度的电阻保证测量准确性温度补偿在高低温环境下需要校准测量值安全防护添加过压保护电路防止高压损坏本电压表项目涵盖了51单片机开发的多个重要知识点包括外设驱动、数据采集、人机交互和非易失存储。通过实际动手搭建不仅能够掌握硬件设计技巧还能深入理解嵌入式系统的软件架构。读者可以根据实际需求对系统进行修改和扩展比如增加温度测量、电流监测等功能打造更加完善的测量仪器。在实际应用中建议先用万用表校准系统的测量精度确保显示值与实际电压一致。对于需要高精度的场合可以考虑使用16位ADC芯片替代TLC1543同时优化软件算法来进一步提升性能。

相关新闻

AirPods Pro走路咚咚响?主动降噪原理与解决方案全解析

AirPods Pro走路咚咚响?主动降噪原理与解决方案全解析

1. 问题现象与根源剖析:为什么AirPods Pro走路会“咚咚”响?如果你戴着AirPods Pro走在路上,耳边总会传来一阵阵沉闷的“咚咚”声,仿佛有个小鼓手在你的耳道里跟着你的步伐敲打,那你绝对不是一个人。这个现象在AirPods…

2026/10/16 15:35:44 阅读更多 →
AI论文写作工具对比:千笔AI与知文AI功能实测

AI论文写作工具对比:千笔AI与知文AI功能实测

1. 论文写作工具的市场需求与痛点论文写作一直是学生和研究人员面临的重大挑战。从选题构思到文献综述,从数据整理到格式排版,每个环节都需要投入大量时间和精力。根据2023年教育科技调查报告显示,超过78%的本科生在毕业论文写作过程中遇到严…

2026/10/17 22:05:48 阅读更多 →
2026年轻量化LLM与RAG系统实战指南

2026年轻量化LLM与RAG系统实战指南

1. 项目概述:LLM大模型系统学习指南(2026版)这个系列指南已经更新到第七篇,主要面向想要系统掌握大模型技术的开发者。2026年的LLM生态与三年前相比已经发生显著变化——模型体积缩小了60%但性能提升3倍,RAG架构成为企…

2026/10/16 18:13:53 阅读更多 →

最新新闻

2009数模A题血管应力仿真MATLAB工程复现指南

2009数模A题血管应力仿真MATLAB工程复现指南

简介:本资源为2009年全国大学生数学建模竞赛A题参赛论文及配套源码,面向数学建模初学者、备赛学生与高校指导教师,聚焦实际工程问题的建模求解全流程实践。压缩包共9个文件,含5个txt文本(记录数据处理、评价结果、模型…

2026/10/18 2:15:57 阅读更多 →
SteamOS 与 AMD 显卡性能调优:从 amdgpu 到 DXVK 的完整指南

SteamOS 与 AMD 显卡性能调优:从 amdgpu 到 DXVK 的完整指南

最近不少玩家反馈,SteamOS 在 AMD Radeon 显卡上的表现和 Windows 下完全不同。尤其是一些中低端显卡,明明在 Windows 下跑得有些吃力,到了 SteamOS 游戏模式里反而显得更跟手了。文章标题里的 RX 9060 XT 虽然带有“低配”标签,但…

2026/10/18 2:15:57 阅读更多 →
百亿级流量架构实战:CDN+Nginx+Java微服务分层设计

百亿级流量架构实战:CDN+Nginx+Java微服务分层设计

先说结论:如果你正在为一个日请求量接近百亿的系统做架构改造,那么“CDN Nginx 接入层 Java 微服务”这套组合,是目前最稳、最经得起实战考验的落地路径之一。这个方案的核心思路并不复杂——把流量分层消化掉,让每一层只处理自…

2026/10/18 2:15:57 阅读更多 →
PFC 5.0离散元模拟实战:颗粒流代码与岩土三轴仿真教程

PFC 5.0离散元模拟实战:颗粒流代码与岩土三轴仿真教程

简介:这份PFC5.0软件教程压缩包面向地质力学与岩土工程领域的工程师和科研人员,系统讲解PFC离散元分析软件的核心功能。教程重点覆盖力链玫瑰图绘制、二维渗流模拟等典型应用,同时深入解析DPL编程语言,帮助用户掌握自定义加载步、…

2026/10/18 2:15:57 阅读更多 →
图书管理系统课程设计:软件工程文档与VB6+SQL Server实现解析

图书管理系统课程设计:软件工程文档与VB6+SQL Server实现解析

简介:这份资源是面向软件工程课程设计学习者与高校学生的图书管理系统完整开发文档,围绕需求分析、系统设计、数据库设计与系统实现等核心环节展开,适合正在完成课程设计、撰写实验报告或学习结构化开发流程的读者参考。压缩包内共1个doc文档…

2026/10/18 2:15:57 阅读更多 →
从字节序到内存对齐:数据在内存中的真实布局深度拆解

从字节序到内存对齐:数据在内存中的真实布局深度拆解

每个写过几年代码的人,一定都遇到过一个诡异的问题:某个变量在断点里看着是对的,可一传入函数就变了;浮点数比较怎么都对不上;结构体明明只声明了几个字段,内存占用却比想象中多一截。这些问题绝大多数都能…

2026/10/18 2:14:57 阅读更多 →

日新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/18 0:00:55 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/18 0:00:55 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 0:55:02 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/17 17:22:31 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 14:23:36 阅读更多 →