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

AI8051U的学习之旅

[复制链接]
已绑定手机

1

主题

7

回帖

57

积分

注册会员

积分
57
发表于 2026-10-10 19:43:35 | 显示全部楼层 |阅读模式
第一集 序言

看了第一集知道了AI8051U强在哪里。1、支持屏幕显示和视频播放 且效果不差 2、支持IIS的录放音 3、支持PWM_DMA,可以控制1000多颗2812的灯进行显示,且不会有任何的干扰  3、频谱分析仪(上位机) 4、可以支持通过手写的数字进行运算到对应的值,这个里面参杂着部分ai的功能在里面算是这个AI8051U的特点所在了区别于传统的8051U
截图202610101942463627.jpg
噜噜大王头像.jpg
前软工男,现硬工男
回复

使用道具 举报 送花

已绑定手机

1

主题

7

回帖

57

积分

注册会员

积分
57
 楼主| 发表于 2026-10-12 12:31:34 | 显示全部楼层
第二集硬件及工具介绍
冲哥首先描述了一下实验箱中的各个元器件以及接口,这个试验箱的pcb板子接口确实挺多的。后面讲述了如何去下载安装软件以及工具、添加头文件
截图202610121231038759.jpg
前软工男,现硬工男
回复

使用道具 举报 送花

36

主题

250

回帖

1521

积分

版主

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

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

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

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



回复

使用道具 举报 送花

已绑定手机

1

主题

7

回帖

57

积分

注册会员

积分
57
 楼主| 发表于 2026-10-13 19:52:45 | 显示全部楼层
第三集点亮第一颗led
冲哥首先教我们如何创建新工程然后叫我们添加头文件(利用ISP软件),对开发工具进行基础性的设置,然后编写我们对应的代码
  1. #include "ai8051u.h"  //引入头文件
  2. void main(void) //主函数
  3. {
  4.     P0M0 = 0x00;
  5.     P0M1 = 0x00;
  6.     P4M0 = 0x00;
  7.     P4M1 = 0x00;
  8.     //主循环
  9.     while(1)
  10.     {
  11.         P00 = 0; //点亮LED
  12.     }
  13. }
复制代码

最后我们的led灯就点亮了,当然啦我这个肯定当前没有实物去点亮,不过跟我之前学的另一个板子的逻辑差不多,都是跟当前这个灯对应的引脚施加一个低电平。
截图202610131950265840.jpg
前软工男,现硬工男
回复

使用道具 举报 送花

已绑定手机

1

主题

7

回帖

57

积分

注册会员

积分
57
 楼主| 发表于 2026-10-20 07:10:47 | 显示全部楼层
第四集 USB不停电下载
截图202610200708174096.jpg
1.程序实验对比演示
2.程序下载所需文件(STC官网-软件工具-库函数-USB库文件)
3.程序移植关键部分到工程:
3.1程序 添加头文件
3.2 USB初始化函数(lib+.h库实现)
3.3 命令参数
3.4 打开P_SW2寄存器和IE2寄存器
示例代码如下所示:
  1. #include "ai8051u.h" //调用头文件
  2. #include "stc32_stc8_usb.h" //调用头文件
  3. char *USER_DEVICEDESC = NULL;
  4. char *USER_PRODUCTDESC = NULL;
  5. char *USER_STCISPCMD = "@STCISP#";
  6. void main(void)
  7. {
  8. P_SW2 |= 0x80; //B7位写1,使能访问XFR
  9. P0M1 = 0x00;   P0M0 = 0x00;
  10. P1M1 = 0x00;   P1M0 = 0x00;
  11. P2M1 = 0x00;   P2M0 = 0x00;
  12. P3M1 = 0x00;   P3M0 = 0x00;
  13. P4M1 = 0x00;   P4M0 = 0x00;
  14. P5M1 = 0x00;   P5M0 = 0x00;
  15. P6M1 = 0x00;   P6M0 = 0x00;
  16. P7M1 = 0x00;   P7M0 = 0x00;
  17. usb_init();                                     //USB CDC 接口配置
  18. IE2 |= 0x80;                                    //使能USB中断
  19. EA = 1;                                                                                        //IE |= 0X80;
  20. while (DeviceState != DEVSTATE_CONFIGURED);     //等待USB完成配置
  21. while(1)
  22. {
  23.     if (bUsbOutReady)
  24.     {
  25.         USB_SendData(UsbOutBuffer,OutNumber);   //发送数据缓冲区,长度(接收数据原样返回, 用于测试)
  26.       
  27.         usb_OUT_done();
  28.     }
  29.         P40 = 0;        //P40端口输出0V
  30.         P00 = 0;        //P00端口输出0V
  31.         P02 = 0;        //P02端口输出0V
  32.         //P01 = 0;        //P01端口输出0V
  33.         //
  34. }
  35. P0M1 = 0x00;   P0M0 = 0x00;
  36. P1M1 = 0x00;   P1M0 = 0x00;
  37. P2M1 = 0x00;   P2M0 = 0x00;
  38. P3M1 = 0x00;   P3M0 = 0x00;
  39. P4M1 = 0x00;   P4M0 = 0x00;
  40. P5M1 = 0x00;   P5M0 = 0x00;
  41. P6M1 = 0x00;   P6M0 = 0x00;
  42. P7M1 = 0x00;   P7M0 = 0x00;
  43. usb_init();                                     //USB CDC 接口配置
  44. IE2 |= 0x80;                                    //使能USB中断
  45. EA = 1;                                                                                        //IE |= 0X80;
  46. while (DeviceState != DEVSTATE_CONFIGURED);     //等待USB完成配置
  47. while(1)
  48. {
  49.     if (bUsbOutReady)
  50.     {
  51.         USB_SendData(UsbOutBuffer,OutNumber);   //发送数据缓冲区,长度(接收数据原样返回, 用于测试)
  52.       
  53.         usb_OUT_done();
  54.     }
  55.         P40 = 0;        //P40端口输出0V
  56.         P00 = 0;        //P00端口输出0V
  57.         P02 = 0;        //P02端口输出0V
  58.         //P01 = 0;        //P01端口输出0V
  59.         //
  60. }
  61. }
