找回密码
 立即注册
查看: 2255|回复: 18

【实验箱已收到】感叹AI芯片越来越强悍之学习AI8051U芯片

[复制链接]
  • 打卡等级:以坛为家II
  • 打卡总天数:505
  • 最近打卡:2025-05-01 06:09:51

15

主题

154

回帖

404

积分

中级会员

积分
404
发表于 2024-12-14 17:35:18 | 显示全部楼层 |阅读模式
                                      第一节 初识AI8051U
                            7.png
    AI8051U加强了QSPI功能,做全了IIS录放音功能,兼容了PWM DMA,通过硬件浮点乘除单元实现了频谱分析仪功能,
居然实现了手写识别计算器(运行了AI算法,真牛)!!!做为电子狂魔的我们,对它的强悍功能很是佩服.
   高帧率的视频显示,8080的8位并口就可以很好的支持各种显示目的.
感谢官方提供的各种非常实用的例程包,这样可以让我们在学习中有一个很好的参考,甚至还可以利用 这些例程来开发更多更
实用的产品!!!
1.png

并且很好的支持了触摸操作,强大,强大.
2.png

IIS数字录放音的演示
3.png

WS2812的时钟,如果需要,可以使用PWM+DMA实现1千多颗2812的驱动效果

4.png

频谱分析功能的演示,因为芯片运行速度足够已然,实现了快速的FFT数据刷新
5.png

AI8051U实现了手写计算器,这个真的强大到了超乎想像的地步了
6.png

还可以做了个FLASH编程器,这个功能挺实用的.
通过以上的学习,知道了AI8051U这些更加强大的功能,坚定了学好,用好AI8051U的决心!!




1.png
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:505
  • 最近打卡:2025-05-01 06:09:51

15

主题

154

回帖

404

积分

中级会员

积分
404
发表于 2024-12-16 13:51:18 | 显示全部楼层
STC打卡第二课
硬件及工具介绍
冲哥
哪怕梦想让我们拼的遍体鳞伤,这一次我们也要勇往直前!
硬件资源介绍:
1
1.png
2
2.png
1烧写程序和调试接口
9.png
附赠的USB数据,可以直接连接电脑,给实验板烧写程序.
还可以使用LINK1D,连接实验板上的LINK1D口进行烧写和调试程序,(强烈建议入手一个哦)
还可以使用TYPEC的数据线连接,进行数据的下载(兼容多种类的数据线)

2,USB转双串口功能板载一个USB转双串口的芯片(最高波特率10M左右),方便做此类的通讯实验.
3,TF卡座,可以跑文件系统等
4,示波器接口,配一个示波器笔,配合示波器例程,学习示波器,使用示波器,功能强大.
5,立体声音频耳机和线路输出和MIC,可以做录放音实验哦..厉害了STC.
6,OLED接口,支持SPI,IIC;
7,板载8LED,可以做流水灯,运行状态指示等
8,8位数码管,可以方便 的做关于数码管显示,等功能 的实验.
9,TFT并口彩屏接口,可以用来做手写计算器,动画播放,TFT相关显示类的实验.
10,掉电检测,可以做电压跌落检测实验.
11,红外接收,红外发射功能,,,这个不用多说了,很实用的功能.
12,矩阵键盘,基础而又要必须掌握的功能实验.
13,ADC键盘,做产品时会用到的功能,实用.
14,主控芯片AI8051U 强大易用,资料丰富.
15,T0 T1 按键 ,可以得用定时器中断来进行计数,等实验.
16,INT0,INT1,按键 ,可以用来做外部中断的实验.
17,实验板的复位按键 ,电源开关按键,电源开关按键 配合P32引脚做让主控芯片强制进入下载模式,方便程序的烧写.
18,QSPIFLASH芯片 ,可以存储大量数据,比如动画短片,字库等 ….还可以做FLASH编程器实验
19,RTC电池,保证主控内部RTC断电后的连续计时.
20,24C02 EEPROM,可以做IIC读写实验.
21,DS18B20数字温度传感器,做温度检测实验,学习单线通讯.
22,蜂鸣器
23,SP3485芯片,485通讯实验功能.
24,TP2604S  触摸控制芯片,,SPI通讯
25,AI8H2K12U  USB转双串口芯片.
二编译环境的配置
步骤:1安装KEILC251 软件 2 下载STCISP软件 3 ,添加头文件 4 下载KEIL中断插件软件 5,下载代码包和手册
3.png 4.png 5.png 8.png 7.png

