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

学习《Ai8051U教学视频》学习心得

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:8
  • 最近打卡:2025-04-19 09:25:08
已绑定手机

5

主题

19

回帖

149

积分

注册会员

积分
149
发表于 2025-4-6 10:15:21 | 显示全部楼层 |阅读模式
感谢官方 免费+包邮 Ai8051U 实验箱。
借此实验箱学习一下 Ai8051U 的进阶操作,
在本贴记录一下学习过程。
先来个跑马灯开工仪式:

截图202504061014154486.jpg

lsd.uvproj

12.21 KB, 下载次数: 4

回复

使用道具 举报 送花

3

主题

1160

回帖

1031

积分

等待验证会员

积分
1031
发表于 2025-4-6 10:18:00 | 显示全部楼层
学习《Ai8051U教学视频》学习心得

首先,衷心感谢STC官方提供的免费且包邮的Ai8051U实验箱,这为我们深入学习Ai8051U的进阶操作提供了极大的便利。借此机会,我将在此记录我的学习过程,并分享一些初步的心得体会。

1. 实验箱开箱与初步体验

收到实验箱后,首先进行了开箱检查。实验箱内包含了Ai8051U开发板、配套的电源适配器、USB数据线以及详细的使用手册。整体包装精致,配件齐全,体现了STC对用户体验的重视。

2. 跑马灯实验:开工仪式

作为学习的起点,我选择了经典的“跑马灯”实验。这一实验不仅能够帮助我们熟悉Ai8051U的基本操作,还能通过直观的LED灯闪烁效果,增强学习的趣味性。

2.1 实验步骤
1. 硬件连接:将Ai8051U开发板通过USB数据线连接到电脑,确保电源供应正常。
2. 软件环境搭建:安装STC官方提供的开发环境,并配置好编译器与调试工具。
3. 编写代码:根据实验手册,编写简单的跑马灯程序,控制开发板上的LED灯依次点亮和熄灭。
4. 程序下载与调试:将编写好的程序下载到Ai8051U开发板,观察LED灯的运行效果,并进行必要的调试。

2.2 实验结果
通过上述步骤,成功实现了跑马灯效果。LED灯按照预设的顺序依次点亮和熄灭,验证了Ai8051U的基本控制功能。

3. 学习心得

3.1 硬件与软件的协同
Ai8051U实验箱的硬件设计简洁而实用,配合STC官方提供的软件工具,能够快速搭建起开发环境。这种硬件与软件的协同,极大地提高了学习效率。

3.2 编程思维的培养
通过跑马灯实验,我深刻体会到了编程思维的重要性。从逻辑设计到代码实现,每一步都需要严谨的思考和细致的操作。这不仅锻炼了我的编程能力,也增强了我对嵌入式系统的理解。

3.3 进阶学习的展望
跑马灯实验只是Ai8051U学习的起点,接下来我计划深入学习其更高级的功能,如定时器、中断、串口通信等。通过不断实践和探索,我相信能够掌握Ai8051U的更多应用技巧,为未来的项目开发打下坚实的基础。

4. 结语

再次感谢STC官方提供的Ai8051U实验箱,这为我提供了一个宝贵的学习平台。通过跑马灯实验,我不仅熟悉了Ai8051U的基本操作,也激发了我对嵌入式系统学习的热情。期待在接下来的学习中,能够有更多的收获和成长。

后续学习计划:
深入学习Ai8051U的定时器与中断功能
探索串口通信的实现与应用
结合实际项目,进行综合应用开发

希望通过不断的学习与实践,能够将Ai8051U的强大功能发挥到极致,为未来的技术发展贡献自己的力量。

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

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:8
  • 最近打卡:2025-04-19 09:25:08
已绑定手机

5

主题

19

回帖

149

积分

注册会员

