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

打卡AI8051学习

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:7
  • 最近打卡:2025-10-15 09:48:08
已绑定手机

2

主题

7

回帖

52

积分

注册会员

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

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:208
  • 最近打卡:2025-10-15 11:03:15

787

主题

1万

回帖

1万

积分

管理员

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


上面是 小李 演示:Ai8051U, printf_usb("Hello World !\r\n")及usb不停电下载@AiCube之图形化程序自动生成


上面是 小赵 演示:Ai8051U, printf_usb("Hello World !\r\n")及usb不停电下载@AiCube之图形化程序自动生成
回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:7
  • 最近打卡:2025-10-15 09:48:08
已绑定手机

2

主题

7

回帖

52

积分

注册会员

积分
52
发表于 2025-9-11 09:18:09 | 显示全部楼层
学习了课程的第二集,
首先了解了开发板的外设,布局,以及相关芯片。对开发板有了一定的熟悉。
其次下载了开发软件并配置好了环境,下载了烧录软件,
并且学会了程序的烧录方法!继续加油。
回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:7
  • 最近打卡:2025-10-15 09:48:08
已绑定手机

2

主题

7

回帖

52

积分

注册会员

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

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:7
  • 最近打卡:2025-10-15 09:48:08
已绑定手机

2

主题

7

回帖

52

积分

注册会员

积分
52
发表于 2025-9-27 15:28:15 | 显示全部楼层
之前用过一些应用类的开发,没想到时隔多年,库里居然有printf()
这下调试程序,计算再也不容易出错了,
以前用51经常出错  变量类型  计算  指针 搞着搞着就容易出错,排查要好久
这下轻松了 printf()一个输出,直接搞定。
一个搞不定那就多整几个,总有一个Printf函数解决
回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:7
  • 最近打卡:2025-10-15 09:48:08
已绑定手机

2

主题

7

回帖

52

积分

注册会员

积分
52
发表于 前天 13:34 | 显示全部楼层
跟着冲哥打卡第五集 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(可能会输出内存中的任意值。
回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:7
  • 最近打卡:2025-10-15 09:48:08
已绑定手机

2

主题

7

回帖

52

积分

注册会员

积分
52
发表于 前天 16:25 | 显示全部楼层
跟着冲哥学习8051U打卡第六集

I/O输入输出

四种模式,常用准双向模式
截图202510141625031739.jpg
回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:7
  • 最近打卡:2025-10-15 09:48:08
已绑定手机

2

主题

7

回帖

52

积分

注册会员

积分
52
发表于 昨天 09:48 | 显示全部楼层
第七集学习打卡  

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

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:7
  • 最近打卡:2025-10-15 09:48:08
已绑定手机

2

主题

7

回帖

52

积分

注册会员

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

#include"ai8051u.h"
#include"ai_usb.h"
#define MAIN_FOSC  24000000UL


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中断
}
回复

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-10-16 05:39 , Processed in 0.132146 second(s), 89 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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