batcd 发表于 2024-12-14 05:47:17

AI8051U学习打卡

<p>01.AI8051U序言</p>
<p>本级视频是单片机教程的序言</p>
<ul>
<li><strong>开场鼓舞:即便追求梦想的过程中我们可能会遭遇挫败,但这一次,让我们鼓足勇气勇往直前。<br />
课程目标:希望大家通过本次单片机课程的学习,能够取得显著的进步并巩固所学知识。<br />
后续支持:无论在学习过程中遇到任何问题,我们都鼓励大家利用STC官网和论坛进行提问和交流。</strong></li>
</ul>
<ol>
<li><strong>8051U 单片机优势</strong>
<ul>
<li><strong>功能强化</strong>:在屏幕显示与视频播放上,因 flash 芯片读写功能优化,大容量视频播放提升显著;放音功能完备;兼容能力增强;借硬件浮点及存储单元可实现频谱分析仪;能演示手写计算器。</li>
<li><strong>指令集兼容</strong>:作为 USB 型单片机,兼 32 位和八位指令集,可兼容早期如89c52、12c5a60s2等开发板,便于开发者上手。其 32 或 64 的 flash 及 pwm 硬件移相等特性,使其性能卓越。</li>
</ul>
</li>
<li><strong>功能演示实例</strong>
<ul>
<li><strong>屏幕显示</strong>:经八零八零八位并口实现多元素(汉字、英文、图片等)高帧率刷新与多样显示效果,适用于图形菜单构建。</li>
<li><strong>录放音</strong>:依特定频率烧写代码并外接喇叭,依手册操作实现录音放音,功能类似常见录放音模块,展现功能跨越性。</li>
<li><strong>pwmdma 功能</strong>:烧写改良代码于特定点阵屏,借 pwm + dma 实现千余灯无干扰显示,可拓展遥控功能制灯具。</li>
<li><strong>频谱分析仪</strong>:烧写代码并设串口参数,借 fft 绘图与录音功能,快速分析声音频率,如响指频点可精准捕捉。</li>
<li><strong>手写计算器</strong>:运行开源程序实现计算功能,屏幕呈现计算式与结果,体现向 AI 靠近趋势。</li>
<li><strong>flash 编程器与视频播放</strong>:刷特定程序,用串行 flash 编程器擦除、读取 ID 及编程数据,加载图片至屏演示视频播放,图片刷新快则显示正常。</li>
</ul>
</li>
</ol>
<p><strong>将AI8051U单片机的优势</strong></p>
<p><img src="data/attachment/forum/202412/14/054546emtvyvh6j660vztt.png" alt="image.png" title="image.png" /></p>
<p><strong>详细介绍一下AI8051U单片机的屏幕显示功能</strong></p>
<p><strong>AI8051U单片机的功能演示</strong></p>
<p>总结:</p>
<h4>1.这款单片机被认为标志着我们向着人工智能技术的一大步迈进,展示了其强大的新功能。</h4>
<h4>2.相较于前一代,它新增了QSPI功能,以及一个闪存编程器,进一步提升了其性能和实用性。</h4>
<h4>3.演示了如何使用单片机视频播放功能,通过下载特定程序并正确刷入来实现视频播放显示了其多媒体处理能力。</h4>
<h4>4.强调了这款单片机兼客早期8位指令集,如89C52,和32位指令集的能力,简化了与旧版开发板的兼客性问题,对开发者来说是一个重大利好。</h4>
<h4>5.介绍了单片机的硬件特性,包括32K的SRAM和64K的Flash存储,以及PWM硬件接口等,凸显了其在嵌入式系统设计中的强大支持能力。</h4>

batcd 发表于 2024-12-15 00:35:39

