找回密码
 立即注册
查看: 418|回复: 2

AI8051U心得和实验

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:1
  • 最近打卡:2025-09-04 21:55:23
已绑定手机

0

主题

0

回帖

10

积分

新手上路

积分
10
发表于 2025-9-4 21:55:23 | 显示全部楼层 |阅读模式
第一集,序言

Ai8051U单片机的强大功能深深吸引了我这个新手。通过序言,我了解到它能实现屏幕显示、IIS音频录放、手写计算器、
硬件乘除等多样化应用,展现了单片机的无限可能。视频演示更让我直观感受到它的灵活性与实用性,激发了我深入学
嵌入式开发的热情。这款芯片让我认识到,单片机不仅是电子控制的核心,更是实现智能化创意的重要工具。
截图202509042204202663.jpg 截图202509042204368364.jpg




第二集,硬件及工具介绍
观看硬件及工具介绍视频后,我对实验箱的丰富功能有了系统性认知,现整理关键硬件模块如下:
1.实验箱采用模块化设计,核心外设包括双模通信接口(USB Link 1D可同时实现程序烧录与在线调试,USB转双串口则兼容串口);
音频系统配备双通道输出(立体线路接口驱动外置音响,3.5mm耳机插孔支持直接监听);显示单元包含两种屏幕(128x64分辨率的OLED模
用于基础信息显示,TFT彩屏支持动画播放与图形化交互)。
2.在输入控制方面,实验箱提供两种键盘方案:传统矩阵键盘通过8个IO口实现4x2按键扫描,而创新性的ADC键盘仅需1个模拟引脚即可识别16个按键动作,
大幅节省硬件资源。存储系统搭载QSPI/SPI Flash芯片,既可保存程序运行时产生的关键数据(如传感器日志),又能通过TFT屏动态展示读取内容。
特别设计的硬件保护功能令人印象深刻:示波器BNC输入配备红色精密旋钮实现波形参数微调,LCD对比度调节旋钮确保不同光照条件下的可视性,掉电检测
电压调节模块则能在供电异常时触发数据保护机制。这些设计充分体现了该实验平台在教学与实践应用中的专业性与实用性。

截图202509042205232514.jpg 截图202509042205334251.jpg



