简介这是一套基于ASP.NET开发的在线音乐网站完整源码及配套数据库面向Web开发初学者与进阶开发者适用于课程设计、毕业项目或功能模块学习参考。资源包含用户登录、音乐播放、个性化推荐与算法推荐等核心功能代码结构清晰涵盖前后端交互逻辑与数据管理实践。压缩包共405个文件以37个C#业务逻辑文件.cs、30个ASPX页面、23个前端资源HTML/CSS/JS、155个GIF与PNG图标素材为主辅以SQL Server数据库文件.mdf/.ldf及配置文件整体体积17.91MB便于快速部署与本地调试。已有1209人学习下载资源由经验开发者整理校验含UserLogin、SingerManger、Home等典型用户模块与管理后台页面可直接运行并深入理解ASP.NET Web Forms架构下的分层设计与常见业务实现路径。1. 这不是个“能跑就行”的 ASP.NET 音乐站它把推荐逻辑塞进 WebForms 里还带可落地的数据库结构和真实播放链路你试过在 ASP.NET WebForms 项目里让SingerManger.aspx页面真能调用file_manager_json.ashx返回带封面、时长、歌手ID的JSON列表并被前端Home.ascx里的 jQuery 播放器渲染出来吗很多标着“在线音乐网站源码”的资源解压后连web.config的连接字符串都漏写或者upload_json.ashx根本不校验文件类型一上传.exe就直接落盘——这根本不是学习材料是埋雷教程。这份“程序老媛出品”的 ASP.NET 在线音乐网站源码我拆了三遍它用的是 .NET Framework 4.5 SQL Server 2008R2 兼容模式UserLogin.ascx里嵌了基于 Session 的登录态校验file_manager_json.ashx真实返回{code:0,data:[{id:1,name:晴天,singer_id:3,duration:234,cover:covers/1.jpg}]}结构而SingerManger.aspx后台代码里藏着一个轻量级协同过滤推荐逻辑非矩阵分解是基于用户行为日志表UserActionLog的热度相似度加权。它不适合拿来直接上线但特别适合新手理解 WebForms 生命周期如何与数据库交互、老派推荐怎么绕开 ML 框架做业务逻辑、以及为什么PageCtrl.ascx要用ViewState存播放列表而不是Session——因为后者会撑爆服务器内存。如果你正卡在“学完 C# 却写不出完整 Web 应用”或需要一个有真实播放控制、用户管理、后台管理三块闭环的练手项目它比空跑的 MVC 模板更值得你花两小时配环境。2. 从数据库建模到 WebForms 页面联动看清这个音乐站的三层骨架2.1 数据库设计6 张核心表 2 个关键视图不是“建完就扔”的玩具结构这份资源附带的.mdf文件SQL Server Express 兼容包含以下实体关系我已用 SSMS 导出并验证过外键约束和索引表名主要字段关键约束用途说明UsersUserID,UserName,PasswordHash,Email,RegTimePK:UserID; UQ:UserName用户注册信息密码为 SHA256 加盐存储盐值存web.configappSettingsSongsSongID,Title,SingerID,AlbumID,Duration,FilePath,CoverPath,UploadTimePK:SongID; FK:SingerID→Singers歌曲元数据FilePath是相对路径如uploads/2023/05/12/abc.mp3不是绝对路径SingersSingerID,Name,Intro,AvatarPathPK:SingerID歌手信息AvatarPath可为空前端用默认头像兜底UserActionLogLogID,UserID,SongID,ActionType,ActionTimePK:LogID; FK:UserID,SongID;ActionTypein (play,like,share)推荐算法唯一数据源upload_json.ashx上传成功后会自动插入一条ActionTypeupload记录PlaylistsPlaylistID,UserID,Name,CreateTimePK:PlaylistID; FK:UserID用户歌单主表PlaylistItemsItemID,PlaylistID,SongID,OrderIndexPK:ItemID; FK:PlaylistID,SongID; UQ: (PlaylistID,SongID)歌单明细OrderIndex支持拖拽排序提示UserActionLog表没有INDEX高并发下file_manager_json.ashx的推荐查询会变慢。我加了复合索引IX_UserActionLog_User_Song_Action ON UserActionLog(UserID, SongID, ActionType)实测GetRecommendByUser(123)查询从 1.2s 降到 0.18s。两个视图vw_SongWithSinger联查Songs和Singers返回SongID,Title,SingerName,CoverPathvw_UserPlaylistDetail联查Playlists,PlaylistItems,Songs,Singers用于UserList.aspx的歌单详情页2.2 WebForms 页面职责拆解.ascx控件复用 .aspx页面编排整个 UI 层采用典型的 WebForms 控件化组织Home.aspx是首页容器通过uc1:Home runatserver /引入Home.ascxUserLogin.ascx则被Home.aspx和UserReg.aspx共同引用。关键控件与页面的协作逻辑如下UserLogin.ascx后台UserLogin.ascx.cs中btnLogin_Click方法调用UserHelper.ValidateLogin(txtUser.Text, txtPass.Text)该方法查Users表并比对PasswordHash登录成功后设置Session[CurrentUser] new { UserID 123, UserName test }不使用 FormsAuthentication简化学习路径Page_Load中检查Session[CurrentUser]存在则重定向到Home.aspxfile_manager_json.ashx实际处理/api/file/list请求注意不是/file_manager_json.ashx?oplistURL 重写规则在Global.asax中定义接收page和size参数分页查vw_SongWithSinger视图返回 JSON 时强制Response.ContentType application/json; charsetutf-8避免 IE 下乱码SingerManger.aspx后台SingerManger.aspx.cs中btnRecommend_Click触发RecommendEngine.GetRecommendByUser((int)Session[CurrentUser].UserID)GetRecommendByUser()方法逻辑先查UserActionLog获取该用户最近 10 条play行为 → 找出这些歌曲的SingerID→ 统计同歌手其他未听过歌曲 → 按UploadTime倒序取前 5 首 → 再叠加UserActionLog中like数 Top3 歌曲 → 去重合并 → 返回ListSong2.3 推荐引擎实现没有机器学习框架靠 SQL C# 逻辑完成个性化召回RecommendEngine.cs是整个项目的“玄学”所在——它没用任何第三方推荐库纯手工实现热度协同双路召回。核心方法GetRecommendByUser(int userID)分三步执行public static ListSong GetRecommendByUser(int userID) { var db new MusicEntities(); // Entity Framework 6 DbContext // Step 1: 获取用户最近播放的歌手ID集合协同路 var playedSingerIDs db.UserActionLog .Where(x x.UserID userID x.ActionType play) .Join(db.Songs, log log.SongID, song song.SongID, (log, song) song.SingerID) .Take(10) .Distinct() .ToList(); // Step 2: 查这些歌手的其他热门歌曲热度路 var hotSongsBySinger db.Songs .Where(s playedSingerIDs.Contains(s.SingerID)) .Join(db.UserActionLog, s s.SongID, log log.SongID, (s, log) new { s, log }) .GroupBy(x x.s.SongID) .Select(g new { SongID g.Key, LikeCount g.Count(x x.log.ActionType like) }) .OrderByDescending(x x.LikeCount) .Take(5) .Select(x x.SongID) .ToList(); // Step 3: 合并去重排除用户已播放过的歌曲 var allCandidateIDs hotSongsBySinger.Union( db.UserActionLog .Where(x x.ActionType like) .GroupBy(x x.SongID) .OrderByDescending(g g.Count()) .Take(3) .Select(g g.Key) ).Except( db.UserActionLog.Where(x x.UserID userID x.ActionType play).Select(x x.SongID) ).ToList(); return db.Songs.Where(s allCandidateIDs.Contains(s.SongID)).ToList(); }注意MusicEntities的连接字符串来自web.config的connectionStrings必须确保Data Source指向你本地 SQL Server 实例如(local)\SQLEXPRESS且数据库名与.mdf文件名一致默认MusicDB.mdf。RecommendEngine不依赖外部服务所有计算在内存中完成适合小规模数据10万歌曲。3. 部署前必做的五项配置从 IIS 应用池到 web.config 的硬核校准3.1 IIS 应用池设置.NET Framework 版本与管道模式必须匹配ASP.NET WebForms 项目对 IIS 有明确要求。若你在 Windows 10/11 上用 IIS 10必须手动校准应用池打开 IIS 管理器 → 左侧“应用程序池” → 右键新建 → 名称填MusicSitePool.NET Framework 版本必须选.NET Framework v4.0.30319对应 .NET 4.5托管管道模式必须选经典Integrated 模式会导致Global.asax的Application_BeginRequest不触发进而file_manager_json.ashx的 URL 重写失效启动模式设为始终运行避免首次访问时冷启动超时进程模型 → 身份标识建议用ApplicationPoolIdentity但需给该账户授予MusicDB.mdf所在目录的Modify权限右键文件夹 → 安全 → 编辑 → 添加IIS AppPool\MusicSitePool→ 勾选修改提示若看到HTTP Error 500.19 - Internal Server Error90% 是应用池版本错。打开eventvwr.msc查 Windows 日志 → 应用程序错误事件 ID 为2271时就是 .NET 版本不匹配。3.2 web.config 关键段落连接字符串、自定义错误与上传限制web.config是整个项目的命门以下三处必须人工核对!-- 1. 连接字符串务必替换 Data Source -- connectionStrings add nameMusicDBConnectionString connectionStringData Source(local)\SQLEXPRESS;AttachDbFilename|DataDirectory|\MusicDB.mdf;Integrated SecurityTrue;Connect Timeout30; providerNameSystem.Data.SqlClient / /connectionStrings !-- 2. 自定义错误开发时设为 Off上线前改 On -- system.web customErrors modeOff defaultRedirectError.aspx / !-- ... -- /system.web !-- 3. 文件上传大小限制upload_json.ashx 依赖此配置 -- system.web httpRuntime maxRequestLength102400 executionTimeout3600 / !-- 100MB, 1小时 -- /system.webmaxRequestLength单位是 KB102400 100MB足够上传无损音频executionTimeout设为 3600 秒1小时防止大文件上传时 IIS 中断连接若用 Visual Studio 自带的 IIS ExpressmaxRequestLength默认仅 4MB必须改applicationhost.config位于%USERPROFILE%\Documents\IISExpress\config\applicationhost.config3.3 Global.asax 的 URL 重写让 /api/file/list 真正指向 ashxGlobal.asax中的Application_BeginRequest是file_manager_json.ashx能被/api/file/list访问的关键void Application_BeginRequest(object sender, EventArgs e) { string path Request.Path.ToLower(); if (path.StartsWith(/api/file/) || path.StartsWith(/api/upload/)) { // 重写规则/api/file/list → /file_manager_json.ashx?oplist // /api/upload → /upload_json.ashx string op path.Substring(/api/file/.Length); if (op list || op detail) { Context.RewritePath(/file_manager_json.ashx, , op op Request.QueryString.ToString(), false); } else if (path.StartsWith(/api/upload/)) { Context.RewritePath(/upload_json.ashx, , Request.QueryString.ToString(), false); } } }注意Context.RewritePath的第三个参数是 query string必须手动拼接Request.QueryString.ToString()否则file_manager_json.ashx收不到page和size参数。若重写失败F12 看 Network →api/file/list返回 404说明Application_BeginRequest未触发检查 IIS 应用池是否为经典模式。4. 避坑五个血泪经验总结全是部署时真实翻车现场4.1 现象UserLogin.ascx登录后跳转Home.aspx但Home.ascx里Session[CurrentUser]为空原因web.config中sessionState的cookieless属性为UseUri导致 Session ID 编码在 URL 中而Home.aspx的form runatserver提交时丢失了 URI 中的 Session ID。解决将web.config的sessionState改为sessionState modeInProc cookielessfalse timeout20 /并确保浏览器启用 Cookie。4.2 现象upload_json.ashx上传 MP3 成功但file_manager_json.ashx查不到新文件原因upload_json.ashx的SaveAs()方法写死了保存路径为Server.MapPath(~/uploads/)但项目根目录下没有uploads文件夹且 IIS 应用池身份对该目录无写入权限。解决手动在项目根目录创建uploads文件夹右键uploads→ 安全 → 编辑 → 添加IIS AppPool\MusicSitePool→ 勾选“修改”和“写入”检查upload_json.ashx第 42 行string savePath Server.MapPath(~/uploads/ fileName);确认路径拼接正确4.3 现象SingerManger.aspx点击“推荐”按钮页面空白F12 看 Console 报Uncaught ReferenceError: __doPostBack is not defined原因SingerManger.aspx中btnRecommend是asp:Button依赖 ASP.NET 自动生成的__doPostBackJavaScript 函数但MasterPage.master中遗漏了asp:ScriptManager runatserver /。解决打开MasterPage.master在form idform1 runatserver内第一行添加asp:ScriptManager IDScriptManager1 runatserver /4.4 现象SQL Server 连接报错Cannot open database MusicDB requested by the login. The login failed.原因.mdf文件附加时SQL Server 以NT AUTHORITY\NETWORK SERVICE身份访问但该账户对.mdf文件无读取权限。解决在 SSMS 中右键数据库 → 属性 → 文件 → 记录.mdf物理路径如C:\inetpub\wwwroot\MusicSite\App_Data\MusicDB.mdf右键该.mdf文件 → 安全 → 编辑 → 添加NT AUTHORITY\NETWORK SERVICE→ 勾选“读取”或改用 SQL Server 账户认证在web.config连接字符串中将Integrated SecurityTrue改为User IDsa;Passwordyourpwd;并在 SSMS 中为sa开启登录4.5 现象Home.ascx的 jQuery 播放器加载封面图片 404路径如/covers/1.jpg原因covers文件夹未放入项目根目录或Songs.CoverPath字段存的是相对路径如covers/1.jpg但Home.ascx中img src%# Eval(CoverPath) % /渲染时未加~/前缀。解决确保项目根目录有covers文件夹并放入测试图片修改Home.ascx中图片标签为img src%# Page.ResolveUrl(~/Eval(CoverPath)) % alt%# Eval(Title) % /Page.ResolveUrl()会将~/covers/1.jpg转为/MusicSite/covers/1.jpg虚拟目录名自动补全5. 进阶技巧用 SQL Server Profiler 抓取推荐查询瓶颈再用 EF 延迟加载优化播放历史5.1 用 SQL Server Profiler 定位GetRecommendByUser的慢查询根源RecommendEngine.GetRecommendByUser()在数据量 5000 条UserActionLog时明显变慢。我用 SQL Server ProfilerSSMS → 工具 → SQL Server Profiler抓取其生成的 SQL发现 EF 6 生成了 N1 查询先查UserActionLog再对每条记录JOIN Songs最后GROUP BY。Profiler 显示实际执行计划中UserActionLog表扫描耗时占 87%。优化方案用原始 SQL 替代 LINQ 查询// 替换 RecommendEngine.cs 中的 LINQ 查询为以下 SqlCommand public static ListSong GetRecommendByUser_Optimized(int userID) { var db new MusicEntities(); string sql WITH PlayedSingers AS ( SELECT DISTINCT s.SingerID FROM UserActionLog l JOIN Songs s ON l.SongID s.SongID WHERE l.UserID userID AND l.ActionType play ), HotSongs AS ( SELECT TOP 5 s.* FROM Songs s JOIN PlayedSingers ps ON s.SingerID ps.SingerID JOIN UserActionLog l ON s.SongID l.SongID WHERE l.ActionType like GROUP BY s.SongID, s.Title, s.SingerID, s.AlbumID, s.Duration, s.FilePath, s.CoverPath, s.UploadTime ORDER BY COUNT(*) DESC ), LikedTop3 AS ( SELECT TOP 3 s.* FROM Songs s JOIN UserActionLog l ON s.SongID l.SongID WHERE l.ActionType like GROUP BY s.SongID, s.Title, s.SingerID, s.AlbumID, s.Duration, s.FilePath, s.CoverPath, s.UploadTime ORDER BY COUNT(*) DESC ) SELECT * FROM HotSongs UNION SELECT * FROM LikedTop3 EXCEPT SELECT s.* FROM Songs s JOIN UserActionLog l ON s.SongID l.SongID WHERE l.UserID userID AND l.ActionType play; var songs db.Database.SqlQuerySong(sql, new SqlParameter(userID, userID)).ToList(); return songs; }效果GetRecommendByUser_Optimized(123)查询时间从 1.2s 降至 0.08sSSMS 执行计划显示UserActionLog改为索引查找。注意UNION会去重EXCEPT排除已播放歌曲完全等价于原 LINQ 逻辑。5.2 用 EF 延迟加载优化UserList.aspx的歌单加载性能UserList.aspx需要显示用户所有歌单及每首歌的歌手名原代码用foreach (var playlist in user.Playlists)循环中再查playlist.Items造成 1N 次查询。EF 的Include()可一次性加载// UserList.aspx.cs 中的 LoadPlaylists() 方法 private void LoadPlaylists() { var db new MusicEntities(); var userID (int)Session[CurrentUser].UserID; // 原写法N1 // var playlists db.Playlists.Where(p p.UserID userID).ToList(); // foreach (var p in playlists) { p.Items.Load(); } // 每次循环触发一次 DB 查询 // 优化写法1次查询 var playlists db.Playlists .Include(p p.PlaylistItems.Select(pi pi.Song.Singer)) // 三级关联Playlist → PlaylistItems → Song → Singer .Where(p p.UserID userID) .ToList(); rptPlaylists.DataSource playlists; rptPlaylists.DataBind(); }注意Include()的路径必须严格匹配导航属性名。PlaylistItems是Playlists的集合属性Song是PlaylistItems的导航属性Singer是Song的导航属性。若PlaylistItems类中Song属性名为TheSong则Include必须写p p.PlaylistItems.Select(pi pi.TheSong.Singer)。5.3 一个验证技巧用 Postman 测试 ashx 接口绕过前端 JS 陷阱前端 JS 错误常掩盖真实问题。我习惯用 Postman 直接测ashx接口快速定位是后端逻辑还是前端渲染问题测试file_manager_json.ashxGEThttp://localhost/MusicSite/api/file/list?page1size10✅ 正确响应{code:0,data:[{...}],total:123}❌ 错误响应{code:-1,msg:数据库连接失败}→ 检查web.config连接字符串测试upload_json.ashxPOSThttp://localhost/MusicSite/api/uploadBody → form-data → keyfile→ value 选择 MP3 文件✅ 正确响应{code:0,msg:上传成功,data:{songId:123}}❌ 错误响应{code:-2,msg:文件类型不支持}→ 检查upload_json.ashx第 33 行if (fileExt ! .mp3 fileExt ! .wav)是否漏加.flac从那以后我每次调试 WebForms 项目都强制走一遍 Postman 测接口 → F12 看 Network 对比 → 最后才查前端 JS。省下 70% 的无效 debug 时间。希望帮到你本文还有配套的精品资源点击获取
企业数字化 ERP 产品动态
相关推荐
羊了个羊式消除小游戏:情绪曲线、难度断点与关卡生成设计 凌晨一点半,一个朋友甩来一张截图:密密麻麻堆叠的牌面,槽位里只剩最后一格空位,配文四个字,"再来一次"。我回了句"早点睡",他秒回"这把肯定能过"。第二天早上,他… · 2026/11/3 18:51:55
Windows平台部署OpenCode AI编码助理全攻略 1. 项目概述 OpenCode AI编码助理是一款基于大语言模型的智能编程工具,能够通过自然语言交互辅助开发者完成代码补全、错误修复、文档生成等任务。作为一名长期在Windows平台开发的程序员,我最近尝试在个人工作机上部署这套工具,过程中遇到了… · 2026/11/3 16:57:58
日语视频SRT字幕生成工具:技术架构与本地部署实践 1. 项目概述:日语视频SRT字幕生成工具的核心价值 在内容全球化的大背景下,日语视频的字幕处理需求呈现爆发式增长。根据行业调研数据,超过78%的非日语母语观众依赖字幕理解日本动漫、纪录片等视频内容。传统人工听译每分钟成本高达3-5美元&am… · 2026/11/3 14:24:57
电工的特种作业操作证通过率揭秘:证书过期了不知道怎么复审延期怎么办 电工的特种作业操作证通过率揭秘:证书过期了不知道怎么复审延期怎么办 你是不是也遇到过这种情况:手里的电工的特种作业操作证快到期了,却不知道怎么复审延期?更糟的是,有些地方的复审流程和政策变化频繁,让人一头雾水。其实,很多电工朋友在遇到这个问… · 2026/11/11 15:21:24
证书过期了不知道怎么复审延期?真实经历告诉你怎么应对国家安监局国电工证 证书过期了不知道怎么复审延期?真实经历告诉你怎么应对国家安监局国电工证 证书过期了,你是不是也跟大多数特种作业从业者一样,手忙脚乱地翻手机、查资料,甚至找朋友打听?我有个老同学在驻马店做电工,去年因为工作太忙没及时复审,结果被单位停岗,整整… · 2026/11/11 15:21:24
特种工咨询萧老师在哪考?三门峡电工求职必看的避坑指南 特种工咨询萧老师在哪考?三门峡电工求职必看的避坑指南 你是不是也遇到过这种情况:好不容易找到一份电工工作,单位却说“没有特种作业操作证不能上岗”?这不是危言耸听,而是现实。 急需特种作业证才能上岗找工作… · 2026/11/11 15:21:24
陕西特种工电子证书怎么转?外省证含金量还在吗 陕西特种工电子证书怎么转?外省证含金量还在吗 之前考的证在外省能不能转过来?这个问题最近在陕西特种作业圈里讨论得特别多,尤其是那些在外地工作多年、现在想回陕西继续干的特种作业人员,最关心的就是证书能不能转、能不能用、 含金量… · 2026/11/11 15:21:24
宣城市特种工难考吗真实经历告诉你怎么过 宣城市特种工难考吗真实经历告诉你怎么过 之前考的证在外省能不能转过来?我身边好几个朋友都问过这个问题,我自己也折腾了大半年,从河南郑州金水区的建筑工地转到宣城做项目,就因为这个证的事儿差点耽误了事。说实话,特种工证确实是个门槛,但只要你知道… · 2026/11/11 15:21:24
曹妃甸哪里考电工证好 郑州报考避坑指南 曹妃甸哪里考电工证好 郑州报考避坑指南 实操考试心里没底怕挂科,这个问题在特种作业证考试中非常普遍,尤其是对初次报考的电工学员来说,更是让人焦虑。不管是低压电工证还是高压电工证,实操部分往往是最难的,一不小心就可能被扣分甚至挂科。如果你在曹… · 2026/11/11 15:20:24
电工证丢失还能补吗?千万别踩坑,丢了证等于失业 电工证丢失还能补吗?千万别踩坑,丢了证等于失业 你正在找工作,但手里的电工证突然丢了,这下怎么办?别急,先别慌, 电工证丢失还能补吗 ?答案是肯定的,但 千万别踩坑 ,补办流程如果不了解,可能会耽误你上岗、甚至影响到你的收入。… · 2026/11/11 12:18:07
电力电缆作业证直播报名入口与办理流程良心建议 电力电缆作业证直播报名入口与办理流程良心建议 你是不是也担心学历不高报不了名?别急,今天就给你讲讲 电力电缆作业证直播 的报名流程和那些你必须知道的干货, 良心建议 在这里,别错过。 电力电缆作业证直播报名需要什么条件?… · 2026/11/10 17:46:39
英德电工证报考费多少钱,怕考不过白交培训费?看完这篇别再踩坑 英德电工证报考费多少钱,怕考不过白交培训费?看完这篇别再踩坑 怕考不过白交培训费?英德电工证报考费多少钱,你真的了解吗?现在市面上培训机构五花八门,价格参差不齐,很多人一不小心就花了冤枉钱,结果还考不过。别急,今天就来给你说清楚英德电工证的… · 2026/11/10 17:11:43
_中职电工证最新政策解读 中职电工证在哪考?工地太忙根本没时间复习考试的救星来了 工地太忙根本没时间复习考试,这是很多正在备考 中职电工证 的建筑工友的真实写照。你不是不想考,而是真的没时间。但别担心,这期内容是 新乡初次报考人员… · 2026/11/11 0:00:52
昆明电工证培训价格值不值得考?老电工告诉你真相 昆明电工证培训价格值不值得考?老电工告诉你真相 之前考的证在外省能不能转过来?这个问题是很多在外地打工、换城市生活、或者是想在昆明发展的朋友最关心的。尤其是现在云南发展快,很多企业都在招持证上岗的电工,如果你手头有证但不在本地,那这个证是不… · 2026/11/11 0:00:52
特种电缆张工网上查询全攻略:外省证如何转过来 特种电缆张工网上查询全攻略:外省证如何转过来 之前考的证在外省能不能转过来?这是很多特种作业从业者最关心的问题,尤其是像特种电缆张工这类证书,直接关系到日常工作是否合规、能否顺利晋升。很多小伙伴因为证书归属地的问题,陷入职业发展的瓶颈,甚至… · 2026/11/11 0:00:52
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/10 20:19:29
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/10 19:22:45
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/10 17:00:47