找回密码
 立即注册
查看: 28|回复: 16

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

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

2

主题

14

回帖

64

积分

注册会员

积分
64
发表于 昨天 09:01 | 显示全部楼层 |阅读模式
第3集点亮第一颗LED

代码运行通过,功能实现:
截图202506260858426147.jpg
截图202506260859299344.jpg
源代码如下:

#include "ai8051u.h"
void main(void)
{
        P0M0 = 0X00;
        P0M1 = 0X00;
        P4M0 = 0X00;
        P4M1 = 0X00;
        P40 = 0;
        while(1)
        {
                P00 = 0;
                P01 = 0;
        }
}

03.zip

43.86 KB, 下载次数: 0

回复

使用道具 举报 送花

3

主题

546

回帖

-197

积分

等待验证会员

积分
-197
发表于 昨天 09:03 | 显示全部楼层
  1. 第3集 | 点燃第一颗LED  
  2. 【代码功能实现】  
  3. 代码运行通过,功能实现如下:  
  4. 1. P4M0和P4M1的初始化:  
  5.    P4M0和P4M1初始化为0x00,表示它们在初始化时处于“reset”的状态。  
  6.    这意味着它们需要通过后续的位操作来设置LED的驱动位(P4M0和P4M1的设置)以实现LED的点亮功能。  
  7. 2. P40的初始化:  
  8.    P40初始化为0,表示在模块初始化时,P40的状态为“free”的状态。  
  9.    这意味着在模块初始化完成后,P40的状态可以被设置为“reset”或“initialize”以进一步调整模块的配置。  
  10. 3. 代码执行逻辑:  
  11.    while(1)循环内,P00和P01初始化为0x00,表示在点亮LED的高 byte部分保持处于“idle”的状态。  
  12.    代码块中,P4M0和P4M1被设置为0x80,表示它们在低 byte部分设置为“initialize”状态, ready for LED的点亮操作。  
  13.    此外,P00和P01被设置为0x00,表示在点亮LED的高 byte部分保持处于“idle”的状态,直到后续的位操作完成。  
  14. 【模块初始化原理】  
  15. 1. P4M0和P4M1的设置:  
  16.    P4M0和P4M1在模块初始化完成后,可以被设置为“initialize”的状态,以进一步完成LED的点亮操作。  
  17.    这意味着它们需要通过后续的位操作(如P40和P4M0的设置)来实现对LED驱动位的调整。  
  18. 2. 位操作的作用:  
  19. P4M0的设置:用于设置LED的驱动位(Low byte),通过与P40的或运算(P40 | P4M0)完成对驱动位的设置。  
  20. P4M1的设置:用于设置LED的控制位(High byte),通过与P00的或运算(P00 | P4M1)完成对控制位的设置。  
  21. 【国芯AI的优势】  
  22. 1. 高性能与低功耗:  
  23.    国芯AI在8051U模块上的设计,采用了先进的高性能架构和低功耗技术,使得LCIO和51系列模块在功耗和性能上具有显著优势。  
  24. 2. 高精度与低延迟:  
  25.    国芯AI通过采用高精度的位运算和低延迟的控制算法,确保了LED的点亮操作具有稳定性和准确性。  
  26. 3. 灵活的模块配置:  
  27.    国芯AI支持多种模块配置,包括不同位的设置(如P4M0、P4M1、P40等),使得用户可以根据具体需求灵活调整模块的性能和功能。  
  28. 【实验过程与总结】  
  29. 1. 代码的运行与调试:  
  30.    在代码运行过程中,用户需要通过调试工具(如IDE或调试器)逐步完成对模块的初始化和位操作的设置,以实现LED的点亮功能。  
  31. 2. 实验结果与验证:  
  32.    通过实验,用户可以根据代码的逻辑和模块的配置,验证LED的点亮功能是否正常工作。  
  33. 3. 技术总结:  
  34.    通过本次实验,用户可以了解如何利用8051U模块实现简单的LED点亮功能,掌握位操作的基本原理,并了解国芯AI在模块设计中的优势。  
  35. 【视频与实践的结合】  
  36. 1. 视频内容:  
  37.    本次视频展示了如何通过国芯AI的8051U模块实现LED的点亮功能,包括模块的初始化、位操作的设置和实验过程中的注意事项。  
  38. 2. 实践操作:  
  39.    随后,用户可以根据视频内容,尝试在自己的实验设备上完成相同的实验,加深对8051U模块和LED点亮功能的理解。  
  40. 【总结与展望】  
  41. 通过本次学习,用户对8051U模块的入门到实战有了全面的了解,不仅掌握了模块的初始化和位操作的基本技巧,还了解了国芯AI在模块设计中的专业性和优势。  
  42. 未来,用户可以进一步学习LCIO和51系列模块的高级功能,如LED的灯光效果调整、模块的定时功能设置等,进一步提升实验的深度和广度。
