找回密码
 立即注册
查看: 392|回复: 8

AI8051U实验箱学习记录

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:2
  • 最近打卡:2025-12-21 01:53:11
已绑定手机

0

主题

4

回帖

12

积分

新手上路

积分
12
发表于 2025-12-21 01:53:11 | 显示全部楼层 |阅读模式
第一篇 STC AI Cube 8051U 单片机 USB 通信全实验解析(含不停电下载)
本文基于 STC/AI  ISP软件,详细拆解 AI8051U 32 位单片机的 3 个 USB 通信实验(基础输出、查询模式、中断模式),以及核心的 USB 不停电下载配置,全程通过 AI Cube 自动生成底层代码,开发者仅需聚焦核心业务逻辑,新手也能快速上手。
一、前期准备:软件、库函数与硬件
1. 核心资源下载(STCAI.com官网)
        • 软件工具:深圳国芯人工智能有限公司-工具软件
                ○ AI-ISP 下载软件、Q2 中断拓展工具(0~31→254);
                ○ keil51、keil251等,具体下载步骤参考AI8051U 数据手册第二章,或者自行搜索资料,推荐链接Keil uvision5下载安装保姆级教程(附安装包,非常详细)-CSDN博客
        • 库函数:USB 库(含 CDC/HID 协议的查询 / 中断范例,支持 AI8051U、8H8K、64U 等全系列带 USB 模块的芯片,可以不下,AIcube自动配置);
        • 芯片手册:AI8051U 系列完整手册(含引脚定义、USB 通信时序)stcaimcu.com/data/download/Datasheet/AI8051U.pdf
        • 硬件:AI8051U 32 位实验箱、USB 数据线(支持 HID/CDC 协议,免驱动)。
2. 库函数说明
USB 库包含两类核心协议,实验重点用 CDC 协议(虚拟串口):
        • CDC 协议:支持查询 / 中断两种模式,适用于串口通信场景;
        • HID 协议:免驱动,适用于快速数据传输(如鼠标 / 键盘模拟);
        • 库文件分类:8H 系列(data/xdata 模式)、3RG 系列(普通 /huge 模式,超过 64K 用 huge),内置AI8051U.h、AIUSB.h等头文件。
3.头文件配置:在 AI-ISP 中添加 Keil目录下的头文件(无需关注大小写,关键字需区分);
      截图202512210149304730.jpg    
二、AI Cube 界面核心功能介绍
AI Cube 是 STC/AI 的智能配置工具,核心优势是 “自动化生成底层代码”,关键功能如下:
1. 项目设置
        • 芯片选型:支持 AI8051U(32 位)、8H8K、64U、32G 等全系列;
        • 项目配置:自定义项目名称、存储路径,支持单文件 / 多文件项目,自动打开 Keil;
        • 编译选项:代码大小模式(Small/Large/Huge)、HEX 文件格式(80 格式≤64K,386 格式 > 64K)。
2. 图形化 IO 口配置
        • 操作逻辑:左键选择引脚功能(如 ADC、PWM),右键配置引脚模式(强推挽、开路、高阻);
        • 批量配置:按住 Ctrl 选中多个引脚,可批量修改上拉 / 下拉、驱动能力、速度;
        • 生效条件:必须勾选对应端口组(如配置 P1 口需勾选 “P1 端口”),否则配置无效。
3. 图形化时钟配置
        • 核心特点:USB CDC 协议自动适配 48MHz 时钟,无需手动配置;
        • 自定义设置:支持内部高速 / 外部时钟,可调整 PLL 分频、主时钟频率(最大 40MHz);
        • 状态提示:蓝色 = 可配置,黄色 = 配置错误(如频率超出芯片上限)。
4. 外设配置
        • 支持外设:USB、中断、定时器、串口、ADC、SPI 等,勾选后自动生成初始化代码;
        • USB 配置:选择 CDC/HID 协议、数据处理方式(查询 / 中断)、不停电下载开关。
三、实验详解:3 个 USB 通信实验(CDC 协议)
实验 1:基础版 ——printfUSB 直接输出 Hello World
        本次代码可以参考
截图202512210150054450.jpg
        
1. 项目创建步骤
                a. 打开 AI Cube→新建项目,芯片选 “AI8051U 32 位”;
截图202512210150518414.jpg
        
                a. 项目名称 “printUSB”,路径选桌面,单文件项目;
                b. 外设配置:勾选 “USB 通用串行总线”,协议选 CDC,数据处理方式 “查询”,USB 不停电下载 “是”;
截图202512210151004584.jpg
               
                c. 点击 “保存创建”,自动生成 Keil 项目。
2. 添加核心代码
自动生成的主函数中,用户代码需写在/* Begin User Code */和/* End User Code */之间(避免重新生成时被覆盖):
// 仅需添加1行代码(从软件范例程序中复制)
printfUSB("Hello World\r\n");  // \r回车+换行,顺序不可换
截图202512210151096965.jpg
        
        • 关键说明:printfUSB是 USB 专用输出函数,自动判断 USB 主机是否配置完成,未完成则直接返回。
3. 编译与下载
                ○ 编译:Keil 中点击编译,无报错则生成 HEX 文件;
截图202512210151239255.jpg
        
                ○ 普通 USB 下载:
截图202512210151302930.jpg
        
                a. 实验箱 USB 连接电脑,按下 P3.2 按键(接地);
                b. 按下电源键(断电→上电),松开 P3.2;
                c. AI-ISP 软件出现 “USB Writer”,选择 HEX 文件,点击 “下载编程”;
截图202512210151397769.jpg
截图202512210151467617.jpg
截图202512210151517443.jpg
截图202512210151586959.jpg
        
        
        
        
                ○ 效果:AI-ISP 自动扫描虚拟串口(如串口 3),打开后持续输出 “Hello World”。
截图202512210152203900.jpg
               
        
4. USB 不停电下载配置
                a. AI-ISP 软件设置:
截图202512210152288284.jpg
               
                ○ 勾选 “收到用户命令后复位到 ISP 监控程序”→模式选 “USBCDC”;
                ○ 勾选 “使用默认自定义命令 STCISP”“下次用 HID 接口下载”“每次下载前发送自定义命令”;
                ○ 勾选 “当目标文件变化时自动装载并发送下载命令”;
截图202512210152376723.jpg
               
                b. 测试:第一次需普通下载激活,后续修改代码编译后,AI-ISP 自动下载,无需按 P3.2 和电源键。
注:如果复制代码出现乱码,如图
截图202512210152456782.jpg
        或者代码复制出去,注释是乱码
        都是编码器的问题,修改编码器为
截图202512210152535727.jpg
        
        就没问题了


回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:2
  • 最近打卡:2025-12-21 01:53:11
已绑定手机

0

主题

4

回帖

12

积分

新手上路

积分
12
发表于 2025-12-21 02:01:14 | 显示全部楼层
实验 2:查询模式 —— 接收指令输出对应内容

该案例可以参考
截图202512210159548915.jpg
        
1. 项目创建
        • 芯片、路径同上,项目名称 “printUSB_Query”;
                ○ 截图202512210200018220.jpg
        • USB 配置:数据处理方式选 “查询”,其余默认。
2. 添加核心代码(接收 6 输出 Hello World,接收 7 输出 China)
// 屏蔽自动生成的“数据原路返回”代码(/* USB_OutData(buf, len); */)
// 添加查询逻辑(从范例程序复制)
截图202512210200144569.jpg
        
        注小技巧:
                使用split进行代码分屏
截图202512210200287304.jpg
        