<h2>02.AI8051U硬件及工具介绍</h2>
<p><strong>本集视频以STC8051为基础,详细介绍实验箱硬件与软件,包括USB、PCB、串口、TF卡等组件,以及编程与下载工具使用,旨在教授学员从硬件到软件的单片机入门知识。通过跑马灯效果的演示,标志学员成功入门单片机编程,鼓励学员探索更多实验项目,全面提升单片机基础与实践技能。</strong></p>
<h3>实验箱的组成</h3>
<ul>
<li><strong>透明外壳</strong></li>
<li><strong>PCB板子</strong></li>
<li><strong>短路帽(跳线帽)</strong></li>
</ul>
<h3>实验箱功能介绍</h3>
<p><img src="data/attachment/forum/" alt="" /><img src="data/attachment/forum/202412/15/005623k7klhl5ls007hhkh.jpg" alt="image.png" /></p>
<ol>
<li><strong>US1.US1.USB下载接口:用于烧录程序。</strong></li>
<li><strong>USB转双串口:用于串口实验。</strong></li>
<li><strong>卡插座:用于插入卡,实现文件系统等功能。</strong></li>
<li><strong>示波器输入:用于波形调节和测量。</strong></li>
<li><strong>放音输出:通过立体声耳机或音响实现放音功能。</strong></li>
<li><strong>话筒录音:实现录音功能。</strong></li>
<li><strong>OLED/SPI接口:用于连接OLED屏或SPI设备。</strong></li>
<li><strong>八路流水灯:用于入门实验,点亮LED灯。</strong></li>
<li><strong>八位数码管:用于显示数字,由两个四位数码管组成。</strong></li>
<li><strong>TFT彩屏:用于显示彩色图像和动画。</strong></li>
<li><strong>掉电检测:检测掉电并保存重要数据。</strong></li>
<li><strong>红外接收:用于接收红外遥控器信号。</strong></li>
<li><strong>矩阵键盘:行和列独立控制,与ADC键盘的区别。</strong></li>
<li><strong>主芯片:STC8051单片机,48脚芯片。</strong></li>
<li><strong>复位按键和电源按键:复位按键用于重置单片机,电源按键用于断电进入下载模式。(猜是P3.2)</strong></li>
<li><strong>QSPI Flash:用于存储数据,如猫和老鼠动画。</strong></li>
<li><strong>LCD对比度调节:用于调节</strong></li>
</ol>
<h3>实验箱背面介绍</h3>
<p><img src="data/attachment/forum/" alt="" /><img src="data/attachment/forum/202412/15/005637c00kucqgillkezwv.jpg" alt="image.png" /></p>
<ol>
<li><strong>晶振:无源晶振用于RTC实验。</strong></li>
<li><strong>24C02存储芯片:用于存储重要数据。</strong></li>
<li><strong>DS18B20温度传感器:用于温度检测。</strong></li>
<li><strong>无源蜂鸣器:发出嘀嘀嘀的声音。</strong></li>
<li><strong>SP3485芯片:用于RS485通信。</strong></li>
<li><strong>USB转串口芯片:用于转换USB接口为串口。</strong></li>
</ol>
<h3>软件安装介绍</h3>
<ol>
<li><strong>安装Keil uVision编程软件。(要注意安装版本,之前电脑的版本添加了也看不到芯片(屠龙刀的)后面下载了C251点灯成功)</strong></li>
<li><strong>下载ISP软件:用于将程序下载到单片机。</strong></li>
<li><strong>添加头文件:确保软件支持STC8051单片机。</strong></li>
<li><strong>下载Keil中断插件:支持超过31个中断。</strong></li>
<li><strong>下载实验箱代码包和使用说明。</strong></li>
</ol>
<h3>ISP软件下载和使用</h3>
<ol>
<li><strong>下载ISP软件:最新版本为6.94y版。</strong></li>
<li><strong>安装ISP软件:解压到桌面并创建快捷方式。</strong></li>
</ol>
<h3>代码包和手册</h3>
<ol>
<li><strong>下载代码包:包含所有实验的代码。</strong></li>
<li><strong>下载手册:包含单片机的规格书和实验箱使用说明书。</strong></li>
<li><strong>解压代码包和手册:方便后续使用。</strong></li>
</ol>

batcd 发表于 2024-12-15 00:51:44

