我也来《8051U深度入门到32位51大型实战视频》学习打卡了
哪怕梦想让我们拼的遍体鳞伤,这一次我们也要勇往直前!———冲哥第一集:序言
1、8051U强在哪里?外设支持更多、更强,运算能力增强!
① 屏幕显示和视频播放:这个在之前的帖子中已经看到过了实际效果,这是我目前的兴趣点之一,通过QSPI的加持,真正实现视频级彩屏的播放
② IIS录放音:这个在之前的帖子中已经看到过了实际效果,这是我目前的兴趣点之二,可实现USB声卡功能、录音功能、播放功能
③ PWM_DMA:8051U是目前STC MCU中支持DMA最全面,外设P2P矩阵。大大增加了WS2812点灯的数量,同时更是期望8052U单线点灯功能
④ 频谱分析仪(上位机):频谱分析仪接触的少,专业的频谱分析仪好像不仅仅是声音频谱的分析
⑤ 手写计算器:这个也在之前的帖子中,这项目也充分体现了AI特性
⑥ QSPI、PWM移相、硬件乘除、单精度浮点:主要是性能提升的体现 第二集-硬件及工具介绍
已经使用过《STC32G12K128实验箱-V9.62》,再看8051U实验箱,盒子基本一样,上手应该会比较快。
相比STC32G实验箱,我感兴趣的主要是新增的音视频功能:双音频输出、MIC输入、P6800高速TFT显示接口、USB转双串口芯片,另外还有:外部扩展RAM、RTC电池、DAC芯片(用于实现I2S)TP2604S、LMV358(比较器?)
软件介绍、安装部分对我来说就没什么新内容了,AiAPP_ISP、Keil软件、添加头文件、调试驱动、中断扩展插件等不做赘述,平时就在使用。
8051U实验箱的代码包已下载,就等实验箱啦{:4_174:} 第三集、点亮第一个LED
这一集对我来说算是轻车熟路了,所有单片机都是从点灯开始{:4_174:}
创建工程,项目设置关键点:
CPU Mode选择Source模式,并勾选4k byte interrupt frame size
MEMORY Mode选择XSMALL
main.c代码自己敲一遍:
#include "ai8051u.h"
void main(void)
{
P0M0 = 0; P0M1 = 0; ///P0端口全部设置为准双向口
P4M0 = 0; P4M1 = 0; ///P4端口全部设置为准双向口
while(1)
{
P40 = 0; //P40端口输出0V,点亮对应的LED
P00 = 0; //P00端口输出0V,点亮对应的LED
}
} 第四集、USB不停电下载
不停电下载,之前用论坛的方法实现了串口不停电下载的方法,并用蓝牙透传模块实现了“无线”方式的不停电下载。
这集用的USB端口实现不停电下载
1、实验对比演示:不需要按P3.2按键,ISP中设置HEX变化自动下载,Keil编译成功后ISP通过USB自动下载到MCU,大大加快、方便频繁的调试和下载
2、下载所需文件:USB库文件,注意8位和32位模式的库文件相同,这里使用查询模式的库文件
3、关键部分到自己的工程中:
①添加头文件:#include "stc32_stc8_usb.h";
②USB初始化函数(lib+.h库实现):.lib文件要添加到项目中;
③命令参数:USB CDC初始化、等待USB配置完成、USB CDC识别下载指令代码;
④打开P_SW2寄存器b7位允许访问扩展RAM和IE2寄存器(b7位,使能USB中断)
第五集、C语言基础
1、C语言实现USB-CDC串口的printf函数
① 打开USB库中的PRINTF_HID宏定义
② 重定向printf到printf_hid: #define printf printf_hid
③ printf的格式化打印输出
%d或%i:十进制整型
%ld:十进制长整型
%f:单精度浮点型
%o:八进制整型
%x或%X:十六进制整型
%u:十进制无符号整型
%c:单个字符
%s:字符串
%e或%E:指数型
%g或%G:自适应数据输出
%p:输出地址
2、数的进制:2进制、10进制、16进制
3、数据的基本类型
① 要使用64位变量,程序中添加声明:#pragma float64
4、C语言常用运算符
①算术运算:+-*/%++--
②关系运算:== != ><>=<=
③逻辑运算:&&||!
④赋值运算:=+=-=*=/=%=<<=>>= &=^=
⑤位运算:&!^~<<>>
第六集、IO输入输出
1、什么是GPIO:
① 通用输入/输出端口,通俗来讲就是单片机的引脚
② 四种工作模式:准双向(灌电流20mA,拉电流200uA左右),推挽输出(拉电流最大20mA),高阻输入,开漏模式(可读可输出,加上拉电阻相当于准双向口)
注意:打开/关闭施密特触发器对输入高低电平的检测阈值有轻微的影响
2、按键检测:轮询检测
① 使用准双向口
② 20ms去抖检测按下或松开
3、课后小练:
任务①:按一下P32灯亮,按一下P33灯灭
#include "ai8051u.h"
void delay_20ms(void) //@24.000MHz
{
unsigned long edata i;
_nop_();
_nop_();
i = 119998UL;
while (i) i--;
}
void main()
{
WTST=0;
EAXFR=1;
CKCON=0;
P2M0=0;P2M0=0;
P3M0=0;P3M0=0;
if(P32==0)
{
delay_20ms();
if(P32==0) P20=0;
while(!P32)
}
if(P33==0)
{
delay_20ms();
if(P33==0) P20=1;
while(!P33)
}
任务②:按一下亮一颗灯,再按一下亮两颗灯,直到全亮(变量+加法和乘法)
#include "ai8051u.h"
unsigned char n;
void delay_20ms(void) //@24.000MHz
{
unsigned long edata i;
_nop_();
_nop_();
i = 119998UL;
while (i) i--;
}
void main()
{
WTST=0;
EAXFR=1;
CKCON=0;
P2M0=0;P2M0=0;
P3M0=0;P3M0=0;
if(P32==0)
{
delay_20ms();
if(P32==0)
{
if(n<=128)
{
n=(n<<1)+1;
P2 = ~n;
}
else n=0;
while(!P32)
}
}
}
第七集、定时器中断
①定时器的介绍
②定时器的应用
③函数定义、声明与调用
定时器的优势是计时准确,减少对其他功能函数的影响。
8051定时器分四种模式:
方式0:13位定时器(兼容上一代)计数范围1-8192
方式1:16位定时器计数范围1-65536
方式2:8位自动重装定时器(能够自动重装初值蛋只能计数到1-255)
方式3:定时器就会被分成两个独立的计数器或者定时器,分为高八位和低八位
Ai8051U有T0、T1、T2、T3、T4、T11共6个定时器(8051只有T0和T1两个定时器),且Ai8051U的定时器支持16位模式,甚至支持24位模式(8位预分频器+16位定时器)
思考题:定时器一次还能定时一次,如果有多个定时任务怎么办?
定时器取几个定时任务的最小公约数,一般都是取1ms或10ms,在中断服务函数中对计时变量进行+1,当达到某个定时任务的时间后,对全局下定义的定时任务标志置位。在main中while中轮训这些定时任务标志位,被定时中断置位后则执行相关的定时任务
三个课后任务等实验箱到了再实践,期待STC最最强大的8051实验箱 已完成前7集的学习任务,期待8051宇宙超级实验箱,到时研究下视频高刷和音频功能。{:4_174:} STC的效率是真高,今天已经收到AI8051U试验箱和擎天柱转接板,又可以愉快的玩耍几个月了,这里必须给个大大的赞{:qiang:}{:qiang:}
同时也感谢冲哥的视频分享。。。
页:
[1]