积分
149
发表于 2025-4-6 10:57:08 | 显示全部楼层
  1. #include <AI8051U.H>
  2. #include "ai_usb.h"
  3. u8 ucLed = 0xfe;
  4. void Led_Disp(u8 ucLed)
  5. {
  6.         P40 = 0;
  7.         P0 = ucLed;
  8. }
  9. void Delay1ms(void)        //@40.000MHz
  10. {
  11.         unsigned long edata i;
  12.         _nop_();
  13.         _nop_();
  14.         _nop_();
  15.         i = 9998UL;
  16.         while (i) i--;
  17. }
  18. void delay(u16 xms)
  19. {
  20.         u16 i;
  21.         for(i = xms; i > 0; i--)
  22.         {
  23.                 Delay1ms();
  24.         }
  25. }
  26. void main()
  27. {
  28.         EAXFR = 1;
  29.         WTST = 0;
  30.         CKCON = 0;
  31.        
  32.         P0M0 = 0x00; P0M1 = 0x00;
  33.     P1M0 = 0x00; P1M1 = 0x00;
  34.     P2M0 = 0x00; P2M1 = 0x00;
  35.     P3M0 = 0x00; P3M1 = 0x00;
  36.     P4M0 = 0x00; P4M1 = 0x00;
  37.     P5M0 = 0x00; P5M1 = 0x00;
  38.     P6M0 = 0x00; P6M1 = 0x00;
  39.     P7M0 = 0x00; P7M1 = 0x00;
  40.        
  41.         usb_init();
  42.         EA = 1;
  43.        
  44.         while(1)
  45.         {
  46.                 if(bUsbOutReady)
  47.                 {
  48.                         usb_OUT_done();
  49.                 }
  50.                 Led_Disp(ucLed);
  51.                 ucLed = _crol_(ucLed,1);
  52.                 delay(1000);
  53.         }
  54. }
复制代码
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:8
  • 最近打卡:2025-04-19 09:25:08
已绑定手机

5

主题

19

回帖

149

积分

注册会员

积分
149
发表于 2025-4-6 10:59:19 | 显示全部楼层
学习心得:
1 硬件与软件的协同
Ai8051U实验箱的硬件设计简洁而实用,配合STC官方提供的软件工具,能够快速搭建起开发环境。这种硬件与软件的协同,极大地提高了学习效率。
2 编程思维的培养
通过跑马灯实验,我深刻体会到了编程思维的重要性。从逻辑设计到代码实现,每一步都需要严谨的思考和细致的操作。这不仅锻炼了我的编程能力,也增强了我对嵌入式系统的理解。
3 进阶学习的展望
跑马灯实验只是Ai8051U学习的起点,接下来我计划深入学习其更高级的功能,如定时器、中断、串口通信等。通过不断实践和探索,我相信能够掌握Ai8051U的更多应用技巧,为未来的项目开发打下坚实的基础。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:8
  • 最近打卡:2025-04-19 09:25:08
已绑定手机

5

主题

19

回帖

149

积分

注册会员

积分
149
发表于 2025-4-6 12:13:57 | 显示全部楼层
第六课练习程序
  1. #include <AI8051U.H>
  2. #include "ai_usb.h"
  3. u8 ucLed[] = {0xff,0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00};
  4. u8 Key_Num = 0;
  5. void Led_Disp(u8 ucLed)
  6. {
  7.         P40 = 0;
  8.         P0 = ucLed;
  9. }
  10. //void Delay1ms(void)        //@40.000MHz
  11. //{
  12. //        unsigned long edata i;
  13. //        _nop_();
  14. //        _nop_();
  15. //        _nop_();
  16. //        i = 9998UL;
  17. //        while (i) i--;
  18. //}
  19. //void delay(u16 xms)
  20. //{
  21. //        u16 i;
  22. //        for(i = xms; i > 0; i--)
  23. //        {
  24. //                Delay1ms();
  25. //        }
  26. //}
  27. void main()
  28. {
  29.         EAXFR = 1;
  30.         WTST = 0;
  31.         CKCON = 0;
  32.        
  33.         P0M0 = 0x00; P0M1 = 0x00;
  34.     P1M0 = 0x00; P1M1 = 0x00;
  35.     P2M0 = 0x00; P2M1 = 0x00;
  36.     P3M0 = 0x00; P3M1 = 0x00;
  37.     P4M0 = 0x00; P4M1 = 0x00;
  38.     P5M0 = 0x00; P5M1 = 0x00;
  39.     P6M0 = 0x00; P6M1 = 0x00;
  40.     P7M0 = 0x00; P7M1 = 0x00;
  41.        
  42.         usb_init();
  43.         EA = 1;
  44.        
  45.         while(1)
  46.         {
  47.                 if(bUsbOutReady)
  48.                 {
  49.                         usb_OUT_done();
  50.                 }
  51. //        任务1:按下P32按钮灯亮,松开P32按钮灯灭;
  52. //                if(P32 == 0)
  53. //                {
  54. //                        Led_Disp(0x00);
  55. //                }
  56. //                else
  57. //                {
  58. //                        Led_Disp(0xff);
  59. //                }
  60. //        任务2:按下P32按钮灯灭,松开P32按钮灯亮;
  61. //                if(P32 == 0)
  62. //                {
  63. //                        Led_Disp(0xff);
  64. //                }
  65. //                else
  66. //                {
  67. //                        Led_Disp(0x00);
  68. //                }
  69.                
  70. //        课后小练1:按一下灯亮,按一下灯灭;
  71. //                if(P32 == 0)
  72. //                {
  73. //                        delay(20);
  74. //                        if(P32 == 0)
  75. //                        {
  76. //                                while(P32 == 0);
  77. //                                ucLed = ~ucLed;
  78. //                        }               
  79. //                }
  80. //                Led_Disp(ucLed);
  81. //        课后任务2:按一下亮一颗灯,在按一下亮两颗灯,直到全亮(变量+加法和乘法)
  82.                 if(P32 == 0)
  83.                 {
  84.                         delay(20);
  85.                         if(P32 == 0)
  86.                         {
  87.                                 while(P32 == 0);
  88.                                 if(++Key_Num > 8)Key_Num = 0;
  89.                                 Led_Disp(ucLed[Key_Num]);
  90.                         }               
  91.                 }
  92.                
  93.         }
  94. }