<h2>03.AI8051U点亮第一颗LED</h2>
<h3>1. <strong>新建工程</strong></h3>
<ol>
<li><strong>创建空工程:选择“新建工程”,按照手册六点五章节的步骤进行操作,设置项目路径和项目名称,选择单片机型号。</strong></li>
<li><strong>添加头文件:利用ISP软件结合手册六点四章节,学习头文件的用法,推荐使用双引号引用当前文件夹下的头文件。</strong></li>
<li><strong>输入代码:在项目中新建main.c文件,输入简单的代码,包括头文件引用和main函数。</strong></li>
<li><strong>编译代码:使用软件中的编译图标进行编译,选择单个文件编译或全部文件编译。</strong></li>
</ol>
<h3>2. <strong>点亮LED</strong></h3>
<ol>
<li><strong>配置IO口:将P0和P4端口配置为准双向口,通过P0M0和P0M1寄存器进行配置。</strong></li>
<li><strong>输出低电平:将P0和P4端口的所有引脚输出低电平,以点亮连接的LED灯。</strong></li>
<li><strong>编译下载:编译代码并下载到单片机,通过ISP软件选择正确的单片机型号和端口进行下载。</strong></li>
<li><strong>测试结果:观察摄像头或开发板上的LED灯是否点亮,调整代码和配置直到成功点亮LED。</strong></li>
</ol>
<h3>3. <strong>LED点亮原理</strong></h3>
<ol>
<li><strong>电路原理:通过电源正极、开关、LED灯和电源负极构成简单电路,开关打开时LED灯点亮。</strong></li>
<li><strong>单片机控制:单片机通过输出低电平到P0和P4端口,控制三极管开关打开,从而点亮LED灯。</strong></li>
<li><strong>箭头方向:箭头从高电压指向低电压,表示开关打开的方向。</strong></li>
<li><strong>IO寄存器操作</strong></li>
</ol>
<h3>4. <strong>IO寄存器操作</strong></h3>
<ol>
<li><strong>端口模式寄存器:通过P0M0和P0M1寄存器配置P0端口的模式,设置为准双向口。</strong></li>
<li><strong>端口数据寄存器:通过直接赋值的方式,将P0和P4端口输出低电平,点亮LED灯。</strong></li>
<li><strong>二进制和十六进制:了解二进制和十六进制的转换方法,以及在代码中的表示形式。</strong></li>
</ol>
<h3>5. <strong>IO模式配置工具</strong></h3>
<ol>
<li><strong>配置工具:利用公司的配置工具,快速生成IO口的配置代码。</strong></li>
<li><strong>选择模式:通过勾选需要的模式,生成对应的配置代码,复制并粘贴到项目中。</strong></li>
</ol>
<h4>a. <strong>总结</strong></h4>
<ul>
<li><strong>项目路径不能有中文和空格</strong></li>
<li><strong>设置项目模式</strong></li>
<li><img src="data/attachment/forum/202412/15/005009j5ipijjuo9qxznki.jpg" alt="" /></li>
<li><strong>添加头文件的方法</strong></li>
<li><img src="data/attachment/forum/202412/15/005009piqivi5s0m095xxa.jpg" alt="" /></li>
<li><strong>代码缩进和注释的设置方法</strong></li>
<li><img src="data/attachment/forum/202412/15/005009qe6noonnwo5ft677.jpg" alt="" /></li>
<li><img src="data/attachment/forum/202412/15/005009gz2ld822rd78r8hx.jpg" alt="" /></li>
<li><img src="data/attachment/forum/202412/15/005009ccza2aysu072ocu2.jpg" alt="" /></li>
<li><strong>主函数的作用</strong></li>
<li></li>
<li><strong>点亮led的原理</strong></li>
</ul>

batcd 发表于 2024-12-15 02:12:00