第三集,点亮第一个LED灯
通过本次学习,我对Keil开发环境的基本操作有了更深入的理解,成功掌握了代码格式调整技巧。在教材指导下,我完成了
LED灯的基础控制实验,编写了GPIO初始化代码:通过配置P0M1/P0M0和P4M1/P4M0寄存器设置端口工作模式,最终实现P
00引脚驱动LED发光。这个实验让我理解了8051单片机端口模式寄存器的应用场景,同时也熟悉了Keil软件的工程管理、代码
编辑和编译调试流程。动手实践的过程使我对嵌入式开发的硬件配置与软件编写的配合关系有了直观认识。以下是部分代码显示:
#include "ai8051u.h"
void main(void)
{
   P0M1 = 0x00; P0M0 = 0x00;
   P4M1 = 0x00; P4M0 = 0x00;

  P40 = 0;

  while(1)
  {
     P00 = 0;
  }
截图202509042205592509.jpg 截图202509042206094849.jpg




第四集,USB不停电下载
通过本次学习,我对单片机USB下载功能有了全新认识。实验演示中最让我印象深刻的是USB不停电下载功能——这项技术
实现了真正的"一键下载",无需像传统方式那样手动按键即可自动进入USB writer模式,极大提升了开发效率。学习过程中,
我按照教程从STC官网(www.STCAI.com)获取了专用USB库文件。在代码开发环节,我掌握了几个实用技巧:首先是利用IDE的全局搜索功能,可以快速定位库文件中特定函数的定义位置;
其次是学习如何高效地移植代码——通过查找库函数原型,理解其参数结构后,即可将其精准地应用到主程序文件中。
视频还详细演示了命令参数的配置方法,这些知识对后续开发复杂功能大有裨益。这次学习不仅让我掌握了具体的技术实现,
更重要的是培养了查阅官方资料和复用代码模块的开发思维。


截图202509042206414490.jpg 截图202509042207537251.jpg

第五集,C语言基础
本阶段学习使我系统性地强化了C语言的核心概念,特别是在格式化输出和数值表示方面有了更深刻的理解。通过研习printf函数的宏定义实现(如#define printf printf_hid),
我掌握了代码替换的底层机制。针对格式化字符串参数fmt的解析,列举了其中部分的常规字符与控制字符

在格式说明符方面,我重新梳理了关键知识点:
- 科学计数法输出(%e/%E)与智能格式选择(%g/%G)
- 内存地址显示(%p)与特殊转义字符(\b退格、\ddd八进制转义等)
- 控制字符的应用场景(\a警报、\f分页等)

数值系统方面,通过实际演算夯实了三种进制的转换方法:
① 二进制四比特分组表示(0000-1111)
② 八进制逢八进一规律(0-7,10-14...)
③ 十六进制0x前缀表示法(0x1-0xF...)

这些基础知识的巩固为后续嵌入式开发中的寄存器操作和调试输出奠定了坚实基础。


截图202509042208153001.jpg 截图202509042208248534.jpg

第六集,I/O输入输出
通过学习本视频内容,我对GPIO(通用输入输出端口)有了系统的认识。GPIO是单片机的重要外设接口,通过控制引脚电平状态(高/低)
实现信号输入输出,主要包含四种工作模式:准双向口、推挽输出、高阻输入和开漏模式,适用于不同场景需求。同时,我还掌握了电流驱动
的两种方式(拉电流和灌电流)以及按键检测的基本原理。
视频中的三个按键控制LED实验尤其让人印象深刻,通过对比三种任务实现方式,我对GPIO编程有了更深理解:
1. 任务一和任务二分别演示了按键的两种直接控制模式:
- 任务一实现"按下即亮",利用判断P32是否为低电平(0)来控制LED
- 任务二则恰好相反,检测P32高电平(1)时点亮LED

2. 任务三展示了按键切换模式,通过状态变量state实现按键开/关切换功能:
- 使用state = !state实现状态翻转
- 通过while(P32 ==0)消抖,防止按键抖动误判
- 这帮助我理解了实战中按键不灵敏的原因和解决方法
这些实验不仅巩固了GPIO控制原理,更培养了我的实践编程思路。通过对比三种控制逻辑的异同,我学会了如何根据不同需求设计相应的IO控制程序。
截图202509042208494913.jpg 截图202509042208588158.jpg


第七集,定时中断
本次定时器专题的学习让我深入理解了其核心价值和应用要点:
一、定时器本质与优势
  • 定时器作为嵌入式系统的"时钟管家"可实现精准计时功能
  • 相比传统delay延时,使用定时器能:
    • 避免CPU空转浪费
    • 提升系统实时性
    • 实现多任务调度

二、STC单片机定时器特性
  • 采用24位增强型架构(8位预分频+13位自动重载)
  • 需注意8051/80251芯片的0xFD汉字编码兼容性问题
  • 掌握了三个核心公式:
    • 定时频率 = 系统时钟/(分频系数×计数值)
    • 定时时长 = (分频系数×计数值)/系统时钟
    • 初值计算 = 65536-(系统时钟×定时需求/分频系数)

三、编程要点把控
  • 函数三要素:
    • 定义:完整函数体实现
    • 声明:需加分号结束
    • 调用:参数间逗号分隔

通过例程分析,我更清楚了:
  • 定时器初始化的寄存器配置流程
  • 中断服务程序的编写规范
  • 如何利用定时器替代延时函数提升效率
这种理论与实践的结合,使我对嵌入式系统的时间管理有了系统性认知,为后续复杂功能开发打下坚实基础。
特别是对硬件特性(如0xFD问题)的深入理解,避免了很多实际开发中可能踩的坑。
截图202509042122195841.jpg 截图202509042122388421.jpg

实验1代码和成功图片
  1. #include "config.h"                     
  2. void main(void)
  3. {
  4.     SYS_Init();
  5.     while (1)
  6.     {
  7.                                 printf_usb("Hello World !\r\n");
  8.     }
  9. }
  10. void SYS_Init(void)
  11. {
  12.     EnableAccessXFR();               
  13.     IAP_SetTimeBase();                 
  14.     P0M0 = 0x00; P0M1 = 0x00;         
  15.     P1M0 = 0x00; P1M1 = 0x00;         
  16.     P2M0 = 0x00; P2M1 = 0x00;         
  17.     P3M0 = 0x00; P3M1 = 0x00;           
  18.     P4M0 = 0x00; P4M1 = 0x00;         
  19.     P5M0 = 0x00; P5M1 = 0x00;           
  20.     P6M0 = 0x00; P6M1 = 0x00;         
  21.     P7M0 = 0x00; P7M1 = 0x00;         
  22.     delay_ms(1);
  23.     USBLIB_Init();                  
  24.     delay_ms(1);
  25.     EnableGlobalInt();  
  26. }
  27. void delay_us(uint16_t us)
  28. {
  29.     do
  30.     {
  31.         NOP(14);
  32.     } while (--us);
  33. }
  34. void delay_ms(uint16_t ms)
  35. {
  36.     uint16_t i;
  37.     do
  38.     {
  39.         i = MAIN_Fosc / 10000;
  40.         while (--i);
  41.     } while (--ms);
  42. }
  43. void USBLIB_Init(void)
  44. {
  45.     usb_init();
  46.     USB_SetIntPriority(0);        
  47.     set_usb_ispcmd("@STCISP#");        
  48. }
  49. void USBLIB_WaitConfiged(void)
  50. {
  51.     while (DeviceState != DEVSTATE_CONFIGURED)
  52.         WDT_Clear();                  
  53. }
  54. void USBLIB_OUT_Done(void)
  55. {
  56.     if (bUsbOutReady)                  
  57.     {
  58.         USB_SendData(UsbOutBuffer, OutNumber);
  59.         usb_OUT_done();               
  60.     }
  61. }
复制代码
截图202509042143381553.jpg


实验2代码和成功图片
  1. #include "config.h"                    
  2. void main(void)
  3. {
  4.    
  5.     SYS_Init();
  6.     while (1)
  7.     {
  8.         USBLIB_OUT_Done();            
  9.     }
  10. }
  11. void SYS_Init(void)
  12. {
  13.     EnableAccessXFR();                 
  14.     IAP_SetTimeBase();               
  15.     P0M0 = 0x00; P0M1 = 0x00;
  16.     P1M0 = 0x00; P1M1 = 0x00;         
  17.     P2M0 = 0x00; P2M1 = 0x00;         
  18.     P3M0 = 0x00; P3M1 = 0x00;
  19.     P4M0 = 0x00; P4M1 = 0x00;         
  20.     P5M0 = 0x00; P5M1 = 0x00;         
  21.     P6M0 = 0x00; P6M1 = 0x00;         
  22.     P7M0 = 0x00; P7M1 = 0x00;         
  23.     delay_ms(1);
  24.     USBLIB_Init();                    
  25.     delay_ms(1);
  26.     EnableGlobalInt();                 
  27. }
  28. void delay_us(uint16_t us)
  29. {
  30.     do
  31.     {
  32.         NOP(14);                    
  33.     } while (--us);
  34. }
  35. void delay_ms(uint16_t ms)
  36. {
  37.     uint16_t i;
  38.     do
  39.     {
  40.         i = MAIN_Fosc / 10000;
  41.         while (--i);
  42.     } while (--ms);
  43. }
  44. void USBLIB_Init(void)
  45. {
  46.     usb_init();                        
  47.     USB_SetIntPriority(0);              
  48.     set_usb_ispcmd("@STCISP#");        
  49. }
  50. void USBLIB_WaitConfiged(void)
  51. {
  52.     while (DeviceState != DEVSTATE_CONFIGURED)
  53.         WDT_Clear();      
  54. }               
  55. void USBLIB_OUT_Done(void)
  56. {
  57.     if (bUsbOutReady)               
  58.     {
  59.                         if (UsbOutBuffer[0] == 6)
  60.                                         printf_usb("Hello World !\r\n");
  61.                         else if (UsbOutBuffer[0] == 7)
  62.                                         printf_usb("China !\r\n");
  63.         usb_OUT_done();               
  64.     }
  65. }
复制代码
截图202509042150194348.jpg


实验3代码和成功图片
  1. #include "config.h"                     
  2. void main(void)
  3. {
  4.     SYS_Init();
  5.     while (1)
  6.     {
  7.     }
  8. }
  9. void SYS_Init(void)
  10. {
  11.     EnableAccessXFR();                  
  12.     IAP_SetTimeBase();                 
  13.     P0M0 = 0x00; P0M1 = 0x00;         
  14.     P1M0 = 0x00; P1M1 = 0x00;         
  15.     P2M0 = 0x00; P2M1 = 0x00;           
  16.     P3M0 = 0x00; P3M1 = 0x00;         
  17.     P4M0 = 0x00; P4M1 = 0x00;         
  18.     P5M0 = 0x00; P5M1 = 0x00;         
  19.     P6M0 = 0x00; P6M1 = 0x00;         
  20.     P7M0 = 0x00; P7M1 = 0x00;         
  21.     delay_ms(1);
  22.     USBLIB_Init();                     
  23.     delay_ms(1);
  24.     EnableGlobalInt();                  
  25. }
  26. void delay_us(uint16_t us)
  27. {
  28.     do
  29.     {
  30.         NOP(14);                       
  31.     } while (--us);
  32. }
  33. void delay_ms(uint16_t ms)
  34. {
  35.     uint16_t i;
  36.     do
  37.     {
  38.         i = MAIN_Fosc / 10000;
  39.         while (--i);
  40.     } while (--ms);
  41. }
  42. void USBLIB_Init(void)
  43. {
  44.     usb_init();                        
  45.     USB_SetIntPriority(3);            
  46.     set_usb_OUT_callback(USBLIB_OUT_Callback);
  47.     set_usb_ispcmd("@STCISP#");      
  48. }
  49. void USBLIB_WaitConfiged(void)
  50. {
  51.     while (DeviceState != DEVSTATE_CONFIGURED)
  52.         WDT_Clear();                  
  53. }
  54. void USBLIB_OUT_Callback(void)
  55. {
  56.                 if (UsbOutBuffer[0] == 6)
  57.         printf_usb("Hello World !\r\n");        
  58.     else if (UsbOutBuffer[0] == 7)
  59.         printf_usb("China !\r\n");               
  60. }
复制代码
截图202509042154443572.jpg



回复

使用道具 举报 送花

3

主题

1880

回帖

608

积分

等待验证会员

积分
608
发表于 2025-9-4 22:33:00 | 显示全部楼层
AI8051U心得与实验总结


第一集:序言

作为一款面向嵌入式开发的高性能单片机,AI8051U凭借其强大的功能和灵活的应用场景,为我打开了嵌入式开发的新世界。通过本系列课程的学习,我深刻体会到该芯片在实际应用中的广泛潜力。

AI8051U不仅具备传统单片机的基本控制能力,更集成了丰富的外设接口与智能处理模块,能够实现屏幕显示、IIS音频录放、手写计算器以及硬件乘除等复杂功能。这些功能的实现,使得单片机不再局限于简单的控制任务,而是成为智能化系统的重要组成部分。

视频演示中展示的多种应用场景,让我直观感受到AI8051U在工程实践中的灵活性与实用性。无论是语音交互、图形界面设计,还是数据处理与通信,AI8051U都能提供稳定且高效的解决方案。这不仅提升了我对嵌入式系统的理解,也激发了我深入学习的兴趣。

通过本集的学习,我认识到AI8051U不仅是电子控制的核心,更是实现智能创意的关键工具。它为开发者提供了强大的平台,使我们能够在有限的资源下实现无限的创新可能。

第二集:硬件及工具介绍

在本集中,通过对实验箱的硬件结构与开发工具的详细介绍,我对AI8051U的开发环境有了更加系统性的认识。

实验箱采用模块化设计,便于功能扩展与调试。核心外设包括双模通信接口,其中USB Link 1D支持程序烧录与在线调试,极大提高了开发效率;USB转双串口模块则兼容标准串口通信,增强了系统的通用性与可操作性。

音频系统方面,实验箱配备了双通道输出接口,支持立体声线路输出以驱动外置音响设备,同时配备3.5mm耳机插孔,便于实时监听音频信号。这一设计对于音频相关实验(如录音、播放、音效处理)具有重要意义。

显示屏模块支持多种分辨率与接口方式,适用于图形界面开发与人机交互设计。此外,实验箱还集成了多个传感器接口与输入输出端口,为各种传感与控制应用提供了便利。

在开发工具方面,AI8051U支持多种编程语言与开发环境,如C语言、汇编语言及图形化开发工具,满足不同层次开发者的使用需求。配合配套的调试器与仿真软件,可以实现代码的实时调试与性能优化。

通过本集的学习,我对AI8051U的硬件架构与开发工具有了全面了解,为后续实验打下了坚实的基础。

第三集:基础实验与功能验证

在本集中,我进行了多项基础实验,验证了AI8051U的各项功能模块,并逐步掌握了其基本使用方法。

首先,通过LED闪烁实验,熟悉了单片机的GPIO控制与基本时钟配置。随后,利用LCD显示屏进行文字与图形显示实验,进一步了解了图形界面的设计与更新机制。

音频录放实验中,我使用IIS接口实现了音频数据的采集与播放,体验了数字音频处理的基本流程。通过调整采样率与音量参数,观察到了音频质量的变化,加深了对音频信号处理的理解。

此外,我还尝试了手写计算器的功能实现,结合触摸屏输入与数学运算模块,完成了简单的计算逻辑设计。这一实验让我认识到AI8051U在交互式应用中的强大能力。

通过一系列基础实验,我不仅巩固了理论知识,也提升了动手实践能力,为后续更复杂的项目开发奠定了扎实的基础。

第四集:进阶实验与系统集成

在本集中,我进入了更高级别的实验阶段,尝试将多个功能模块集成到一个完整的系统中,探索AI8051U在复杂应用中的表现。

例如,在智能控制系统实验中,我结合传感器数据采集、LCD显示与音频反馈,构建了一个简单的环境监测与报警系统。通过读取温度与湿度传感器的数据,系统能够在异常情况下触发音频警报并显示相应信息。

此外,我还尝试了多任务调度实验,利用AI8051U的中断与定时器功能,实现了多个任务的并发执行。这一过程帮助我理解了嵌入式系统中任务管理与资源分配的重要性。

通过本集的实验,我进一步提升了对AI8051U整体架构的理解,并掌握了系统级开发的方法与技巧。

结语

AI8051U是一款极具潜力的嵌入式开发平台,其强大的功能、丰富的外设与灵活的开发环境,使其成为学习与实践嵌入式技术的理想选择。通过本系列实验,我不仅掌握了AI8051U的基本操作与功能实现,也在实践中不断提升了自己的工程能力与创新能力。

未来,我将继续深入探索AI8051U的更多功能,尝试构建更加复杂与实用的嵌入式系统,为智能硬件的发展贡献自己的力量。

[本文内容由国芯人工智能辅助生成,仅供参考]
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:44
  • 最近打卡:2025-10-10 14:30:18

16

主题

133

回帖

1170

积分

版主

积分
1170
发表于 2025-9-5 08:40:04 | 显示全部楼层
推荐优先看的 printf_usb("Hello World !\r\n")及usb不停电下载, 演示视频链接

回复

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-10-16 10:21 , Processed in 0.153421 second(s), 62 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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