找回密码
 立即注册
查看: 235|回复: 10

【Ai8051U】擎天柱核心板学习心得之奇妙之旅电脑USB声音律动灯

[复制链接]
  • 打卡等级:偶尔看看I
  • 打卡总天数:15
  • 最近打卡:2026-02-06 10:27:07
已绑定手机

1

主题

12

回帖

67

积分

注册会员

积分
67
发表于 2026-1-12 14:14:44 | 显示全部楼层 |阅读模式
第一节:测试ADC功能,读取USB接口电压。

今天拿到板子,做工很好,上电测试了下,ADC 电压采集测试:
内部 1.19V 基准源采样,ADC 模块计算反推 VCC USB接口供电电压。
串口窗口为 实时电压读数,万用表为 实际电源电压对比值。
采集精度非常高。
读取USB电压.png
关键代码:

// 获取第15通道(内部1.19V参考电压)的ADC值adc_val = Get_ADC_Result(15);  // <--- 关键点1:读取内部参考源的ADC值if(adc_val > 0){    // 计算VCC电压 (mV) = 4096 * 1190 / adc_val    // 原理: ADC值 / 4096 = 1.19V / VCC    vcc_mv = (u16)(4096UL * 1190UL / adc_val); // <--- 关键点2:数学换算出电压       }


解释:这里传给 Get_ADC_Result 的参数 15 是关键,它告诉芯片“不要读外部引脚,去读内部那个固定的 1.19V 标准电压”。




点评

这 已搞定 USB了,把3个 USB实验打卡 和USB虚拟设备做下,送实验箱  发表于 2026-1-12 19:46
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:15
  • 最近打卡:2026-02-06 10:27:07
已绑定手机

1

主题

12

回帖

67

积分

注册会员

积分
67
发表于 2026-1-16 08:15:39 | 显示全部楼层
第七节:USB 声卡与音频律动灯效测试:
舍弃外部 32.768kHz 晶振自动追频,直接使用 Ai8051U 内部高精度振荡器(IRC)锁定 36.864MHz 实现 USB 通信。

心得:
初始化时序的重要性:为了保证 USB 枚举成功,需调整初始化顺序:优先初始化 USB 模块并开启总中断(EA=1),确保电脑先识别到设备,再进行音频芯片(AIC23)的配置,防止外设初始化耗时过长导致 USB 握手超时。


2026-01-16 08-07-34.mp4

7.4 MB, 下载次数: 0

回复

使用道具 举报 送花

  • 打卡等级:常住居民I
  • 打卡总天数:67
  • 最近打卡:2026-02-10 13:19:40

22

主题

89

回帖

913

积分

版主

积分
913
发表于 2026-1-12 14:54:14 | 显示全部楼层
要 做到 USB不停电下载
要 尝试 AiCube 图形化自动配置生成程序工具
推荐优先看的:  
printf_usb("Hello World !\r\n")
USB不停电下载, 演示视频链接:
https://www.stcaimcu.com/thread-19077-1-1.html

下载 最新的 AiCube-ISP-V6.96O 或以上版本软件 !

深圳国芯人工智能有限公司-工具软件

下载 最新的 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

推荐优先看的 printf_usb("Hello World !\r\n")及usb不停电下载, 演示视频链接



回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:324
  • 最近打卡:2026-02-12 09:05:32

835

主题

1万

回帖

2万

积分

管理员

积分
22170
发表于 2026-1-12 19:45:40 | 显示全部楼层
这 已搞定 USB了,把3个 USB实验打卡 和USB虚拟设备做下,送实验箱
回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:324
  • 最近打卡:2026-02-12 09:05:32

835

主题

1万

回帖

2万

积分

管理员

积分
22170
发表于 2026-1-12 19:47:35 | 显示全部楼层

截图202601121947278860.jpg

截图202601121946572058.jpg
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:15
  • 最近打卡:2026-02-06 10:27:07
已绑定手机

1

主题

12

回帖

67

积分

注册会员

积分
67
发表于 2026-1-13 09:15:19 | 显示全部楼层
第二节:USB 鼠标按键模拟测试。
IO 口状态扫描,USB HID 协议模拟鼠标左/右键。PC 屏幕光标为 实时点击响应,开发板 P3.2/P3.3 为 物理触发按键。

20.3-STC_USB_鼠标键盘复合例程 修改总结
USB 双键鼠标改造:去除键盘复合逻辑,IO 口独立映射。P3.2/P3.3 固定为鼠标左键/右键,无模式切换。附件是修改完成的代码。

