Intel Edison LCD屏光标控制:从HD44780原理到动态显示实战
1. 项目概述点亮那块尘封的Intel Edison LCD屏几年前当Intel Edison这块集成了Atom处理器和Quark微控制器的超小型计算模块发布时着实掀起了一阵创客和物联网开发的热潮。它麻雀虽小五脏俱全尤其是官方配套的那块搭载了JHD1313M1驱动芯片的16x2字符LCD扩展板更是成为了无数入门项目的标配显示器。然而随着Edison项目逐渐淡出主流视野相关的技术资料特别是详尽的中文实操指南变得零散且难以查找。很多开发者翻出吃灰的Edison和这块LCD屏面对官方晦涩的英文示例和有限的引脚说明往往在“如何精确控制光标位置显示特定信息”这一步就卡住了。“Set Cursor”设置光标这个操作看似只是LCD编程中最基础的API调用之一却是实现动态、结构化信息显示的核心。它决定了你的温湿度数据是整齐地刷新在第二行还是杂乱地叠加在第一行也决定了你的菜单选项光标能否在正确的位置闪烁。本项目旨在彻底拆解并汉化Intel Edison官方LCD示例中关于光标控制的精髓部分不仅提供直译的代码更深入剖析其底层硬件通信原理、软件库结构以及在实际应用中的各种“坑”与技巧。无论你是想用Edison复活一个老项目还是单纯学习字符型LCD的驱动原理这篇聚焦于“Set Cursor”的深度解析都能为你提供从理论到实践的一条龙指南。2. 核心原理与硬件接口深度解析2.1 JHD1313M1驱动芯片与HD44780兼容性探秘Intel Edison官方LCD扩展板使用的JHD1313M1控制器本质上与业界标准的HD44780兼容。理解这一点是进行一切高级操作包括光标控制的基石。HD44780是一种非常经典的字符点阵液晶显示驱动芯片它内部集成了显示RAMDDRAM、字符发生器ROMCGROM以及光标/闪烁控制逻辑。当你调用setCursor(column, row)函数时你实际上是在命令HD44780兼容控制器将其内部的DDRAM地址指针移动到指定的位置。DDRAM就像一张网格每个格子对应屏幕上的一个字符位。对于16x2的屏幕其地址映射通常如下第一行Row 0的地址从0x00到0x0F。第二行Row 1的地址从0x40到0x4F。setCursor函数的核心任务就是将这个行列坐标转换为具体的DDRAM地址并通过特定的指令发送给LCD控制器。例如setCursor(5, 1)意味着将光标移动到第二行行索引1的第6个字符位置列索引5对应的DDRAM地址计算为0x40 5 0x45。控制器收到该地址后后续任何写入的字符数据都将从这个位置开始填充。注意不同厂家、不同尺寸的LCD屏其第二行起始地址可能略有不同常见的有0x40、0x20或0x10。Edison官方板使用的JHD1313M1标准映射为0x40这也是upm库中lcd模块默认的设定。如果你使用其他兼容屏发现第二行显示错位可能需要查阅其数据手册确认地址偏移量。2.2 I2C转接与通信协议剖析Edison的LCD扩展板最巧妙的设计在于它通过一个I2C总线转接芯片通常是PCA9515或类似的I/O扩展器来驱动LCD。这意味着我们仅用Edison上的两根I2C信号线SDA和SCL就能控制原本需要7-10根IO口的LCD屏极大节省了宝贵的GPIO资源。整个通信流程分层如下应用层我们调用lcd.setCursor()函数。库函数层upm库中的lcd模块将光标位置转换为HD44780的“设置DDRAM地址”指令码。协议转换层库函数将HD44780指令码按照扩展板I2C转接芯片要求的格式进行封装。通常包括控制字节用于选择命令/数据模式和数据字节。物理传输层封装好的数据包通过Edison的I2C驱动以特定的时钟频率如100kHz在SDA和SCL线上串行传输。理解这个流程有助于调试。当你发现光标设置无效时可以逐层排查是应用层行列值传错了是库本身的行列映射不对还是底层的I2C通信失败了如地址错误、线路接触不良2.3upm库中lcd模块的架构浅析Intel为Edison及其兼容平台提供了upmUseful Packages Modules传感器库。其中的lcd模块具体到JHD1313M1是jhd1313m1类封装了所有底层操作。在查看其源码或文档时你会发现setCursor方法大致执行以下步骤边界检查确保传入的column和row值在屏幕物理尺寸范围内如0-15列0-1行。地址计算根据行号选择DDRAM基地址第一行0x00第二行0x40加上列偏移量。指令构造将DDRAM地址与HD44780的“设置DDRAM地址”指令码二进制为1xxxxxxx最高位为1低7位为地址进行或运算。发送指令通过内部方法将构造好的指令码以“命令”模式而非“数据”模式发送给I2C转接芯片。3. 软件环境搭建与基础代码解读3.1 开发环境准备与库安装虽然Edison原生支持Arduino IDE、Intel XDK等多种开发环境但对于底层硬件操作和upm库的完整使用在Edison的Linux系统如基于Yocto的镜像上直接进行C/C或Python开发是功能最全的方式。步骤一系统连接与更新首先通过USB或Wi-Fi将Edison连接到你的开发主机并使用SSH登录如ssh rootedison.local。确保系统包管理器已更新opkg update步骤二安装必备开发工具与库对于C/C开发需要安装编译器、upm库及其开发文件opkg install packagegroup-core-buildessential opkg install upm opkg install upm-dev # 包含头文件便于查看源码和编译对于Python开发upm的Python绑定通常已预装或可通过pip安装pip install upm-py # 如果未预装步骤三验证I2C总线LCD扩展板通常连接在I2C-6总线上对应Edison的特定引脚复用。检查总线是否启用并识别设备i2cdetect -y -r 6你应该能看到一个设备地址例如0x3E用于LCD控制0x62可能用于背光RGB控制。如果看不到可能需要通过mraa库的GPIO配置或修改设备树来确保I2C-6总线已激活。3.2 官方样例代码骨架拆解Intel官方提供的示例例如在/usr/share/upm/examples/c/jhd1313m1目录下通常包含一个基础演示。我们聚焦于与光标设置相关的核心部分并将其转化为带详细注释的中文版。C语言版本核心代码分析#include stdio.h #include stdlib.h #include string.h #include unistd.h #include jhd1313m1.h // 包含JHD1313M1驱动头文件 int main() { // 1. 初始化LCD参数I2C总线号、LCD地址、RGB背光地址 jhd1313m1_context lcd jhd1313m1_init(6, 0x3E, 0x62); if (!lcd) { printf(jhd1313m1_init() failed\n); return 1; } // 2. 清屏这是一个好习惯确保从干净状态开始 jhd1313m1_clear(lcd); // 3. 设置光标位置第一行第五列索引从0开始 // 关键函数调用jhd1313m1_set_cursor(lcd, column, row) jhd1313m1_set_cursor(lcd, 4, 0); // 注意列4对应屏幕上第5个位置 // 4. 在光标位置写入字符串 jhd1313m1_write(lcd, Hello, 5); // 5. 将光标移动到第二行第一列 jhd1313m1_set_cursor(lcd, 0, 1); jhd1313m1_write(lcd, World!, 6); printf(LCD display set. Press Enter to exit.\n); getchar(); // 6. 关闭设备释放资源虽简单程序可不做但养成好习惯 jhd1313m1_close(lcd); return 0; }Python版本核心代码分析import time import pyupm_jhd1313m1 as lcd # 导入upm库中的LCD模块 # 1. 初始化LCD对象 myLcd lcd.Jhd1313m1(6, 0x3E, 0x62) # 2. 清屏 myLcd.clear() # 3. 设置光标并写入 - 关键操作演示 # 光标定位到第一行第0列 myLcd.setCursor(0, 0) myLcd.write(Intel Edison) # 等待一秒观察显示 time.sleep(1) # 4. 动态改变光标位置移动到第二行居中显示 # 假设我们要显示“LCD Test”字符串长度8屏幕宽度16居中计算起始列(16-8)/2 4 myLcd.setCursor(4, 1) # 第二行索引为1 myLcd.write(LCD Test) # 5. 演示光标移动效果让一个‘’符号在第二行移动 for i in range(16): myLcd.setCursor(i, 1) myLcd.write() time.sleep(0.1) myLcd.setCursor(i, 1) myLcd.write( ) # 写入空格擦除上一个‘’ print(演示结束。) # Python对象在生命周期结束后会自动清理无需显式close3.3 编译与运行实操对于C程序假设你将代码保存为lcd_cursor.cgcc -o lcd_cursor lcd_cursor.c -lupm-jhd1313m1 -lmraa ./lcd_cursor对于Python程序保存为lcd_cursor.py后直接运行python lcd_cursor.py实操心得在Edison上直接编译C代码时务必确保链接了正确的库-lupm-jhd1313m1和底层IO库-lmraa。如果遇到“undefined reference”错误通常是链接顺序或库名问题。一个技巧是使用pkg-config来获取准确的编译参数pkg-config --cflags --libs upm-jhd1313m1。4.setCursor高级应用与动态显示技巧掌握了基础的光标设置就能实现丰富的显示效果。下面介绍几个超越官方简单示例的实用场景。4.1 实现滚动字幕与跑马灯效果单纯的setCursor是静态的结合循环和延时就能创造动态效果。核心思路是不断计算新的显示起始位置清空行或部分区域重新设置光标并写入字符串。实现向右滚动的跑马灯以第二行为例import time text Hello from Edison! screen_width 16 row_index 1 while True: for offset in range(len(text)): # 计算本次要显示的片段 display_segment (text[offset:] text[:offset])[:screen_width] # 清除第二行 myLcd.setCursor(0, row_index) myLcd.write( * screen_width) # 用空格清空 # 重新设置光标并写入新片段 myLcd.setCursor(0, row_index) myLcd.write(display_segment) time.sleep(0.3) # 控制滚动速度这个例子中我们通过切片操作生成不断偏移的字符串片段然后利用setCursor始终从行首开始写入实现了平滑的滚动效果。关键在于每次循环都要先清空该行否则新旧文本会叠加。4.2 构建简易的交互式菜单系统在资源受限的嵌入式设备上字符LCD是构建简单用户界面的绝佳选择。结合一个按钮或旋转编码器和setCursor可以制作一个菜单。思路定义一个菜单项列表如[1. Read Temp, 2. Set Time, 3. Exit]。用一个变量selected_index记录当前选中的菜单项索引0, 1, 2。在LCD上显示菜单通常第一行显示标题第二行显示当前选中的菜单项。通过按钮事件改变selected_index并重新渲染第二行。为了高亮选中项可以在其前面用setCursor添加一个特殊字符如“”。代码片段示例menu_items [1. Read Temp, 2. Set Time, 3. Exit] current_selection 0 def display_menu(): myLcd.clear() myLcd.setCursor(0, 0) myLcd.write( Main Menu ) myLcd.setCursor(0, 1) # 在选中项前添加“”光标 myLcd.write( menu_items[current_selection]) # 假设有一个函数check_button()检测到“下”按钮被按下 if check_button() DOWN: current_selection (current_selection 1) % len(menu_items) display_menu() # 刷新显示这种方法避免了频繁清屏带来的闪烁感只更新需要变化的部分第二行用户体验更好。4.3 格式化输出数字与传感器数据直接向LCD写入数字需要转换成字符串。更复杂的是我们常常需要格式化输出如固定小数位数、对齐等。示例显示温度浮点数和湿度整数并保持格式对齐temperature 23.456 humidity 65 # 方法1使用字符串格式化然后设置光标分行显示 temp_str Temp:{:5.2f}C.format(temperature) # 总宽5保留2位小数 hum_str Hum :{:3d}%.format(humidity) # 总宽3的整数 myLcd.clear() myLcd.setCursor(0, 0) myLcd.write(temp_str) myLcd.setCursor(0, 1) myLcd.write(hum_str) # 方法2更紧凑的单行显示如果数据短 # 计算起始位置使其居中或右对齐 combined {:.1f}C {:2d}%.format(temperature, humidity) start_col (16 - len(combined)) // 2 myLcd.clear() myLcd.setCursor(start_col, 0) myLcd.write(combined)这里使用了Python的format方法进行精确控制。在C语言中可以使用snprintf函数达到类似效果。关键在于提前计算好字符串长度以便通过setCursor确定合适的显示起始列实现左对齐、右对齐或居中对齐。5. 常见问题排查与性能优化实录在实际操作中你几乎一定会遇到下面这些问题。这里记录了我的排查过程和解决方案。5.1 显示乱码、光标位置错乱这是最常见的问题其根源多种多样。排查表现象可能原因解决方案屏幕显示黑色方块或乱码1. 未正确初始化清屏。2. 写入数据前未正确设置光标。3. I2C地址错误。1. 确保在setCursor和write前调用了clear()。2. 检查setCursor的行列参数是否在范围内行0-1列0-15。3. 使用i2cdetect确认LCD的I2C地址通常是0x3E并在初始化时传入正确值。第二行文字显示在第一行末尾第二行DDRAM起始地址设置错误。确认使用的LCD屏第二行地址是否为0x40。JHD1313M1是。有些库或屏可能需要手动设置但upm库已处理。光标不出现或不在设定位置闪烁1. 光标显示功能被关闭。2.setCursor后立即被其他操作覆盖。1. HD44780有指令控制光标开关显示、闪烁。upm库初始化后默认可能关闭光标。查找库中是否有cursorOn()或cursorBlinkOn()函数并调用。2. 确保setCursor和后续write操作之间没有其他清屏或重置操作。只有背光亮无任何显示1. 对比度电压不合适。2. 电源问题。3. 初始化序列未成功执行。1. LCD扩展板通常有电位器调节对比度VO引脚缓慢调节直到字符显现。2. 确保Edison和扩展板供电充足稳定。3. 检查初始化代码是否执行I2C通信是否正常用逻辑分析仪或i2cget工具辅助。避坑技巧在程序开头增加一个较长的延时如time.sleep(2)或sleep(2)。LCD模块上电后需要一段时间几十到几百毫秒进行内部复位。如果MCU立即发送初始化指令可能会失败。先让系统稳定再操作能避免很多玄学问题。5.2 I2C通信失败与地址冲突Edison的I2C总线可能连接多个设备。LCD扩展板上的I2C转接芯片可能有多个地址控制口和背光口。诊断步骤确认设备地址运行i2cdetect -y -r 6。你应该至少看到两个地址0x3E或0x27等用于LCD控制和0x62用于RGB背光。如果看不到检查硬件连接、上拉电阻以及Edison的I2C-6总线是否在内核中启用。检查权限在Linux下访问I2C设备可能需要root权限或用户加入i2c组。确保你以root用户运行程序或已将当前用户加入i2c组usermod -aG i2c your_username然后重新登录。避免总线冲突如果总线上有其他设备如传感器确保它们的I2C地址不与LCD冲突。upm库在初始化LCD时不应干扰其他设备但劣质代码或同时访问可能导致通信错误。5.3 刷新延迟与显示闪烁优化当需要频繁更新LCD内容如实时传感器数据显示时直接使用clear()setCursor()write()的组合会导致严重的屏幕闪烁。优化策略局部更新只更新屏幕上发生变化的部分而不是清空整个屏幕。# 低效方式每次刷新都清屏 def update_display_bad(temp, hum): myLcd.clear() myLcd.setCursor(0,0); myLcd.write(fT:{temp}C) myLcd.setCursor(0,1); myLcd.write(fH:{hum}%) # 高效方式局部更新假设温度湿度数字部分在固定位置 last_temp last_hum def update_display_good(temp, hum): global last_temp, last_hum # 只在温度变化时更新温度区域例如从第2列开始占5个字符 if str(temp) ! last_temp: myLcd.setCursor(2, 0) myLcd.write(f{temp:4.1f}) # 覆盖固定宽度区域 last_temp str(temp) # 只在湿度变化时更新湿度区域 if str(hum) ! last_hum: myLcd.setCursor(2, 1) myLcd.write(f{hum:3d} ) # 覆盖固定宽度区域加空格清除残留 last_hum str(hum)这种方法极大地减少了不必要的清屏和全屏重绘操作视觉上几乎无闪烁感觉更流畅。5.4 自定义字符创建与使用HD44780控制器允许用户定义最多8个5x8像素的自定义字符CGRAM。这在显示特殊符号、简单图标或非英文字符时非常有用。流程简述设计位图将5x8的格子转化为字节数组每列一个字节通常只取低5位有效。加载到CGRAM使用特定指令在upm库中可能是createChar或类似函数将字节数组发送到控制器的一个CGRAM地址0-7。显示自定义字符在setCursor到目标位置后写入对应的CGRAM地址通常0-7即可显示自定义图形。Python示例创建一个摄氏度符号“℃”的简单版本# 定义摄氏度符号的位图 (5x8) degree_symbol [ 0b00110, 0b01001, 0b01001, 0b00110, 0b00000, 0b00000, 0b00000, 0b00000 ] # 加载到CGRAM位置0 myLcd.createChar(0, degree_symbol) # 显示 myLcd.setCursor(7, 0) # 假设在温度值后面显示 myLcd.write(chr(0)) # 写入CGRAM位置0对应的字符注意事项自定义字符会占用CGRAM空间且断电即丢失每次初始化LCD后都需要重新发送。同时频繁创建字符会影响性能建议在初始化阶段一次性完成。