<h2>04.AI8051U-USB不停电下载</h2>
<p><strong>AI8051U 深度入门系列视频第四集聚焦 USB 不停电下载技术。先回顾上集 LED 点亮程序下载的繁琐情况,接着介绍通过 USB 不停电下载的新方法来简化编程。详细阐述其技术步骤,涵盖库文件下载安装、代码移植编译及利用 USB 功能下载程序,强调选合适库文件和设寄存器的重要性。经演示与实践操作,助单片机开发人员掌握该技术进行开发,提高效率,内容紧扣主题,适合相关人员学习参考。</strong></p>
<hr />
<h3>USB不停电下载介绍</h3>
<pre><code class="language-plain">USB不停电下载的定义:不需要断电,也不需要手动按下P32按钮进入下载模式。
实验对比演示:一个是需要手动按按钮进行下载模式,另一个是直接点击下载。
3.第一次下载需要手动断电,但之后不需要按按钮。
</code></pre>
<h3>下载所需文件</h3>
<pre><code class="language-plain">STC官网地址:www.stcai.com/。
软件工具库函数USB库文件下载:在软件工具库函数中找到USB库文件并下载。
</code></pre>
<h3>库文件解压与查看</h3>
<pre><code class="language-plain">下载完成后的文件解压:解压到当前文件夹。
库文件内容:包括演示代码和库文件。
</code></pre>
<h3>选择合适的库文件</h3>
<pre><code class="language-plain">CDC和HID的区别:建议使用CDC。
库文件选择:根据所选的8位和32位文件选择相同位数的库文件。
</code></pre>
<h3>工程文件编译与检查</h3>
<pre><code class="language-plain">上一节课的代码:确保复制过来的代码没有问题。
添加头文件:复制所需的头文件到工程中。
</code></pre>
<h3>初始化函数与命令参数</h3>
<pre><code class="language-plain">USB初始化函数:USB_Init。
端口设置:将所有端口设置为准双向口。
命令参数:包括产品代码和自定义命令。
</code></pre>
<h3>头文件与库文件的复制</h3>
<pre><code class="language-plain">头文件复制:复制所需的头文件到工程中。
库文件复制:复制库文件到工程中。
</code></pre>
<h3>中断允许寄存器IE2</h3>
<pre><code class="language-plain">IE2寄存器:中断允许寄存器,用于打开USB中断。
EA寄存器:总中断开关,所有中断都需要经过EA开关。
</code></pre>
<h3>USB完成配置与不停电下载实现</h3>
<pre><code class="language-plain">USB完成配置:等待USB完成配置后,实现不停电下载。
数据发送:接收到的数据自动发送回去,实现不停电下载。
</code></pre>
<h3>总结</h3>
<ul>
<li>
<p><strong>USB不停电下载的实现方法</strong></p>
<ul>
<li><img src="data/attachment/forum/202412/15/020834gy6m896ojuoizlpz.jpg" alt="" /></li>
</ul>
</li>
<li>
<p><strong>USB初始化函数的作用</strong></p>
<ul>
<li><img src="data/attachment/forum/202412/15/020834i86ro87360op8608.jpg" alt="" /></li>
</ul>
</li>
<li>
<p><strong>命令参数的设置方法</strong></p>
<ul>
<li><img src="data/attachment/forum/202412/15/020834q1p6k06mpzt34eep.jpg" alt="" /></li>
</ul>
</li>
<li>
<p><strong>STC官方库文件的下载方法</strong></p>
<p><img src="data/attachment/forum/202412/15/021005gvtrvhho74gcjtzo.png" alt="image.png" title="image.png" /></p>
</li>
<li>
<p><strong>单片机寄存器的设置方法</strong></p>
<ul>
<li><img src="data/attachment/forum/202412/15/020834iqszwqm7v4g49w4g.jpg" alt="" /></li>
</ul>
</li>
<li>
<p><strong>中断允许寄存器的设置方法</strong></p>
<ul>
<li><img src="data/attachment/forum/202412/15/020834i6vz61mvc0167mk1.jpg" alt="" /></li>
</ul>
</li>
</ul>

batcd 发表于 2024-12-15 02:20:42