复制代码

这个USB不停电下载烧录程序可以提高我们的调试效率。
前软工男,现硬工男
回复

使用道具 举报 送花

已绑定手机

1

主题

7

回帖

57

积分

注册会员

积分
57
 楼主| 发表于 2026-10-21 07:58:00 | 显示全部楼层
第五集 C语言基础
冲哥简单的讲述了一下C语言的基础,其实冲哥这一节视频对于刚接触代码的人来说算是比较友好的了,站在我这个代码老手的眼中(软件开发),我学习任何代码就是从当前语言如何定义数据类型、函数、关键词以及基本进阶的使用以及了解通用库的使用其他的都是大差不差的,当然后续如果需要真正掌握C语言的话还是需要理解透C语言的专属工具——指针。这一集视频讲述了
一、摘要:

1.C语言 USB-CDC串口之printf函数的实现
2.数的进制:2进制、10进制、16进制
3.数据的基本类型
4.C语言常用运算符

二、C语言 USB-CDC串口之printf函数的实现

1.打开USB库中的PRINTF_HID宏定义(去掉//)
2.理解PRINTF的函数原型的定义
#define printf printf_hid
int printf_hid (const char *fmt, ...);

参数fmt -- 是格式控制字符串,包含了两种类型的对象:普通字符和转换说明 。

普通字符:在输出时,普通字符将原样不动地复制到标准输出。
printf("8051U深度入门到32位51大型实战视频\r\n");

转换说明:不直接输出,用于控制 printf 中参数的转换和打印。每个转换说明都由一个百分号字符(%)开始,以转换说明符结束,从而说明输出数据的类型、宽度、精度等。
printf("8051U深度入门到32位51大型实战视频,%s\r\n","加油");
前软工男,现硬工男
回复

使用道具 举报 送花

已绑定手机

1

主题

7

回帖

57

积分

注册会员

积分
57
 楼主| 发表于 2026-10-23 18:58:02 | 显示全部楼层
第六集 IO输入输出
1、GPIO(General Purpose I/O Ports)意思为通用输入/输出端口,通俗地说,就是一些引脚,可以通过它们输出高低电平或者通过它们读入引脚的状态-是高电平或是低电平。

单片机输出高电平就是输出VCC电压,输出低电平就是输出GND的电压;高电平就是指接近于电源正极电压的电平;也叫逻辑“1”;

  1. #include "ai8051u.h" //调用头文件
  2. #include "stc32_stc8_usb.h" //调用头文件
  3. #include "intrins.h" //d调用头文件
  4. #define u8 unsigned char //8位无符号变量(0-255)
  5. #define u16 unsigned int //16位无符号变量(0-65535)
  6. u8 state = 0; //初始状态
  7. char *USER_DEVICEDESC = NULL;
  8. char *USER_PRODUCTDESC = NULL;
  9. char *USER_STCISPCMD = "@STCISP#";
  10. void Delay20ms(void) //@24.000MHz Delay20ms();
  11. {
  12. unsigned long edata i;
  13. _nop_();
  14. _nop_();
  15. i = 119998UL;
  16. while (i) i--;
  17. }
  18. void main(void)
  19. {
  20. WTST = 0; //设置程序指令延时参数,赋值为0可将CPU执行指令的速度设置为最快
  21. EAXFR = 1; //扩展寄存器(XFR)访问使能
  22. CKCON = 0; //提高访问XRAM速度
  23. P0M1 = 0x00;   P0M0 = 0x00;
  24. P1M1 = 0x00;   P1M0 = 0x00;
  25. P2M1 = 0x00;   P2M0 = 0x00;
  26. P3M1 = 0x00;   P3M0 = 0x00;
  27. P4M1 = 0x00;   P4M0 = 0x00;
  28. P5M1 = 0x00;   P5M0 = 0x00;
  29. P6M1 = 0x00;   P6M0 = 0x00;
  30. P7M1 = 0x00;   P7M0 = 0x00;
  31. usb_init();                                     //USB CDC 接口配置
  32. IE2 |= 0x80;                                    //使能USB中断
  33. EA = 1;                                                                                        //IE |= 0X80;
  34. P40 = 0;
  35. while (DeviceState != DEVSTATE_CONFIGURED);     //等待USB完成配置
  36. while(1)
  37. {
  38.     if (bUsbOutReady)                                                        //如果接收到了数据
  39.     {
  40.         //USB_SendData(UsbOutBuffer,OutNumber);   //发送数据缓冲区,长度(接收数据原样返回, 用于测试)
  41.       
  42.         usb_OUT_done();                                                        //
  43.     }
  44. // //任务1:按下P32按钮灯亮,松开P32按钮灯灭;
  45. // if( P32 == 0 ) //判断P32按钮是否按下
  46. // {
  47. // P00 = 0;
  48. // }
  49. // else
  50. // {
  51. // P00 = 1;
  52. // }
  53. //
  54. // //任务2:按下P32按钮灯灭,松开P32按钮灯亮;
  55. // if( P32 == 1 ) //判断P32按钮是否按下
  56. // {
  57. // P00 = 0;
  58. // }
  59. // else
  60. // {
  61. // P00 = 1;
  62. // }
  63.         //任务3:按一下灯亮,按一下灯灭
  64.         if( P32 == 0 )                                                                //判断P32按钮是否按下
  65.         {
  66.                 Delay20ms();                                                        //延时20ms消抖
  67.                 if( P32 == 0 )
  68.                 {
  69.                         state = !state;                                                //变量取反 0 1 0 1 0 1
  70.                         P00 = state;
  71.                         printf("state:%d\r\n",(int)state);
  72.                
  73.                         while( P32 == 0 );                                        //等待P32松开
  74.                
  75.                 }
  76.         }
  77. }
  78.         //任务3:按一下灯亮,按一下灯灭
  79.         if( P32 == 0 )                                                                //判断P32按钮是否按下
  80.         {
  81.                 Delay20ms();                                                        //延时20ms消抖
  82.                 if( P32 == 0 )
  83.                 {
  84.                         state = !state;                                                //变量取反 0 1 0 1 0 1
  85.                         P00 = state;
  86.                         printf("state:%d\r\n",(int)state);
  87.                
  88.                         while( P32 == 0 );                                        //等待P32松开
  89.                
  90.                 }
  91.         }
  92. }
  93. }