相关新闻

桌面金属3D打印:从FDM到烧结的全流程解析与避坑指南

桌面金属3D打印:从FDM到烧结的全流程解析与避坑指南

1. 从“塑料玩具”到“金属零件”:桌面级金属3D打印的平民化革命如果你和我一样,是个喜欢在工作室里捣鼓各种原型和零件的爱好者,那你一定对3D打印不陌生。从PLA到ABS,再到尼龙、碳纤维复合材料,我们能用桌面级FDM打印…

2026/8/10 17:49:46 阅读更多 →
LangGraph实战:从零构建多智能体系统的图结构工作流

LangGraph实战:从零构建多智能体系统的图结构工作流

如果你正在为如何构建复杂的多智能体系统而头疼,觉得现有的 LangChain 框架在处理复杂工作流时力不从心,那么 LangGraph 的出现可能正是你需要的解决方案。与传统的线性链式调用不同,LangGraph 引入了图结构来编排智能体,让多角色…

2026/8/7 0:16:26 阅读更多 →
嵌入式离线语音识别实战:基于行空板K10的关键词识别与诗词检索系统

嵌入式离线语音识别实战:基于行空板K10的关键词识别与诗词检索系统

1. 项目概述:当古典诗词遇见现代语音交互最近在捣鼓行空板K10,一个想法突然冒了出来:能不能让这块小巧的开发板“听懂”人话,然后自动识别出你念的是哪首古诗?这个念头,就是“诗王小行”项目的起点。它本质…