复制代码

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

使用道具 举报 送花

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

2

主题

14

回帖

64

积分

注册会员

积分
64
发表于 昨天 09:14 | 显示全部楼层
第4集USB不停电下载

代码运行通过,功能实现:

截图202506260913256892.jpg
截图202506260914142853.jpg
源代码如下:

#include "ai8051u.h"                        //调用头文件
#include "stc32_stc8_usb.h"                //调用头文件


//char *USER_DEVICEDESC = NULL;
//char *USER_PRODUCTDESC = NULL;
//char *USER_STCISPCMD = "@STCISP#";

void main(void)
{
    P_SW2 |= 0x80;                //B7位写1,使能访问XFR
        
    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();                                     //USB CDC 接口配置

    IE2 |= 0x80;                                    //使能USB中断
    EA = 1;                                                                                        //IE |= 0X80;
        
        while (DeviceState != DEVSTATE_CONFIGURED);     //等待USB完成配置
        
        while(1)
        {
               
        if (bUsbOutReady)
        {
            USB_SendData(UsbOutBuffer,OutNumber);   //发送数据缓冲区,长度(接收数据原样返回, 用于测试)
            
            usb_OUT_done();
        }
               
                P40 = 0;        //P40端口输出0V
                P00 = 0;        //P00端口输出0V
                P02 = 0;        //P02端口输出0V
                //P01 = 0;        //P01端口输出0V
                //
        }
}

04.zip

1.19 MB, 下载次数: 0

回复 支持 反对

使用道具 举报 送花

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

2

主题

14

回帖

64

积分

注册会员

积分
64
发表于 昨天 09:20 | 显示全部楼层
第五集C语言基础配套程序

代码运行通过,功能实现:
截图202506260919089320.jpg
源代码:

#include "ai8051u.h"                        //调用头文件
#include "stc32_stc8_usb.h"                //调用头文件


#define u8  unsigned char                //8位无符号变量(0-255)
#define u16 unsigned int                //16位无符号变量(0-65535)       
       
u8 X = 200;
u8 Y = 10;

char *USER_DEVICEDESC = NULL;
char *USER_PRODUCTDESC = NULL;
char *USER_STCISPCMD = "@STCISP#";

void main(void)
{
    P_SW2 |= 0x80;                //B7位写1,使能访问XFR
       
    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();                                     //USB CDC 接口配置

    IE2 |= 0x80;                                    //使能USB中断
    EA = 1;                                                                                        //IE |= 0X80;
       
        while (DeviceState != DEVSTATE_CONFIGURED);     //等待USB完成配置
       
        while(1)
        {
               
        if (bUsbOutReady)                                                        //如果接收到了数据
        {
            //USB_SendData(UsbOutBuffer,OutNumber);   //发送数据缓冲区,长度(接收数据原样返回, 用于测试)
            
                        if( X && Y )        //如果条件为真,输出什么
                        {
                                printf("条件为真\r\n");
                        }
//                        else
//                        {
//                                printf("条件为假\r\n");
//                        }
                               
//                        printf("X / Y = %u \r\n",(u16)(X/Y));
                       
//                        printf("X %% Y = %u \r\n",(u16)(X%Y));
                       
            usb_OUT_done();                                                        //
        }
               
//                P40 = 0;        //P40端口输出0V
//                P00 = 0;        //P00端口输出0V
//                P02 = 0;        //P02端口输出0V
                //P01 = 0;        //P01端口输出0V
                //
        }
}

05.zip

78.29 KB, 下载次数: 0

回复 支持 反对

使用道具 举报 送花

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

2

主题

14

回帖

64

积分

注册会员

积分
64
发表于 昨天 09:25 | 显示全部楼层
第六集I/O口输入输出

代码运行通过,功能实现:
截图202506260923282051.jpg
截图202506260924221225.jpg
源代码:

#include "ai8051u.h"
#include "stc32_stc8_usb.h"
#include "intrins.h"

//char *USER_DEVICEDESC = NULL;
//char *USER_PRODUCTDESC = NULL;
//char *USER_STCISPCMD = "@STCISP#";

#define u8 unsigned char
#define u16 unsigned int
       

u8 state = 0;


void Delay20us(void)        //@24.000MHz
{
        unsigned long edata i;

        _nop_();
        _nop_();
        _nop_();
        i = 119998UL;
        while (i) i--;
}


