【STC单片机学习全记录】从点亮LED到玩转ADC,我的嵌入式进阶之路
【STC单片机入门实战】从STM32转战Ai8051U,我的学习全记录(持续更新)记录从零开始系统学习STC单片机全过程,对比STM32经验,分享踩坑心得📅 Day 1:从库函数到寄存器,思维转换的开始
一、环境搭建:比想象中顺利
{:ciya:}{:ciya:}{:ciya:}
今天正式开始了STC单片机的学习。我之前有STM32的基础,所以对嵌入式开发的基本概念还算熟悉,但STC的“简化式开发”还是让我有点不适应。
开发环境对比:
[*]STM32:需要安装Keil MDK、STM32CubeMX、STM32CubeProgrammer,还有各种Pack支持包
[*]STC:一个Keil C51 + STC-ISP编程软件就搞定了,轻量得让我惊讶
二、第一个工程:手把手配置,没有CubeMX的自动化
创建工程的过程完全手动,这让我想起了最开始学STM32时,看正点原子教程一步步配置GPIO的情景。
核心步骤记录:
// STC工程的基本骨架
#include "ai8051u.h"
void main() {
// 初始化部分
while(1) {
// 主循环
};
}
配置差异思考:
STM32的CubeMX能图形化配置时钟树、GPIO模式、中断优先级,自动生成代码。而STC需要:
[*]手动添加头文件
[*]手动设置工程选项(尤其要注意生成HEX文件)
[*]手动编写所有初始化代码
好处是:对底层理解更深刻了。我知道P5M0和P5M1寄存器每一位控制什么,而不只是调用HAL_GPIO_Init()。
三、点亮LED:简单的操作,不简单的思考
我的开发板上,LED电路设计有点特别:
// 点亮LED的完整代码
#include "ai8051u.h"
void main() {
// 1. 配置GPIO模式
P0M0 = 0x00;
P0M1 = 0x00;// P0口:准双向
P4M0 = 0x00;
P4M1 = 0x00;// P4口:准双向
// 2. 控制逻辑
P4_0 = 0;// 打开三极管开关(低电平有效)
P0_0 = 0;// LED低电平点亮
while(1);// 保持状态
}
为什么这么复杂?
STM32点亮LED通常就是HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_SET),而STC这里需要控制两个IO:
[*]P4_0控制三极管开关
[*]P0_0控制LED本身
这让我理解了实际产品的电路设计考量——可能是为了省电,或者是多路复用设计。
四、STM32 vs STC:我的直观感受
对比项STM32STC学习感悟
开发环境复杂但强大简单直接STC入门门槛低,适合快速验证想法
GPIO控制HAL库函数抽象直接操作寄存器STC让我真正理解每个bit的作用
时钟系统复杂的时钟树相对简单不用纠结PLL配置,专注功能实现
调试手段SWD/JTAGUSB-Link1D下载器学会用LED、串口等辅助调试
资源丰富(RAM大、外设多)有限但够用学会资源优化,代码更精简
五、计划与学习路线
根据教程目录,我制定了这样的学习路线:
第一阶段:基础篇(第2-5集)
[*]✓ Day1:环境搭建+点亮LED(第2-3集)
[*]Day2:USB不停电下载(第4集)
[*]Day3:C语言基础回顾(第5集)
第二阶段:外设入门(第6-9集)
[*]Day4:IO输入输出(按键检测)
[*]Day5:定时器中断
[*]Day6:定时器调度任务
[*]Day7:数码管显示
第三阶段):进阶应用(第10-15集
[*]虚拟键盘、矩阵按键、ADC、Flash等
第四阶段:通信与高级功能(第16-23集)
[*]DS18B20、串口、PCA、比较器等
六、给同样从STM32转来的同学的建议
[*]心态调整:不要嫌弃STC”简陋“,它的简单正是学习的好机会
[*]思维转换:从“库函数怎么用”变成“寄存器怎么配”
[*]重视基础:51架构虽然老,但计算机组成原理没变
[*]动手实践:STC开发板便宜,大胆试错
[*]善用工具:STC-ISP里的延时计算器、头文件生成器很实用
static/image/hrline/1.gif
static/image/hrline/2.gif
static/image/hrline/1.gif
【STC单片机入门实战】Day 2:解放双手!实现USB不停电下载(第4集学习笔记)记录从STM32转战STC单片机第2天,解决最烦人的手动下载问题
📅 整体学习路线回顾根据课程目录,我的完整学习路径如下:
第一阶段:基础入门(第2-5集)
[*]✅ Day 1:硬件介绍 + 点亮LED(第2-3集)
[*]🔄 Day 2:USB不停电下载(第4集) ← 今天学习
[*]Day 3:C语言基础(第5集)
第二阶段:外设入门(第6-9集)
[*]Day 4:I/O输入输出(第6集)
[*]Day 5:定时器中断(第7集)
[*]Day 6:定时器调度任务(第8集)
[*]Day 7:数码管显示(第9集)
第三阶段:进阶应用(第10-15集)
[*]虚拟键盘、矩阵按键、复位系统、外部中断、IO中断、定时器计数器等
第四阶段:高级功能(第16-23集)
[*]DS18B20、串口通信、ADC、Flash、比较器、PCA等
今日学习重点:USB不停电下载昨天点亮LED虽然成功了,但每次下载程序都要手动按P3.2按钮的操作,引起了我的注意。这确实是个效率瓶颈!今天学习的第4集内容就是解决这个问题——实现USB不停电下载,彻底解放双手。
从STM32到STC的下载体验对比思考:在STM32开发中,我习惯了ST-Link的一键下载调试。STC这种需要手动断电的下载方式,在初期调试频繁时会严重影响效率。这也是我从STM32转来时最需要适应的点之一。
对比维度STM32STC (传统方式)STC (USB不停电)
下载方式SWD/JTAG调试器串口+手动断电按钮直接USB连接
硬件需求ST-Link/V2等调试器USB转串口工具仅USB线
操作步骤编译→一键下载编译→手动断电→按按钮→下载编译→自动下载
开发效率⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐
学习成本中等低,但操作繁琐中等
核心原理解析传统下载的问题所在STC单片机默认是通过系统ISP监控程序实现下载的,这个监控程序在芯片上电时会先运行,检测是否有下载命令。但用户程序运行后,监控程序就被“覆盖”了,要重新进入下载模式就必须:
[*]断电复位
[*]按住P3.2强制进入ISP模式
[*]重新上电
USB不停电下载的聪明解法STC的方案是在用户程序中嵌入一个“后门”:
[*]USB虚拟串口(CDC):程序运行后,USB接口模拟成一个串口设备
[*]特殊握手协议:当STC-ISP软件发送特定命令字符串@STCISP#时
[*]软件复位:程序识别到命令后,自动软复位并跳转到ISP监控程序
[*]无缝切换:实现从用户程序到下载模式的平滑过渡
📋 实现步骤详解第一步:获取必要的库文件从STC官网(深圳国芯人工智能有限公司-库函数)下载USB库文件,关键文件包括:
[*]stc_usb_cdc_32.LIB→ USB通信库(二进制,保护源码)
[*]stc32_stc8_usb.h→ 头文件(接口声明)
注意:STC提供8位和32位两种库,AI8051U是32位内核,要选择对应的32位库文件。
第二步:工程配置与移植1. 库文件添加
// 工程结构变化:
Demo.Uvproj
├── main.c // 用户主程序
├── AI8051U.H // 芯片头文件
└── stc_usb_cdc_32.LIB// ← 新增的USB库
2. 关键代码分析
/*------------------------------------------------------------------
* 文件名称:STC32G_USB_CDC_Demo.c
* 功能描述:STC32G系列单片机USB CDC虚拟串口通信示例程序
* 演示如何通过USB接口实现单片机与电脑间的数据通信
* 硬件平台:STC系列开发板(屠龙刀、擎天柱等)
* 开发环境:Keil C51
* 作者:根据STC32G视频教程整理
* 日期:2026年1月6日
*------------------------------------------------------------------*/
/*--- 头文件包含区域 ---*/
#include "stc32g.h" // STC32G系列单片机专用头文件,包含所有寄存器定义
#include "stc32_stc8_usb.h" // STC官方USB库头文件,提供CDC/HID功能支持
#include "math.h" // 数学函数库,本例中虽未直接使用,但为后续功能扩展预留
#include "stdio.h" // 标准输入输出库,支持printf_usb格式化输出功能
/*--- 主函数:程序入口点 ---*/
void main()
{
/*--- 系统初始化部分 ---*/
/* 关键步骤1:使能扩展寄存器访问权限
* P_SW2是特殊功能寄存器,其最高位(bit7)控制XFR扩展寄存器的访问
* 0x80 = 1000 0000二进制,通过"或等于"操作只设置bit7,不影响其他位
* 这是访问USB相关特殊寄存器的必要步骤(@ref)
*/
P_SW2 |= 0x80;
/*--- GPIO端口模式配置 ---*/
/* 将所有IO口(P0-P7)设置为准双向口模式
* 准双向口是传统51单片机标准模式,兼具输入输出能力
* 每个端口由两个寄存器控制:PxM1和PxM0
* 配置为00:准双向口;01:推挽输出;10:高阻输入;11:开漏输出
* 这里统一配置为准双向口,确保USB通信时端口状态稳定(@ref)
*/
P0M1 = 0x00; P0M0 = 0x00;// 配置P0口
P1M1 = 0x00; P1M0 = 0x00;// 配置P1口
P2M1 = 0x00; P2M0 = 0x00;// 配置P2口
P3M1 = 0x00; P3M0 = 0x00;// 配置P3口(特别注意:P3.0/P3.1与USB D-/D+共用)
P4M1 = 0x00; P4M0 = 0x00;// 配置P4口
P5M1 = 0x00; P5M0 = 0x00;// 配置P5口
P6M1 = 0x00; P6M0 = 0x00;// 配置P6口
P7M1 = 0x00; P7M0 = 0x00;// 配置P7口
/*--- USB模块初始化 ---*/
/* usb_init()函数是STC官方USB库的核心初始化函数
* 该函数会自动配置以下内容:
* 1. 初始化USB时钟源(内部48MHz IRC)
* 2. 配置USB控制寄存器(USBCON, USBCLK等)
* 3. 设置USB端点缓冲区和描述符表
* 4. 将P3.0/P3.1设置为高阻输入模式,避免影响USB D-/D+信号质量
* 此函数调用后,USB硬件模块开始工作,等待电脑枚举识别(@ref)
*/
usb_init();
/*--- 中断系统使能 ---*/
/* EA = 1:开启51单片机全局中断开关
* 类似于STM32中的__enable_irq()功能
* 这是USB中断正常工作的重要前提条件
* 注意:USB中断在stc32_stc8_usb.h中已有默认的中断服务函数
*/
EA = 1;
/*--- 主循环:程序核心逻辑 ---*/
while (1)
{
/* bUsbOutReady是USB库定义的标志变量
* 当电脑通过USB虚拟串口发送数据到单片机时,该标志会自动置1
* 这种查询方式比中断方式更简单可靠,适合初学者使用
*/
if (bUsbOutReady)
{
/* 示例代码:通过printf_usb向电脑发送调试信息
* printf_usb是USB库提供的格式化输出函数,用法与标准printf相同
* OutNumber变量包含本次接收到的数据字节数
* 实际应用中,可以根据接收到的数据内容进行相应处理
*/
// 发送接收到的数据字节数(演示用,实际应用可修改)
// USB_SendData(UsbOutBuffer, OutNumber); // 发送接收数据原样返回(测试用)
/* 使用printf_usb输出格式化调试信息
* 注意:每个printf_usb调用都会作为一个完整的USB数据包发送
* "\n"是换行符,使输出在串口助手中显示更整齐
*/
printf_usb("1. Read Num:%d\n", OutNumber);// 第一次输出
printf_usb("2. Read Num:%d\n", OutNumber);// 第二次输出
printf_usb("3. Read Num:%d\n", OutNumber);// 第三次输出
printf_usb("4. Read Num:%d\n", OutNumber);// 第四次输出
/* 重要:标记当前USB数据包处理完成
* 该函数会清除bUsbOutReady标志,使能接收下一个数据包
* 如果没有调用此函数,USB将无法继续接收新数据
* 这是STC USB库的重要工作机制(@ref)
*/
usb_OUT_done();
}
/* 此处可以添加其他应用代码
* 由于USB通信采用查询方式,需要确保主循环执行时间不会太长
* 如果处理任务较重,建议使用定时器中断或状态机架构
*/
}
}
/*=== 程序使用说明和开发建议 ===*/
/*
* 1. 硬件连接注意事项:
* - 确保USB数据线质量良好,MicroUSB接口连接可靠
* - P3.0/P3.1专用于USB通信,不要作为普通IO使用
* - 电脑端需要安装STC USB驱动(STC-ISP软件自带)
*
* 2. 编译环境配置:
* - 在Keil项目中需要添加STC官方提供的USB库文件(.LIB)
* - 设置正确的头文件包含路径
* - 根据具体芯片型号选择正确的内存模式
第三步:STC-ISP软件配置
必须勾选的三个选项:
[*]✅ 使用默认内部自定义命令 → 对应@STCISP#
[*]✅ 下次使用ID接口进行ISP下载 → 实现后续下载
[*]✅ 每次下载前都先发送自定义命令 → 自动化发送密钥
工作流程:Keil编译生成HEX → STC-ISP检测到文件变化 → 自动发送@STCISP#命令 → 单片机收到后软复位进入下载模式 → 自动开始编程
有趣的知识点笔记1. 查询模式 vs 中断模式教程推荐使用查询模式,原因很实际:
[*]查询模式:在主循环中定期检查USB状态
[*]中断模式:USB事件触发中断立即响应
[*]选择原因:查询模式代码更简单,不易因中断嵌套产生问题,适合初学者
2. 或等于(|=)操作的重要性P_SW2 |= 0x80;// 正确:只改第7位,不影响其他位
P_SW2 = 0x80; // 危险:清零了所有其他位!重要:寄存器操作中,|=是“置位”操作,=是“赋值”操作。STC很多寄存器有保留位或默认配置,错误使用=可能导致系统异常。
总结与期待今天虽然只是理论学习,但USB不停电下载这个功能让我对STC单片机的设计理念有了新认识:
[*]用户思维:从实际开发痛点出发设计功能
[*]渐进式:先解决“有没有”,再考虑“好不好”
[*]生态思维:软硬件工具链的协同设计
最期待的时刻:收到“擎天柱最小系统板”后,我要验证的第一件事就是这个USB不停电下载。从手动到自动的体验提升,是开发效率的关键一步!
作为有STM32背景的学习者,我越来越理解:不同的芯片有不同的哲学。STM32追求强大和通用,STC追求实用和经济。在资源受限的环境中寻找优雅的解决方案,这是一种不同的技术乐趣。
从开箱到点亮:Ai8051U擎天柱核心板USB下载程序全记录大家好!最近我收到了期待已久的Ai8051U擎天柱核心板,心情超级激动!这款板子基于STC的32位8051单片机,功能强大,特别适合学习和项目开发。开箱后,我迫不及待地插上USB线,想试试板子自带的流水灯程序。但没想到,第一步就遇到了小挫折:插上USB后,STC-ISP软件居然没有检测到串口!板子上的LED灯倒是亮着,说明程序在跑,但怎么才能下载自己的程序呢?于是,我静下心来,翻看了随板附带的《Ai8051U系列技术手册》,重点学习了第2.2章节“安装AiCube-ISP下载/编程/烧录工具,含强大的辅助开发工具”。今天,我就把这次学习经历整理成博客,分享给大家,希望能帮到同样刚入手的朋友们{:4_213:}{:4_213:}{:4_213:}{:4_213:}{:4_213:}
一、开箱初体验:默认流水灯程序与问题发现收到Ai8051U擎天柱核心板时,包装简洁,板子设计精致,正面印有“擎天柱”标识。我按照说明,直接用USB-TypeC线连接电脑和板子。
1001
板子通电后,一组LED灯开始循环闪烁,这就是默认的流水灯程序,效果很酷!但当我打开STC-ISP软件(版本v6.96N),准备下载自己的程序时,问题来了:软件界面上的“扫描串口”列表空空如也,没有显示任何COM口或USB设备。板子明明通电了,为什么软件检测不到呢?{:zhemo:}
我一开始以为是驱动问题,但手册提醒我:Ai8051U支持硬件USB下载,不需要安装额外驱动,只要USB连接的鼠标能工作,USB-HID驱动就是好的。那问题出在哪儿?继续读手册,我发现了关键点:USB下载需要正确的上电顺序和硬件操作,不能简单插拔USB代替电源开关。
二、手册解读:学习USB下载的正确姿势手册第2.2章节详细介绍了AiCube-ISP软件的安装和USB下载流程。我总结了几点核心内容:
[*]AiCube-ISP软件:这是STC官方提供的下载/编程工具,集成了各种辅助开发功能,如串口助手、延时计算器等。软件是绿色版,解压就能用,超级方便。
[*]上电工作过程:单片机复位时,默认从系统程序区启动,判断是否要下载用户程序。如果USB的D+和D-信号接触不良,单片机可能直接跳转到用户程序区运行流水灯,导致软件无法检测到下载模式。
[*]USB下载流程图:手册强调,下载时必须用电源开关控制上电,而不是依赖USB插拔,以确保GND、D+、D-、VCC的接触顺序正确。
三、实战操作:一步步解决无串口检测问题按照手册,我重新操作了一遍,终于成功!下面是详细步骤,我在关键环节留了图片位置,方便大家对照。
步骤1:安装AiCube-ISP软件
我先从STC官网(https://www.stcai.com/gjrj)下载了最新版AiCube-ISP压缩包,解压到D盘,创建了桌面快捷方式。软件界面简洁,功能一目了然。
步骤2:硬件连接与上电顺序
手册指出,USB下载有三种方法,我用了最可靠的方法一:P3.2按键结合停电上电:
[*]用USB-TypeA线连接电脑和板子(板子是TypeC口,我用转接头连接)。
[*]按住板子上的P3.2按键(即P3.2接地)。
[*]按下电源按钮(Power_SW)停电,再松开按钮上电——这就是“冷启动”。
[*]这时,电脑端的AiCube-ISP软件自动识别出了“(HID1) USB-Writer”,表示可以下载了!
这次正确操作后,软件立马检测到了设备。
步骤3:下载默认流水灯程序验证
为了测试,我打开了03.点亮第一个LED程序的HEX文件,点击“下载/编程”,几秒后提示成功。板子上的P20和P21引脚的LED重新点亮,证明下载功能正常!
四、总结与心得这次经历让我深刻体会到:硬件操作的小细节决定成败。Ai8051U的USB下载功能很强大,但必须严格按手册步骤来。总结几个要点:
[*]软件安装简单,AiCube-ISP工具包很实用。
[*]下载时一定要用电源开关控制上电,避免USB插拔顺序问题。
[*]如果软件不识别,先检查P3.2按键是否按下,再按下松开POWER按键冷启动。
现在,我可以愉快地折腾我的Ai8051U了!下一步我准备尝试用USB-CDC虚拟串口通信,相信有手册指导,会顺利很多。如果你也遇到了类似问题,希望这篇博客能帮到你。欢迎在评论区交流心得!
好了,这就是我的学习笔记。如果你有Ai8051U板子,不妨跟着试试,祝你玩得开心!{:hecai:}
等擎天柱核心板到后会更新上手操作图片{:ciya:}{:ciya:}{:ciya:} 要 做到 USB不停电下载;
要 尝试 AiCube 图形化自动配置生成程序工具;
推荐优先看的:
printf_usb("Hello World !\r\n")及
USB不停电下载, 演示视频链接:
https://www.stcaimcu.com/thread-19077-1-1.html
下载 最新的 AiCube-ISP-V6.96N 或以上版本软件 !
深圳国芯人工智能有限公司-工具软件
下载 最新的 USB库函数,永远用最新的 USB库函数 !
深圳国芯人工智能有限公司-库函数
下载 最新的 用户手册 !
下载 最新的 上机实践指导书 !
下载 最新的 Ai8051U 用户手册
https://www.stcaimcu.com/data/download/Datasheet/AI8051U.pdf
下载 最新的 Ai8051U 实验指导书,
有 AiCube 图形化自动配置生成程序工具使用说明
https://www.stcaimcu.com/data/do ... %AF%BC%E4%B9%A6.pdf
https://v.stcai.com/sv/1c5eec2-197fcd9b766/1c5eec2-197fcd9b766.mp4
上面是 小李 演示:Ai8051U, printf_usb("Hello World !\r\n")及usb不停电下载@AiCube之图形化程序自动生成
#include"ai8051u.h" //头文件不分大小写,但关键字分大小写
#include"ai_usb.h" //USB库和USB虚拟设备的头文件
voidmain(void)
{
EAXFR = 1; //允许访问扩展的特殊寄存器,XFR
WTST = 0; //设置取程序代码等待时间,赋值为 0 表示不等待,程序以最快速度运行
CKCON = 0; //设置访问片内的 xdata 速度,赋值为 0 表示用最快速度访问,不增加额外的等待时间
P0M0 = 0x00; P0M1 = 0x00; //初始化P0口为准双向口模式
P1M0 = 0x00; P1M1 = 0x00; //初始化P1口为准双向口模式
P2M0 = 0x00; P2M1 = 0x00; //初始化P2口为准双向口模式
P3M0 = 0x00; P3M1 = 0x00; //初始化P3口为准双向口模式
P4M0 = 0x00; P4M1 = 0x00; //初始化P4口为准双向口模式
P5M0 = 0x00; P5M1 = 0x00; //初始化P5口为准双向口模式
usb_init();
//初始化USB模块,并且会将【P3.0,P3.1】初始化为高阻输入,不影响USB【D-,D+】通讯
EA = 1; //使能总中断
while (1)
{
printf_usb("Hello World !\r\n");
//\r是回车,并跳到行首,\n是换行,就是换到下一行;\r\n不要交换次序
}
}
由于 USB库的持续进步,
USB程序已成为 51入门的第一个程序 !
printf_usb("Hello World !\r\n");
1,第一节课 打通 USB;
2,AiCube 图形化配置的参与,顺带将 KEIL 设置也默认设置好了
下面这些设置,AiCube 创建 KEIL 工程时已设置好了
神农鼎 发表于 2026-1-5 08:25
要 做到 USB不停电下载;
要 尝试 AiCube 图形化自动配置生成程序工具;
推荐优先看的:
好的,谢谢大咖!!!{:4_213:}{:4_213:}{:4_213:}我将持续学习,争取尽快入门,用STC实现自己的创意灵感。
现在缺少跟着 AiCube 图形化配置8051U,熟悉51 的芯路历程,
请楼主 开天辟地,穿越着来一回:
跟着 STC AiCube 学习 8051U 的 启蒙大片 !
到时 全部 免费+包邮 送:
实验箱,
核心板,
USB-Link1D, 脱机烧录,仿真,
USB 转双串口,
全家桶
Ai8051U-LQFP48,RMB1.9USB 型 32位 8051,1T 8051,支持32位8051指令集和8位8051指令集比普通32位机强太多的地方:1,Ai8051U有TFPU@120MHz, 算力强, uS级硬件三角函数/浮点运算器;2,Ai8051U的抗干扰强;12位ADC全新设计更精准,轨到轨比较器3,Ai8051U内置专业级复位电路,彻底省外部复位;4,Ai8051U的内部高可靠时钟完全满足串口通信要求,4组高速串口;5,Ai8051U有QSPI读Flash,直送i8080/M6800-TFT接口,视频级刷彩屏,C8T6没有;6,Ai8051U的PWM支持硬件移相@120MHz,DMA可以外设直接到外设,P2P7,Ai8051U是 34K SRAM,64K Flash8,Ai8051U是自带硬件USB,1个芯片就能直接USB连接电脑仿真/下载,全球唯一9,有PDIP40,LQFP44,LQFP48封装,管脚兼容经典的89C52RC,12C5A60S210,当32位8051使用,可以用 Keil C251 编译器,双核兼容设计11,当8位8051使用,可以用 Keil C51/IAR/SDCC 编译器Ai8051U-LQFP48,USB 型 32位 8051,RMB1.9含税
LilMonsterOvO 发表于 2026-1-5 08:42
好的,谢谢大咖!!!我将持续学习,争取尽快入门,用STC实现自己的创意灵感。
...
挺仔细的,STC的8051U和最新的STC32G144K246已经有了比肩cotex m3 m4 单片机的能力了。如果你有时间的话可以拿来做做对比。{:4_168:} _奶咖君_ 发表于 2026-1-5 09:10
挺仔细的,STC的8051U和最新的STC32G144K246已经有了比肩cotex m3 m4 单片机的能力了。如果你有时间的话 ...
我就是为了用最新的STC32G144K246,先用A8051U来熟悉一下STC的开发流程{:haobang:}
页:
[1]
2