2026/8/10 11:13:12 阅读更多 →

最新新闻

Spring AI 2.0.0 结构化输出:告别手写JSON解析,实现AI响应自动转换

Spring AI 2.0.0 结构化输出:告别手写JSON解析,实现AI响应自动转换

1. 项目概述:告别繁琐的JSON解析如果你是一名后端开发者,尤其是在处理AI大模型返回结果的场景里,肯定对下面这个场景不陌生:你调用了一个大模型的API,它返回了一大段看似结构化的JSON字符串,然后你开始埋头…

2026/8/12 22:27:56 阅读更多 →
Linux C语言开发入门:从环境搭建到多文件项目构建

Linux C语言开发入门:从环境搭建到多文件项目构建

1. 从零到一:为什么要在Linux上写C语言? 如果你刚接触编程,或者一直用着Windows上的Visual Studio这类集成开发环境(IDE),可能会觉得“在Linux上运行C程序”这事儿听起来有点“硬核”,甚至有点多…

2026/8/12 22:27:56 阅读更多 →
硬件开发必知:先仿真后上板,高效验证逻辑设计

硬件开发必知:先仿真后上板,高效验证逻辑设计

这次我们来看一个在硬件开发、嵌入式系统和数字电路设计领域被反复验证的工程实践原则:“先仿真,后上板”。这个原则的核心主张是,在将设计烧录到物理硬件(FPGA、ASIC、PCB)之前,必须通过仿真工具进行充分的…