<h2>05.AI8051-C语言基础</h2>
<p><strong>本视频深入浅出讲解C语言基础,围绕printf函数在USB-CDC串口中的实现、数的进制转换、数的基本类型、C语言常用运算符这四个核心内容展开。重点介绍printf函数在单片机开发的应用、通过USB库宏定义实现其功能及解析原型与使用效果,也解释了进制转换概念与操作、数的基本类型及对应变量长度,还详细阐述常用运算符并举例演示用法作用,最后简要说明USB-CDC串口特性及展示用printf实现数据收发。内容紧扣C语言基础,适合初学者学习。</strong></p>
<h4><img alt="ciya" class="emoji" src="https://www.stcaimcu.com/static/image/smiley/default/ciya.gif" title="ciya" /> <code>有编程基础还是可以的,虽然不是专门学C但是还是有些相通的上手就显得简单</code></h4>
<h3>C语言基础知识</h3>
<p><strong>1.C语言在单片机开发中的重要性及其与后续课程的关系。</strong><br />
2.C语言基础知识的主要内容:USB_CDC串口、printf函数的实现、数的进制(二进制、十进制、十六进制)、数的基本类型、C语言的常用运算符。</p>
<h3>USB_CDC串口与printf函数的实现</h3>
<p><img src="data/attachment/forum/202412/15/022752xarhzwa7u1k9q0v7.png" alt="image.png" title="image.png" /></p>
<p><strong>1.USB_CDC串口的功能:通过USB接口进行数据通信,支持任意波特率。</strong><br />
<strong>2.printf函数的实现:通过重定向到get_printf_HID函数,实现变量的类型打印。</strong><br />
<strong>3.printf函数的原型:包含格式控制字符串(普通字符和转换说明符)。</strong><br />
<strong>4.转换说明符:如%s(字符串)、%d(十进制整数)等。</strong><br />
<strong>5.普通字符:直接复制到标准输出。</strong><br />
<strong>6.特殊转义符:如\n(换行)、\t(水平制表符)。</strong></p>
<h3>printf函数的使用示例</h3>
<p><img src="data/attachment/forum/202412/15/022647u8h5gyx81sssg1th.png" alt="image.png" title="image.png" /></p>
<p><strong>1.printf函数的位置:可以放在接收数据或发送数据的代码中。</strong><br />
2.示例代码:通过USB_CDC串口接收数据并打印返回结果。<br />
3.编译和下载:确保lib文件已添加,避免停电下载问题。</p>
<h3>数的进制转换</h3>
<p><img src="data/attachment/forum/202412/15/022237h8ogodh1hod8ga9z.png" alt="image.png" title="image.png" /></p>
<p><strong>1.二进制、十进制和十六进制的转换方法。</strong><br />
2.二进制转十进制:按位权加权求和。<br />
3.十进制转十六进制:除以16取余数。<br />
4.十六进制转十进制:按位权加权求和。</p>
<h3>变量的基本类型</h3>
<p><img src="data/attachment/forum/202412/15/022303hl6t0gkk0bpvfifi.png" alt="image.png" title="image.png" /></p>
<p><strong>1.变量的定义:包括变量类型和变量名称。</strong><br />
2.常用变量类型:如unsigned char(无符号字符)、int(整数)、float(浮点数)等。<br />
3.变量类型的长度:如unsigned char为8位,int为16位或32位。<br />
4.变量类型的定义域:在大括号内的变量只能在该大括号内使用。</p>
<h3>运算符及其用法</h3>
<p><img src="data/attachment/forum/202412/15/022330frmj28r82v28u24z.png" alt="image.png" title="image.png" /></p>
<p><strong>1.算术运算符:加、减、乘、除、取余。</strong><br />
<strong>2.关系运算符:等于、不等于、大于、小于、大于等于、小于等于。</strong><br />
<strong>3.逻辑运算符:与、或、非。</strong><br />
<strong>4.位运算符:左移、右移、按位与、按位或、按位异或、取反。</strong><br />
5.赋值运算符:如+=、-=、*=、/=等。</p>
<h3>if条件语句</h3>
<p><strong>1.if语句的语法:if(条件) {语句块} else {语句块}。</strong><br />
<strong>2.条件判断:条件为真时执行第一个语句块,条件为假时执行第二个语句块。</strong><br />
<strong>3.条件运算符:如==(等于)、!=(不等于)、&gt;(大于)、&lt;(小于)等。</strong></p>
<h4>总结</h4>
<p><strong>C语言运算符</strong><br />
<strong>printf函数的作用<br />
字符串与字符数组的区别<br />
空指针与野指针的区别<br />
函数指针的使用方法<br />
单片机变量定义</strong></p>

batcd 发表于 2024-12-15 02:57:34

