找回密码
 立即注册
查看: 124|回复: 26

Ai8051U-实验指导书:实验内容与源代码

[复制链接]
  • 打卡等级:常住居民I
  • 打卡总天数:78
  • 最近打卡:2025-09-06 09:35:19

5

主题

196

回帖

1179

积分

超级版主

积分
1179
发表于 4 天前 | 显示全部楼层 |阅读模式
                     
                     Ai8051U


                    实验指导书

Ai8051U-实验指导书》目前收录了26个大类目的实验:
每项实验都经过全流程的验证,
实验文档包含但不限于实验介绍、原理图、源代码、实验过程、实验现象。


2 实验
2.1 实验一:printf_usb("Hello World !\r\n"),第一个完整的C语言程序
2.2 实验二:查询方式,查询到电脑命令后,printf_usb("Hello World !\r\n”)或其他
2.3 实验三:中断方式,单片机USB中断接收服务函数收到命令后,printf_usb("Hello World !\r\n")或其他
2.4 点灯实验一:点亮LED灯,继续完成前面的工程项目
2.5 点灯实验二:让LED灯闪烁起来
2.6 点灯实验三:通过USB-CDC方式控制Ai8051U进行LED点灯
2.7 点灯实验四:使用Ai8051U内置USB直接仿真流水灯
2.8 深圳大学-- I/O口实验:I/O口读取按键状态并点灯
     2.8.5 实验1:位操作,用USB直接仿真来调试
     2.8.6 实验1A--使用【AiCube】项目助手实现”位操作,用USB仿真来点灯”
     2.8.7 实验2:整组8位端口操作,用USB直接仿真来调试
     2.8.8 实验2A--使用【AiCube】项目助手实现”整组8位端口操作,用USB仿真来点灯”
     2.8.9 实验3:用USB-CDC读取按键状态在串口助手显示并点亮LED灯
     2.8.10 实验3A--使用【AiCube】项目助手实现”用USB-CDC读取按键状态在串口助手显示并点亮LED灯”
     2.8.11 实验4:用USB-CDC读取按键状态,在ISP软件的【调试仿真接口|擎天柱-LED-DIP40】 虚拟显示
     2.8.12 实验4A--使用【AiCube】项目助手实现”用USB-CDC读取按键状态并在【调试接口|擎天柱-LED--DIP40】虚拟显示”
     2.8.13 实验5:I/O口行列按键扫描,蜂鸣器发声大型实战
2.9 深圳大学--传统外部中断实验:INT0INT1INT2INT3
     2.9.1 深大--中断实验1(外部中断INT0/P3.2,INT1/P3.3控制点灯并USB仿真)
     2.9.2 深大--中断实验2(单片机主动触发外部中断INT2/P3.6,INT3/P3.7控制点灯并USB仿真
2.10 深圳大学--定时器实验:定时器0/124位定时器
       2.10.1 深大--定时器0/1,24位定时器实验(定时器中断点灯并通过USB-CDC端口输出信息)
       2.10.2 深大--使用【AiCube】工具实现:定时器0/1,24位定时器实验(定时器中断点灯并通过USB-CDC
       2.10.3 深大--定时器0/1,INT0/INT1,中断组合应用实验,演示程序
2.11 大型综合实战--深大课程设计:时钟+数码管+矩阵按键+蜂鸣器发声
2.12 深圳大学--RTC实验
       2.12.1 深大--RTC实验(拓展学习之使用RTC功能设定闹钟)
       2.12.2 深大--使用【AiCube】助手实现RTC实验(测试RTC,使用USB-CDC打印年/月/日/时/分/秒)
2.13 深大实验--串口通讯(硬件UART1与电脑收发通讯)
2.14 深大实验--串口通讯(硬件UART1UART2收发通讯)
2.15 深大实验--串口通讯(硬件UART1UART2数据透传)
2.16 大型综合实战--深大课程设计:硬件UART1发送按键码,接收端蜂鸣器根据收到的的键码发声
2.17 深大实验--串口通讯(串口通讯,串口绘图,ADC检测按键,ADC热敏电阻测温)
2.18 深大实验--串口通讯(硬件UART1UART2收发通讯-奇偶校验)
2.19 深大实验--串口通讯(USB-CDC发命令控制硬件UART1UART2多机通讯)
2.20 大学实验--串口1_2_3_4(中断设置标志位,主循环查询),演示实验
2.21 大学实验--串囗1_2_3_4+定时器0_1_3_4+外部中断INT0_1_2_3(中断设置标志位,主循环查询),演示实验
2.22 大型综合实战--深大课程设计:模拟RTC时钟+数码管+ADC查询方式检测按键
2.23 深大实验--ADC中断方式检测NTC热敏电阻测温+数码管显示
2.24 深大实验--硬件SPI控制74HC595驱动数码管显示模拟RTC时钟
2.25 大型综合实战--大学课程设计:硬件SPI读写串行Flash
2.26 深大实验--硬件SPI驱动OLED显示图片、图形、字符

文档目录中有用【AiCube】助手生成的实验项目:
    2.8.6 实验1A--使用【AiCube】项目助手实现”位操作,用USB仿真来点灯”
    2.8.8 实验2A--使用【AiCube】项目助手实现”整组8位端口操作,用USB仿真来点灯”
    2.8.10 实验3A--使用【AiCube】项目助手实现”用USB-CDC读取按键状态在串口助手显示并点亮LED灯”
    2.8.12 实验4A--使用【AiCube】项目助手实现”用USB-CDC读取按键状态并在【调试接口|擎天柱-LED--DIP40】虚拟显示”
    2.10.2 深大--使用【AiCube】工具实现:定时器0/1,24位定时器实验(定时器中断点灯并通过USB-CDC
    2.12.2 深大--使用【AiCube】助手实现RTC实验(测试RTC,使用USB-CDC打印年/月/日/时/分/秒)
  
由于实验例程是用当时版本的【AiCube】助手生成,大家可以用现在最新版本的【AiCube】助手按文档中流程操作,这里就不打包这类实验的项目源代码。

现将目录中实验的源代码按Ai8051U-实验指导书》目录顺序,分楼陆续上传至本贴,以供大家参考。


Ai8051U-实验指导书-20250904.pdf (33.51 MB, 下载次数: 7)
回复

使用道具 举报 送花

  • 打卡等级:常住居民I
  • 打卡总天数:78
  • 最近打卡:2025-09-06 09:35:19

5

主题

196

回帖

1179

积分

超级版主

积分
1179
发表于 4 天前 | 显示全部楼层
2.1         实验一:printf_usb("Hello World !\r\n"),第一个完整的C语言程序

2.1.1                    printf( )printf_usb( )实验程序代码
  1. #include  "ai8051u.h"   //头文件不分大小写,但关键字分大小写
  2. #include  "ai_usb.h"     //USB库和USB虚拟设备的头文件,需要在项目文件中添加对应的USB库
  3.                                   //由于在USB库函数的代码中已经定义了,不停电ISP下载命令字”@STCISP#”,
  4.                                   //只需要在下载软件的“收到用户命令后复位到ISP监控程序区”选项卡中进行相应的设置,
  5.                                   //即可实现USB不停电ISP下载功能,或串口不停电ISP下载功能。
  6. void  main(void)
  7. {
  8.     EAXFR = 1;   //允许访问扩展的特殊寄存器,XFR
  9.     WTST = 0;     //设置取程序代码等待时间,赋值为 0 表示不等待,程序以最快速度运行
  10.     CKCON = 0;  //设置访问片内的 xdata 速度,赋值为 0 表示用最快速度访问,不增加额外的等待时间
  11.     usb_init();
  12.     //初始化USB模块,并且会将【P3.0, P3.1】初始化为高阻输入,不影响USB【D-, D+】通讯
  13.     EA = 1;          //总中断允许位打开
  14.     while (1)
  15.     {
  16.         printf_usb("Hello World !\r\n");    //直接打印输出 “Hello World !” 到主机相应软件的USB【CDC/HID-串口助手】
  17.                                                         //  \r是回车,跳到行首,\n是换行,就是换到下一行;\r\n不要交换次序
  18.     }
  19. }
复制代码

以上是完整的第一个程序代码

Project-CDC1(printf_usb).zip (33.04 KB, 下载次数: 2)

回复

使用道具 举报 送花

  • 打卡等级:常住居民I
  • 打卡总天数:78
  • 最近打卡:2025-09-06 09:35:19

5

主题

196

回帖

1179

积分

超级版主

积分
1179
发表于 4 天前 | 显示全部楼层
2.2         实验二:查询方式,查询到电脑命令后,printf_usb("Hello World!\r\n")或其他

2.2.1                printf( ),printf_usb( )实验程序代码
  1. #include  "ai8051u.h"   //头文件不分大小写,但关键字分大小写
  2. #include  "ai_usb.h"     //USB库和USB虚拟设备的头文件,需要在项目文件中添加对应的USB库
  3. //由于在USB库函数的代码中已经定义了,不停电ISP下载命令字”@STCISP#”,
  4. //只需要在下载软件的“收到用户命令后复位到ISP监控程序区”选项卡中进行相应的设置,
  5. //即可实现USB不停电ISP下载功能,或串口不停电ISP下载功能。
  6. void main(void)
  7. {
  8.     EAXFR = 1;    //允许访问扩展的特殊寄存器,XFR
  9.     WTST = 0;     //设置取程序代码等待时间,赋值为 0 表示不等待,程序以最快速度运行
  10.     CKCON = 0;   //设置访问片内的 xdata 速度,赋值为 0 表示用最快速度访问,不增加额外的等待时间
  11.     usb_init();      //初始化USB模块
  12.                         //初始化USB模块,并且会将【P3.0, P3.1】初始化为高阻输入,不影响USB【D-, D+】通讯
  13.     EA = 1;          //总中断允许位打开
  14.     while(1)
  15.     {
  16.          if(bUsbOutReady)
  17.         {     //查询方式:USB-Device单片机查询是否有接收完成的USB主机送来的数据包
  18.               //“bUsbOutReady”:主机发送给HID/CDC设备的数据状态标志。
  19.               //USB库中有定义bUsbOutReady位变量,查询方式必须调用一次“usb_OUT_done();”
  20.               //状态位为1表示,主机发送给HID/CDC设备数据已完成,
  21.               //设备已成功接收一包数据,等待对数据继续处理。
  22.              if(UsbOutBuffer[0]==6)
  23.                  printf_usb("HelloWorld!\r\n");    //接收到的数据包的第0个字节是6,打印“HelloWorld!”
  24.             else if(UsbOutBuffer[0]==7)
  25.                  printf_usb("China!\r\n");          //接收到的数据包的第0个字节是7后,打印“China!”
  26.              usb_OUT_done();  //USB查询方式,Device单片机通知【主机可以发下一个数据包】
  27.                                         //当使用査询方式if(bUsbOutReady),查询调用USB库函数时,在数据处理完成后,
  28.                                         //必须调用一次“usb_OUT_done();”,这样才能接收下一包数据。
  29.                                         //如果是使用中断方式调用USB库函数,用户程序不需要调用“usb_OUT_done();”
  30.                                         //中断方式,USB库函数内部会自动处理。
  31.         }
  32.     }
  33. }
复制代码

以上是完整的第一个程序代码

Project-CDC2(printf_usb).zip (32.64 KB, 下载次数: 3)
回复

使用道具 举报 送花

  • 打卡等级:常住居民I
  • 打卡总天数:78
  • 最近打卡:2025-09-06 09:35:19

5

主题

196

回帖

1179

积分

超级版主

积分
1179
发表于 4 天前 | 显示全部楼层
2.3        实验三:中断方式,单片机USB中断接收服务函数收到命令后,printf_usb("Hello World !\r\n")或其他


2.3.1                     printf( )printf_usb( )实验程序代码
#include  "ai8051u.h"   //头文件不分大小写,但关键字分大小写
#include  "ai_usb.h"     //USB库和USB虚拟设备的头文件,需要在项目文件中添加对应的USB
                                 //由于在USB库函数的代码中已经定义了,不停电ISP下载命令字”@STCISP#”
                                 //只需要在下载软件的“收到用户命令后复位到ISP监控程序区”选项卡中进行相应的设置,
                                 //即可实现USB不停电ISP下载功能,或串口不停电ISP下载功能。

// USB接收中断服务程序中,调用用户实际需要执行的服务程序,
// 简称回调函数,用户根据实际应用场景需求编写
void USBLIB_OUT_Callback(void)
{           //用户希望USB库函数,中断方式回调执行的用户自己编写的任务函数,简称回调函数
    if(UsbOutBuffer[0] == 6)
        printf_usb("Hello World !\r\n");
            //接收到数据6后,直接打印输出“Hello World !”到主机相应软件的USB【CDC/HID-串口助手】
            //  \r是回车,跳到行首,\n是换行,就是换到下一行;\r\n不要交换次序
    else if(UsbOutBuffer[0] == 7)
        printf_usb("China !\r\n");
            //接收到数据7后,直接打印输出 “China !” 到主机相应软件的USB【CDC/HID-串口助手】”
}

void main(void)
{
    EAXFR = 1;    //允许访问扩展的特殊寄存器,XFR
    WTST = 0;     //设置取程序代码等待时间,赋值为 0 表示不等待,程序以最快速度运行
    CKCON = 0;   //设置访问片内的 xdata 速度,赋值为 0 表示用最快速度访问,不增加额外的等待时间

    usb_init();      //初始化USB模块
                        //初始化USB模块,并且会将【P3.0, P3.1】初始化为高阻输入,不影响USB【D-, D+】通讯

    set_usb_OUT_callback(USBLIB_OUT_Callback);    //设置USB中断服务程序可以调用的回调函数
                       //此处 USBLIB_OUT_Callback是前面用户自己编写的任务函数的函数名/地址,供USB库函数回调

    EA = 1;        //总中断允许位打开

    while (1);
}

以上是完整的第一个程序代码

Project-CDC3(printf_usb).zip (32.65 KB, 下载次数: 2)


回复

使用道具 举报 送花

  • 打卡等级:常住居民I
  • 打卡总天数:78
  • 最近打卡:2025-09-06 09:35:19

5

主题

196

回帖

1179

积分

超级版主

积分
1179
发表于 4 天前 | 显示全部楼层
2.4          点灯实验一:点亮LED灯,继续完成前面的工程项目,有视频讲解

本实验相应的视频链接:https:/www.stcaimcu.com/thread-15176-1-1.html

截图202509041702555214.jpg

Project1-点灯实验1-点亮LED灯.zip (7.79 KB, 下载次数: 2)

回复

使用道具 举报 送花

  • 打卡等级:常住居民I
  • 打卡总天数:78
  • 最近打卡:2025-09-06 09:35:19

5

主题

196

回帖

1179

积分

超级版主

积分
1179
发表于 4 天前 | 显示全部楼层
2.5          点灯实验二:让LED灯闪烁起来,有视频讲解


本实验相应的视频链接:https:/www.stcaimcu.com/thread-15176-1-1.html

截图202509041705262011.jpg

Project2-点灯实验2-让LED闪烁起来.zip (7.97 KB, 下载次数: 2)

回复

使用道具 举报 送花

  • 打卡等级:常住居民I
  • 打卡总天数:78
  • 最近打卡:2025-09-06 09:35:19

5

主题

196

回帖

1179

积分

超级版主

积分
1179
发表于 4 天前 | 显示全部楼层
2.6          点灯实验三:通过USB-CDC方式控制Ai8051U进行LED点灯


本实验相应的视频链接:https:/www.stcaimcu.com/thread-15176-1-1.html

截图202509041707184528.jpg

Project3-点灯实验3(USB-CDC方式进行LED点灯)-Ai8051U.zip (34.31 KB, 下载次数: 2)

回复

使用道具 举报 送花

  • 打卡等级:常住居民I
  • 打卡总天数:78
  • 最近打卡:2025-09-06 09:35:19

5

主题

196

回帖

1179

积分

超级版主

积分
1179
发表于 4 天前 | 显示全部楼层
2.7          点灯实验四:使用Ai8051U内置USB直接仿真流水灯

本实验相应的视频链接:https:/www.stcaimcu.com/thread-15176-1-1.html

截图202509041708398195.jpg

Project4-点灯实验4(Ai8051U内置USB直接仿真流水灯)-Aides051U.zip (17.7 KB, 下载次数: 2)

回复

使用道具 举报 送花

  • 打卡等级:常住居民I
  • 打卡总天数:78
  • 最近打卡:2025-09-06 09:35:19

5

主题

196

回帖

1179

积分

超级版主

积分
1179
发表于 4 天前 | 显示全部楼层
2.8        深圳大学--I/O口实验:I/O口读取按键状态并点灯

2.8.1          实验要求
                         可以通过正确设置I/O口模式来读取实验箱上按键的电平,然后根据对应按键的电平来设置LED灯的点亮/熄灭状态

2.8.5          实验1位操作,用USB直接仿真来调试

          单独读这几个独立I/O的状态,【P3.2 / P3.3 / P3.4 / P3.5

                        输出到【P0.2/ P0.3 / P0.4 / P0.5】对应的指示灯

截图202509041732463838.jpg

Project5-IO(位操作)-Ai8051U.zip (16.87 KB, 下载次数: 2)
回复

使用道具 举报 送花

  • 打卡等级:常住居民I
  • 打卡总天数:78
  • 最近打卡:2025-09-06 09:35:19

5

主题

196

回帖

1179

积分

超级版主

积分
1179
发表于 4 天前 | 显示全部楼层
2.8        深圳大学--I/O口实验:I/O口读取按键状态并点灯

2.8.1         实验要求
                          可以通过正确设置I/O口模式来读取实验箱上按键的电平,然后根据对应按键的电平来设置LED灯的点亮/熄灭状态


2.8.7         实验2整组8位端口操作,用USB直接仿真来调试

           整组 读这几个I/O的状态【P3.2/P3.3/P3.4/P3.5】,一次性读全部P3

                 整体输出到 P0.2/P0.3/P0.4/P0.5】在的P0口对应的指示灯

截图202509041740457160.jpg

Project6-IO(整组8位操作)-Ai8051U.zip (8.82 KB, 下载次数: 2)


回复

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-9-8 04:18 , Processed in 0.135741 second(s), 91 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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