2026/8/12 22:27:56 阅读更多 →
Unity游戏开发:基于三阶贝塞尔曲线实现角色丝滑路径移动

Unity游戏开发:基于三阶贝塞尔曲线实现角色丝滑路径移动

1. 项目概述:为什么游戏角色需要一条“丝滑”的路径?如果你做过游戏,尤其是带有自动寻路、过场动画或者让NPC按预定路线巡逻的功能,你大概率遇到过这样的问题:角色移动起来要么像机器人一样走直线,在拐角处…

2026/8/12 22:27:56 阅读更多 →
订单状态推断:从业务规则到机器学习的实战方案

订单状态推断:从业务规则到机器学习的实战方案

1. 面试场景还原与技术挑战拆解最近在一次技术面试中遇到一个很有意思的题目:"现有订单表缺少状态字段,如何通过现有数据推断出订单状态?"这个问题看似简单,却考察了数据建模、业务理解和算法设计的综合能力。在实际电商…

2026/8/12 22:27:56 阅读更多 →
3分钟掌握Edge-TTS:免费使用微软语音合成服务的终极指南

3分钟掌握Edge-TTS:免费使用微软语音合成服务的终极指南

3分钟掌握Edge-TTS:免费使用微软语音合成服务的终极指南 【免费下载链接】edge-tts Use Microsoft Edges online text-to-speech service from Python WITHOUT needing Microsoft Edge or Windows or an API key 项目地址: https://gitcode.com/GitHub_Trending/e…