1. 修改前 vs 修改后 对比[td]
特性修改前 (原例程)修改后 (现在)
设备类型复合设备 (键盘 + 鼠标)纯鼠标模式 (仅保留鼠标功能)
P3.3 功能功能切换开关 (松开=键盘模式 / 按下=鼠标模式)鼠标右键 (独立按键,按下即触发)
P3.2 功能变色龙 (键盘模式下输入"1",鼠标模式下是"左键")鼠标左键 (独立按键,按下即触发)
逻辑复杂度复杂 (需要判断当前是什么模式,再决定发什么数据)简单 (直接读取按键状态 -> 发送鼠标数据)


2026-01-13 09-09-26.mp4

2.2 MB, 下载次数: 0

20.3-STC_USB_鼠标键盘复合例程.rar

222.9 KB, 下载次数: 0

回复

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:15
  • 最近打卡:2026-02-06 10:27:07
已绑定手机

1

主题

12

回帖

67

积分

注册会员

积分
67
发表于 2026-1-14 11:08:35 | 显示全部楼层
第三节:LED点灯测试:
硬件连接(LED 接 P20-P27,按键接 P3.2,按键接 P3.3)实现了按键控制 LED 逐个点亮的功能。

#include "ai8051u.h"      // 调用芯片头文件 [2]
#include "intrins.h"      // 调用_nop_库 [3]

// -------------------------------------------------------------
// 全局变量定义
// -------------------------------------------------------------
// 当前点亮的LED数量 (0表示全灭,8表示全亮)
unsigned char led_count = 0;

// -------------------------------------------------------------
// 延时函数
// -------------------------------------------------------------
// 用于按键消抖,保留了您提供的代码逻辑
void Delay_ms(unsigned int ms)
{
    unsigned int i;
    do{
        i = 24000;      // 根据主频调整,假设主频24MHz左右
        while(--i);
    } while(--ms);
}

// -------------------------------------------------------------
// 主函数
// -------------------------------------------------------------
void main(void)
{
    // 1. 系统初始化
    EAXFR = 1;          // 使能扩展寄存器访问 [2]
    WTST = 0;           // 设置程序执行速度为最快 [2]
    CKCON = 0;          // 设置外部数据访问速度为最快 [2]
   
    // 2. 端口模式配置
    // P2端口 (LED): 准双向口模式 (00),灌电流能力强,可直接驱动LED [4]
    P2M0 = 0x00;
    P2M1 = 0x00;
   
    // P3端口 (按键): 准双向口模式 (00),默认为弱上拉,适合读取外部按键 [4]
    P3M0 = 0x00;
    P3M1 = 0x00;

    // 初始化:P2口全部输出高电平(1),LED全灭
    P2 = 0xFF;         

    while(1)
    {
        // -----------------------------------------------------
        // 逻辑A: 检测 P3.2 按键 (增加点亮)
        // -----------------------------------------------------
        if (P32 == 0)           // 检测按键是否被按下 (低电平有效) [5]
        {
            Delay_ms(20);       // 延时20ms进行消抖 [6]
            if (P32 == 0)       // 再次确认按键状态
            {
                if (led_count < 8)  // 如果没满8个,计数加1
                {
                    led_count++;
                }
                while(P32 == 0); // 等待按键松开,防止长按连续触发
            }
        }

        // -----------------------------------------------------
        // 逻辑B: 检测 P3.3 按键 (逐个熄灭)
        // -----------------------------------------------------
        if (P33 == 0)           // 检测按键是否被按下
        {
            Delay_ms(20);       // 消抖
            if (P33 == 0)
            {
                if (led_count > 0)  // 如果还有灯亮着,计数减1
                {
                    led_count--;
                }
                while(P33 == 0); // 等待按键松开
            }
        }

        // -----------------------------------------------------
        // 逻辑C: 根据 led_count 更新 P2 口状态
        // -----------------------------------------------------
        // 算法解释:
        // 1. (1 << led_count) - 1:生成低位全为1的掩码。
        //    例如 count=3 -> 1000 - 1 = 0111 (二进制)
        // 2. 取反 (~):因为LED是低电平(0)点亮,所以要对掩码取反。
        //    ~0111 = 1111 1000 (即 P2.0, P2.1, P2.2 输出0/亮)
        
        if (led_count == 0)
        {
            P2 = 0xFF;  // 0个灯亮 -> 全部输出1 (全灭)
        }
        else
        {
            P2 = ~((1 << led_count) - 1);
        }
    }
}