复制代码
截图202610311809222738.jpg

5d14e44bf252ee217f0d22a9527676e5.jpg
截图202610231857095978.jpg

前软工男,现硬工男
回复

使用道具 举报 送花

已绑定手机

1

主题

7

回帖

57

积分

注册会员

积分
57
 楼主| 发表于 2026-10-28 18:41:09 | 显示全部楼层
第七集:定时器中断
理解定时器计数原理,中断的概念、中断触发、中断服务函数。不再依靠软件延时阻塞程序,利用定时器硬件计时,结合中断实现后台计时,主程序可以同时处理其他任务。认识到中断可以解放 CPU,解决程序阻塞问题。
截图202610281840515922.jpg
定时器本质就是ic里面的时钟不断的进行累加然后到了对应的位数就会置零,然后可以利用定时器中断来实现,当出现某一个外部因素想要先去执行其他程序执行完成后再来继续执行当前代码就会应用到定时器中断。示例代码如下:
  1. #include "ai8051u.h"        // 调用头文件
  2. #include "stc32_stc8_usb.h" // 调用头文件
  3. #include "intrins.h"        // 调用头文件
  4. #define u8 unsigned char // 8位无符号变量(0-255)
  5. #define u16 unsigned int // 16位无符号变量(0-65535)
  6. u8 state = 0; // 初始状态
  7. void Delay20ms(void) //@24.000MHz Delay20ms();
  8. {
  9.     unsigned long edata i;
  10.     _nop_();
  11.     _nop_();
  12.     i = 119998UL;
  13.     while (i) i--;
  14. }
  15. void Timer0_Init(void)                //3秒@24.000MHz
  16. {
  17.         TM0PS = 0x63;                        //设置定时器时钟预分频 ( 注意:并非所有系列都有此寄存器,详情请查看数据手册 )
  18.         AUXR &= 0x7F;                        //定时器时钟12T模式
  19.         TMOD &= 0xF0;                        //设置定时器模式
  20.         TL0 = 0xA0;                                //设置定时初始值
  21.         TH0 = 0x15;                                //设置定时初始值
  22.         TF0 = 0;                                //清除TF0标志
  23.         TR0 = 1;                                //定时器0开始计时
  24.         ET0 = 1;                                //使能定时器0中断
  25. }
  26. void main(void)
  27. {
  28.                 int count; //按键次数
  29.     WTST = 0;    // 设置程序指令延时参数,赋值为0可将CPU执行指令的速度设置为最快
  30.     EAXFR = 1;   // 扩展寄存器(XFR)访问使能
  31.     CKCON = 0;   // 提高访问XRAM速度
  32.     P0M1 = 0x00;   P0M0 = 0x00;
  33.     P1M1 = 0x00;   P1M0 = 0x00;
  34.     P2M1 = 0x00;   P2M0 = 0x00;
  35.     P3M1 = 0x00;   P3M0 = 0x00;
  36.     P4M1 = 0x00;   P4M0 = 0x00;
  37.     P5M1 = 0x00;   P5M0 = 0x00;
  38.     P6M1 = 0x00;   P6M0 = 0x00;
  39.     P7M1 = 0x00;   P7M0 = 0x00;
  40.     usb_init();     // USB CDC 接口配置
  41.     IE2 |= 0x80;    // 使能USB中断
  42.                 Timer0_Init();
  43.     EA = 1;         // 全局中断使能
  44.     P20 = 0;
  45.     while (DeviceState != DEVSTATE_CONFIGURED); // 等待USB完成配置
  46.     while (1)
  47.     {
  48.         if (bUsbOutReady) // 如果接收到了数据
  49.         {
  50.             // USB_SendData(UsbOutBuffer, OutNumber); // 发送数据缓冲区,长度(接收数据原样返回, 用于测试)
  51.             usb_OUT_done();
  52.         }
  53.         // 任务1:
  54.         if (P32 == 0) // 判断P32按钮是否按下
  55.         {
  56.             Delay20ms(); // 延时20ms消抖
  57.             if (P32 == 0)
  58.             {
  59.                 printf_usb("按键按下次: %d\r\n", (int)count);
  60.                                                                 count++;
  61.                 while (P32 == 0); // 等待P32松开
  62.             }
  63.         }
  64.     }
  65. }
  66. void Timer0_Isr(void) interrupt 1
  67. {
  68.         state = !state;
  69.   P21 = state;
  70. }
复制代码
截图202610311751212060.jpg
0ccb2578a78ad706f7b934f7a4703baa.jpg
前软工男,现硬工男
回复

使用道具 举报 送花

已绑定手机

1

主题

7

回帖

57

积分

注册会员

积分
57
 楼主| 发表于 7 天前 | 显示全部楼层
在这个学习AI8051U教程视频0到7集首先需要感谢STC官方免费送的擎天柱开发板,可以借助这个开发板完成基本的led显示流水灯以及按键切换流水灯样式的效果。
0ccb2578a78ad706f7b934f7a4703baa.jpg

前软工男,现硬工男
回复

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2026-11-7 12:33 , Processed in 0.076322 second(s), 79 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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