学习《Ai8051U教学视频》心得感悟
第一集 序言1. ai8051u优点:2.ai8051u的简介:第一集序言作为整个系列视频的开篇,为观众搭建了一个初步的认知框架,使观众对 AI8051 有了宏观上的认识,激发了进一步学习的兴趣。第二集 硬件、软件介绍1.硬件PCB/PCBA板2.软件Keil——ISP——头文件——插件——代码包
对软硬件的全面介绍,在后续学习编程和进行实际开发时,可以更有针对性地利用其硬件资源,合理配置软件参数,从而实现各种预期的功能。 第三集 点亮一个LED
第三集是理论与实践相结合的一集,通过实际操作点亮第一颗 LED,让我们亲身体验到了 AI8051 的编程和控制过程,具有很强的成就感和实践指导意义。
点亮两个LED
原理:
与传统8051不同之处在于:有四种输入输出方式
第四集usb不停电下载
了解到 USB 不停电下载的实现原理,以及相关的硬件电路和软件编程。这种下载方式无需频繁给单片机上电断电,大大提高了开发效率,减少了开发过程中的等待时间。
1.下载以下两个库文件到main.c路径相同。
2.添加头文件及其代码如下。
#include "ai8051u.h" //调用头文件
#include "stc32_stc8_usb.h" //调用头文件
//注意:擎天柱的LED端口在P2,且没有三极管的电源控制,所以只要控制P2端口即可,本节课程的其余内容(USB不停电下载)均通用!
char *USER_DEVICEDESC = NULL;
char *USER_PRODUCTDESC = NULL;
char *USER_STCISPCMD = "@STCISP#";
void main(void)
{unsigned char i;
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();
}
for(i=0;i<8;i++)
{
P2=~(0X01<<i);
Delaynms(1000);
}
}
}
实现一个流水灯
第五集 c语言基础
有c语言基础的、学过普通8051的可以简单看看
1.数制
2.c语言常用运算符
3.数据的基本类型
4.c语言串口中printf函数的实现
实验:
1)头文件中去掉“#define PRINTF_HID”前的//
2)定义变量X和Y
3)在此位置代码编程
4)结果
第六集输入输出I/O
硬件与软件的结合:I/O 输入输出是单片机与外部设备交互的关键。
1.GPIO(General Purpose I/O Ports)意思为通用输入/输出端口。通俗地说,就是一些引脚,可以通过它们输出高低电平或者通过它们读入引脚的状态-是高电平或是低电平。
单片机输出高电平就是输出VCC电压,输出低电平就是输出GND的电压。
2.按键检测
按键去除抖动
实验代码和课后作业的代码(主函数部分)
//任务1:按下P32按钮灯亮,松开P32按钮灯灭;
if( P32 == 0 ) //判断P32按钮是否按下
{
P20 = 0;
}
else
{
P20 = 1;
}
//任务2:按下P32按钮灯灭,松开P32按钮灯亮;
if( P32 == 1 ) //判断P32按钮是否按下
{
P20 = 0;
}
else
{
P20 = 1;
}
//任务3:按一下灯亮,按一下灯灭
if( P32 == 0 ) //判断P32按钮是否按下
{
Delay20ms(); //延时20ms消抖
if( P32 == 0 )
{
state = !state; //变量取反 0 1 0 1 0 1
P20 = state;
printf("state:%d\r\n",(int)state);
while( P32 == 0 ); //等待P32松开
}
}
//课后任务1:按一下P32按钮灯亮,按一下P33按钮灯灭;
if( P32 == 0 ) //判断P32按钮是否按下
{
Delay20ms(); //延时20ms消抖
if( P32 == 0 )
{
P20 = 0;
while( P32 == 0 );
}
}
if( P33 == 0 ) //判断P33按钮是否按下
{
Delay20ms(); //延时20ms消抖
if( P33 == 0 )
{
P20 = 1;
while( P33 == 0 );
}
}
//课后任务2:按一下亮一颗灯,在按一下亮两颗灯,直到全亮(变量+加法和乘法)
if( P32 == 0 ) //判断P32按钮是否按下
{
Delay20ms(); //延时20ms消抖
if( P32 == 0 )
{
if(i >= 8)
{
i = 0;
P2 = 0XFF;
}
else
{
P2 &= ~(0x01<<i);
i++;
}
while( P32 == 0 );
}
}
第七集 定时器中断
1.函数定义、声明、调用的区别(有c语言基础的可简单看)
2.定时器作用:
(1) 用于计时系统,可实现软件计时,或者使程序每隔一固定时间完成一项操作
(2) 替代长时间的Delay,提高程序的运行效率和处理速度(可以打断主循环)
实时性与效率的提升:定时器中断能够在设定的时间间隔后自动触发中断,使 CPU 及时响应定时任务,大大提高了系统的实时性和执行效率。例如在工业生产中的数据采集系统,利用定时器中断可以定时采集传感器数据,确保数据的及时性和准确性,而 CPU 在其他时间可以处理其他任务,避免了资源的浪费 。
多任务处理的基础:通过合理设置多个定时器中断,可以实现多任务的并行处理。比如在一个智能家居系统中,可以使用一个定时器中断来定时控制家电的开关,另一个定时器中断来定时采集环境数据,如温度、湿度等,从而实现多个任务的同时运行,提高系统的整体性能和响应速度。
3.定时器用法:
1)利用软件直接生成
2)原理
ai8051u有6个24位定时器
每个定时器有4种模式
以定时器0的模式0位例
3)公式计算
加油,话说大哥为什么没有申请到试验箱
twrzluxr 发表于 2025-1-15 00:03
加油,话说大哥为什么没有申请到试验箱
刚刚才学习到第七集 mansunqianyi 发表于 2025-1-15 08:46
刚刚才学习到第七集
必须15集才给吗
页:
[1]