找回密码
 立即注册
查看: 156|回复: 9

《8051U深度入门到32位51大型实战教学视频》打卡学习

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:2
  • 最近打卡:2025-06-09 12:08:07
已绑定手机

1

主题

9

回帖

29

积分

新手上路

积分
29
发表于 7 天前 | 显示全部楼层 |阅读模式
之前帖子是分散的,故开此贴记录我的学习历程
回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:2
  • 最近打卡:2025-06-09 12:08:07
已绑定手机

1

主题

9

回帖

29

积分

新手上路

积分
29
发表于 7 天前 | 显示全部楼层
第一集主要讲了Ai8051U相比STC32G的强悍之处,并通过几个实例展示了一下,对其中频谱分析仪和手写计算器很感兴趣
屏幕截图 2025-06-07 100910.png
屏幕截图 2025-06-07 100919.png
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:2
  • 最近打卡:2025-06-09 12:08:07
已绑定手机

1

主题

9

回帖

29

积分

新手上路

积分
29
发表于 7 天前 | 显示全部楼层
《8051U深度入门到32位51大型实战教学视频》教学视频第二集,主要讲了一下板载外设,开发环境的搭建和如何下载程序,需要注意的是isp软件要选择24MHz频率,型号选择Ai8051U-32K64
屏幕截图 2025-06-07 101339.png
屏幕截图 2025-06-07 101912.png
屏幕截图 2025-06-07 102024.png
屏幕截图 2025-06-07 110741.png
屏幕截图 2025-06-07 110754.png
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:2
  • 最近打卡:2025-06-09 12:08:07
已绑定手机

1

主题

9

回帖

29

积分

新手上路

积分
29
发表于 7 天前 | 显示全部楼层
第三集正式开始写程序,学习了Ai8051U空白工程的建立和基础点灯操作原理及实操,学习了基本io口的操作,了解了isp软件也能一键生成io口的配置代码
屏幕截图 2025-06-07 111902.png
屏幕截图 2025-06-07 112141.png
屏幕截图 2025-06-07 112148.png
屏幕截图 2025-06-07 113310.png
屏幕截图 2025-06-07 113726.png
屏幕截图 2025-06-07 114412.png
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:2
  • 最近打卡:2025-06-09 12:08:07
已绑定手机

1

主题

9

回帖

29

积分

新手上路

积分
29
发表于 7 天前 | 显示全部楼层
klo*** 发表于 2025-6-9 12:13
第三集正式开始写程序,学习了Ai8051U空白工程的建立和基础点灯操作原理及实操,学习了基本io口的操作,了 ...

代码如下
  1. #include "AI8051U.H" //头文件引用
  2. void main()
  3. {
  4.         P0M1 = 0; //P0端口为准双向口
  5.         P0M0 = 0;
  6.         P4M1 = 0; //P4端口为准双向口
  7.         P4M0 = 0;
  8.         
  9.         while(1)
  10.         {
  11.                 P40 = 0;
  12.                 P00 = 0;
  13.         }
  14. }
复制代码
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:2
  • 最近打卡:2025-06-09 12:08:07
已绑定手机

1

主题

9

回帖

29

积分

新手上路

积分
29
发表于 7 天前 | 显示全部楼层
第四集学习了USB不停电下载,省去了每次下载都要按复位键再点击下载的过程,还是很有用的。需要调用STC的USB库,有中断和查询的方式,区别在于是立即下载还是执行完当前程序再下载
屏幕截图 2025-06-07 132645.png
屏幕截图 2025-06-07 134408.png
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:2
  • 最近打卡:2025-06-09 12:08:07
已绑定手机

1

主题

9

回帖

29

积分

新手上路

积分
29
发表于 7 天前 | 显示全部楼层
第五节学习了USB-CDC串口printf的实现,USB-CDC串口相比于普通串口任意波特率都能工作,学习了进制的知识,如果要用64位变量(double),需要加#pragma float64,还学习了其他C语言基础知识。值得注意的是printf为16位,打印变量可能涉及强制类型转换
屏幕截图 2025-06-07 141200.png
屏幕截图 2025-06-07 141442.png
屏幕截图 2025-06-07 142039.png
屏幕截图 2025-06-07 142159.png
屏幕截图 2025-06-07 142712.png
屏幕截图 2025-06-07 142740.png
屏幕截图 2025-06-07 143314.png
屏幕截图 2025-06-07 143340.png
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:2
  • 最近打卡:2025-06-09 12:08:07