WIN_20260114_11_06_41_Pro.mp4

2.73 MB, 下载次数: 1

回复

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:15
  • 最近打卡:2026-02-06 10:27:07
已绑定手机

1

主题

12

回帖

67

积分

注册会员

积分
67
发表于 2026-1-15 10:29:11 | 显示全部楼层
第四节:软件 PWM 随机测试:
Ai8051U 萤火虫仿生灯效: 定时器中断驱动 8 路软件 PWM,配合随机数状态机算法与“导演”调度逻辑。开发板表现为 LED 随机位置交替渐亮渐灭,视觉效果为 模拟夏夜萤火虫的非线性呼吸律动与生物游离感。

萤火虫效果.mp4

1.12 MB, 下载次数: 0

回复

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:15
  • 最近打卡:2026-02-06 10:27:07
已绑定手机

1

主题

12

回帖

67

积分

注册会员

积分
67
发表于 2026-1-15 10:54:26 | 显示全部楼层
第五节:USB 不停电下载与 P2 口 LED 控制测试:

引用 USB-CDC 库实现串口通信,利用 @STCISP# 指令实现无需断电的 ISP 自动下载功能。代码中初始化 USB 并开启中断,等待枚举成功后,主循环内实现串口数据回环(收发验证),同时控制 P2.0 与 P2.2 端口输出低电平,点亮对应 LED 灯。

学习心得:
关于头文件: 代码引用了 ai8051u.h 和 stc32_stc8_usb.h,这是实现 USB 功能的基础,不需要像以前玩 89C52 那样自己写繁琐的底层寄存器,STC 提供的库函数极大地简化了开发。
关键设置: 注意到 P_SW2 |= 0x80; 这句代码非常关键,必须将 B7 位置 1 才能访问扩展的特殊功能寄存器(XFR),否则后续的端口配置可能无效。
下载体验: 相比传统的串口下载需要反复手动开关电,这段代码实现的 USB 模式配合 USER_STCISPCMD 字符串,可以直接在 USB 连接状态下完成程序更新,开发效率提升非常明显。
端口控制: 擎天柱板子的 LED 在 P2 口,代码中直接操作 P20 = 0 和 P22 = 0 即可点亮,逻辑简单直观。

自动下载程序.mp4

1.51 MB, 下载次数: 0

回复

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:15
  • 最近打卡:2026-02-06 10:27:07
已绑定手机

1

主题

12

回帖

67

积分

注册会员

积分
67
发表于 2026-1-15 11:22:44 | 显示全部楼层
第六节:USB 虚拟设备交互与显示测试:


利用 USB-CDC 协议模拟串口通信,配合 STC-ISP 软件自带的“虚拟键盘”发送控制指令。MCU 接收键值后解析执行,实现远程控制开发板上的 OLED/LCD 刷新、LED 亮灭及屏幕滚动特效。串口窗口(虚拟数码管)为 实时接收的重定向 printf 数据(如浮点数 3.1415、长整型数值),硬件现象为 屏幕随虚拟按键指令进行翻页、反相、镜像显示,且长按 P3.2 可免断电进入 ISP 下载模式。
学习心得与代码分析:
printf 重定向的神奇之处: 代码中定义了 #define PRINTF_SEGLED,这非常方便。以往 printf 只能在串口助手看字符,现在可以直接把数据(比如代码中的 0x1234abcd 或 3.1415)直接映射到 STC-ISP 软件界面的虚拟数码管上显示,调试数据更加直观。交互逻辑解析: 程序主体是一个巨大的 Switch-Case 结构,配合 usb_OUT_done()。它展示了 Ai8051U 处理 USB 中断的高效性——只有当 bUsbOutReady 为真(收到数据)时才处理,不占用主循环资源。
按键 1-3: 验证了不同数据类型(Hex, Long, Float)的传输。
按键 Q-Z: 集中展示了对 OLED 屏幕的底层控制,特别是 OLED12864_ScrollUp 这种硬件滚动指令,比用软件死循环刷屏要流畅且省 CPU。
实用的复位技巧: KeyResetScan 函数展示了如何在项目中预留“后门”。通过长按 P3.2 触发 IAP_CONTR = 0x60,实现了在 USB 模式下无需拔插线就能重新烧录,这个功能在调试阶段能极大地保护 USB 接口和开发板。





2026-01-15 11-18-43.mp4

7.24 MB, 下载次数: 0

回复

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2026-2-12 21:40 , Processed in 0.119255 second(s), 87 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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