烧写程序的方法:USB数据线连接电脑,打开ISP软件,按下P32按钮不放,再按一下电源按钮,这时ISP软件中扫描串口中出现(HID1)USBWriter,就可以选择一个HEX文件进行烧写.同时还需要对频率等选项进行配置,这就需要根据代码的要求进行配置.点击下载/编程即可将编译好的固件烧写到单片机中,然后就可以通过实验板观察运行结果.
    10.png
通过以上的学习,对8051U实验箱硬件,编译环境安装设置,下载第一个程序的步骤有了完整的概念.
让我们扬帆起航,一起进入AI8051的世界!





12.png
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:505
  • 最近打卡:2025-05-01 06:09:51

15

主题

154

回帖

404

积分

中级会员

积分
404
发表于 2024-12-16 15:57:59 | 显示全部楼层
打卡第三课 点亮第一颗LED
流程:
1 添加头文件(利用ISP软件参考手册6.3章)
2, 新建一个KEILC251工程,并设置工程参数(参考手册6.5章)
3,编辑代码,编译并烧写到单片机中.
4,观察运行结果
1,添加头文件(利用ISP软件参考手册6.3章)
这一步比较简单,打开ISP软件,右侧KEIL仿真设置中,,找到添加型号和头文件Keil中…点击后找到KEIL251的安装目录 ,点击确定即可.
图2 2.png
2,新建一个工程
打开 Keil 软件,并点击“Project”菜单中的“NewuVision Project ...”项
99.png
将目录定位在准备好的项目文件夹中,并输入项目名称(例如:Demo)
选择目标单片机型号
在弹出的“Select aCPU Data Base File”窗口中选择“AI MCU Database”
_选择确定的单片机型号ai8051u.
_添加源代码文件到项目
_设置项目 1(“CPU Mode”选择 Source 模式)
编译代码:
#include "ai8051u.h"                 //调用头文件
void main(void)
{
         P0M0= 0;                  //P0端口(P00-P07)为准双向口
         P0M1= 0;
         
         P4M0= 0;                  //P4端口为准双向口
         P4M1= 0;         
         
         while(1)
         {
                   P40= 0;    //P40端口输出0V
                   P00= 0;    //P00端口输出0V
                   P01= 0;    //P01端口输出0V
         }
}
运行结果
点亮了.png 为什么能点亮LED.png 原理分析.png
对于以上这些,好多人像我一样,都已经轻车熟路了吧.搞定.

烧写.png
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:505
  • 最近打卡:2025-05-01 06:09:51

15

主题

154

回帖

404

积分

中级会员

积分
404
发表于 2024-12-18 16:31:47 | 显示全部楼层
打卡第四课 USB不停电下载
常规的程序下载,需要按下P32,然后断电重启单片机,然后才能下载,对于代码调试来说有点繁琐,那么能不能快速下载呢? 有,,有,,有,,哈哈
ISP软件直接点击下载按钮以后,实现程序直接的下载到单片机中!!! 不再需要断电,也不需要按下按钮….方便 ,快捷,,,,,真香.
那么如何实现这个功能呢,,往下看,图中例出了实现不停电下载的流程.
图1
1.png
看起来不复杂,,做起来也不复杂.
第一步,下载USB库文件和USB库例程
根据官方的说明: Ai8051U根据所选的8位/32位模式可使用相同位数的库文件
例程中使用了STC32G的USB CDC库文件例程.
关于例程的说明 :
两大类 CDC 和 HID  建议个人使用CDC类型
两大类又分为,查询模式和中断模式.

第二步,创建一个工程(移植)
  添加头文件,将stc_usb_cdc_32.LIB, stc32_stc8_usb.h文件复制到工程文件夹中,然后在工程中添加stc_usb_cdc_32.LIB文件(需要将文件类型设置为*.*或*.LIB才能找到),并定义头文件:#incledu “stc32_stc8_usb.h”
