第一集
作为一名刚刚接触单片机的新手,我被第一集的序言内容深深吸引。在短短的学习中,我发现单片机竟然有如此丰富的应用领域
:从实现屏幕显示到IIS音频录放,从手写计算机到硬件乘除法运算,Ai8051U这款单片机展现出的强大功能完全超出了我的想象。
特别是通过实际演示视频,我亲眼目睹了Ai8051Ud在各类场景中的出色表现,它不仅功能强大,操作界面也相当友好,这让我这
个初学者产生了极大的学习兴趣。
每一节课程都像打开一扇新世界的大门,让我对单片机的可能性有了更深的认知。通过导师的生动讲解和实际操作演示,我了解
到Ai8051U不仅具备基础控制功能,还能实现如此多的高级应用,这种发现的过程让我感到无比兴奋。尤其是看到单片机如何将
抽象的编程概念转化为实际可见的功能实现时,更坚定了我要深入学习掌握这项技术的决心。这段启蒙学习经历,已然在我心中
埋下了探索单片机世界的种子。
第二集通过认真观看硬件及工具介绍视频,我对实验箱的各项功能模块有了系统性的了解。以
下是我梳理的关键硬件组件及其应用场景:
1. 编程调试接口
- USB Link 1D:集成化的烧录调试工具,支持代码下载和实时调试
- USB转双串口模块:完美兼容市面上常见的CH340芯片,为串口通信实验提供双重通道
2. 音频输出系统
- 立体线路输出端子:可直接连接专业音响设备
- 3.5mm耳机接口:支持高品质立体声输出
3. 显示模块组
- 0.96寸OLED显示屏:适用于低功耗显示需求
- TFT彩色液晶屏:支持动画播放和图形界面展示
- 独立的LCD对比度调节旋钮:可精细调节显示清晰度
4. 特色输入设备
- 矩阵键盘:采用4×2矩阵布局,仅需8个IO口即可实现控制
- ADC按键:创新性地通过单引脚实现16键检测
5. 专业测试功能
- 示波器BNC输入接口:配合红色波形调节旋钮,可进行信号分析
- 掉电检测模块:带电压调节功能,确保突发断电时的数据安全存储
6. 数据存储方案
- QSPI/SPI FLASH芯片:提供可靠的非易失性存储空间,存储数据可通过TFT屏可视化展示
通过这次学习,我不仅认识到每个硬件模块的独立功能,更理解了如何通过它们的组合实现完整的嵌入式系统解决方案。
这种模块化的设计思路让我对后续的实验课程充满期待。
第三集
一、开发环境熟悉与操练
在系统学习本章节内容后,我已初步掌握Keil集成开发环境的操作要领:
1. 通过官方手册指引,成功完成基础开发环境的界面配置与格式标准化
2. 深入理解Keil软件的项目管理结构,包括:
- 源代码编辑器功能特性
- 编译配置选项设置
- 调试工具的基本使用流程
二、LED控制实践认知
通过基础的LED点亮实验,获得了宝贵的开发经验:
1. 硬件工作原理认知:
- 理解GPIO端口模式配置的关键作用
- 掌握P0/P4等端口寄存器的功能特性
2. 软件开发规范:
- 学习标准化的单片机程序框架
- 认识到硬件初始化配置的重要性
- 掌握while(1)主循环的典型应用场景
三、实践成果转化
目前已经能够独立完成:
1. 正确配置I/O端口工作模式
2. 通过寄存器操作实现基础外设控制
3. 遵循开发规范编写单片机控制程序
4.部分代码显示:
#include "ai8051u.h"
void main(void)
{
P0M1 = 0x00; P0M0 = 0x00;
P4M1 = 0x00; P4M0 = 0x00;
P40 = 0;
while(1)
{
P00 = 0;
}
}
四、学习心得
本次实验虽然简单,但建立了单片机开发的完整认知闭环:
- 开发工具使用 → 硬件特性理解 → 代码编写 → 功能验证
这种系统的学习方式为后续复杂实验奠定了坚实基础。通过LED控制这个"Hello World"级别的实践,
我对8051架构的底层操作有了直观认识,这对培养规范的嵌入式开发思维大有裨益。
第四集
通过本单元关于STC单片机USB下载功能的学习与实践,我掌握了多项重要的开发技能,现做如下总结:
一、USB下载功能优化
1. 传统下载模式的改进
• 掌握了无需按键触发即可进入USB下载模式的技术
• 实现了从"按键触发式下载"到"自动识别式下载"的升级
2. 技术实现要点
• 深入理解了USB Writer下载协议的工作原理
• 学习配置单片机启动参数,优化下载流程
二、开发资源获取与运用
1. 官方资源利用
• 通过STC官网(www.STCAI.com)获取USB开发库文件
• 了解STC官方提供的完整技术文档体系
2. 开发环境配置
• 完成USB库文件在工程中的正确植入
• 设置必要的编译器和链接器参数
三、代码开发技巧提升
1. 高效代码管理
• 熟练使用全局搜索定位函数定义
• 掌握在库文件与主程序文件间的快速跳转
2. 函数复用技术
• 学会分析库函数的结构特点
• 掌握在main文件中合理引用库函数的技巧
3. 编程规范养成
• 学习处理函数参数传递的正确方法
• 养成规范的代码注释习惯
四、实际应用体会
1. 技术优势认知
• 大幅提升开发效率,省去物理按键操作
• 实现了更智能化的下载流程
2. 开发环境理解
• 建立了完整的开发工具链概念
• 理解了从源码到烧录的完整流程
本次学习让我对STC单片机的开发有了更系统的认识,特别是在以下方面收获颇丰:
• 嵌入式开发环境的深度配置
• 官方库的高效利用
• 开发流程的优化方法
这种通过具体功能实现的渐进式学习,让我对嵌入式系统的开发方式有了更立体的理解,为后续的进阶学习奠定了良好基础。
特别在代码管理与复用方面获得的经验,将显著提升我今后的开发效率。
第五集
通过本单元的系统学习,我在C语言基础和格式化输出方面获得了显著提升,现整理学习收获如下:
一、预处理指令深化理解
1. 掌握了#define的高级用法
- 深入理解了宏定义的文本替换机制
- 通过"#define printf printf_hid"实例,学会了函数重定向技术
- 明确了替换规则:左侧为替换体,右侧为被替换内容
二、格式化输出深度解析
1. printf函数原型剖析
- 理解了格式控制字符串(fmt)的核心作用
- 区分了格式字符串的两种构成要素:
* 普通字符:原样输出的文本内容
* 格式说明符:控制变量输出的转换规范
2. 格式说明符分类掌握
(1)数值格式化类
- %e/%E:科学计数法输出(如1.23e+05)
- %g/%G:智能选择最简输出形式
- %p: 指针地址输出(如0x7ffee2d3a5dc)
(2)特殊字符类
- 转义序列:
\b 退格符(Backspace)
\ddd 八进制字符编码(如\101表示'A')
- 控制字符:
\a 告警音(Alert)
\f 分页符(Form feed)
三、数制系统全面巩固
1. 二进制系统
- 掌握了4位二进制典型序列:
0000(0) → 0001(1) → 0010(2) → 0011(3)
- 理解二进制位权计算原理
2. 八进制系统
- 熟悉了八进制进位规则:
1→2→...→7→10→11→...→14(对应十进制12)
- 掌握了八进制与二进制的对应关系(每位对应3位二进制)
3. 十六进制系统
- 掌握了标准表示法:
0x前缀格式(如0x1, 0xA, 0xFF)
- 理解十六进制与二进制的转换(每位对应4位二进制)
四、实践应用提升
1. 开发技巧收获
- 能熟练使用不同数制进行程序设计
- 掌握根据输出需求选择合适的格式说明符
2. 调试能力增强
- 能正确解读格式化输出结果
- 理解特殊字符对显示效果的影响
本次学习不仅夯实了C语言基础,更让我建立起数值表示与格式化输出的系统认知,这些知识对于后续嵌入式开发中的
调试输出、日志记录等实际应用都具有重要价值。特别是通过不同进制换算的练习,显著提升了我的底层编程思维能力。
第六进
一、GPIO基础知识深化理解
1. GPIO核心概念
通用输入输出端口(General Purpose Input/Output)是单片机与外部设备进行交互的基础接口,通过高低电平的变化实现
信号控制与数据采集。每个GPIO引脚都可以独立编程控制,在现代嵌入式系统中扮演着极其重要的角色。
2. GPIO工作模式详解
通过系统学习,深入掌握了四种基本工作模式的特点及应用场景:
(1)准双向口模式:默认工作状态,具备弱上拉特性
(2)推挽输出模式:可提供较强的驱动能力
(3)高阻输入模式:适用于高精度信号采集
(4)开漏模式:支持线与逻辑,适用于I2C等总线协议
3. 电流特性认知
重点理解了两种关键电流概念:
- 拉电流:GPIO输出高电平时向外输出的电流
- 灌电流:GPIO输出低电平时吸收外部电流的能力
二、按键检测技术体系
1. 电压检测原理
掌握了按键检测的核心机制,即通过检测IO口电压变化(高低电平转换)来判断按键状态。在实践中特别注意了按键消抖处理的重要性。
2. 典型应用场景实现
通过三个典型任务的对比学习,建立了完整的按键控制知识框架:
(1)即时响应模式:按键按下立即响应,松开即复位
(2)反向控制模式:按键状态与输出反向对应
(3)状态切换模式:每次按键触发改变输出状态,实现类似开关的功能
三、开发技巧与经验
1. 编程结构优化
深入理解了while循环在状态保持中的应用技巧,特别是在状态切换任务中,通过循环等待确保按键释放的处理方式,
有效避免了重复触发的常见问题。
2. 实践问题排查
学习了按键失灵的可能原因及解决方案:
- 硬件方面:接触不良、上拉电阻配置不当
- 软件方面:消抖处理不足、状态检测逻辑错误
- 系统层面:中断优先级设置不当、GPIO模式配置错误
四、知识应用延伸
1. 实际工程启发
这种通过不同任务对比的学习方式,帮助我从多个角度理解GPIO控制技术,为后续开发各种人机交互接口打下基础。
2. 系统思维培养
在三个对比任务的分析过程中,逐渐建立起"输入检测→逻辑处理→输出控制"的闭环思维模式,这对开发更复杂的嵌入式系统具有重要意义。
有以下部分代码示例:
任务1:
if(P32 == 0)
{
P00 = 0;
}
else
{
P00 == 1;
}
任务2:
if(P32 == 1)
{
P00 = 0;
}
else
{
P00 == 1;
}
任务3:
if((P32 = =0 )
{
state = !state;
P00 = state;
while(P32 == 0);
}
本单元的学习使我对单片机最基本的输入输出控制建立了系统化的认知,特别是通过三个对比任务的实践,直观感受到相同硬件条件下不同软件
控制策略带来的效果差异。这种对比式的学习方法不仅帮助我掌握了GPIO的控制技术,更培养了我从多个角度分析问题的能力,对提升嵌入式开
发水平有着实质性的帮助。
第七集
一、定时器核心功能认知
1. 定时器核心作用
(1)精确计时功能
作为现代嵌入式系统中的重要外设模块,定时器能够提供精准的计时基准,为系统建立时间标准,
是实现各类时间敏感型功能的关键组件。
(2)高效任务调度
通过定时中断机制,可实现周期性的任务调度,取代传统的延时等待方式,显著提升CPU使用效率,
使系统能够并行处理多项任务。
二、定时器技术体系详解
1. 定时器结构认知
8051架构的定时器采用24位复合结构设计(8位预分频+13位自动重装载),这种分层结构既保证了
定时的精度,又提供了灵活的配置范围。
2. 技术实现要点
(1)寄存器配置策略
通过TH0、TL0等寄存器的数值设定,配合预分频系数,实现对不同时间精度的控制要求。
(2)定时参数计算
建立完整的定时计算理论框架:
• 正向计算:从系统时钟到定时时间的转换
• 逆向计算:根据所需时间推算寄存器设置值
3. 中断服务机制
理解定时中断的完整工作流程,包括中断使能、标志位管理、中断优先级设置等关键技术点。
三、汉字编码问题解决方案
1. 乱码问题溯源
深入分析8051架构特有的0xFD编码问题,理解其在汉字显示时产生乱码的根本原因。
2. 工程实践方案
掌握使用\XFD转义字符的标准解决方案,以及在实际项目中识别和处理此类编码问题的系统方法。
四、函数体系规范化理解
1. 函数三要素解析
(1)定义规范
• 明确返回值类型
• 规范的命名规则
• 完整的参数列表
• 清晰的功能实现
(2)声明要点
• 头文件中的标准声明格式
• 前置声明的应用场景
• 分号结束的强制规范
(3)调用准则
• 参数传递方式
• 返回值处理
• 调用位置约束
2. 最佳实践原则
建立函数设计的"高内聚低耦合"理念,确保每个函数功能单一、接口明确、调用规范。
五、系统优化与性能提升
1. 程序效率优化
比较传统延时与定时中断的实现差异,理解定时器在提升系统实时性和响应速度方面的优势。
2. 资源利用率提升
通过定时器的合理配置,实现多任务的时分复用,最大化利用有限的硬件资源。
本次学习使我建立了完整的定时器应用知识体系,不仅掌握了基础配置方法,更理解了其在嵌入式
系统设计中的战略价值。特别是在实际工程中的代码规范、性能优化等方面获得的经验,对提升专
业开发能力具有深远意义。这种将硬件特性和软件设计相结合的学习方式,帮助我建立了系统级的
思维方式,为后续开发更复杂的嵌入式应用奠定了坚实基础。
实验1
- #include "config.h"
-
- void main(void)
- {
-
- SYS_Init();
- while (1)
- {
-
- printf_usb("Hello World !\r\n");
-
-
- }
- }
-
- void SYS_Init(void)
- {
- EnableAccessXFR();
- IAP_SetTimeBase();
-
- P0M0 = 0x00; P0M1 = 0x00;
- P1M0 = 0x00; P1M1 = 0x00;
- P2M0 = 0x00; P2M1 = 0x00;
- P3M0 = 0x00; P3M1 = 0x00;
- P4M0 = 0x00; P4M1 = 0x00;
- P5M0 = 0x00; P5M1 = 0x00;
- P6M0 = 0x00; P6M1 = 0x00;
- P7M0 = 0x00; P7M1 = 0x00;
-
- delay_ms(1);
- USBLIB_Init();
- delay_ms(1);
-
- EnableGlobalInt();
- }
-
- void delay_us(uint16_t us)
- {
- do
- {
- NOP(14);
- } while (--us);
- }
- void delay_ms(uint16_t ms)
- {
- uint16_t i;
-
- do
- {
- i = MAIN_Fosc / 10000;
- while (--i);
- } while (--ms);
- }
-
-
- void USBLIB_Init(void)
- {
- usb_init();
- USB_SetIntPriority(0);
- set_usb_ispcmd("@STCISP#");
-
- }
-
- void USBLIB_WaitConfiged(void)
- {
- while (DeviceState != DEVSTATE_CONFIGURED)
- WDT_Clear();
- }
-
- void USBLIB_OUT_Done(void)
- {
- if (bUsbOutReady)
- {
- USB_SendData(UsbOutBuffer, OutNumber);
-
- usb_OUT_done();
- }
- }
复制代码
实验2:
- #include "config.h"
- void main(void)
- {
-
- SYS_Init();
-
- while (1)
- {
- USBLIB_OUT_Done();
- }
- }
-
-
- void SYS_Init(void)
- {
- EnableAccessXFR();
- IAP_SetTimeBase();
-
- P0M0 = 0x00; P0M1 = 0x00;
- P1M0 = 0x00; P1M1 = 0x00;
- P2M0 = 0x00; P2M1 = 0x00;
- P3M0 = 0x00; P3M1 = 0x00;
- P4M0 = 0x00; P4M1 = 0x00;
- P5M0 = 0x00; P5M1 = 0x00;
- P7M0 = 0x00; P7M1 = 0x00;
-
- delay_ms(1);
- USBLIB_Init();
- delay_ms(1);
-
-
-
- EnableGlobalInt();
- }
-
- void delay_us(uint16_t us)
- {
- do
- {
- NOP(14);
- } while (--us);
- }
-
-
-
- void delay_ms(uint16_t ms)
- {
- uint16_t i;
-
- do
- {
- i = MAIN_Fosc / 10000;
- while (--i);
- } while (--ms);
- }
-
- void USBLIB_Init(void)
- {
- usb_init();
- USB_SetIntPriority(0);
- set_usb_ispcmd("@STCISP#");
-
- }
-
-
- void USBLIB_WaitConfiged(void)
- {
- while (DeviceState != DEVSTATE_CONFIGURED)
- WDT_Clear();
- }
-
-
- void USBLIB_OUT_Done(void)
- {
- if (bUsbOutReady)
- {
-
- if (UsbOutBuffer[0] == 6)
- printf_usb("Hello World !\r\n");
- else if (UsbOutBuffer[0] == 7)
- printf_usb("China !\r\n");
- usb_OUT_done();
- }
- }
复制代码
实验3:
- #include "config.h"
- void main(void)
- {
- SYS_Init();
- while (1)
- {
-
- }
- }
-
-
- void SYS_Init(void)
- {
- EnableAccessXFR();
- IAP_SetTimeBase();
-
- P0M0 = 0x00; P0M1 = 0x00;
- P1M0 = 0x00; P1M1 = 0x00;
- P2M0 = 0x00; P2M1 = 0x00;
- P3M0 = 0x00; P3M1 = 0x00;
- P4M0 = 0x00; P4M1 = 0x00;
- P5M0 = 0x00; P5M1 = 0x00;
- P6M0 = 0x00; P6M1 = 0x00;
- P7M0 = 0x00; P7M1 = 0x00;
-
- delay_ms(1);
- USBLIB_Init();
- delay_ms(1);
-
- EnableGlobalInt();
- }
- void delay_us(uint16_t us)
- {
- do
- {
- NOP(14);
- } while (--us);
- }
-
- void delay_ms(uint16_t ms)
- {
- uint16_t i;
-
- do
- {
- i = MAIN_Fosc / 10000;
- while (--i);
- } while (--ms);
- }
-
- void USBLIB_Init(void)
- {
- usb_init();
- USB_SetIntPriority(3);
- set_usb_OUT_callback(USBLIB_OUT_Callback);
- set_usb_ispcmd("@STCISP#");
-
- }
-
-
- void USBLIB_WaitConfiged(void)
- {
- while (DeviceState != DEVSTATE_CONFIGURED)
- WDT_Clear();
- }
-
- void USBLIB_OUT_Callback(void)
- {
- if (UsbOutBuffer[0] == 6)
- printf_usb("Hello World !\r\n");
- else if (UsbOutBuffer[0] == 7)
- printf_usb("China !\r\n");
- }
复制代码
点击图片添加到帖子内容中
文件尺寸: 小于 20MB , 可用扩展名: jpg, jpeg, gif, png, bmp, webp
确定
| |
|