3. 下载与测试
        • 下载:普通下载 / 不停电下载(步骤同实验 1);
        • 测试:AI-ISP 虚拟串口发送 “6”→输出 “Hello World”,发送 “7”→输出 “China”
        • 截图202512210200342974.jpg
实验 3:中断模式 —— 回调函数响应指令
参考
截图202512210200411089.jpg
        
1. 项目创建
        • 芯片、路径同上,项目名称 “printUSB_Int”;
        • USB 配置:数据处理方式选 “中断”,中断优先级 “最高”,其余默认。
        • 截图202512210200471354.jpg
        • 截图202512210200516677.jpg
2. 添加核心代码(回调函数处理指令)
// 1. 定义回调函数
截图202512210200567950.jpg
// 2. 主函数中无需添加额外代码(自动生成USB初始化和回调配置)
        • 关键说明:AI Cube 自动生成set_USB_output_callback(USB_Out_Callback),中断触发时自动调用回调函数。
3. 下载与测试
        • 下载:第一次普通下载激活,后续支持不停电自动下载;
        • 测试:发送 “6”“7”,虚拟串口对应输出,主函数仅需空循环(while(1);)。
                ○ 截图202512210201017840.jpg
                ○ 效果与实验二一致,但是该实验是由硬件中断进行触发USB数据传输,而不需要在主函数中浪费CPU资源
四、关键避坑要点
        1. 用户代码位置:必须写在/* Begin User Code */和/* End User Code */之间,否则重新生成项目时会被覆盖;
        2. USB 时钟:CDC 协议自动适配 48MHz 时钟,无需手动配置,Keil 中时钟选 40MHz 即可;
        3. 不停电下载激活:第一次需用普通下载激活,后续才能自动下载;切换 TTL 串口下载时,需取消 “用 HID 接口下载” 勾选;
        4. 代码对齐:长代码可通过 Keil 的 “Split” 功能分屏查看,方便调试;
        5. HEX 格式:代码≤64K 选 80 格式,>64K 选 386 格式,否则下载失败。
五、总结
        1. AI Cube 的核心价值:自动化生成底层代码(初始化、USB 配置、中断),开发者仅需编写核心业务逻辑;
        2. 3 种通信模式对比:
        • 基础输出:适合简单数据发送,1 行代码搞定;
        • 查询模式:适合主动接收指令,需轮询主机状态;
        • 中断模式:适合实时响应,无需轮询,主函数无负担;
        3. 不停电下载:大幅提升开发效率,替代传统 “按 P3.2 + 断电上电” 的繁琐操作。


回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:2
  • 最近打卡:2025-12-21 01:53:11
已绑定手机

0

主题

4

回帖

12

积分

新手上路

积分
12
发表于 2025-12-21 02:03:46 | 显示全部楼层
第三篇 STC AI8051U 单片机深度入门:从 8 位到 32 位的强悍实战教程

大家好!欢迎收看 STC 单片机系列教程 ——《AI8051U 深度入门到 32 位》大型实战视频。开篇想送给大家一句话:“哪怕梦想让我们拼得遍体鳞伤,这一次我们也要勇往直前”。希望通过这节课,大家能全面掌握 AI8051U 的核心能力,巩固单片机知识。
学习过程中有任何疑问,都可以通过 STC 官网(www.STCAI.com)或 STC 论坛(www.STCAIMCU.com)交流,我们会及时为你解答。
一、为什么选择 AI8051U?—— 比 32G 系列更硬核的升级
之所以在 32G 系列后推出 AI8051U 教程,是因为它在核心功能上实现了质的飞跃,尤其在实战场景中表现更出色:
        1. 屏幕显示与视频播放:优化 QSPI Flash 读写,支持大容量视频流畅播放;
        2. I2S 数字录放音:完整实现录音、放音、音量调节功能,无需额外模块;
        3. PWM+DMA 功能:完美兼容 WS2812 等低压灯带,支持千级灯珠无干扰驱动;
        4. 频谱分析仪:依托硬件浮点 / 乘除单元,实现实时频率分析;
        5. 手写计算器:支持触控手写输入,具备基础数学运算能力;
        6. 丰富外设扩展:支持 QSPI、PWM 硬件移相、TFT 接口等,功能覆盖更全面。
二、六大核心功能实战演示(含操作步骤)
1. 屏幕显示与触控:图形 / 文字 / 手写全支持
截图202512210202321782.jpg
实战操作:
                a. 烧录程序:选择touch FX文件,通过 USB 下载模式导入;
                b. 硬件准备:TFT 显示屏(8080 八位并口),无需额外驱动模块;
                c. 操作流程:
                ○ 首次启动需校准触控(按屏幕小圆点完成校准);
                ○ 支持手写输入(如写 “AI”“STC”)、清屏、颜色切换;
效果亮点:
        • 刷屏帧率高,汉字、英文、图片显示清晰;
        • 支持屏幕旋转,可直接用于图形界面、菜单设计,实战价值拉满。
2. I2S 数字录放音:无需额外模块,单芯片实现
实战操作:
                a. 程序配置:修改代码主频为 36.864MHz,烧录 “I2S 数字录放音” 程序;
                b. 硬件连接:外接喇叭(对接单片机音频输出引脚);
                c. 操作说明(按手册按键功能):
截图202512210202448845.jpg
               
                ○ 按键 1:停止录放音;
                ○ 按键 2:开始录音;
                ○ 按键 3:播放录音;
                ○ 按键 6/7:音量加 / 减;
效果亮点:
        • 录音清晰,支持音量调节(最大音量无失真);
        • 替代传统录放音模块,单芯片即可完成 “录 - 存 - 放” 全流程。
3. PWM+DMA 驱动 WS2812:千级灯珠无干扰
实战操作:
                a. 程序修改:基于论坛代码调整,主频设为 40MHz,烧录 PWM+DMA 程序;
                b. 硬件准备:8×32 WS2812 点阵屏,覆盖亚克力面板增强显示效果;
                c. 效果演示:
截图202512210202552709.jpg
               
                ○ 实现时钟显示(未校准,仅作功能演示);
                ○ 支持灯珠逐点点亮、颜色渐变,无闪烁无干扰;
                核心优势:
                ○ 相比 32G 系列的 SPI+DMA 方案,AI8051U 直接用 PWM+DMA 驱动,支持 1000 + 灯珠,适配大型灯光项目。
4. 频谱分析仪:实时频率检测
实战操作:
                a. 程序烧录:选择 “256 点频谱分析仪” 程序,主频 40MHz;
                b. 串口配置:AI-ISP 软件 打开串口;
                c. 打开FFT绘图工具
截图202512210203006853.jpg
                        
                d. 效果演示:
截图202512210203067711.jpg
               
                ○ 对着麦克风打响指,屏幕实时显示频率曲线;
                ○ 响指中心频点约 2.5KHz,频率刷新快速无延迟;
核心原理:
依托 AI8051U 的硬件浮点运算器和 I2S 录音功能,快速完成 FFT 数据处理,实现实时频谱分析。
5. 手写计算器:触控运算 + 图形界面
实战操作:
                a. 程序导入:烧录谭友开源的手写计算器程序;
                b. 操作演示:
                ○ 屏幕手写输入 “5+6×7”,点击确认自动计算出结果 47;
                ○ 支持 “8+9×3” 等混合运算,界面简洁直观;
                亮点:
                ○ 体现 AI8051U 的触控交互与数据运算能力,向 “智能单片机” 靠拢。
6. Flash 编程器:大容量数据烧录
实战操作:
                a. 程序烧录:选择 “视频播放” 程序(适配 9341 屏幕),主频 40MHz;
                b. 数据导入:
截图202512210203135423.jpg
               
                ○ 打开 “串行 Flash 编程器”,选择 W25Q128 芯片;
                ○ 导入多张动态图片,执行 “擦除芯片→编程数据”;
                c. 效果演示:
                ○ 重新上电后,屏幕自动播放导入的动态视频,流畅无卡顿;
核心价值:
可作为独立 Flash 编程器使用,支持大容量数据快速烧录,适配视频播放、图片存储等场景。
三、AI8051U 核心参数与兼容性
1. 硬核配置
        • 指令集:支持 8 位 / 32 位双指令集,1T 8051 内核;
        • 存储:34K SRAM(2K edata+32K xdata)、64K Flash;
        • 硬件加速:TFPU@120MHz(硬件浮点 / 三角函数运算器)、DMA(支持 PWM / 外设间 P2P 传输);
        • 外设:USB、4 组串口、12 位 ADC(轨到轨比较器)、QSPI、I2S、I2C、TFT 接口;
        • 封装:PDIP40、LQFP44、LQFP48,价格仅 RMB2.3。
2. 超强兼容性
        • 管脚兼容:完美适配经典 89C52RC、12C5A60S2 等 8 位 51 单片机;
        • 编译器兼容:8 位模式支持 Keil C51/IAR/SDCC,32 位模式支持 Keil C251;
        • 功能衔接:相当于 “增强版 8H8K64U”“升级版 32G12K128”,熟悉 STC 系列的用户可无缝上手。
四、总结
AI8051U 作为 STC 从 “传统 51” 向 “AI 单片机” 进化的核心型号,不仅延续了经典 51 的易用性,更通过硬件加速、丰富外设和实战功能,实现了从 8 位到 32 位的跨越。无论是屏幕交互、录放音、灯光驱动,还是频谱分析、手写运算,它都能单芯片完成,大幅降低项目成本和复杂度。
希望通过今天的实战演示,大家能感受到 AI8051U 的强悍实力。后续我们会深入拆解每个功能的代码逻辑和底层原理,敬请期待!
感谢大家的观看,我们下期再见!



回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:2
  • 最近打卡:2025-12-21 01:53:11
已绑定手机

0

主题

4

回帖

12

积分

新手上路

积分
12
发表于 2025-12-21 02:08:14 | 显示全部楼层
第四篇 AI8051U 深度入门:硬件工具详解 + 软件安装 + 第一个程序下载

大家好!欢迎收看本期《AI8051U 深度入门到 32 位》大型实战视频。开课之前,让我们再喊一遍口号:“哪怕梦想让我们拼得遍体鳞伤,这一次我们也要勇往直前!”
今天这节课,我们核心讲解三部分内容:AI8051U 实验箱硬件解析、必备软件安装配置,以及下载第一个入门程序(流水灯),帮大家快速上手这套开发平台。
一、硬件介绍:AI8051U 实验箱全解析
我们所有实战都会围绕官方发行的 AI8051U 实验箱展开,先开箱熟悉这套 “开发利器”:
1. 实验箱组成
实验箱包含:透明外壳、PCBA 主板(绿色线路板,已焊接所有元器件)、USB 数据线、短路帽。其中 “PCBA 板” 是关键 ——PCB 板焊接元器件后形成的成品板,也是后续做产品时常用的术语。
2. 正面硬件功能(从左到右 / 从下到上)
截图202512210206395567.jpg
(1)核心接口类
        • USB-TypeA/Type-C 接口:用于程序下载和供电,Type-C 可兼容手机数据线,Type-A 用官方标配线,两者均可实现下载功能;
        • USB Link 接口:官方下载调试工具专用接口,功能强悍,适合产品开发场景,配件包含配套线材;
        • TF 卡插座:用于文件系统实验,后续跑存贮相关程序时插入 TF 卡即可;
        • 示波器 BNC 输入:需搭配示波器表笔使用,红色调节电容可优化波形,避免失真;
        • 音频接口:立体声线路输出(接音响)、耳机输出(接耳机)、话筒录音(大尺寸话筒,支持录音实验)。
(2)显示与交互类
        • OLED/I2C/SPI 接口:兼容 OLED 屏(常见于门锁、MP3 等设备),支持 SPI/I2C 通信协议;
        • 8 路流水灯:入门标志性硬件,8 个 LED 灯可实现 “从左到右 / 从右到左” 流动效果,衡量入门的核心标准;
        • 8 位数码管:由两个 4 位数码管拼接而成,可显示数字、简单符号,后续时钟实验会重点使用;
        • TFT 彩屏接口:两排端子,支持并口 TFT 彩屏,上节课演示的 “猫和老鼠动画” 即通过此接口实现;
        • 矩阵键盘(2 列 4 行):行和列独立控制,区别于 ADC 键盘(16 个按键单引脚控制),后续交互实验常用;
        • ADC 键盘:16 个独立按键,通过 ADC 信号识别,适合多按键场景。
(3)功能扩展类
        • 掉电检测电压调节电位器:模拟掉电场景,可在完全断电前保存重要数据,后续文件系统实验高频使用;
        • 红外接收 / 发射:兼容普通红外遥控器(如电视机遥控器),实现红外通信实验;
        • 复位按键 / 电源按键:复位按键重启单片机,电源按键按下断电、松开上电(下载时需用到);
        • RTC 电池座:插入电池后,单片机断开外部供电仍能保持时钟走时,开机即显示最新时间;
        • 扩展插针:需用短路帽选择功能,后续实验会针对性讲解插针用途。
3. 背面核心元器件
截图202512210206485994.jpg
        • 32.768KHz 无源晶振:RTC 时钟核心,保证时钟零误差(内部数字电路 + 精准晶振);
        • 24C02 EEPROM:外置存储芯片,用于保存关键参数,即使单片机损坏,数据仍可保留;
        • DS18B20 温度传感器:低成本高精度测温,适合环境温度检测实验;
        • 无源蜂鸣器:可发出 “滴滴” 声,常用于报警、提示场景;
        • SP3485 芯片:485 通信核心,后续 485 通信实验专用;
        • AI8H2K12U 芯片:STC 自研 USB 转双串口芯片,最高波特率达 10Mbps,可替代 CH340,官网 / 立创有开源方案;
        • TP2604S 芯片等:音频放大芯片,支撑录放音功能实现。
二、软件安装:从环境搭建到工具配置
有了硬件,需搭配 4 套核心软件,除keil外工具均可从 STC 官网(www.STCAI.com)下载,建议始终使用最新版本(向下兼容旧功能)。
截图202512210206562887.jpg
1. 第一步:安装 Keil uVision5(编程软件)
        • 推荐理由:主流单片机编程软件,官方实验均基于此软件开发,兼容性最佳;
        • 支持编译器:8 位模式用 Keil C51/IAR/SDCC,32 位模式用 Keil C251(推荐,可最大化发挥 AI8051U 性能);
        • 安装步骤:
                注:软件涉及版权,可联系 STC 销售获取安装包,或在官方群下载等,推荐链接Keil uvision5下载安装保姆级教程(附安装包,非常详细)-CSDN博客
                安装完后请记住安装路径,在后续步骤会用到
2. 第二步:下载 AI-ISP 软件(下载调试工具)
        • 核心功能:将 Keil 编写的程序下载到单片机,支持 USB 下载、不停电下载等;
        • 下载步骤:
                a. 打开 STC 官网(www.STCAI.com)→“软件工具”→下载最新版(演示时为 6.94Y 版,以官网最新版为准);
                b. 解压后右键发送到桌面快捷方式,方便后续打开;
        • 关键提醒:新版会修复旧问题、新增功能,建议定期更新。
