Ai8051U-实验指导书:实验内容与源代码
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 深圳大学 -- 传统外部中断实验:INT0,INT1,INT2,INT3 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/1,24位定时器 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 深大实验 -- 串口通讯(硬件UART1与UART2收发通讯)2.15 深大实验 -- 串口通讯(硬件UART1与UART2数据透传)2.16 大型综合实战 -- 深大课程设计:硬件UART1发送按键码,接收端蜂鸣器根据收到的的键码发声2.17 深大实验 -- 串口通讯(串口通讯,串口绘图,ADC检测按键,ADC热敏电阻测温)2.18 深大实验 -- 串口通讯(硬件UART1与UART2收发通讯-奇偶校验)2.19 深大实验 -- 串口通讯(USB-CDC发命令控制硬件UART1与UART2多机通讯)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读写串行Flash2.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-实验指导书》目录顺序,分楼陆续上传至本帖,以供大家参考和交流。
2.1 实验一:printf_usb("Hello World !\r\n"),第一个完整的C语言程序
2.1.1 printf( ),printf_usb( )实验程序代码
#include"ai8051u.h" //头文件不分大小写,但关键字分大小写
#include"ai_usb.h" //USB库和USB虚拟设备的头文件,需要在项目文件中添加对应的USB库
//由于在USB库函数的代码中已经定义了,不停电ISP下载命令字”@STCISP#”,
//只需要在下载软件的“收到用户命令后复位到ISP监控程序区”选项卡中进行相应的设置,
//即可实现USB不停电ISP下载功能,或串口不停电ISP下载功能。
voidmain(void)
{
EAXFR = 1; //允许访问扩展的特殊寄存器,XFR
WTST = 0; //设置取程序代码等待时间,赋值为 0 表示不等待,程序以最快速度运行
CKCON = 0;//设置访问片内的 xdata 速度,赋值为 0 表示用最快速度访问,不增加额外的等待时间
usb_init();
//初始化USB模块,并且会将【P3.0, P3.1】初始化为高阻输入,不影响USB【D-, D+】通讯
EA = 1; //总中断允许位打开
while (1)
{
printf_usb("Hello World !\r\n"); //直接打印输出 “Hello World !” 到主机相应软件的USB【CDC/HID-串口助手】
//\r是回车,跳到行首,\n是换行,就是换到下一行;\r\n不要交换次序
}
}
以上是完整的第一个程序代码
2.2 实验二:查询方式,查询到电脑命令后,printf_usb("Hello World!\r\n")或其他
2.2.1 printf( ),printf_usb( )实验程序代码
#include"ai8051u.h" //头文件不分大小写,但关键字分大小写
#include"ai_usb.h" //USB库和USB虚拟设备的头文件,需要在项目文件中添加对应的USB库
//由于在USB库函数的代码中已经定义了,不停电ISP下载命令字”@STCISP#”,
//只需要在下载软件的“收到用户命令后复位到ISP监控程序区”选项卡中进行相应的设置,
//即可实现USB不停电ISP下载功能,或串口不停电ISP下载功能。
void main(void)
{
EAXFR = 1; //允许访问扩展的特殊寄存器,XFR
WTST = 0; //设置取程序代码等待时间,赋值为 0 表示不等待,程序以最快速度运行
CKCON = 0; //设置访问片内的 xdata 速度,赋值为 0 表示用最快速度访问,不增加额外的等待时间
usb_init(); //初始化USB模块
//初始化USB模块,并且会将【P3.0, P3.1】初始化为高阻输入,不影响USB【D-, D+】通讯
EA = 1; //总中断允许位打开
while(1)
{
if(bUsbOutReady)
{ //查询方式:USB-Device单片机查询是否有接收完成的USB主机送来的数据包
//“bUsbOutReady”:主机发送给HID/CDC设备的数据状态标志。
//USB库中有定义bUsbOutReady位变量,查询方式必须调用一次“usb_OUT_done();”
//状态位为1表示,主机发送给HID/CDC设备数据已完成,
//设备已成功接收一包数据,等待对数据继续处理。
if(UsbOutBuffer==6)
printf_usb("HelloWorld!\r\n"); //接收到的数据包的第0个字节是6,打印“HelloWorld!”
else if(UsbOutBuffer==7)
printf_usb("China!\r\n"); //接收到的数据包的第0个字节是7后,打印“China!”
usb_OUT_done();//USB查询方式,Device单片机通知【主机可以发下一个数据包】
//当使用査询方式if(bUsbOutReady),查询调用USB库函数时,在数据处理完成后,
//必须调用一次“usb_OUT_done();”,这样才能接收下一包数据。
//如果是使用中断方式调用USB库函数,用户程序不需要调用“usb_OUT_done();”
//中断方式,USB库函数内部会自动处理。
}
}
}
以上是完整的第一个程序代码
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 == 6) printf_usb("Hello World !\r\n"); //接收到数据6后,直接打印输出“Hello World !”到主机相应软件的USB【CDC/HID-串口助手】 //\r是回车,跳到行首,\n是换行,就是换到下一行;\r\n不要交换次序 else if(UsbOutBuffer == 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);}
以上是完整的第一个程序代码
2.4 点灯实验一:点亮LED灯,继续完成前面的工程项目,有视频讲解
本实验相应的视频链接:https:/www.stcaimcu.com/thread-15176-1-1.html<Ai8051U实验箱的全部原理图可以通过点击本段文字进行查看>
2.5 点灯实验二:让LED灯闪烁起来,有视频讲解
本实验相应的视频链接:https:/www.stcaimcu.com/thread-15176-1-1.html<Ai8051U实验箱的全部原理图可以通过点击本段文字进行查看>
2.6 点灯实验三:通过USB-CDC方式控制Ai8051U进行LED点灯
本实验相应的视频链接:https:/www.stcaimcu.com/thread-15176-1-1.html
<Ai8051U实验箱的全部原理图可以通过点击本段文字进行查看>
2.7 点灯实验四:使用Ai8051U内置USB直接仿真流水灯
本实验相应的视频链接:https:/www.stcaimcu.com/thread-15176-1-1.html<Ai8051U实验箱的全部原理图可以通过点击本段文字进行查看>
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】对应的指示灯
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口对应的指示灯