在主函数中添加USB初始化函数:usb_init();
把命令参数添加进来:
char *USER_DEVICEDESC = NULL;
char *USER_PRODUCTDESC = NULL;
char *USER_STCISPCMD = "@STCISP#";

这里的"@STCISP#"是ISP软件中默认内部下载命令,这个也可以自定义哦,只要代码中设置的字符串和ISP软件中自定义命令设置相同即可.
图4
4.png
一个重要的寄存器设置!!!
P_SW2 |=0X80; //扩展RAM区特殊功能寄存器功能 打开 (EAXFR  :  1)
5.png
相关中断的设置
IE2   |=0X80; //使能USB中断
EA = 1;//打开总中断

再添加USB配置是否完成的检测语句:
while (DeviceState != DEVSTATE_CONFIGURED);     //等待USB完成配置

只有检测到USB配置完成以后,才能进行相关USB的操作,否则会出现意想不到的结果.

代码编写好以后,编译,下载到单片机中,就可以进行不断电进行下载了.
6.png
将ISP软件主界面中最下方的:当目标文件变化时自动加载并发送下载命令勾选上.
只要重新编译一下代码,,ISP软件就会自动的发送自定义命令到单片机,,单片机接收到这个自定义命令以后,就会自动重启到系统ISP区,然后自动下载HEX固件.
通过本次学习,掌握了不停电下载固件的方法!!!
2.png
3.png
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:505
  • 最近打卡:2025-05-01 06:09:51

15

主题

154

回帖

404

积分

中级会员

积分
404
发表于 2024-12-18 17:04:40 | 显示全部楼层
打卡第五课  C语言基础
结合个人的实际情况,再学习一下C语言基础,这样有助于对基础知识更加深入的理解;
课程主要内容:
1.C语言 USB-CDC串口之printf函数的实现
2.数的进制:2进制、10进制、16进制
3.数据的基本类型
4.C语言常用运算符
开始L很重要哦
1.C语言 USB-CDC串口之printf函数的实现
它可以快速打印出数据,帮助我们快速的开发,很有用哦
图5-2
图5-3 printf函数的原型
Int printf_hid(const char *fmt,…);
参数:fmt   是格式控制字符串,包含了两种类型的对象:普通字符和转换说明
图5-4
2.数的进制:2进制、10进制、16进制
这个很基础的东东,,运算的基础,复习一下
图5-5
3.数据的基本类型
这个常用的两三种都熟练了,别的还真的不太熟练,用的时候会查一下表.
图5-6
4.C语言常用运算符
常用运算符
这个也很基础哦,常用 的+-*/ ,其中注意的是/ 是取整数部分 %取模运算,只得到余数部分
++  --  自加自减
图5-7
5-7.png
关系运算符:==  != >  <   >= <=  
图5-8
5-8.png
逻辑运算符:
图5-9
5-9.png
赋值运算符:
图5-10
5-10.png
位运算符
图5-11
5-11.png
其他运算符
图5-12
5-12.png
哇,总结一下,原来有这么多的运算符,你都用过吗!哈哈哈.都用过,有的用的多,有的用的少,多少都有用.

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:520
  • 最近打卡:2025-05-01 08:06:21

109

主题

1897

回帖

5204

积分

论坛元老

积分
5204
发表于 2024-12-18 18:10:39 | 显示全部楼层

8051这芯片的确是很强悍的。

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:505
  • 最近打卡:2025-05-01 06:09:51

15

主题

154

回帖

404

积分

中级会员