3. 第三步:添加单片机型号与头文件
Keil 默认无国产 AI8051U 型号,需手动添加:
截图202512210207038494.jpg
        
                a. 打开 AI-ISP 软件→“Keil仿真设置”→“添加型号和头文件到 Keil 中”;
                b. 选择 Keil 安装目录(如 C:\Keil_v5\C251)→点击 “确定”,提示 “MCU 型号添加成功” 即可;
截图202512210207138618.jpg
                c. 作用:让 Keil 识别 AI8051U 芯片,支持编译、调试。
4. 第四步:安装 Keil 中断扩展插件
        • 问题解决:Keil 默认仅支持 0~31 号中断,AI8051U 中断数量超出,需扩展;
        • 安装步骤:
                a. 官网 “软件工具”→下载 “Keil中断扩展工具”;
                b. 解压后选择 Keil 安装目录(如 C:\Keil_v5)→点击 “确定”,提示 “修改成功”;
               
        • 注意:需对应 Keil C251 编译器,否则无法发挥 32 位指令集性能。
5. 第五步:下载代码包与手册
        • 代码包:官网 “实验箱”→“AI8051U 实验箱”→“代码下载”,包含所有实战程序(如流水灯、录放音等);
        • 手册:下载 “AI8051U 规格书”(芯片手册)和 “实验箱使用说明书”(硬件操作指南);
        • 查看工具:用 WPS、极光 PDF 等软件打开,建议熟悉 “书签功能”,快速查找千页手册内容。
三、实战:下载第一个程序(流水灯)
入门单片机的核心标志 —— 成功点亮流水灯,证明硬件、软件均配置正常。
1. 准备工作
        • 实验箱通过 USB-TypeA/Type-C 连接电脑;
        • 打开 AI-ISP 软件,确认实验箱电源灯亮起。
2. 进入 USB 下载模式
截图202512210207203515.jpg
               
                a. 按住实验箱上的P3.2/INT0 按键(接地);
                b. 按一下 “电源按键”(断电)→松开 “电源按键”(上电);
                c. 松开 P3.2 按键,AI-ISP 软件会识别到 “(HID1) USB Writer” 设备,代表进入下载模式。
3. 配置下载参数
                a. 选择芯片型号:AI-ISP→“芯片型号”→选择 “AI8051U-34K64”;
                b. 选择程序文件:点击 “打开程序文件”→找到代码包中的 “流水灯程序”(路径:代码包→C 语言→simple.hex);
                c. 擎天柱版本可以使用hex文件
LED_Running_Lights.hex (14.66 KB, 下载次数: 2)
                        
                d. 设置 IRC 频率:
                ○ 关键:频率需与代码中定义一致!打开程序代码(Keil 中),可见头部#define FOSC 24000000L(24MHz);
                ○ 截图202512210208051885.jpg
                ○ AI-ISP 中选择 “24MHz”;
                e. 其他参数默认,无需修改。
4. 下载编程
点击 AI-ISP 中的 “下载编程”,提示 “操作成功” 即完成下载。
5. 验证效果
实验箱上的 8 路流水灯从左到右、从右到左循环点亮,证明:
        • 硬件无故障;
        • 软件安装配置正确;
        • 程序下载流程无误。
四、总结与后续建议
        1. 本节课核心:熟悉硬件功能、搭建软件环境、完成入门点灯,迈出 AI8051U 开发第一步;
        2. 课后任务:
        • 通读 “实验箱使用说明书”,熟悉每个硬件的具体用途;
        • 尝试下载代码包中的其他入门程序(如数码管显示),巩固下载流程;
        • 遇到问题:通过 STC 官网(www.STCAI.com)或论坛(www.STCAIMCU.com)交流,或联系官方技术支持;
        3. 下节课预告:深入讲解 Keil 编程基础,编写自定义流水灯程序。
恭喜大家成功入门 AI8051U!接下来我们将逐步解锁录放音、频谱分析、TFT 显示等实战功能,敬请期待~ 本节课就到这里,拜拜!



回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:2
  • 最近打卡:2025-12-21 01:53:11
已绑定手机

0

主题

4

回帖

12

积分

新手上路

积分
12
发表于 2025-12-21 02:15:00 | 显示全部楼层
第五篇 AI8051U 深度入门:新建工程 + 点亮第一个 LED(原理 + 实战)

大家好!欢迎收看本期《AI8051U 深度入门到 32 位》大型实战视频。开课之前,再喊一遍我们的口号:“哪怕梦想让我们拼得遍体鳞伤,这一次我们也要勇往直前!”
上节课我们搞定了硬件介绍和软件安装,这节课核心目标 —— 编写第一行代码,点亮实验箱上的第一个 LED 灯,同时搞懂 IO 口配置和 LED 点亮的底层原理。

注:以下是常规的手动配置工程环境,当前已有AICube辅助,所以以下操作了解即可,但当前AICube并非适配所有型号,所以如果需要使用不适配的芯片进行编程时,就需要按照如下步骤手动配置了
一、第一步:新建 Keil 工程(按手册 6.5 章节操作,新版手册应该是2.6节)
新建工程是所有代码开发的基础,严格按照 STC 官方手册步骤来,避免后续踩坑:
1. 新建空工程
                a. 打开 Keil uVision5,点击Project→New Project;
截图202512210211523975.jpg
                       
                b. 选择项目路径(建议新建单独文件夹,如 “LED_Demo”),项目名称设为 “demo”,点击 “保存”;
截图202512210211585952.jpg
                       
                c. 选择单片机型号:展开STCMCU→AI→AI8051U-32bit,点击 “确定”(STC 和 AI 同属一家,型号对应即可);
截图202512210212036468.jpg
                       
                d. 提示 “添加源代码到项目”,点击 “新建文件”(小白纸图标),保存为main.c(工程入口函数必须是main,文件名建议统一);
截图202512210212111071.jpg
截图202512210212209970.jpg
截图202512210212278239.jpg
                       
                       
                       
                e. 右键项目中的 “Source Group 1”→Add Files to Group,选中main.c→“Add”,完成文件添加。
2. 工程关键设置(核心!避免编译 / 下载报错)
点击 Keil 工具栏 “魔术棒”(Options for Target),按以下配置:
                a. CPU Mode:选择SARS 251(AI8051U 仅支持此模式);
截图202512210212374157.jpg
               
                b. 勾选4-bit Interrupt Vector(中断向量为 4 字节,后续中断实验必需);
                c. Memory Model:选择X Small(默认即可,适合小工程);
截图202512210212449326.jpg
               
                d. Code Rom Size:选择Large (64K)(AI8051U 有 64K Flash);
截图202512210212501310.jpg
               
                e. Output:勾选Create HEX File(必须勾选,否则不生成可下载文件),HEX 格式选HEX-80(64K 以内适用);
截图202512210212589735.jpg
               
                f. 优化选项
截图202512210213044117.jpg
               
                g. debug选项
截图202512210213094710.jpg
截图202512210213192236.jpg
截图202512210213265058.jpg
               
               
               
                h. 其他默认,点击 “OK” 保存设置。
二、第二步:添加头文件(ISP 软件导出)
Keil 默认无 AI8051U 的国产型号头文件,需手动添加:
        1. 打开 STC 官网下载的AI-ISP软件(最新版即可);
        2. 点击 ISP 软件中的 “头文件” 选项卡→选择AI8051U-32bit→导出格式选C语言;
        3. 保存头文件为ai8051u.h,放入刚才新建的项目文件夹(与main.c同目录);