复制代码
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:8
  • 最近打卡:2025-04-19 09:25:08
已绑定手机

5

主题

19

回帖

149

积分

注册会员

积分
149
发表于 2025-4-6 12:36:37 | 显示全部楼层
第7课定时器程序,主要完成LED三秒取反一次,期间任意按下按钮,串口打印次数
  1. #include <AI8051U.H>
  2. #include "ai_usb.h"
  3. #define u8 unsigned char
  4. #define u16 unsigned int
  5.        
  6. u8 state = 0x00;
  7. u8 Key_Count = 0;
  8. void Led_Disp(u8 ucLed)
  9. {
  10.         P40 = 0;
  11.         P0 = ucLed;
  12. }
  13. void Delay20ms(void)        //@40.000MHz
  14. {
  15.         unsigned long edata i;
  16.         _nop_();
  17.         _nop_();
  18.         i = 199998UL;
  19.         while (i) i--;
  20. }
  21. void Timer0_Init(void)                //3秒@40.000MHz
  22. {
  23.         TM0PS = 0x98;                        //设置定时器时钟预分频 ( 注意:并非所有系列都有此寄存器,详情请查看数据手册 )
  24.         AUXR &= 0x7F;                        //定时器时钟12T模式
  25.         TMOD &= 0xF0;                        //设置定时器模式
  26.         TL0 = 0xB1;                                //设置定时初始值
  27.         TH0 = 0x00;                                //设置定时初始值
  28.         TF0 = 0;                                //清除TF0标志
  29.         TR0 = 1;                                //定时器0开始计时
  30.         ET0 = 1;                                //使能定时器0中断
  31. }
  32. void main()
  33. {
  34.         EAXFR = 1;
  35.         WTST = 0;
  36.         CKCON = 0;
  37.        
  38.         P0M0 = 0x00; P0M1 = 0x00;
  39.     P1M0 = 0x00; P1M1 = 0x00;
  40.     P2M0 = 0x00; P2M1 = 0x00;
  41.     P3M0 = 0x00; P3M1 = 0x00;
  42.     P4M0 = 0x00; P4M1 = 0x00;
  43.     P5M0 = 0x00; P5M1 = 0x00;
  44.     P6M0 = 0x00; P6M1 = 0x00;
  45.     P7M0 = 0x00; P7M1 = 0x00;
  46.        
  47.         usb_init();
  48.         Timer0_Init();
  49.         EA = 1;
  50.        
  51.         while(1)
  52.         {
  53.                 if(bUsbOutReady)
  54.                 {
  55.                         usb_OUT_done();
  56.                 }
  57.                 if(P32 == 0)
  58.                 {
  59.                         Delay20ms();
  60.                         if(P32 == 0)
  61.                         {
  62.                                 while(P32 == 0);
  63.                                 Key_Count++;
  64.                                 printf_usb("按键次数\xfd %d",(int)Key_Count);
  65.                         }
  66.                 }
  67.        
  68.         }
  69. }
  70. void Timer0_Isr(void) interrupt 1
  71. {
  72.         state = ~state;
  73.         Led_Disp(state);
  74. }