积分
404
发表于 2024-12-19 11:43:27 | 显示全部楼层
打卡第六课 I/O输入输出
1.什么是GPIO
2.按键输入检测
3.课后小练
1.什么是GPIO
GPIO(General Purpose I/O Ports)意思为通用输入/输出端口,通俗地说,就是一些引脚,可以通过它们输出高低电平或者通过它们读入引脚的状态-是高电平或是低电平。
图6-1 高低电平的概念 高电平:接近于电源正极电压的电平,也叫逻辑”1”, 低电平:输出GND的电压,俗称”0”
6-1.png
图6-2 端口模式的配置
6-2.png
理解拉电流,和灌电流,通俗的来说,拉电流就是让IO口输出高电平来驱动,灌电流就是让端口输出低电平来驱动.(这样理解是否正确呢?)
关于高低电平信号电压的定义,参照手册中高低电平的电压来确定…..
图6-3
6-3.png
端口复位以后,默认都是高电平!!!!
在准双向口模式下的输入检测:
图6-4
6-4.png
    如何在代码中实现对IO输入的检测 呢,一般可以使用判断来实现:if(P32== 0) //如果P32端口为低电平时,执行相应的代码
在这里有一个关键要处理 ,就是按键拉动,只要是按键就绕不开这个问题
包括按下时的抖动和松开时的抖动;
拉动的本质,见下图:
图6-5;
6-5.png
在代码中对于按下时的前沿抖动,可以用延时来消抖,松开时有一个松开检测.
课后任务1:按一下P32按钮灯亮,按一下P33按钮灯灭;
课后任务2:按一下亮一颗灯,在按一下亮两颗灯,直到全亮(变量+加法和乘法)
通过以上的学习,学习了关于8051U单片机在使用过程中,对于I/O的配置,以及按键使用的基础知识,包括8051U单片机软件延时代码的生成.

6-6.png
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:505
  • 最近打卡:2025-05-01 06:09:51

15

主题

154

回帖

404

积分

中级会员

积分
404
发表于 2024-12-19 15:31:48 | 显示全部楼层
打卡第七课 8051U深度入门到32位 之 定时器中断
哪怕梦想让我们拼的遍体鳞伤,这一次我们也要勇往直前!
   关于定时器,单片机中最重要,也是最基础的一个单元,也是曾经花费最多时间理解的一个东东(谁让我笨呢…..)
   1.定时器的介绍
2.定时器的应用
3.函数的定义、声明、调用

1
定时器的介绍
问题:LED三秒闪烁一下,这三秒按下按键但是没有反应了?这怎么办呢?
答:因为MCU单核的,同一时间只能执行一个事情,没有特殊情况不能被打断。所以这里就要引入一个特殊的情况,定时器中断。
定时器作用:
    (1) 用于计时系统,可实现软件计时,或者使程序每隔一固定时间完成一项操作
    (2) 替代长时间的Delay,提高程序的运行效率和处理速度(可以打断主循环)
定时器的配置,可以使用ISP软件中的定时器计算器,可以很方便的得到定时器参数的配置代码;在这里需要注意系统时钟要确定下来.时钟确定下来以后,就可以根据时钟来计算参数.
7-1.png   
图7-1
有的同学要问了,定时器中断是怎么执行的呢??
通过学习,我们就会知道了.
首先,通过ISP软件配置好定时器的参数,然后把ISP软件生成的定时器初始化代码,加入到我们的代码工程中.然后添加定时器中断的函数…..,简单吧,其实也不复杂!
图7-2-3 定时器的初始化函数,在主函数中进行调用
7-2.png 7-3.png
图7-4 定时器中断函数放在末尾
7-4.png
这里补充了一个关于keil0xfd的问题解决方法.其实就是KEIL软件对某些汉字不支持产生乱码,对于这些汉字使用时可以在汉字后面加上”\0xfd”
printf("数学");  //Keil 编译后打印会显示乱码
printf("数\xfd 学");  //显示正常
GB2312 中,包含 0xfd 编码的汉字如下:
褒饼昌除待谍洱俘庚过糊积箭烬君魁
例笼慢谬凝琵讫驱三升数她听妄锡淆
旋妖引育札正铸 佚冽邶埤荦蔟摭啐
帻猃恺泯潺妪纨琮椠辇挲臊忑睚铨稞
瘕颀螨簖酏觚鳊鼾
还有一种另类的方法,绕过这个问题,但不推荐,可能会产生莫名奇妙的问题,想尝试的同学可以试一下哦:
使用HexEditor编辑Keil安装目录下的/keil/c51/bin/c51.exe文件,搜索80FBFD改成80FBFF,如果使用汇编则修改A51.exe.
C251.EXE,A251.EXE没有试过,有改过的同学反馈一下哦.
2定时器的应用 :
分频:
图7-5 TM0PS
7-5.png
图7-6 AUXR的1T 12T模式也属于分频的范畴
7-6.png
图7-7 C/T 设置定时器为定时或计数模式
7-7.png
图7-8 定时器的软件或外部引脚控制模式
7-8.png
图7-9 TH计数寄存器(可以这么叫么)
7-90.png
图7-10定时器定时时间计算公式
7-10.png
所以说: 16位自动重载定时器的本质就是从设定值数到65536(溢出)之后置位一次标志位,如果使能ET0就可以进入中断!
定时器看起来挺复杂的哦,学过了,会用了,才知它的好处.
3.函数的定义、声明、调用
图7-11 函数的定义 声明 调用的格式 规则
7-11.png
来一个例子:
图7-12
7-12.png
图7-13 任务哦
7-13.png
思考:定时器一次只能定时一次,如果我有很多个定时任务怎么办?
   我的理解是,定时器做规定时间的定时,当定时中断时,在定时中断函数内进行多任务的判断,如果某一个任务到达了规定的时间,则输出结果.