截图202512210213343162.jpg
       
        4. 在main.c中添加头文件:
#include "ai8051u.h"  // 双引号表示从当前目录查找头文件
        • 注:尖括号<>用于系统路径头文件,双引号""用于自定义 / 项目目录头文件,推荐用双引号,避免路径错误。
三、第三步:编写代码(点亮 LED 核心代码)
在main.c中写入以下代码,每句都有详细注释,直接复制即可编译:
#include "ai8051u.h"        //调用头文件

void main(void)
{
    P0M1 = 0x00;   P0M0 = 0x00;
    P4M1 = 0x00;   P4M0 = 0x00;

        P40 = 0;
    while(1)
    {
                P00 = 0;
    }
}

以下为擎天柱版本的代码:
#include "ai8051u.h"        //调用头文件

//注意:擎天柱的LED端口在P2,且没有三极管的电源控制,所以只要控制P2端口即可
void main(void)
{
    P2M0 = 0;        //P2端口(P20-P27)为准双向口
    P2M1 = 0;

    while(1)
    {
        P20 = 0;    //P20端口输出0V
        P21 = 0;    //P21端口输出0V
    }
}
代码规范提醒:
        • 每句语句结尾必须加;(分号是 C 语言语句结束标志);
        • 大括号{}要换行并缩进(按Tab键自动缩进 4 格,Keil 可在 “魔术棒→Editor” 中设置);
                ○ 截图202512210213469531.jpg
        • 注释用//(单行注释),方便后续理解代码功能。
四、关键原理:为什么这样写能点亮 LED?
要搞懂代码,先理解硬件逻辑和 IO 口配置原理:
1. LED 点亮的硬件逻辑(三极管开关原理)
截图202512210213529783.jpg
实验箱中 LED 的硬件电路如下:
截图202512210213561917.jpg
       
        • 电源:3.3V(SYS-VCC);
        • 开关:三极管 SS8550(P4.0 控制导通);
        • 负载:LED00(串联 3.3K 限流电阻);
        • 导通条件:P4.0 输出 0V(低电平),电流从 3.3V→三极管→LED00→P00(0V)形成回路,LED 点亮;
        • 核心逻辑:P4.0=0(打开开关)+ P00=0(形成回路),两者缺一不可。
2. IO 口模式配置(核心寄存器 PnM1/PnM0)
截图202512210214026462.jpg
AI8051U 的每个 IO 口需通过PnM1和PnM0两个寄存器组合配置模式,规则如下:
截图202512210214381896.jpg
        • 代码中P0M1=0x00, P0M0=0x00,表示 P0 口 8 个引脚(P00~P07)全设为准双向口;
        • 0x00是十六进制,对应二进制00000000,8 个 0 刚好对应 8 个引脚的配置。
五、编译 + 下载:验证 LED 点亮效果
1. 编译代码
        • 点击 Keil 工具栏 “Build”(单个文件编译)或 “Rebuild”(全工程编译);
        • 截图202512210214152976.jpg
        • 下方输出窗口显示 “0 Errors, 0 Warnings”,且生成demo.hex文件(在项目OBJ目录下),编译成功。
2. 下载程序到单片机
                a. 实验箱通过 USB-TypeA/Type-C 连接电脑;
                b. 进入下载模式:按住实验箱P3.2/INT0按键→按 “电源按键” 断电→松开 “电源按键” 上电→松开 P3.2;
                c. 打开 AI-ISP 软件,识别到 “(HID1) USB Writer” 设备;
                d. 配置下载参数:
                ○ 芯片型号:选择AI8051U-34K64;
                ○ 打开程序文件:选择项目OBJ目录下的demo.hex;
                ○ IRC 频率:默认即可(代码未用到时钟相关功能);
                e. 点击 “下载编程”,提示 “操作成功” 即完成下载。
3. 验证效果
实验箱上的LED00(P0.0 对应 LED)常亮,证明代码和配置均正确!
六、扩展练习:点亮多个 LED
修改代码,尝试点亮 P0 口多个 LED(LED00~LED07):
#include "ai8051u.h"
void main(void)
{
    P0M1 = 0x00;  // P0口全为准双向口
    P0M0 = 0x00;
    P4M1 = 0x00;  // P4口全为准双向口
    P4M0 = 0x00;

    P40 = 0;      // 打开三极管开关

    P00 = 0;      // 点亮LED00
    P01 = 0;      // 点亮LED01
    P02 = 0;      // 点亮LED02
while(1);
}
编译下载后,LED00~LED02 会同时点亮,巩固 IO 口配置和输出低电平的知识点。
注:STC-ISP上还有一个IO口配置工具,可以一键配置IO口的输入输出模式
截图202512210214505592.jpg
七、总结与注意事项
        1. 核心要点:IO 口准双向口配置(00 组合)、P40/P00 输出低电平、下载模式操作;
        2. 避坑提醒:
        • 必须勾选 “Create HEX File”,否则无下载文件;
        • 头文件必须放在项目目录,且#include用双引号;
        • 下载时确保进入 HID 模式,否则无法识别设备;
        3. 代码规范:保持缩进、分号、注释,养成良好编程习惯。
这节课我们完成了从 “新建工程” 到 “点亮 LED” 的完整流程,掌握了 AI8051U 的 IO 口配置核心逻辑。课后建议反复练习工程新建和代码编写,为后续流水灯、中断等实验打下基础。有任何问题,记得去 STC 官网(www.STCAI.com)或论坛交流~
本节课就到这里,下节课我们讲解 LED 闪烁实验,不见不散!


回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:2
  • 最近打卡:2025-12-21 01:53:11
已绑定手机

0

主题

4

回帖

12

积分

新手上路

积分
12
发表于 2025-12-21 02:16:46 | 显示全部楼层
第六篇 AI8051U 深度入门:USB 不停电下载实战(解放双手!)


大家好!欢迎收看本期《AI8051U 深度入门到 32 位》大型实战视频。开课口号走起来:“哪怕梦想让我们拼得遍体鳞伤,这一次我们也要勇往直前!”
上节课我们点亮了 LED,但每次下载程序都要手动按 P3.2 按键 + 断电上电,太麻烦了!这节课我们核心目标 —— 移植 USB 库,实现 “不停电下载”:第一次手动下载激活后,后续修改代码编译完自动下载,再也不用按按钮、断电源,彻底解放双手!
注:以下是常规的手动配置工程环境,当前已有AICube辅助,所以以下操作了解即可,但当前AICube并非适配所有型号,所以如果需要使用不适配的芯片进行编程时,就需要按照如下步骤手动配置了