<h2>06.AI8051U-IO的输入输出</h2>
<p><strong>本视频聚焦单片机IO输入输出,详细介绍了GPIO(通用输入输出端口)概念,阐述高电平和低电平的定义与区别,着重讲解单片机IO口的准双向口、推挽输出、高阻输入和开漏模式这四种模式。同时探讨按键输入检测原理,包含通过单片机IO端口检测按键状态,以及按键抖动现象及其解决方法。此外,还演示了编写代码实现按键控制LED灯亮灭功能,涵盖处理按键抖动及延时函数的运用,最后布置课后小练习,助力加深学生对单片机IO输入输出操作的理解与应用。</strong></p>
<p><img src="data/attachment/forum/202412/15/025729spu8j900pup8bis5.jpg" alt="" /><img src="data/attachment/forum/202412/15/025730mgcppgm2mmgpqgd3.jpg" alt="" /></p>
<h3>课程介绍和目标</h3>
<pre><code class="language-plain">1.介绍了课程的主要内容,包括C语言基础和单片机课程。
2.提出了本节课的主要任务:了解按键输入检测和GPIO(通用输入输出端口)的概念。
</code></pre>
<h3>GPIO引脚功能</h3>
<pre><code class="language-plain">1.GPIO引脚可以输入或输出高低电平。
2.高电平接近电源正极电压,低电平接近电源负极电压。
3.单片机输出高电平时为VCC电压,输出低电平时为GND电压。
4.高电平也称为逻辑高(1),低电平称为逻辑低(0)。
5.电源电压为3.3V时,逻辑高为3.3V,逻辑低为0V。
6.引脚电压不能超过极限电压,如VCC引脚不能超过5.5V,其他引脚不能超过5.8V。
</code></pre>
<h3>单片机IO口模式</h3>
<pre><code class="language-plain">1.单片机IO口有四种模式:准双向口、推挽输出、高阻输入和开漏模式。
2.准双向口:惯电流小,可输入输出。
3.推挽输出:可输出20mA电流,常用于点灯等应用。
4.高阻输入:输入电流小,适用于输入信号。
5.开漏模式:需要外部上拉电阻,适用于需要外部控制的场景。
</code></pre>
<h3>IO口电压范围</h3>
<pre><code class="language-plain">1.输入低电平:小于0.99V,取决于施密特触发器的状态。
2.输入高电平:大于1.18V或1.09V,取决于施密特触发器的状态。
3.施密特触发器:使能后,输入电压需在特定范围内才能触发。
</code></pre>
<h3>按键输入检测</h3>
<p><img src="data/attachment/forum/202412/15/025729gqf7ckkibdnfqbfn.jpg" alt="" /></p>
<pre><code class="language-plain">1.按键按下时,引脚电压接地,从高电平变为低电平。
2.通过检测引脚电压变化来判断按键是否按下。
3.实验箱上的电路:P3.2引脚通过300Ω电阻接地,按键按下时引脚电压为低。
</code></pre>
<h3>按键消抖</h3>
<pre><code class="language-plain">1.按键按下时会有抖动,导致多次触发。
2.通过延时20毫秒来消除抖动。
3.使用软件延时函数来实现延时。
</code></pre>
<h3>延时函数实现</h3>
<pre><code class="language-plain">1.使用软件延时计算器生成20毫秒延时函数。
2.将系统频率、指令集和延时时间输入计算器,生成延时函数代码。
3.将生成的代码复制到项目中,实现延时功能。
</code></pre>
<h3>总结</h3>
<p><strong>单片机消抖机制<br />
单片机IO口电压范围<br />
按键输入检测原理</strong></p>
<p><img src="data/attachment/forum/202412/15/025729z3854x44588bg5ga.jpg" alt="" /><strong>标志位的作用</strong></p>
<p><img src="data/attachment/forum/202412/15/025729rxbmawpxn3j5nhgn.jpg" alt="" /><strong>单片机按键状态检测方法<br />
单片机程序延时函数生成方法</strong></p>
<p><img src="data/attachment/forum/202412/15/025729mu6ns58wid1w0u8w.jpg" alt="" /></p>

batcd 发表于 2024-12-15 03:13:42