void main(void)
{
        WTST = 0;
        EAXFR = 1;
        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;
       
        P40 = 0;
       
        usb_init();
        IE2 |= 0X80;
        EA = 1;
       
        while (DeviceState != DEVSTATE_CONFIGURED);
       
        while(1)
        {
                if (bUsbOutReady)
        {
                        //USB_SendData(UsbOutBuffer,OutNumber);
                       
                       
                        usb_OUT_done();
        }
               
               
                if(P32 ==  0)
                {
                        Delay20us();
                        if(P32 ==  0)
                        {
                                state =! state;
                                P00 =  state;
                                printf("state:%d\r\n",(int)state);
                               
                                while(P32 == 0);
                        }
                }
               
        }
               
}

06.zip

98.88 KB, 下载次数: 0

回复 支持 反对

使用道具 举报 送花

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

2

主题

14

回帖

64

积分

注册会员

积分
64
发表于 昨天 09:29 | 显示全部楼层
第七集定时器中断

代码运行通过,功能实现:
截图202506260928247775.jpg
截图202506260927499382.jpg
截图202506260928039025.jpg
源代码:

#include "ai8051u.h"
#include "stc32_stc8_usb.h"
#include "intrins.h"

//char *USER_DEVICEDESC = NULL;
//char *USER_PRODUCTDESC = NULL;
//char *USER_STCISPCMD = "@STCISP#";

#define u8 unsigned char
#define u16 unsigned int
       

u8 state = 0;
u8 Run_State = 0;     //运行状态

void Delay20us(void)        //@24.000MHz
{
        unsigned long edata i;

        _nop_();
        _nop_();
        _nop_();
        i = 119998UL;
        while (i) i--;
}

void Timer0_Init(void)                //500毫秒@24.000MHz
{
        TM0PS = 0x0F;                        //设置定时器时钟预分频 ( 注意:并非所有系列都有此寄存器,详情请查看数据手册 )
        AUXR &= 0x7F;                        //定时器时钟12T模式
        TMOD &= 0xF0;                        //设置定时器模式
        TL0 = 0xDC;                                //设置定时初始值
        TH0 = 0x0B;                                //设置定时初始值
        TF0 = 0;                                //清除TF0标志
        TR0 = 1;                                //定时器0开始计时
        ET0 = 1;                                //使能定时器0中断
}



void main(void)
{
        int count=1;
        WTST = 0;
        EAXFR = 1;
        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;
       
        P40 = 0;
       
        usb_init();
        IE2 |= 0X80;
       
        //Timer0_Init();           //定时器初始化
       
        EA = 1;
       
        while (DeviceState != DEVSTATE_CONFIGURED);
       
        while(1)
        {
                if (bUsbOutReady)
        {
                        //USB_SendData(UsbOutBuffer,OutNumber);
                       
                       
                        usb_OUT_done();
        }
                //灯光交替
               
                if(P32 ==  0)
                {
                        Delay20us();
                        if(P32 ==  0)
                        {
                                Run_State = !Run_State;
                                if (Run_State ==1)
                                {
                                        Timer0_Init();
                                }
                                else
                                {
                                        TR0=1;
                                        P00 = 1;
                                        P01 =  1;
                                }
                                //P00 =  0;
                                //Timer0_Init();

                                while(P32 == 0);
                        }
                }
               
        }
               
}
void Timer0_Isr(void) interrupt 1
{
        state =! state;
        P00 =  state;
        P01 =  !state;

}













07.zip

101.13 KB, 下载次数: 0

回复 支持 反对

使用道具 举报 送花

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

2

主题

14

回帖

64

积分

注册会员

积分
64
发表于 昨天 09:36 | 显示全部楼层
第八集定时器周期性调度任务

代码运行通过,功能实现:
截图202506260934127763.jpg
截图202506260934466053.jpg
源代码:

#include "io.h"


u8 State1 = 0;
u8 State2 = 0;
u8 State3 = 0;
u16 Key_Vol = 0;

void LED0_Blink(void)
{
        State1 = !State1;
        P00 = State1;
}
void LED1_Blink(void)
{
        State2 = !State2;
        P01 = State2;
}
void LED2_Blink(void)
{
        State3 = !State3;
        P02 = State3;
}
void KEY_Task(void)
{
        if(P32 == 0)
        {
                Key_Vol++;
                if(Key_Vol == 5)
                {
                        printf("按键单机任务");
                }
        }
        else
        {
                Key_Vol = 0;
        }
}

08.zip

155.13 KB, 下载次数: 0

回复 支持 反对

使用道具 举报 送花

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

2

主题

14

回帖

64

积分

注册会员

积分
64
发表于 昨天 09:40 | 显示全部楼层
第九集数码管