复制代码
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:8
  • 最近打卡:2025-04-19 09:25:08
已绑定手机

5

主题

19

回帖

149

积分

注册会员

积分
149
发表于 2025-4-12 17:34:02 | 显示全部楼层
为什么使用AiCube框架生成的CDC无法实现不掉电下载呢
1.png
2.png
3.png
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:8
  • 最近打卡:2025-04-19 09:25:08
已绑定手机

5

主题

19

回帖

149

积分

注册会员

积分
149
发表于 2025-4-19 09:25:08 | 显示全部楼层
今天学习了RTC,非常棒
  1. ////////////////////////////////////////
  2. // 文件名称: main.c
  3. // 文件描述:
  4. // 文件版本: V1.0
  5. // 修改记录:
  6. //   1. (2025-04-19) 创建文件
  7. ////////////////////////////////////////
  8. #include "config.h"                     //默认已包含stdio.h、intrins.h、ai_usb.h等头文件
  9. bit t0_flag = 0;
  10. bit t1_flag = 0;
  11. ////////////////////////////////////////
  12. // 项目主函数
  13. // 入口参数: 无
  14. // 函数返回: 无
  15. ////////////////////////////////////////
  16. void main(void)
  17. {
  18.     SYS_Init();
  19.         P40 = 0;
  20.     while (1)
  21.     {
  22.         if(t0_flag)
  23.                 {
  24.                         t0_flag = 0;
  25.                         printf_usb("Timer0!\r\n");
  26.                 }
  27.                 if(t1_flag)
  28.                 {
  29.                         t1_flag = 0;
  30.                         printf_usb("Timer1!\r\n");
  31.                 }
  32.                 USBLIB_OUT_Done();              //查询方式处理USB接收的数据
  33.     }
  34. }
  35. ////////////////////////////////////////
  36. // 系统初始化函数
  37. // 入口参数: 无
  38. // 函数返回: 无
  39. ////////////////////////////////////////
  40. void SYS_Init(void)
  41. {
  42.     EnableAccessXFR();                  //使能访问扩展XFR
  43.     AccessCodeFastest();                //设置最快速度访问程序代码
  44.     AccessIXramFastest();               //设置最快速度访问内部XDATA
  45.     IAP_SetTimeBase();                  //设置IAP等待参数,产生1us时基
  46.     P0M0 = 0x00; P0M1 = 0x00;           //初始化P0口为准双向口模式
  47.     P1M0 = 0x00; P1M1 = 0x00;           //初始化P1口为准双向口模式
  48.     P2M0 = 0x00; P2M1 = 0x00;           //初始化P2口为准双向口模式
  49.     P3M0 = 0x00; P3M1 = 0x00;           //初始化P3口为准双向口模式
  50.     P4M0 = 0x00; P4M1 = 0x00;           //初始化P4口为准双向口模式
  51.     P5M0 = 0x00; P5M1 = 0x00;           //初始化P5口为准双向口模式
  52.     P6M0 = 0x00; P6M1 = 0x00;           //初始化P6口为准双向口模式
  53.     P7M0 = 0x00; P7M1 = 0x00;           //初始化P7口为准双向口模式
  54.     TIMER0_Init();                      //定时器0初始化
  55.     TIMER1_Init();                      //定时器1初始化
  56.     USBLIB_Init();                      //USB库初始化
  57.     EnableGlobalInt();                  //使能全局中断
  58. }
  59. ////////////////////////////////////////
  60. // 毫秒延时函数
  61. // 入口参数: ms (设置延时的毫秒值)
  62. // 函数返回: 无
  63. ////////////////////////////////////////
  64. void delay_ms(uint16_t ms)
  65. {
  66.     uint16_t i;
  67.     do
  68.     {
  69.         i = MAIN_Fosc / 6000;
  70.         while (--i);
  71.     } while (--ms);
  72. }
  73. ////////////////////////////////////////
  74. // 定时器0中断服务程序
  75. // 入口参数: 无
  76. // 函数返回: 无
  77. ////////////////////////////////////////
  78. void TIMER0_ISR(void) interrupt TMR0_VECTOR
  79. {
  80.         P00 = ~P00;
  81.         t0_flag = 1;
  82. }
  83. ////////////////////////////////////////
  84. // 定时器1中断服务程序
  85. // 入口参数: 无
  86. // 函数返回: 无
  87. ////////////////////////////////////////
  88. void TIMER1_ISR(void) interrupt TMR1_VECTOR
  89. {
  90.        
  91.         P07 = ~P07;
  92.         t1_flag = 1;
  93. }
  94. ////////////////////////////////////////
  95. // USB库初始化函数
  96. // 入口参数: 无
  97. // 函数返回: 无
  98. ////////////////////////////////////////
  99. void USBLIB_Init(void)
  100. {
  101.     usb_init();                         //初始化USB模块
  102.     USB_SetIntPriority(0);              //设置中断为最低优先级
  103.     set_usb_ispcmd("@STCISP#");         //设置USB不停电下载命令
  104. }
  105. ////////////////////////////////////////
  106. // 等待USB配置完成函数
  107. // 入口参数: 无
  108. // 函数返回: 无
  109. ////////////////////////////////////////
  110. void USBLIB_WaitConfiged(void)
  111. {
  112.     while (DeviceState != DEVSTATE_CONFIGURED); //等待USB完成配置
  113. }
  114. ////////////////////////////////////////
  115. // USB设备接收数据处理程序
  116. // 入口参数: 无
  117. // 函数返回: 无
  118. // bUsbOutReady:USB设备接收数据标志位
  119. // OutNumber:USB设备接收到的数据长度
  120. // UsbOutBuffer:保存USB设备接收到的数据
  121. ////////////////////////////////////////
  122. void USBLIB_OUT_Done(void)
  123. {
  124.     if (bUsbOutReady)                   //查询是否有接收到USB主机发送数据
  125.     {
  126.         USB_SendData(UsbOutBuffer, OutNumber); //原路返回, 用于测试
  127.         usb_OUT_done();                 //当前包的数据处理完成,通知USB主机可以发送下一包数据
  128.     }
  129. }
  130. ////////////////////////////////////////
  131. // 定时器0初始化函数
  132. // 入口参数: 无
  133. // 函数返回: 无
  134. ////////////////////////////////////////
  135. void TIMER0_Init(void)
  136. {
  137. #define T0_PSCR         102
  138. #define T0_RELOAD       (65536 - (float)SYSCLK / 12 / (T0_PSCR + 1) * 2 / 1)
  139.     TIMER0_TimerMode();                 //设置定时器0为定时模式
  140.     TIMER0_12TMode();                   //设置定时器0为12T模式
  141.     TIMER0_Mode0();                     //设置定时器0为模式0 (16位自动重载模式)
  142.     TIMER0_DisableGateINT0();           //禁止定时器0门控
  143.     TIMER0_SetIntPriority(0);           //设置中断为最低优先级
  144.     TIMER0_EnableInt();                 //使能定时器0中断
  145.     TIMER0_SetPrescale(T0_PSCR);        //设置定时器0的8位预分频
  146.     TIMER0_SetReload16(T0_RELOAD);      //设置定时器0的16位重载值
  147.     TIMER0_Run();                       //定时器0开始运行
  148. }
  149. ////////////////////////////////////////
  150. // 定时器1初始化函数
  151. // 入口参数: 无
  152. // 函数返回: 无
  153. ////////////////////////////////////////
  154. void TIMER1_Init(void)
  155. {
  156. #define T1_PSCR         25
  157. #define T1_RELOAD       (65536 - (float)SYSCLK / 12 / (T1_PSCR + 1) * 500 / 1000)
  158.     TIMER1_TimerMode();                 //设置定时器1为定时模式
  159.     TIMER1_12TMode();                   //设置定时器1为12T模式
  160.     TIMER1_Mode0();                     //设置定时器1为模式0 (16位自动重载模式)
  161.     TIMER1_DisableGateINT1();           //禁止定时器1门控
  162.     TIMER1_SetIntPriority(0);           //设置中断为最低优先级
  163.     TIMER1_EnableInt();                 //使能定时器1中断
  164.     TIMER1_SetPrescale(T1_PSCR);        //设置定时器1的8位预分频
  165.     TIMER1_SetReload16(T1_RELOAD);      //设置定时器1的16位重载值
  166.     TIMER1_Run();                       //定时器1开始运行
  167. }
复制代码
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:8
  • 最近打卡:2025-04-19 09:25:08
已绑定手机

5

主题

19

回帖

149

积分

注册会员

积分
149
发表于 2025-4-19 09:26:10 | 显示全部楼层
截图202504190925562362.jpg
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-5-2 02:41 , Processed in 0.151735 second(s), 96 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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