当前位置: 首页 > article >正文

Proteus 8.13仿真STM32F103R6的ADC采样,数码管显示电压值完整流程(附源码)

Proteus 8.13仿真STM32F103R6的ADC采样与数码管显示实战指南在嵌入式系统开发中ADC模数转换器是最常用的外设之一。对于初学者而言在没有硬件设备的情况下通过仿真软件学习ADC的使用是快速入门的最佳选择。本文将详细介绍如何使用Proteus 8.13仿真STM32F103R6的ADC功能并将采样到的电压值通过4位共阴数码管动态显示出来。1. 环境准备与工程创建在开始之前确保你已经安装了Proteus 8.13 Professional版本和Keil MDK-ARM开发环境。这两个工具的组合将为我们的仿真项目提供完整的开发链。新建Proteus工程的步骤如下打开Proteus 8.13点击File→New Project输入项目名称如STM32_ADC_7SEG选择默认的PCB布局模板可跳过在Create Firmware Project部分选择None点击Finish完成创建接下来需要添加必要的元件到原理图中。主要元件包括STM32F103R6主控MCUPOT-HG可调电阻用于模拟电压变化7SEG-MPX4-CC4位共阴数码管POWER和GROUND电源和地2. 原理图设计与元件连接正确的原理图连接是仿真成功的基础。以下是各元件的连接方式2.1 STM32F103R6引脚配置引脚连接元件功能说明PA1POT-HG中间引脚ADC输入通道1PC0-PC7数码管段选A-G,DP数码管段控制PC8-PC11数码管位选1-4数码管位控制2.2 数码管连接方式4位共阴数码管(7SEG-MPX4-CC)的连接需要注意以下几点段选信号(A-G,DP)通过限流电阻(220Ω)连接到GPIOC的PC0-PC7位选信号(1-4)直接连接到GPIOC的PC8-PC11共阴极端需要通过三极管或直接连接到GND2.3 可调电阻设置POT-HG的设置参数如下属性设置 - Resistance: 10k - Law: Linear - Set Position: 50% (初始值)将电阻的两端分别连接到3.3V和GND中间抽头连接到PA1(ADC1_IN1)。3. STM32固件开发在Keil MDK中新建工程选择STM32F103R6作为目标器件。以下是代码实现的关键部分。3.1 系统时钟与外设初始化首先配置系统时钟和必要的外设void RCC_Configuration(void) { RCC_DeInit(); RCC_HSEConfig(RCC_HSE_ON); while(RCC_GetFlagStatus(RCC_FLAG_HSERDY) RESET); FLASH_SetLatency(FLASH_Latency_2); FLASH_PrefetchBufferCmd(ENABLE); RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9); RCC_PLLCmd(ENABLE); while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) RESET); RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); while(RCC_GetSYSCLKSource() ! 0x08); RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1 | RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOC, ENABLE); }3.2 GPIO配置配置PA1为模拟输入PC0-PC11为推挽输出void GPIO_Configuration(void) { GPIO_InitTypeDef GPIO_InitStructure; // PA1 as Analog Input (ADC) GPIO_InitStructure.GPIO_Pin GPIO_Pin_1; GPIO_InitStructure.GPIO_Mode GPIO_Mode_AIN; GPIO_Init(GPIOA, GPIO_InitStructure); // PC0-PC11 as Push-Pull Output (7SEG control) GPIO_InitStructure.GPIO_Pin GPIO_Pin_All; GPIO_InitStructure.GPIO_Mode GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed GPIO_Speed_50MHz; GPIO_Init(GPIOC, GPIO_InitStructure); }3.3 ADC与DMA配置使用DMA将ADC转换结果自动传输到内存变量#define ADC1_DR_Address ((uint32_t)0x4001244C) __IO uint16_t ADCConvertedValue 0; void ADC_DMA_Configuration(void) { DMA_InitTypeDef DMA_InitStructure; ADC_InitTypeDef ADC_InitStructure; // DMA1 Channel1 Configuration DMA_DeInit(DMA1_Channel1); DMA_InitStructure.DMA_PeripheralBaseAddr ADC1_DR_Address; DMA_InitStructure.DMA_MemoryBaseAddr (uint32_t)ADCConvertedValue; DMA_InitStructure.DMA_DIR DMA_DIR_PeripheralSRC; DMA_InitStructure.DMA_BufferSize 1; DMA_InitStructure.DMA_PeripheralInc DMA_PeripheralInc_Disable; DMA_InitStructure.DMA_MemoryInc DMA_MemoryInc_Disable; DMA_InitStructure.DMA_PeripheralDataSize DMA_PeripheralDataSize_HalfWord; DMA_InitStructure.DMA_MemoryDataSize DMA_MemoryDataSize_HalfWord; DMA_InitStructure.DMA_Mode DMA_Mode_Circular; DMA_InitStructure.DMA_Priority DMA_Priority_High; DMA_InitStructure.DMA_M2M DMA_M2M_Disable; DMA_Init(DMA1_Channel1, DMA_InitStructure); DMA_Cmd(DMA1_Channel1, ENABLE); // ADC1 Configuration ADC_InitStructure.ADC_Mode ADC_Mode_Independent; ADC_InitStructure.ADC_ScanConvMode DISABLE; ADC_InitStructure.ADC_ContinuousConvMode ENABLE; ADC_InitStructure.ADC_ExternalTrigConv ADC_ExternalTrigConv_None; ADC_InitStructure.ADC_DataAlign ADC_DataAlign_Right; ADC_InitStructure.ADC_NbrOfChannel 1; ADC_Init(ADC1, ADC_InitStructure); ADC_RegularChannelConfig(ADC1, ADC_Channel_1, 1, ADC_SampleTime_55Cycles5); ADC_DMACmd(ADC1, ENABLE); ADC_Cmd(ADC1, ENABLE); // ADC Calibration ADC_ResetCalibration(ADC1); while(ADC_GetResetCalibrationStatus(ADC1)); ADC_StartCalibration(ADC1); while(ADC_GetCalibrationStatus(ADC1)); ADC_SoftwareStartConvCmd(ADC1, ENABLE); }4. 数码管显示实现数码管显示采用动态扫描方式需要解决两个关键问题数字到段码的转换和位选控制。4.1 数码管编码表共阴数码管的段码表如下对应0-9const uint16_t SegmentCodes[] { 0x3f, // 0 0x06, // 1 0x5b, // 2 0x4f, // 3 0x66, // 4 0x6d, // 5 0x7d, // 6 0x07, // 7 0x7f, // 8 0x6f // 9 }; const uint16_t SegmentBit[] { 0x0e00, // 第一位 0x0d00, // 第二位 0x0b00, // 第三位 0x0700 // 第四位 };4.2 动态扫描实现动态扫描的核心是快速轮流点亮每一位数码管void DisplayValue(uint16_t value) { uint16_t digits[4]; uint16_t voltage (value * 3300) / 4095; // 转换为毫伏 // 分离各位数字 digits[0] voltage / 1000; // 千位 digits[1] (voltage % 1000) / 100; // 百位 digits[2] (voltage % 100) / 10; // 十位 digits[3] voltage % 10; // 个位 // 处理前导零消隐 if(digits[0] 0) { digits[0] 10; // 特殊值表示消隐 if(digits[1] 0) { digits[1] 10; if(digits[2] 0) { digits[2] 10; } } } // 动态扫描显示 for(int i 0; i 4; i) { GPIO_Write(GPIOC, 0x0f00); // 关闭所有段 if(digits[i] ! 10) { // 不显示前导零 GPIO_Write(GPIOC, SegmentCodes[digits[i]] | SegmentBit[i]); } Delay(1); // 短暂延时 } } void Delay(uint32_t nCount) { for(; nCount ! 0; nCount--); }4.3 主程序流程主程序的主要逻辑是不断读取ADC值并刷新显示int main(void) { RCC_Configuration(); GPIO_Configuration(); ADC_DMA_Configuration(); while(1) { DisplayValue(ADCConvertedValue); } }5. 仿真调试与常见问题解决完成代码编写后编译生成HEX文件并在Proteus中加载开始仿真。以下是可能遇到的问题及解决方案5.1 ADC无输出问题现象ADC始终读取到0或4095无法随电位器变化。解决方案检查PA1是否正确连接到电位器的中间引脚确保电位器两端分别接3.3V和GND在STM32属性中勾选VDDA/VSSA Supply选项确认ADC初始化代码正确特别是采样时间设置5.2 数码管显示异常现象数码管显示乱码或亮度不均。解决方法检查段码表是否正确匹配数码管类型共阴/共阳确认段选和位选信号连接正确调整动态扫描的延时时间通常1-5ms为宜添加段选消隐代码在切换位选前关闭所有段5.3 仿真速度慢现象仿真运行缓慢数码管闪烁明显。优化建议在Proteus的System→Set Animation Options中减少仿真精度简化动态扫描的延时函数关闭不必要的调试信息输出6. 完整源码与工程文件为方便读者复现本项目以下是完整的代码实现#include stm32f10x.h #define ADC1_DR_Address ((uint32_t)0x4001244C) __IO uint16_t ADCConvertedValue 0; // 数码管段码表 (共阴) const uint16_t SegmentCodes[] { 0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f }; // 数码管位选表 const uint16_t SegmentBit[] { 0x0e00, 0x0d00, 0x0b00, 0x0700 }; void RCC_Configuration(void); void GPIO_Configuration(void); void ADC_DMA_Configuration(void); void DisplayValue(uint16_t value); void Delay(uint32_t nCount); int main(void) { RCC_Configuration(); GPIO_Configuration(); ADC_DMA_Configuration(); while(1) { DisplayValue(ADCConvertedValue); } } void RCC_Configuration(void) { RCC_DeInit(); RCC_HSEConfig(RCC_HSE_ON); while(RCC_GetFlagStatus(RCC_FLAG_HSERDY) RESET); FLASH_SetLatency(FLASH_Latency_2); FLASH_PrefetchBufferCmd(ENABLE); RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9); RCC_PLLCmd(ENABLE); while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) RESET); RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); while(RCC_GetSYSCLKSource() ! 0x08); RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1 | RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOC, ENABLE); } void GPIO_Configuration(void) { GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Pin GPIO_Pin_1; GPIO_InitStructure.GPIO_Mode GPIO_Mode_AIN; GPIO_Init(GPIOA, GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin GPIO_Pin_All; GPIO_InitStructure.GPIO_Mode GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed GPIO_Speed_50MHz; GPIO_Init(GPIOC, GPIO_InitStructure); } void ADC_DMA_Configuration(void) { DMA_InitTypeDef DMA_InitStructure; ADC_InitTypeDef ADC_InitStructure; DMA_DeInit(DMA1_Channel1); DMA_InitStructure.DMA_PeripheralBaseAddr ADC1_DR_Address; DMA_InitStructure.DMA_MemoryBaseAddr (uint32_t)ADCConvertedValue; DMA_InitStructure.DMA_DIR DMA_DIR_PeripheralSRC; DMA_InitStructure.DMA_BufferSize 1; DMA_InitStructure.DMA_PeripheralInc DMA_PeripheralInc_Disable; DMA_InitStructure.DMA_MemoryInc DMA_MemoryInc_Disable; DMA_InitStructure.DMA_PeripheralDataSize DMA_PeripheralDataSize_HalfWord; DMA_InitStructure.DMA_MemoryDataSize DMA_MemoryDataSize_HalfWord; DMA_InitStructure.DMA_Mode DMA_Mode_Circular; DMA_InitStructure.DMA_Priority DMA_Priority_High; DMA_InitStructure.DMA_M2M DMA_M2M_Disable; DMA_Init(DMA1_Channel1, DMA_InitStructure); DMA_Cmd(DMA1_Channel1, ENABLE); ADC_InitStructure.ADC_Mode ADC_Mode_Independent; ADC_InitStructure.ADC_ScanConvMode DISABLE; ADC_InitStructure.ADC_ContinuousConvMode ENABLE; ADC_InitStructure.ADC_ExternalTrigConv ADC_ExternalTrigConv_None; ADC_InitStructure.ADC_DataAlign ADC_DataAlign_Right; ADC_InitStructure.ADC_NbrOfChannel 1; ADC_Init(ADC1, ADC_InitStructure); ADC_RegularChannelConfig(ADC1, ADC_Channel_1, 1, ADC_SampleTime_55Cycles5); ADC_DMACmd(ADC1, ENABLE); ADC_Cmd(ADC1, ENABLE); ADC_ResetCalibration(ADC1); while(ADC_GetResetCalibrationStatus(ADC1)); ADC_StartCalibration(ADC1); while(ADC_GetCalibrationStatus(ADC1)); ADC_SoftwareStartConvCmd(ADC1, ENABLE); } void DisplayValue(uint16_t value) { uint16_t digits[4]; uint16_t voltage (value * 3300) / 4095; digits[0] voltage / 1000; digits[1] (voltage % 1000) / 100; digits[2] (voltage % 100) / 10; digits[3] voltage % 10; if(digits[0] 0) { digits[0] 10; if(digits[1] 0) { digits[1] 10; if(digits[2] 0) { digits[2] 10; } } } for(int i 0; i 4; i) { GPIO_Write(GPIOC, 0x0f00); if(digits[i] ! 10) { GPIO_Write(GPIOC, SegmentCodes[digits[i]] | SegmentBit[i]); } Delay(1); } } void Delay(uint32_t nCount) { for(; nCount ! 0; nCount--); }在Proteus中加载编译生成的HEX文件后运行仿真并调节电位器可以看到数码管上实时显示对应的电压值0.000-3.300V。这个项目虽然简单但涵盖了STM32开发的几个关键知识点ADC采样、DMA传输、GPIO控制和数码管驱动是嵌入式入门学习的绝佳实践案例。

相关文章:

Proteus 8.13仿真STM32F103R6的ADC采样,数码管显示电压值完整流程(附源码)

Proteus 8.13仿真STM32F103R6的ADC采样与数码管显示实战指南 在嵌入式系统开发中,ADC(模数转换器)是最常用的外设之一。对于初学者而言,在没有硬件设备的情况下,通过仿真软件学习ADC的使用是快速入门的最佳选择。本文…...

超150位全球AI一线技术专家齐聚巴黎,这场大会到底聊了些什么?|GOSIM Paris 2026圆满收官

作者 | GOSIM出品 | CSDN(ID:CSDNnews)随着大模型进入工程化阶段,行业关注点正在从“模型能力突破”转向“如何稳定、低成本、长期运行”。与此同时,以 OpenClaw 为代表的智能体框架持续升温,AI 自动执行任…...

告别轮询与中断:在STM32F051上实现TIM1触发+DMA搬运ADC数据的完整流程

STM32F051高效数据采集实战:TIM1触发DMA搬运ADC数据的工程优化指南 在嵌入式系统设计中,数据采集的效率和实时性往往是决定系统性能的关键因素。传统采用轮询或中断方式读取ADC数据的方法,不仅消耗大量CPU资源,还会引入不可预测的…...

RoboMaster备赛避坑指南:为什么你的裁判系统服务器总连不上?从网络到MySQL的常见故障排查

RoboMaster裁判系统服务器连接故障全解析:从网络配置到MySQL优化的实战排错手册 当比赛倒计时的滴答声越来越清晰,裁判系统服务器却突然"罢工"——这可能是每个RoboMaster参赛队伍最不愿面对的噩梦。不同于常规的搭建教程,本文将直…...

光学MEMS麦克风:突破电容式瓶颈,实现80dB SNR与146dB AOP的音频革命

1. 从电容到光学:为什么MEMS麦克风需要一场革命?如果你拆开过最近五年的任何一部主流智能手机,里面的麦克风十有八九是电容式MEMS(微机电系统)麦克风。这种小东西几乎定义了现代消费电子音频采集的标准:体积…...

AI抠图哪个软件好用?2026年最全工具对比与实测分享

最近在做电商产品图处理,我把市面上主流的AI抠图工具都试了一遍,今天就来和大家分享一下我的真实使用体验。说实话,找到一个好用的抠图工具能省下不少时间,尤其是当你需要批量处理证件照、商品图或者去背景的时候。为什么AI抠图成…...

STM32CubeMX + HAL库实战:用TIM2定时器中断实现LED精准闪烁(附完整代码)

STM32CubeMX HAL库实战:用TIM2定时器中断实现LED精准闪烁(附完整代码) 对于嵌入式开发者而言,定时器中断是控制外设时序的核心技术之一。想象一下这样的场景:你正在开发一个智能家居控制器,需要精确控制LE…...

MATLAB批量处理图片保存:用exportgraphics和for循环自动导出多张Figure到不同文件夹

MATLAB批量图片处理:用exportgraphics实现智能归档与高效导出 当你在MATLAB中处理时间序列分析、参数扫描或机器学习模型验证时,往往需要生成数十甚至上百张结果图表。手动一张张保存不仅效率低下,还容易出错。我曾在一个气候数据分析项目中&…...

ML:主成分分析(PCA)的基本原理与实现

在机器学习中,并不是所有任务都直接以“预测标签”或“预测数值”为目标。有时,我们面对的数据本身就具有较高维度:特征很多、变量之间相关性较强、可视化困难、计算开销偏大。这时,一个自然的问题就会出现:能否在尽量…...

永久保存微信聊天记录的完整指南:WeChatMsg让珍贵对话永不丢失

永久保存微信聊天记录的完整指南:WeChatMsg让珍贵对话永不丢失 【免费下载链接】WeChatMsg 提取微信聊天记录,将其导出成HTML、Word、CSV文档永久保存,对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub_Trending/…...

立创EDA专业版 vs 标准版:焊接辅助工具在团队协作与生产流程中能发挥多大作用?

立创EDA专业版 vs 标准版:焊接辅助工具在团队协作与生产流程中的实战价值 当硬件团队从原型设计转向小批量生产时,最常遇到的瓶颈往往不是技术实现,而是设计部门与生产部门之间的协作断层。一位资深硬件创业者曾分享过这样的经历:…...

通过curl命令直接测试Taotoken聊天补全接口的详细步骤

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 通过curl命令直接测试Taotoken聊天补全接口的详细步骤 在开发或调试大模型应用时,有时我们希望在无需引入完整SDK的轻量…...

Open Harness:基于Docker沙箱为AI编码代理打造安全自动化平台

1. 项目概述:为AI编码代理打造一个隔离的“游乐场”如果你和我一样,经常让Claude Code、Codex这类AI编码助手帮你写代码、调试项目,那你肯定遇到过这样的烦恼:这些AI工具虽然聪明,但它们在执行命令、安装依赖、甚至修改…...

如何解锁MacBook Touch Bar在Windows下的完整功能:终极跨系统驱动方案

如何解锁MacBook Touch Bar在Windows下的完整功能:终极跨系统驱动方案 【免费下载链接】DFRDisplayKm Windows infrastructure support for Apple DFR (Touch Bar) 项目地址: https://gitcode.com/gh_mirrors/df/DFRDisplayKm MacBook Touch Bar Windows驱动…...

电源控制模式选择:电压模式与电流模式的原理、差异与应用场景

1. 电源控制方法的核心抉择:电压模式与电流模式在电源设计的江湖里,选对控制方法,往往意味着项目成功了一半。这就像给一辆车选择变速箱,手动挡(电压模式)和自动挡(电流模式)各有拥趸…...

3D模型体积计算终极指南:掌握STL文件分析与材料估算

3D模型体积计算终极指南:掌握STL文件分析与材料估算 【免费下载链接】STL-Volume-Model-Calculator STL Volume Model Calculator Python 项目地址: https://gitcode.com/gh_mirrors/st/STL-Volume-Model-Calculator 在3D打印和数字制造领域,准确…...

桌面运维面试常见问题及标准答案(完整版)

一、基础认知类1. 你理解的桌面运维是做什么的?答:个人认为是负责公司员工电脑、笔记本、打印机、显示器、外设、办公软件、域账号、网络桌面端的日常维护;处理系统故障、软件安装、病毒查杀、权限开通、资产盘点、工位布线、会议设备调试&am…...

大麦网抢票终极解决方案:Python自动化脚本告别抢票焦虑

大麦网抢票终极解决方案:Python自动化脚本告别抢票焦虑 【免费下载链接】DamaiHelper 大麦网演唱会演出抢票脚本。 项目地址: https://gitcode.com/gh_mirrors/dama/DamaiHelper 还在为抢不到心仪演唱会门票而烦恼吗?每次热门演出开票时&#xff…...

科技巨头平台战争:生态战略、技术驱动与从业者实战指南

1. 平台战争的核心逻辑:从“卖产品”到“圈用户” 在科技行业摸爬滚打了十几年,我亲眼见证了竞争焦点的几次重大转移。早期大家拼的是硬件参数和软件功能,后来开始讲“用户体验”,而最近这十年,整个战场的核心词汇变成…...

海南能量阀厂家

在当今流体控制领域,能量阀的重要性日益凸显。海南地区也有不少能量阀厂家崭露头角,为众多项目提供着关键的设备支持。今天,我们也会着重提到在行业中表现出色的天津水阀机械有限公司,它的产品同样具备诸多优势,值得关…...

别再折腾源码编译了!CentOS/OpenEuler下用yum快速搞定poppler依赖,5分钟让pdf2image跑起来

5分钟极速部署:CentOS/OpenEuler系统用yum安装poppler全攻略 每次看到技术文档里"请先编译安装以下20个依赖库"的提示,我的血压就会和进度条一起飙升。上周为了在客户的生产环境部署一个PDF解析服务,我花了整整6小时在源码编译的泥…...

如何零基础下载B站4K大会员视频:bilibili-downloader终极指南

如何零基础下载B站4K大会员视频:bilibili-downloader终极指南 【免费下载链接】bilibili-downloader B站视频下载,支持下载大会员清晰度4K,持续更新中 项目地址: https://gitcode.com/gh_mirrors/bil/bilibili-downloader 还在为B站精…...

终极指南:TikTokenizer - 实战OpenAI分词器在线调试平台

终极指南:TikTokenizer - 实战OpenAI分词器在线调试平台 【免费下载链接】tiktokenizer Online playground for OpenAPI tokenizers 项目地址: https://gitcode.com/gh_mirrors/ti/tiktokenizer 🚀 高效、准确、可视化 - 深度解析OpenAI tiktoken…...

AirPodsDesktop:Windows和Linux用户的终极AirPods体验解决方案

AirPodsDesktop:Windows和Linux用户的终极AirPods体验解决方案 【免费下载链接】AirPodsDesktop ☄️ AirPods desktop user experience enhancement program, for Windows and Linux (WIP) 项目地址: https://gitcode.com/gh_mirrors/ai/AirPodsDesktop 还在…...

ComfyUI ControlNet预处理器:5分钟掌握AI图像精准控制技术

ComfyUI ControlNet预处理器:5分钟掌握AI图像精准控制技术 【免费下载链接】comfyui_controlnet_aux ComfyUIs ControlNet Auxiliary Preprocessors 项目地址: https://gitcode.com/gh_mirrors/co/comfyui_controlnet_aux 想要让AI图像生成完全按照你的想法来…...

7步掌握Adafruit_NeoPixel:从零到精通的LED灯带控制终极指南

7步掌握Adafruit_NeoPixel:从零到精通的LED灯带控制终极指南 【免费下载链接】Adafruit_NeoPixel Arduino library for controlling single-wire LED pixels (NeoPixel, WS2812, etc.) 项目地址: https://gitcode.com/gh_mirrors/ad/Adafruit_NeoPixel 你是否…...

告别激活烦恼:KMS_VL_ALL_AIO智能激活脚本让Windows和Office永不过期

告别激活烦恼:KMS_VL_ALL_AIO智能激活脚本让Windows和Office永不过期 【免费下载链接】KMS_VL_ALL_AIO Smart Activation Script 项目地址: https://gitcode.com/gh_mirrors/km/KMS_VL_ALL_AIO 你是否曾因Windows系统突然弹出激活提示而中断重要工作&#xf…...

星露谷物语模组开发终极指南:SMAPI完整使用教程

星露谷物语模组开发终极指南:SMAPI完整使用教程 【免费下载链接】SMAPI The modding API for Stardew Valley. 项目地址: https://gitcode.com/gh_mirrors/smap/SMAPI SMAPI(Stardew Valley Modding API)是星露谷物语模组生态的核心引…...

Day9_开源鸿蒙_Flutter_for_OpenHarmony_logger实战_本地日志与异常捕获

开源鸿蒙 Flutter for OpenHarmony:logger 实战(本地日志 全局异常捕获) 欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.csdn.net 离线笔记做到 Day8,功能看起来已经很“像样”了,但只要…...

【OpenClaw全面解析:从零到精通】第41篇:OpenClaw + Home Assistant 智能家居实战:飞书一句话控制全屋设备,打造真正的 AI 管家

上一篇【第40篇】OpenClaw IDE集成深度指南——从VSCode插件到ACP协议让AI Agent驱动编辑器实战 下一篇【第42篇】OpenClaw RAG知识库智能客服实战:用向量检索打造"懂业务"的AI助手(明日更新,敬请期待) 摘要 OpenClaw …...