课后小练:
图7-14
7-14.png
通过以上的学习,复习了定时器的参数配置,定时时间的计算原理,以及多任务下,定时器中断的使用.

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:505
  • 最近打卡:2025-05-01 06:09:51

15

主题

154

回帖

404

积分

中级会员

积分
404
发表于 2024-12-19 16:56:33 | 显示全部楼层
打卡第八课 定时器周斯性任务调度
摘要:
1.周期性任务介绍
2.文件的创建(.c和.h
3.结构体的介绍
4.结构体数组的周期性任务调度
下面开始学习:
1.周期性任务介绍
  每隔一定的时间去执行一个规定的任务;
任务1:用一个定时器实现这个任务。LED1实现0.3秒取反一次,LED2实现0.6秒取反一次,LED3 0.9秒取反一次
通过一个变量计数,假设这个变量1ms自加一次,加到300即为300ms,加到600就是600ms;计数到达后重新清0;
Sbit  LED1 =P1^0;//定义LED1的IO口
Sbit  LED2 =P1^2; //定义LED2的IO口
Sbit  LED3 =P1^3; //定义LED3的IO口
unsigned int tim0_300ms;
unsigned int tim0_600ms;
unsigned int tim0_900ms;
tim0_300ms = 0;//初始化
tim0_600ms = 0;//初始化
tim0_900ms = 0;//初始化
……
void tim0(void) interrupt 1//1ms定时中断时间
{
     tim0_300ms++; //每1ms 进入中断时变量自加1
  if(tim0_300ms==300)  //当变量 加到300时
{
    LED1 = !LED1; // LED1实现0.3秒取反一次
tim0_300ms=0;// 计数到达后重新清0
}
if(tim0_600ms==600)  //当变量 加到300时
{
        LED2 = !LED2; //LED2实现0.6秒取反一次
tim0_600ms=0;// 计数到达后重新清0
}
if(tim0_900ms==900)  //当变量 加到300时
{
    LED3 = !LED3; //LED2实现0.9秒取反一次
    tim0_900ms=0;// 计数到达后重新清0
}
}
我自信的写出了以上的代码,相信它可以实现任务的要求.棒……哈哈哈
教程中,冲哥又使用了一个数组,利用循环在定时中断中进行循环计数,并在主函数中进行计数值的判断,从面对相应有LED端口进行操作,也实现了任务的要求 .
任务2 利用数组实现流水灯 加难度了哦
注意事项:
LED是0点亮,1熄灭
数组长度需要把握好
流水灯移动的时间
实现的方法:
定义一个数组 u8state[8]={0x01,0x02,0x04x0x08,0x10,0x20,0x40,0x80};
这样定义比较直观,使用的时候把数组中的值,进行取,赋值给端口就可以实现点亮一个灯哦.
在定时器中断中进行计数,当计数到达规定的时间,对另一个索引变量进行加1,
然后以索引值的数组对应值取反后赋值给端口.索引变量值范围0-7
图8-1
8-1.png
任务3:按键1按一下,LED通过数组移动一下;
注意事项:
按键不能在通过while判断是否按下松开了
可以通过按键按下计数
图8-3
8-3.png
图8-4 实现的代码,很简单哦.
8-4.png
图8-5 加入按键消抖后的代码,让程序跑起来更可靠.
8-5.png
2.文件的创建(.c和.h)这个已经不陌生了,一个好的工程结构,对于代码编写和调试很重要
创建程序文件三步,把硬件需要的初始化弄一个config.c
             新建文件并保存     
             添加到工程
             添加引用路径   
图8-6
8-6.png
3.结构体的介绍
将相同属性,总结到一起构成变量组合体.定义一个大类,包含相同属性的小类.
图8-7 结构体
8-7.png
通过对结构体的学习,掌握了结构体在代码中的应用,以前对这个结构体总有一种懵懵懂懂的感觉 ,通过冲哥的讲解,顿时明了,思路清晰了起来.学到了,感谢.

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:505
  • 最近打卡:2025-05-01 06:09:51

15

主题

154

回帖

404

积分

中级会员

积分
404
发表于 2024-12-19 17:29:47 | 显示全部楼层
打卡第九课数码管
摘要
1.数码管介绍
2.数码管显示原理
3.数码管静态显示
4.数码管动态显示
5.虚拟显示--LED和数码管
下面开始学习了:
1.数码管介绍
图9-1 各种数码管 本质就是发光二极管哦,多个发光二极管的组合.
9-1.png
图9-2 8字数码管的内部原理图
9-2.png
共阳数码管:所有发光二极管的正极连在一起
共阴数码管:所有发光二极管的负极连在一起
图9-3 4位数码管的原理图,看起来复杂,其实一点也不简单……
9-34.png
图9-4-5数码管的显示原理,实验箱使用了两片74595来驱动8位数码管,一片负责位(LED1-8)的驱动,一片负责段(a-dp)的驱动!
数码管的静态显示,
9-4.png 9-5.png
图9-6
74595的控制代码,很简单
9-7.png
图9-7

我们如何来正确显示需要的数字呢?
根据数码管的属性,(共阴,共阳)取得数字的显示数组,可以用ISP工具中的段码生成工具来直接生成数码管的字模.
图9-8 ISP软件中的数码管字模生成工具
9-8.png 9-9.png
共阴数码管的字模,定义成一个数组,使用的时候可以将字模的值赋值给数据端口;
U8 displaynum[]={
    0x3F,       /*'0', 0*/
    0x06,       /*'1', 1*/
    0x5B,       /*'2', 2*/
    0x4F,       /*'3', 3*/
    0x66,       /*'4', 4*/
    0x6D,       /*'5', 5*/
    0x7D,       /*'6', 6*/
    0x07,       /*'7', 7*/
    0x7F,       /*'8', 8*/
    0x6F,       /*'9', 9*/
    0x77,       /*'A', 10*/
    0x7C,       /*'B', 11*/
    0x39,       /*'C', 12*/
    0x5E,       /*'D', 13*/
    0x79,       /*'E', 14*/
    0x71,       /*'F', 15*/
    0x40,       /*'-', 16*/
    0x00,       /*' ', 17*/
    0x80,       /*'.', 18*/
};
数码管的动态显示:按照一定的时间间隔,利用人眼视觉停留特性,循环点亮8个数码管,让我们看到8个数码管同时点亮来显示数值.
利用ISP工具中的虚拟数码管,也可以来做数码管的实验,
图9-11 虚拟显示时的端口位对应图
9-11.png
图9-12 虚拟显示时的状态
9-12.png
图9-13 虚拟显示的命令说明
9-13.png
课后小题:
图9-14
9-14.png
通过以上的学习,熟悉了数码管静态显示和动态显示的原理及代码编写,并且学习了使用ISP软件提供虚拟数码管来显示的方法和技巧.

9-6.png
回复 支持 反对

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-1 19:23 , Processed in 0.135401 second(s), 106 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表