xkalqkto 发表于 2025-9-8 16:55:12

打卡AI8051学习

第一集入门
今天完整学完第一集,冲哥的讲解完全超出预期,把 “入门必懂的核心问题” 拆解得细致又透彻。比如大家常问的 “汇编和 C 语言该选哪个”,他没有简单下结论,而是结合客户实际开发场景分析:汇编适合对代码效率要求极高的简单控制(比如仅需点亮 LED、按键检测的极简项目),但后期维护难;C 语言更适配复杂项目(比如带数码管显示、ADC 测温的综合功能),代码可读性强,调试也方便,还举例说 “现在工业上 80% 的 51 项目都用 C 语言”,让我瞬间明确了学习方向。

神农鼎 发表于 2025-9-8 22:01:09

推荐优先看的 printf_usb("Hello World !\r\n")及usb不停电下载, 演示视频链接

https://v.stcai.com/sv/1c5eec2-197fcd9b766/1c5eec2-197fcd9b766.mp4
上面是 小李 演示:Ai8051U, printf_usb("Hello World !\r\n")及usb不停电下载@AiCube之图形化程序自动生成

https://v.stcai.com/sv/1fce8086-197cf2b9dd4/1fce8086-197cf2b9dd4.mp4
上面是 小赵 演示:Ai8051U, printf_usb("Hello World !\r\n")及usb不停电下载@AiCube之图形化程序自动生成

xkalqkto 发表于 2025-9-11 09:18:09

学习了课程的第二集,
首先了解了开发板的外设,布局,以及相关芯片。对开发板有了一定的熟悉。
其次下载了开发软件并配置好了环境,下载了烧录软件,
并且学会了程序的烧录方法!继续加油。

xkalqkto 发表于 2025-9-11 10:17:30

看了第四集,知道了如何进行USB不停电下载,这一过程包括下载软件资源,添加头文件等,实现了这一操作之后,能够极大地提高效率。
USB不停电下载
下载所需文件(STC官网-软件工具-库函数-USB库文件)
移植关键部分到工程
添加头文件
USB初始化函数(Hib+.h库实现)
添加库文件
命令参数
打开P SW2寄存器和IE2寄存器(只打开一个位!)

xkalqkto 发表于 2025-9-27 15:28:15

之前用过一些应用类的开发,没想到时隔多年,库里居然有printf()
这下调试程序,计算再也不容易出错了,
以前用51经常出错变量类型计算指针 搞着搞着就容易出错,排查要好久
这下轻松了 printf()一个输出,直接搞定。
一个搞不定那就多整几个,总有一个Printf函数解决

xkalqkto 发表于 3 天前

跟着冲哥打卡第五集 C语言基础 完成
C语言USB-CDC串口之printf趣数的实现
1.打开USB库中的PRINTF.HIQ宏定义(去掉//)
2.理解PRINTF的函数原型的定义 #define printf printf_hid int printf_hid (const char *fmt; ...);
参数fmt --是格式控制字符串,包含了两种类型的对象:普通字符和转换说明普通字符:在输出时,普通字符将原样不动地复制到标准输出。

转换说明简介
1.类型:根据不同的fmt字符串,函数可能需要一系列的附加参数,每个参数包含了一个要被插入的值,替换了fmt参数中指定的每个%标签。关子附加参数,既可以是变量,也可以是常量。
2.位置: printf()函数的普通字符和转换说明放在""双引号内,附加参数放在双引号外,每个附加参数之间用逗号隔开。
3.数量:printf()的附加参数与转换说明符是。一对应关系,如果有n个转换说明符;,printf)的参数就应该有n+1个。如果参数个数少于对应的转换说明符,printf(可能会输出内存中的任意值。

xkalqkto 发表于 3 天前

跟着冲哥学习8051U打卡第六集

I/O输入输出

四种模式,常用准双向模式

xkalqkto 发表于 前天 09:48

第七集学习打卡

中断过程中学习从开始如何定义中断,配置参数,中断执行过程等老师都说的很详细。配合图形很容易记忆。第七集还是51的基础——定时器中断的使用,这是每一个学过51的人应该具备的基础。AI8051U跟传统51单片机不一样的地方在于,它的定时器是有预分频的,可能是由于内部时钟的频率比较高,加了一个分频寄存器后,定时器的定时时长就更灵活了。8位预分频+16位自动重装,T0-T4、T11六个定时器,这个配置太香了!

xkalqkto 发表于 前天 10:10

第八集-定时器周期性调度任务— 实验一:LED1实现0.3秒取反一次,LED2实现0.6秒取反一次,LED3 0.9秒取反一次
Ai8051U确实强大!接之前的学习打卡,按照冲哥的视频中的实验步骤把一些代码及注意事项打出来。

#include"ai8051u.h"
#include"ai_usb.h"
#define MAIN_FOSC24000000UL


u8 LED1_state = 0;
u8 LED2_state = 0;
u8 LED3_state = 0;


u16 count_300 = 0;
u16 count_600 = 0;
u16 count_900 = 0;

void Timer0_Init(void);                              

void main()
{
   
    EAXFR = 1;
    WTST = 0;
    CKCON = 0;
   

    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;   //设置为准双向口
   

   
    usb_init();                                    
    EUSB = 1;                                       
    Timer0_Init();                                 
    EA = 1;                                       
    while (DeviceState != DEVSTATE_CONFIGURED);   
   
    P40 = 0; // 打开LED供电
      
   
    while(1)
    {   
            
      if (bUsbOutReady)
      {                              
            usb_OUT_done();
      }
      
      if(count_300>=300)
      {
            count_300 = 0;
            LED1_state = !LED1_state;               
            P00 = LED1_state;
      }
      
      if(count_600>=600)
      {
            count_600 = 0;
            LED2_state = !LED2_state;               
            P01 = LED2_state;               
      }
      
      if(count_900>=900)
      {
            count_900 = 0;
            LED3_state = !LED3_state;               
            P02 = LED3_state;               
      }   
      
    }
}

void Timer0_Isr(void) interrupt 1   
{
    count_300++;
    count_600++;
    count_900++;   
}


void Timer0_Init(void)      //1毫秒@24.000MHz
{
    TM0PS = 0x00;            //设置定时器时钟预分频 ( 注意:并非所有系列都有此寄存器,详情请查看数据手册 )
    AUXR |= 0x80;            //定时器时钟1T模式
    TMOD &= 0xF0;            //设置定时器模式
    TL0 = 0x40;                //设置定时初始值
    TH0 = 0xA2;                //设置定时初始值
    TF0 = 0;                //清除TF0标志
    TR0 = 1;                //定时器0开始计时
    ET0 = 1;                //使能定时器0中断
}
页: [1]
查看完整版本: 打卡AI8051学习