<h2>07.AI8051U-定时中断器</h2>
<p><strong>本视频聚焦 8051u 深度入门到 32 位单片机实战,重点讲定时器中断应用与实现。以妈妈炒菜让儿子塞木头的案例引出单核 CPU 执行任务局限,进而介绍定时器概念及计时、提高效率两大作用。通过解释代码与演示操作,教授利用定时器实现 LED 灯、按键输入相关功能,探讨函数相关重要性,展示用定时器实现更复杂功能的实例,最后提出课后小练,适合单片机爱好者学习实践。</strong></p>
<p><img src="data/attachment/forum/202412/15/031052b4fzo4zflhd1yxuc.jpg" alt="" /></p>
<h3>定时器中断引入</h3>
<p><strong>1.通过妈妈炒菜儿子烧火的例子引入定时器中断的概念。</strong><br />
2.单核CPU的特点是每次只能执行一个任务,没有特殊情况不能被打断。<br />
3.定时器中断可以打断正在执行的任务,执行预定操作后再回到原任务。</p>
<h3>定时器的应用</h3>
<p><strong>1.定时器用于计时,可以实现软件计时和周期性操作。</strong><br />
2.定时器可以替代长时间的delay,提高运行效率和处理速度。<br />
3.定时器中断可以打断主循环,执行预定操作后再回到主循环。</p>
<h3>LED 3秒闪烁和按键计数</h3>
<p><strong>1.使用定时器实现LED 3秒闪烁。</strong><br />
2.在定时器中断中处理按键计数,实现按键次数串口打印。<br />
3.通过ISP软件生成定时器初始化和中断函数。</p>
<h3>定时器的配置</h3>
<p><strong>1.配置TM0PS寄存器,设置系统时钟。</strong><br />
2.选择12T模式,进行12分屏。<br />
3.设置CT位,选择内部计数器。<br />
4.设置GATE位,选择定时器启动方式。<br />
5.配置定时器零的隐藏寄存器和计数器。<br />
6.设置TF0位,开启定时器中断。</p>
<h3>函数定义、声明和调用</h3>
<p><strong>1.函数定义包括返回值类型、函数名和入口参数。</strong><br />
2.函数声明在调用之前,告诉编译器函数的索引位置。<br />
3.函数调用包括函数名、小括号和分号。<br />
4.函数定义、声明和调用的例子。</p>
<h3>任务二:灯按一下点亮,三秒后熄灭</h3>
<p><strong>1.通过按键初始化定时器,实现灯的点亮和熄灭。</strong><br />
2.在定时器中断中关闭定时器,实现灯的熄灭。<br />
3.通过ISP软件生成定时器初始化和中断函数。</p>
<h3>任务三:红蓝灯交替闪烁</h3>
<p><strong>1.通过按键控制红蓝灯的交替闪烁。</strong><br />
2.使用全局变量记录运行状态,实现灯的交替闪烁。<br />
3.在定时器中断中切换灯的状态。<br />
4.通过ISP软件生成定时器初始化和中断函数。</p>
<h5>课后小练:电子功德箱</h5>
<p>1.通过按键切换功德模式,实现单倍和双倍功德。<br />
2.在定时器中断中处理功德计数和LED灯的点亮时间。</p>
<details class="lake-collapse"><summary id="u5dc19e51"><strong><span class="ne-text">总结</span></strong></summary>
<p>**定时器的作用        **<br />
定时器设置的关键步骤<br />
全局变量与局部变量的区别<br />
定时器中断允许位的作用<br />
定时器的配置<br />
函数定义、声明、调用</p>
<p>数会乱码</p>
<p><img src="data/attachment/forum/202412/15/032028rfdpzs168stjfrgw.png" alt="image.png" title="image.png" /></p>
</details>
<p>这节更多的感觉是思考,举例例子, 一个人在家看电视(当做循环),有人敲门,你去开门的过程就是中断,开门完成在继续回去看电视,在软件编程中的hook也是类似的</p>

batcd 发表于 2024-12-15 03:28:44