一、核心原理:为什么能实现不停电下载?
AI8051U 支持 USB HID/CDC 协议,通过移植官方 USB 库,让单片机接收 AI-ISP 软件发送的自定义命令(默认@STCISP#)后,自动进入下载模式,无需手动干预。核心逻辑:
        1. 第一次手动下载带 USB 库的程序(激活不停电功能);
截图202512210215434208.jpg
        2. 后续 AI-ISP 发送命令→单片机响应→进入下载模式→自动下载新程序。
二、前期准备:下载 USB 库文件(官网获取)
        1. 访问 STC 官网(www.STCAI.com)→ 软件工具→库函数→USB 库文件;
       
        2. 下载后解压,核心文件区分:
        • 协议:选CDC(推荐,兼容性好),避免HID;
        • 位数:选32位库(AI8051U 用 32 位指令集),对应文件STC32_USB_CDC_32.lib和stc32_stc8_usb.h;
        • 模式:选查询模式(稳定高效,无需中断抢占资源)。
三、核心步骤:移植 USB 库到 LED 工程
基于上节课的 LED 工程,按 4 个关键步骤移植,直接复制粘贴核心代码即可:
1. 第一步:添加库文件和头文件
                a. 复制库文件:将STC32_USB_CDC_32.lib和stc32_stc8_usb.h复制到 LED 工程目录(与main.c同路径);
                b. 添加到 Keil 工程:
                ○ 右键 “Source Group 1”→Add Files to Group→选中STC32_USB_CDC_32.lib→“Add”;
                ○ 在main.c开头添加头文件:
#include "ai8051u.h"
#include "stc32_stc8_usb.h"  // 新增USB库头文件
2. 第二步:添加 USB 初始化和关键配置
在main函数中,LED 初始化代码后添加以下核心代码(直接复制,无需手动写):
#include "ai8051u.h"
#include "stc32_stc8_usb.h"  // 新增USB库头文件

//命令参数
char *USER_DEVICEDESC = NULL;
char *USER_PRODUCTDESC = NULL;
char *USER_STCISPCMD = "@STCISP#";

void main(void)
{
    // 1. 上节课的LED初始化:所有IO口设为准双向口(简化代码,后续通用)
    P0M1 = 0x00; P0M0 = 0x00;
    P1M1 = 0x00; P1M0 = 0x00;
    P2M1 = 0x00; P2M0 = 0x00;
    P3M1 = 0x00; P3M0 = 0x00;
    P4M1 = 0x00; P4M0 = 0x00;
    P5M1 = 0x00; P5M0 = 0x00;
    P6M1 = 0x00; P6M0 = 0x00;
    P7M1 = 0x00; P7M0 = 0x00;
// 2. USB不停电下载核心配置(必须加!)
    P_SW2 |= 0x80;  // 开XFR区访问(USB寄存器在XFR区)
    USB_Init();    // USB初始化(库函数,无需关心内部实现)
    IE2 |= 0x80;   // 使能USB中断
    EA = 1;        // 使能总中断(所有中断必需)
// 3. 等待USB配置完成(确保电脑识别单片机)
    while (DeviceState != DEVSTATE_CONFIGURED);
// 4. 上节课的LED点亮代码(保留,验证功能)
    P40 = 0;  // 打开三极管开关
    P00 = 0;  // 点亮LED00
// 5. USB数据回显(库自带,不影响下载,保留即可)
    while (1)
    {
        if (bUsbOutReady)  // 检测是否收到USB数据
        {
            USB_SendData(UsbOutBuffer, OutNumber);  // 数据回显
            USB_OUT_done();  // 通知USB主机数据处理完成
        }
    }
}

注:对于擎天柱开发板,只需要修改上节课对应的LED代码即可,这里不再赘述了
3. 第三步:配置 AI-ISP 软件(关键!必须匹配)
                a. 打开 AI-ISP 软件→“下载参数”→“收到用户命令后复位到 ISP 监控程序”;
                b. 勾选 3 个关键选项:
                ○ 模式选USBCDC;
                ○ 勾选 “使用默认自定义命令 @STCISP#”;
                ○ 勾选 “下次用 HID 接口下载”“每次下载前发送自定义命令”;
截图202512210216028559.jpg
               
                c. 勾选 “当目标文件变化时自动装载并发送下载命令”(编译后自动下载)。
截图202512210216072994.jpg
               
4. 第四步:解决编译警告(L57 警告)
编译时可能出现 “L57: Uncalled function” 警告(未调用库中部分函数),解决方法:
截图202512210216138299.jpg
               
四、关键代码解析(搞懂为什么这么写)
1. P_SW2 |= 0x80:打开 XFR 区访问
截图202512210216197100.jpg
        • AI8051U 的 USB 相关寄存器在 “扩展特殊功能寄存器(XFR 区,地址 0x7EFE00-0x7EFEFF)”;
        • P_SW2寄存器的第 7 位(EAXFR)置 1,才能访问 XFR 区;
        • 用|= 0x80而不是= 0x80:避免覆盖其他位的原始值,只修改第 7 位。
2. USB_Init ():USB 初始化
        • 库函数封装了 USB CDC 协议配置、端口初始化等复杂操作,无需手动写;
        • 初始化后单片机模拟虚拟串口,AI-ISP 能识别到 USBCDC 设备。
3. IE2 |= 0x80 + EA = 1:开启USB中断
截图202512210216265470.jpg
        • IE2是中断允许寄存器,第 7 位是 USB 中断允许位,置 1 才能响应 USB 命令;
截图202512210216329192.jpg
       
        • EA是总中断允许位,必须置 1(所有中断的 “总开关”)。
截图202512210216397642.jpg
       
4. USER_STCISPCMD = "@STCISP#":命令匹配
        • 头文件中默认定义的命令,必须和 AI-ISP 软件的命令一致;
        • 若修改该命令,需在 AI-ISP 中同步修改 “自定义命令”,否则无法触发下载。
五、测试验证:体验不停电下载
1. 第一次:手动激活(仅需一次)
                a. 实验箱 USB 连接电脑,按 P3.2 按键→按电源按键断电→松开电源按键上电→松开 P3.2;
                b. AI-ISP 识别到 “(HID1) USB Writer”→选择移植后的demo.hex文件→IRC 频率按代码定义(如 24MHz);
                c. 点击 “下载编程”,提示成功后,LED00 点亮。
2. 后续:自动下载(解放双手)
                a. 修改代码(比如点亮 LED01):
P01 = 0;  // 新增:点亮LED01
                b. 点击 Keil “Rebuild” 编译(0 错误 0 警告);
                c. AI-ISP 自动装载新 HEX 文件→发送命令→单片机自动进入下载模式→下载成功;
                d. 观察实验箱:LED00 和 LED01 同时点亮,无需按任何按钮!
六、避坑要点总结
        1. 库文件选对:必须是 32 位 CDC 库(STC32_USB_CDC.lib),8 位库不兼容;
        2. 命令匹配:USER_STCISPCMD必须和 AI-ISP 软件一致,默认@STCISP#不要改;
        3. 中断必开:IE2 |= 0x80和EA = 1缺一不可,否则无法响应下载命令;
        4. 第一次手动激活:新工程必须手动下载一次,后续才能自动下载;
        5. 警告处理:L57 警告用--diag_suppress=L57屏蔽,不影响功能。
七、后续工程模板:直接复制复用
移植完成后,这个工程可以作为 “模板”:后续新建工程时,直接复制main.c、stc32_stc8_usb.h和STC32_USB_CDC.lib,修改 LED、串口等业务代码即可,无需重复移植 USB 库,大幅提升开发效率。
这节课我们搞定了不停电下载,彻底解决了手动按按钮的麻烦!后续不管是流水灯、串口通信还是更复杂的实验,都能直接用这个模板快速开发、自动下载。有任何问题,记得去 STC 官网或论坛交流~
本节课就到这里,下节课我们讲解 USB 串口通信,不见不散!


回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:2
  • 最近打卡:2025-12-21 01:53:11
已绑定手机

0

主题

4

回帖

12

积分

新手上路

积分
12
发表于 2025-12-21 02:20:12 | 显示全部楼层
第七篇 AI8051U 深度入门:C 语言基础恶补(实战版)

大家好!欢迎收看本期《AI8051U 深度入门到 32 位》大型实战视频。开课口号走起来:“哪怕梦想让我们拼得遍体鳞伤,这一次我们也要勇往直前!”
后面的单片机实验全靠 C 语言撑场面,这节课集中恶补核心知识点 ——USB-CDC 串口的 printf 函数、进制换算、数据类型、常用运算符,全程结合实战代码,看完就能上手写!
一、核心实战:USB-CDC 串口 printf 函数实现
printf 是调试神器,能快速打印变量、字符串,AI8051U 通过 USB 库重定向实现,步骤超简单:
1. 开启 printf 功能(关键一步)
截图202512210217216655.jpg
                a. 打开 USB 库头文件stc32_stc8_usb.h;
                b. 找到第 6 行#define PRINTF_HID,去掉前面的//(取消注释),开启 printf 重定向到 USB HID;
                c. 核心原理:#define printf printf_hid,把标准 printf 替换为 USB 库的printf_hid函数,直接通过 USB 串口输出。
截图202512210217281921.jpg
               
2. printf 函数原型与用法
函数原型:int printf_hid (const char *fmt, ...);
        • fmt:格式控制字符串,含 “普通字符” 和 “转换说明”;
        • 附加参数:替换转换说明符,与%个数一一对应(n 个%需 n+1 个参数)。
(1)普通字符:原样输出
// 代码中添加(基于上节课的USB工程)
if (bUsbOutReady) {
    printf("8051U深度入门到32位51大型实战视频\r\n");  // 普通字符+换行
    USB_OUT_done();
}
        • 效果:串口助手显示完整字符串,\r\n实现回车换行(避免文字堆叠)。
        • 截图202512210217342392.jpg
(2)转换说明:替换为变量 / 常量
截图202512210217395726.jpg
截图202512210217437096.jpg
常用格式控制符(必记 3 个 + 拓展):
截图202512210217522575.jpg
截图202512210217562474.jpg
截图202512210218014321.jpg
(3)转义符:控制输出格式
截图202512210218119118.jpg
截图202512210218156280.jpg
(4)ASCII码表
截图202512210218209888.jpg
文本中的每一个字符实际是ASCII码表中的一个十六进制值
截图202512210218268647.jpg
3. 实战效果
                a. 编译代码(确保 USB 库已添加,不停电下载配置正确);
                b. 打开 AI-ISP 串口助手,选择USBCDC设备(如 COM8),波特率任意(USB 虚拟串口不依赖波特率);
                c. 发送任意数据触发 printf,串口助手显示打印结果,蓝色为接收数据,红色为发送数据(可在助手中关闭 “显示发送数据”)。
截图202512210218331701.jpg
               
二、进制换算:二 / 十 / 十六进制(单片机必备)
单片机代码中频繁用到十六进制(寄存器地址)和二进制(位操作),核心是 “十进制为桥梁,相互转换”。
1. 进制标识
截图202512210218418476.jpg
2. 换算方法(不会算就用计算器)
(1)非十进制→十进制
        • 二进制:1101 = 1×2³ + 1×2² + 0×2¹ + 1×2⁰ = 13;
        • 十六进制:0x34A = 10×16⁰ + 4×16¹ + 3×16² = 842;
        • 快捷工具:电脑 “计算器→程序员模式”,输入数值直接切换进制。
(2)十进制→非十进制
        • 十进制 200→二进制:除 2 取余→11001000;
        • 十进制 200→十六进制:除 16 取余→0xC8(12×16 + 8)。
3. 实战应用
代码中定义十六进制变量(寄存器地址常用):
#define LED_P00 0x01  // P0.0引脚对应的位(二进制00000001)
u8 addr = 0x7E;      // 扩展寄存器地址(十六进制)
三、数据类型:选对类型不溢出(避坑关键)
AI8051U 用 Keil C251 编译器,常用数据类型及范围(必记):
1. 常用数据类型表
截图202512210219038847.jpg
截图202512210219151883.jpg
2. 实战要点
        • 宏定义简化:代码开头添加#define u8 unsigned char,后续直接用u8 X=200;,简洁不写错;
        • 避免溢出:8 位变量最大 255,比如u8 X=200, Y=100; X+Y=300会溢出,结果变成 44(300-256),需用u16:
u16 sum = (u16)X + Y;  // 强制转换为16位,避免溢出
printf("X+Y=%u\r\n", sum);  // 输出300
        • 变量作用域:定义在main函数外为全局变量(所有函数可用),定义在大括号内为局部变量(仅当前括号内可用)。
四、常用运算符:写逻辑的核心
运算符是实现逻辑(比如 “如果 X>Y 就亮灯”)的基础,分 5 类重点讲:
1. 算术运算符(加减乘除取余)
截图202512210219258204.jpg
实战代码:
if (bUsbOutReady) {
    printf("X/Y=%u, X%%Y=%u\r\n", X/Y, X%Y);  // 输出X/Y=20, X%Y=0
    X++;  // X变成201
    printf("X++=%u\r\n", X);  // 输出201
    USB_OUT_done();
}
2. 关系运算符(判断条件真假)
单片机中 “0 为假,非 0 为真”,常用在if判断中:
截图202512210219341993.jpg
实战代码(if 判断):
if (bUsbOutReady) {
    if (X > Y) {  // 条件为真
        printf("条件为真:X>Y\r\n");
    } else {  // 条件为假
        printf("条件为假:X<=Y\r\n");
    }
    USB_OUT_done();
}
3. 逻辑运算符(组合条件)
截图202512210219411511.jpg
实战代码:
u8 A=1, B=0;
if (A && (X>Y)) {  // A真且X>Y真 → 整体真
    printf("逻辑与:条件成立\r\n");
}
4. 赋值运算符(简化代码)
截图202512210219501254.jpg
截图202512210219541052.jpg
5. 位运算符(单片机位操作必备)
AI8051U 引脚、寄存器常用位操作(A=5→00000101,B=10→00001010):
截图202512210220022578.jpg
实战应用(控制 LED):
P0 |= 0x01;  // P0.0置1(LED灭)
P0 &= ~0x01; // P0.0置0(LED亮)
P0 ^= 0x01;  // P0.0翻转(LED闪烁)
截图202512210220061203.jpg
五、核心避坑总结
        1. printf 使用:必须开启PRINTF_HID宏,字符串用英文双引号,分号结尾;
        2. 进制:十六进制加0x,二进制手动换算或用计算器;
        3. 数据类型:避免溢出,8 位变量别超 255,乘法优先用u16;
        4. 运算符:==是判断相等,=是赋值,别写混;%是取余不是百分比;
        5. 代码规范:大括号换行缩进,转义符用\r\n换行,宏定义简化类型名。
六、课后实战任务
        1. 用 printf 打印:十进制(X=200)、十六进制(0xC8)、二进制(11001000)的对应关系;
        2. 用 if 判断 + 逻辑运算符:如果X>100 && Y<20,打印 “条件满足”,否则打印 “条件不满足”;
        3. 用位运算符:让 P0.0 和 P0.1 的 LED 交替闪烁(结合延时函数,后续课程讲)。
这节课的 C 语言基础够支撑后面所有单片机实验了,重点是 “多写多试”,遇到 printf 不显示、变量溢出等问题,直接去 STC 论坛(www.STCAIMCU.com)提问~ 本节课就到这里,下节课讲延时函数和 LED 闪烁,不见不散!


回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:2
  • 最近打卡:2025-12-21 01:53:11
已绑定手机

0

主题

4

回帖

12

积分

新手上路

积分
12
发表于 2025-12-21 02:22:10 | 显示全部楼层
第八篇 AI8051U 深度入门:GPIO 输入输出实战(按键控制 LED)

大家好!欢迎收看本期《AI8051U 深度入门到 32 位》大型实战视频。开课口号走起来:“哪怕梦想让我们拼得遍体鳞伤,这一次我们也要勇往直前!”
上节课补完了 C 语言基础,这节课正式进入单片机核心操作 ——GPIO 输入输出!核心目标:搞懂 GPIO 是什么、用按键控制 LED(3 个实战任务),解决按键抖动问题,最后布置课后小练习,全程结合代码实战,看完就能上手。
一、GPIO 基础:通用输入输出端口
1. 什么是 GPIO?
GPIO(General Purpose I/O Ports)即通用输入输出端口,本质是单片机的引脚,能实现两个核心功能:
        • 输出:向引脚发送高电平(逻辑 1,接近 VCC 电压)或低电平(逻辑 0,接近 GND 电压);
        • 输入:读取引脚的电平状态(高 / 低),比如检测按键是否按下。
2. 高低电平的定义(3.3V 供电单片机)
        • 高电平(逻辑 1):引脚电压≈3.3V(不低于 1.09V,因施密特触发器默认开启);
        • 低电平(逻辑 0):引脚电压≈0V(不高于 0.99V);
                ○ 截图202512210220499616.jpg
        • 注意:引脚电压有上限(VDD+0.3V),3.3V 供电时别接超过 3.6V 的电压,避免损坏单片机。
截图202512210220543266.jpg
       
3. GPIO 的 4 种工作模式(重点记 2 种)
AI8051U 的 GPIO 通过PnM1和PnM0两个寄存器配置模式,核心模式如下:
截图202512210221062063.jpg
截图202512210221131960.jpg
截图202512210221214166.jpg
       
       
        • 实战建议:非特殊需求,一律配置为准双向口(PnM1=0x00; PnM0=0x00),兼顾输入输出。
二、按键输入原理(实验箱硬件逻辑)
实验箱上的按键电路(以 P32 为例):
截图202512210221262083.jpg
       
        • 引脚 P32 通过 300Ω 电阻连接 VCC,按键另一端接地;
        • 未按下:P32 = 高电平(逻辑 1);
        • 按下:P32 通过按键接地,P32 = 低电平(逻辑 0);
        • 核心逻辑:通过读取 P32 的电平,就能判断按键是否按下。
三、实战任务:按键控制 LED(3 个任务逐步升级)
基于上节课的 USB 工程,新增按键检测和 LED 控制代码,全程支持不停电下载(配置不变)。
截图202512210221315879.jpg
准备工作:代码初始化(必加)
在main函数开头添加 3 行关键初始化:
WTST = 0;        // 程序指令延时参数设为0,CPU运行最快
EAXFR = 1;       // 使能扩展寄存器(XFR)访问
CKCON = 0;        // 提高XRAM访问速度
任务 1:按下 P32 灯亮,松开灯灭
代码实现:
// 任务1:按下P32灯亮,松开灯灭
if (P32 == 0) {  // 检测P32是否为低电平(按键按下)
    P00 = 0;    // P00输出低电平,LED00亮
} else {        // 按键松开(P32=高电平)
    P00 = 1;    // P00输出高电平,LED00灭
}
核心逻辑:
        • P32 == 0:判断按键按下(低电平);
        • P40 = 0:打开 LED 的三极管开关(之前课程讲过,必须加,否则 LED 不亮);
        • 下载后效果:按 P32(实验箱左侧最后一个按键),LED00 亮;松开则灭。
任务 2:按下 P32 灯灭,松开灯亮(反向控制)
代码实现:
// 任务2:按下P32灯灭,松开灯亮
if (P32 == 1) {  // 按键松开(P32=高电平)
    P00 = 0;    // LED00亮
} else {        // 按键按下(P32=低电平)
    P00 = 1;    // LED00灭
}
核心逻辑:
        • 仅反转if条件和 LED 状态的对应关系;
        • 下载后效果:未按 P32 时 LED00 亮,按下则灭。
任务 3:按一下灯亮,再按一下灯灭(toggle 功能)
关键问题:按键抖动
机械按键按下 / 松开时,电平会波动(20ms 内),直接检测会导致 “按一下亮灭多次”,需通过延时消抖解决。
步骤 1:生成 20ms 延时函数
用 AI-ISP 软件的 “软件延时计算器” 生成:
        1. 打开 AI-ISP→“工具”→“软件延时计算器”;
        2. 系统频率选 24MHz,定时长度 20ms,指令集选 AI32;
截图202512210221443565.jpg
       
        3. 生成代码,复制到main函数前:
#include "intrins.h"  // 需添加该头文件,支持_nop_()函数
// 20ms延时函数(@24MHz)
void Delay20ms(void) {
    unsigned long edata i;
    _nop_();  // 空指令,稳定延时
    _nop_();
    i = 119998UL;
    while (i) i--;
}
步骤 2:任务 3 完整代码
u8 state = 0;  // 定义状态变量(0=灭,1=亮),全局变量
// 任务3:按一下灯亮,再按一下灯灭
if (P32 == 0) {          // 第一次检测按键按下
    Delay20ms();         // 延时20ms消抖(过滤抖动)
    if (P32 == 0) {      // 第二次确认按键按下(消抖后)
        state = !state;  // 状态取反(0→1→0→1...)
        P00 = state;     // 状态变量控制LED
        printf("state:%d\r\n", (int)state);  // 串口打印状态(可选)
        while (P32 == 0);  // 等待按键松开(避免一直触发)
    }
}
核心逻辑:
        1. 双重检测:先检测按键按下→延时消抖→再检测,确认是真实按下;
        2. 状态取反:用state = !state实现 “亮→灭→亮” 循环;
        3. 等待松开:while (P32 == 0),按键未松开前不执行后续代码,避免多次触发。
下载后效果:
按一次 P32,LED00 亮;再按一次,LED00 灭;循环往复,无抖动干扰。
四、避坑要点总结
        1. 变量定义位置:全局变量(如state)要定义在main函数外,所有函数都能调用;局部变量要定义在大括号开头;
        2. 头文件引入:Delay20ms用到_nop_(),必须添加#include "intrins.h";
        3. LED 开关:必须加P40 = 0(打开三极管开关),否则 LED 无论如何都不亮;
        4. 按键抖动:机械按键必消抖,20ms 是通用消抖时间,用 AI-ISP 计算器生成延时函数最准确;
截图202512210222013488.jpg
               
        5. 电平判断:==是判断相等,=是赋值,别写混(比如if (P32 = 0)是错误的)。
五、课后小练习(巩固实战)
        1. 任务 1:按 P32 按钮 LED 亮,按 P33 按钮 LED 灭(提示:新增 P33 检测,逻辑类似任务 1);
        2. 任务 2:按一下亮 1 颗灯,再按一下亮 2 颗,直到 8 颗全亮(提示:用变量count计数,count++,P0 = (1<<count) - 1实现亮灯数量递增)。
六、总结
这节课我们掌握了 GPIO 的核心用法:准双向口配置、按键输入检测(含消抖)、LED 输出控制,通过 3 个任务从简单到复杂,逐步理解 “输入→判断→输出” 的单片机逻辑。按键消抖是重点,后续所有按键相关实验都要用到。
有任何问题(比如 LED 不亮、按键无响应),记得去 STC 论坛(www.STCAIMCU.com)提问!下节课我们讲定时器,用定时器替代延时函数,实现更高效的 LED 闪烁,不见不散!


回复

使用道具 举报 送花

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

22

主题

89

回帖

913

积分

版主

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

下载 最新的 AiCube-ISP-V6.96L 或以上版本软件 !
深圳国芯人工智能有限公司-工具软件

下载 最新的 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不停电下载, 演示视频链接


回复

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2026-2-13 03:37 , Processed in 0.132037 second(s), 78 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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