已绑定手机

1

主题

9

回帖

29

积分

新手上路

积分
29
发表于 7 天前 | 显示全部楼层
第六集学习了GPIO,按键的基本操作,了解了高低电平的阈值,该阈值与施密特触发器是否打开有关,需要注意的是,机械按键按下松开时会有10到20ms抖动,可以用isp软件生成延时函数delay来解决抖动带来的按键状态不稳的问题
代码如下
  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.         
  7. u8 state = 0;                                        //初始状态
  8. //char *USER_DEVICEDESC = NULL;
  9. //char *USER_PRODUCTDESC = NULL;
  10. //char *USER_STCISPCMD = "@STCISP#";
  11. void Delay20ms(void)        //@24.000MHz  Delay20ms();
  12. {
  13.         unsigned long edata i;
  14.         _nop_();
  15.         _nop_();
  16.         i = 119998UL;
  17.         while (i) i--;
  18. }
  19. void main(void)
  20. {
  21.     WTST = 0;          //设置程序指令延时参数,赋值为0可将CPU执行指令的速度设置为最快
  22.     EAXFR = 1;         //扩展寄存器(XFR)访问使能
  23.     CKCON = 0;         //提高访问XRAM速度
  24.         
  25.     P0M1 = 0x00;   P0M0 = 0x00;
  26.     P1M1 = 0x00;   P1M0 = 0x00;
  27.     P2M1 = 0x00;   P2M0 = 0x00;
  28.     P3M1 = 0x00;   P3M0 = 0x00;
  29.     P4M1 = 0x00;   P4M0 = 0x00;
  30.     P5M1 = 0x00;   P5M0 = 0x00;
  31.     P6M1 = 0x00;   P6M0 = 0x00;
  32.     P7M1 = 0x00;   P7M0 = 0x00;
  33.         
  34.         usb_init();                                     //USB CDC 接口配置
  35.     IE2 |= 0x80;                                    //使能USB中断
  36.     EA = 1;                                                                                        //IE |= 0X80;
  37.         
  38.         P40 = 0;
  39.         
  40.         while (DeviceState != DEVSTATE_CONFIGURED);     //等待USB完成配置
  41.         
  42.         while(1)
  43.         {
  44.                
  45.         if (bUsbOutReady)                                                        //如果接收到了数据
  46.         {
  47.             //USB_SendData(UsbOutBuffer,OutNumber);   //发送数据缓冲区,长度(接收数据原样返回, 用于测试)
  48.             
  49.             usb_OUT_done();                                                        //
  50.         }
  51.                
  52. //                //任务1:按下P32按钮灯亮,松开P32按钮灯灭;
  53. //                if( P32 == 0 )                                                                //判断P32按钮是否按下
  54. //                {
  55. //                        P00 = 0;
  56. //                }
  57. //                else
  58. //                {
  59. //                        P00 = 1;
  60. //                }
  61. //               
  62.                
  63.                
  64. //                //任务2:按下P32按钮灯灭,松开P32按钮灯亮;
  65. //                if( P32 == 1 )                                                                //判断P32按钮是否按下
  66. //                {
  67. //                        P00 = 0;
  68. //                }
  69. //                else
  70. //                {
  71. //                        P00 = 1;
  72. //                }
  73.                
  74.                 //任务3:按一下灯亮,按一下灯灭
  75.                 if( P32 == 0 )                                                                //判断P32按钮是否按下
  76.                 {
  77.                         Delay20ms();                                                        //延时20ms消抖
  78.                         if( P32 == 0 )
  79.                         {
  80.                                 state = !state;                                                //变量取反 0 1 0 1 0 1
  81.                                 P00 = state;
  82.                                 printf("state:%d\r\n",(int)state);
  83.                                 
  84.                                 while( P32 == 0 );                                        //等待P32松开
  85.                                 
  86.                         }
  87.                 }
  88.         
  89.                
  90.         }
  91. }