代码运行通过,功能实现:
截图202506260938356077.jpg
截图202506260939004542.jpg
源代码:

#include "config.h"
#include "task.h"
#include "io.h"


//char *USER_DEVICEDESC = NULL;
//char *USER_PRODUCTDESC = NULL;
char *USER_STCISPCMD = "@STCISP#";


void main(void)
{
        Sys_init();                                                                                //系统初始化
        usb_init();                                     //USB CDC 接口配置

    IE2 |= 0x80;                                    //使能USB中断
        Timer0_Init();                                                                        //定时器初始化
        init_595();                                      //595端口电平初始化
    EA = 1;                                                                                        //IE |= 0X80;
       
        P40 = 0;
       
        while (DeviceState != DEVSTATE_CONFIGURED);     //等待USB完成配置
       
        while(1)
        {
               
        if (bUsbOutReady)                                                        //如果接收到了数据
        {
            //USB_SendData(UsbOutBuffer,OutNumber);   //发送数据缓冲区,长度(接收数据原样返回, 用于测试)
                       
            usb_OUT_done();                                                        //
        }
                Task_Pro_Handler_Callback();                                //执行功能函数

        }
}



void Timer0_Isr(void) interrupt 1                //1MS执行一次
{

        Task_Marks_Handler_Callback();                                        //系统计时

}


09.zip

145.98 KB, 下载次数: 0

回复 支持 反对

使用道具 举报 送花

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

2

主题

14

回帖

64

积分

注册会员

积分
64
发表于 昨天 10:05 | 显示全部楼层
第十集虚拟键盘LED和数码管

代码成功运行,功能实现:
截图202506260959408762.jpg
截图202506260958599465.jpg
截图202506261001182267.jpg
截图202506261004006790.jpg
源代码:

#include "config.h"
#include "task.h"
#include "io.h"


char *USER_DEVICEDESC = NULL;
char *USER_PRODUCTDESC = NULL;
char *USER_STCISPCMD = "@STCISP#";

extern u32 REC_NUM;

void main(void)
{
        Sys_init();                                                                                //系统初始化
        usb_init();                                     //USB CDC 接口配置

    IE2 |= 0x80;                                    //使能USB中断
        Timer0_Init();                                                                        //定时器初始化
    EA = 1;                                                                                        //IE |= 0X80;
       
        P40 = 0;
       
        while (DeviceState != DEVSTATE_CONFIGURED);     //等待USB完成配置
       
        while(1)
        {
               
        if (bUsbOutReady)                                                        //如果接收到了数据
        {
                        REC_NUM = UsbOutBuffer[5]-48;
            //USB_SendData(UsbOutBuffer,OutNumber);   //发送数据缓冲区,长度(接收数据原样返回, 用于测试)
                       
            usb_OUT_done();                                                        //
        }
                Task_Pro_Handler_Callback();                                //执行功能函数

        }
}



void Timer0_Isr(void) interrupt 1                //1MS执行一次
{

        Task_Marks_Handler_Callback();                                        //系统计时

}



截图202506261001269267.jpg

10.zip

2.35 MB, 下载次数: 0

回复 支持 反对

使用道具 举报 送花

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

2

主题

14

回帖

64

积分

注册会员

积分
64
发表于 昨天 10:14 | 显示全部楼层
第十一集矩阵按键

代码成功运行,功能实现:
截图202506261013104546.jpg
截图202506261013421373.jpg
源代码:

#include "config.h"
#include "task.h"
#include "io.h"


char *USER_DEVICEDESC = NULL;
char *USER_PRODUCTDESC = NULL;
char *USER_STCISPCMD = "@STCISP#";


void main(void)
{
        Sys_init();                                                                                //系统初始化
        usb_init();                                     //USB CDC 接口配置

    IE2 |= 0x80;                                    //使能USB中断
        Timer0_Init();                                                                        //定时器初始化
        Init_595();
    EA = 1;                                                                                        //IE |= 0X80;
       
        P40 = 0;
       
        while (DeviceState != DEVSTATE_CONFIGURED);     //等待USB完成配置
       
        while(1)
        {
               
        if (bUsbOutReady)                                                        //如果接收到了数据
        {
            //USB_SendData(UsbOutBuffer,OutNumber);   //发送数据缓冲区,长度(接收数据原样返回, 用于测试)
                       
            usb_OUT_done();                                                        //
        }
                Task_Pro_Handler_Callback();                                //执行功能函数

        }
}



void Timer0_Isr(void) interrupt 1                //1MS执行一次
{

        Task_Marks_Handler_Callback();                                        //系统计时

}


11.zip

177.45 KB, 下载次数: 0

回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-6-27 11:56 , Processed in 0.185655 second(s), 96 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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