<h2>08.AI8051U-定时器周期性调度任务</h2>
<p>**本视频深入讲解定时器周期性调度任务的基础与应用,先回顾上节课定时器相关常见问题及解决方法,强调编译时检查错误的重要性。接着介绍利用定时器实现周期性任务的基本框架,涵盖变量计数与中断函数执行任务。还讲解数组用于方便管理多个周期性任务及结构体数组在更复杂任务调度系统中的应用,最后讨论文件创建及引用注意事项,旨在助观众掌握技能、提升编程实践能力。 **</p>
<h3>定时器使用常见问题</h3>
<pre><code class="language-plain">1.定时器初始化错误:定时器初始化函数名称错误或大小写错误。
2.编译错误:编译时提示错误,但错误信息可能不完整。
3.符号错误:中文分号或括号使用错误。
4.括号不匹配:代码中括号不匹配或缺失。
5.代码格式不规范:代码缩进和排版不规范,导致阅读困难。
</code></pre>
<h3>定时器使用技巧</h3>
<pre><code class="language-plain">1.时间显示设置:在更多设置中关闭数据分包显示和显示分包收发时间。
2.按键响应问题:按键响应时间设置不当,导致按键无法正常响应。
</code></pre>
<h3>周期性任务介绍</h3>
<pre><code class="language-plain">1.周期性任务定义:每隔一定时间执行一次的函数。
2.任务示例:LED1每0.3秒闪烁一次,LED2每0.6秒闪烁一次,LED3每0.9秒闪烁一次。
</code></pre>
<h3>定时器初始化优化</h3>
<pre><code class="language-plain">1.定时器初始化改进:使用毫秒级定时器初始化函数。
2.代码优化:删除不必要的延时函数和定时器初始化函数。
</code></pre>
<h3>周期性任务实现</h3>
<pre><code class="language-plain">1.变量计数:使用毫秒级变量计数器实现周期性任务。
2.LED控制:根据计数器的值控制LED的闪烁频率。
</code></pre>
<h3>数组的定义和使用</h3>
<pre><code class="language-plain">1.数组定义:通过中括号定义数组,并指定数组长度。
2.数组索引:数组索引从零开始,类似于寄存器的位操作。
3.数组赋值:通过索引访问数组元素并进行赋值。
</code></pre>
<h3>for循环的使用</h3>
<pre><code class="language-plain">1.for循环基本语法:for(i=0; i&lt;3; i++)。
2.for循环应用:在定时器中断和主循环中使用for循环执行固定次数的循环。
</code></pre>
<h3>流水灯实现</h3>
<pre><code class="language-plain">1.流水灯功能:实现LED0到LED7的顺序点亮和熄灭。
2.数组应用:使用数组定义LED状态,并通过循环切换LED状态。
</code></pre>
<h3>按键处理优化</h3>
<pre><code class="language-plain">1.按键抖动处理:通过检测按键按下和松开的时间来避免抖动。
2.按键累积计数:使用计数器记录按键按下的次数,达到一定次数后执行相应操作。
</code></pre>
<h3>文件创建与工程添加</h3>
<pre><code class="language-plain">1.文件创建步骤:新建文件并保存,添加到工程,添加引用路径。
2.config.c和config.h:用于配置和初始化的C和H文件。
</code></pre>
<h3>结构体数组应用</h3>
<pre><code class="language-plain">1.结构体定义:定义包含run、timestamp和task字段的结构体。
2.任务调度系统:使用结构体数组实现周期性任务调度。
</code></pre>
<h3>IO操作封装</h3>
<pre><code class="language-plain">1.IO操作封装:将IO操作封装在单独的文件中,便于管理和维护。
2.LED闪烁任务:在IO文件中定义LED闪烁的任务函数。
</code></pre>
<h3>按键处理任务添加</h3>
<pre><code class="language-plain">1.按键处理任务:在主循环中调用按键处理函数,实现按键单击事件的处理。
</code></pre>
<details class="lake-collapse"><summary id="u978c598a"><span class="ne-text">总结</span></summary>
<p><strong>定时器实现周期性任务的基本原理</strong><br />
定时器设置的关键步骤<br />
变量自加操作<br />
按键控制任务执行<br />
数组的定义与使用方法<br />
for循环语句的使用方法<br />
*代码中不要出现中文的符号</p>
</details>

Tuier 发表于 2024-12-15 08:04:37

真详细,不错

xxkj2010 发表于 2024-12-15 08:37:23

<p>值得学习一下!</p>
页: [1] 2
查看完整版本: AI8051U学习打卡