复制代码
屏幕截图 2025-06-07 143900.png
屏幕截图 2025-06-07 144011.png
屏幕截图 2025-06-07 144140.png
屏幕截图 2025-06-07 144241.png
屏幕截图 2025-06-07 145235.png
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:2
  • 最近打卡:2025-06-09 12:08:07
已绑定手机

1

主题

9

回帖

29

积分

新手上路

积分
29
发表于 7 天前 | 显示全部楼层
第七节主要学习了定时器中断,并写了三个任务加深理解,需要注意使用printf打印信息时,如果编码有0xfd会被编译器跳过,需加\xfd,还学习了函数的定义,声明和调用
屏幕截图 2025-06-07 151701.png
屏幕截图 2025-06-07 151825.png
屏幕截图 2025-06-07 151841.png
屏幕截图 2025-06-07 151918.png
屏幕截图 2025-06-07 151937.png
屏幕截图 2025-06-07 151948.png
屏幕截图 2025-06-07 152051.png
屏幕截图 2025-06-07 152111.png
屏幕截图 2025-06-07 152425.png
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:2
  • 最近打卡:2025-06-09 12:08:07
已绑定手机

1

主题

9

回帖

29

积分

新手上路

积分
29
发表于 7 天前 | 显示全部楼层
第八节学习了定时器的调度和模块化编程,通过学习规范了代码,方便了代码管理。使用调度器合理配置每个任务,能避免程序堵塞
任务调度器核心代码如下
  1. #include "task.h"
  2. static TASK_COMPONENTS Task_Comps[]=
  3. {
  4. //状态  计数  周期  函数
  5.         
  6. {0, 300,   300,   LED0_Blink},      /* task 1 Period: 300ms */
  7. {0, 600,   600,   LED1_Blink},      /* task 1 Period: 600ms */
  8. {0, 900,   900,   LED2_Blink},      /* task 1 Period: 600ms */  
  9. {0, 10,    10,    KEY_Task},      /* task 1 Period: 600ms */         
  10. };
  11. u8 Tasks_Max = sizeof(Task_Comps)/sizeof(Task_Comps[0]);
  12. //========================================================================
  13. // 函数: Task_Handler_Callback
  14. // 描述: 任务标记回调函数.
  15. // 参数: None.
  16. // 返回: None.
  17. // 版本: V1.0, 2012-10-22
  18. //========================================================================
  19. void Task_Marks_Handler_Callback(void)
  20. {
  21.     u8 i;
  22.     for(i=0; i<Tasks_Max; i++)
  23.     {
  24.         if(Task_Comps[i].TIMCount)      /* If the time is not 0 */
  25.         {
  26.             Task_Comps[i].TIMCount--;   /* Time counter decrement */
  27.             if(Task_Comps[i].TIMCount == 0) /* If time arrives */
  28.             {
  29.                 /*Resume the timer value and try again */
  30.                 Task_Comps[i].TIMCount = Task_Comps[i].TRITime;  
  31.                 Task_Comps[i].Run = 1;      /* The task can be run */
  32.             }
  33.         }
  34.     }
  35. }
  36. //========================================================================
  37. // 函数: Task_Pro_Handler_Callback
  38. // 描述: 任务处理回调函数.
  39. // 参数: None.
  40. // 返回: None.
  41. // 版本: V1.0, 2012-10-22
  42. //========================================================================
  43. void Task_Pro_Handler_Callback(void)
  44. {
  45.     u8 i;
  46.     for(i=0; i<Tasks_Max; i++)
  47.     {
  48.         if(Task_Comps[i].Run) /* If task can be run */
  49.         {
  50.             Task_Comps[i].Run = 0;      /* Flag clear 0 */
  51.             Task_Comps[i].TaskHook();   /* Run task */
  52.         }
  53.     }
  54. }
复制代码
屏幕截图 2025-06-07 154651.png
屏幕截图 2025-06-07 154933.png
屏幕截图 2025-06-07 155251.png
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-6-16 11:24 , Processed in 0.265664 second(s), 95 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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