2026/8/12 22:26:55 阅读更多 →

日新闻

Ubuntu 22.04安装与使用tree命令:高效管理Linux目录结构

Ubuntu 22.04安装与使用tree命令:高效管理Linux目录结构

1. 为什么需要一个“目录树”工具?在Linux世界里,尤其是Ubuntu这样的发行版,命令行是很多人的主战场。我们每天都要和文件、目录打交道。ls命令是查看目录内容的首选,它简洁、高效,能列出文件名、权限、大小等关键信息…

2026/8/12 9:33:34 阅读更多 →
博思AI智能体:意图识别、思考链与性能优化的工程实践

博思AI智能体:意图识别、思考链与性能优化的工程实践

在AI应用从“能用”走向“好用”的进程中,系统的响应速度、决策透明度与高并发稳定性是决定用户体验的关键。博思AI智能体近期完成了一次重要的专项优化,聚焦于意图识别、思考链展示与全链路压测三大核心领域,将系统从功能实现推向了工程卓越…

2026/8/12 9:33:34 阅读更多 →
子代理架构:AI智能体任务分解与协同执行的核心原理与实践

子代理架构:AI智能体任务分解与协同执行的核心原理与实践

1. 项目概述:为什么我们需要“子代理”?最近在折腾各种AI应用和自动化流程时,我越来越频繁地遇到一个瓶颈:单个AI智能体(Agent)的能力边界。无论是处理复杂的多步骤任务,还是需要同时调用多个专…

2026/8/12 9:33:34 阅读更多 →

周新闻

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁 【免费下载链接】baidupankey 在线查询网盘提取码(维护中 rm repo) 项目地址: https://gitcode.com/gh_mirrors/ba/baidupankey 你是否曾经在深夜寻找一份重要资料&#x…

2026/8/12 1:11:09 阅读更多 →
如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南 【免费下载链接】chinese_license_plate_generator 中国车牌生成器 项目地址: https://gitcode.com/gh_mirrors/ch/chinese_license_plate_generator 中国车牌生成器是一个基于Python的开源项目&#xff0c…

2026/8/12 1:11:09 阅读更多 →
收藏!小白程序员轻松入门大模型,从Harness工程开始实践

收藏!小白程序员轻松入门大模型,从Harness工程开始实践

文章强调学习大模型不应只关注模型本身,而应重视模型外的系统搭建,即Harness。提出AgentModelHarness的实用公式,详细介绍Harness的四个层次:持久化层、执行层、控制层和观察与验证层。文章还探讨了上下文工程、工具设计、AGENTS.…

2026/8/12 1:11:08 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/11 17:09:45 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/12 1:11:10 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/11 17:09:45 阅读更多 →