鲁迪乌斯 发表于 2024-12-6 22:20:05

【2024-Ai8051U】新手上路-Ai8051U笔记堂堂连载!

<h1>你好</h1>
<p><strong>这里是鲁迪乌斯电子限定版。</strong></p>
<p><strong>这是我第一次参加嘉立创的活动,本人来自广东,是一名在校大三电子小弟。</strong></p>
<p><strong>很荣幸能够接触到嘉立创同AI联名的活动。</strong></p>
<p><strong>在第一次看到Ai8051U板子的时候,我很好奇,对于其冠名有AI两字是名存实亡还是卓越的进步这一问题表示好奇。</strong></p>
<p><strong>但事实证明,在AI为硬件赋能的今天,嘉立创的这块板子在我心中确实值得其分量,是一块优秀且伟大的作品。<img alt="qiang" class="emoji" src="https://www.stcaimcu.com/static/image/smiley/default/qiang.gif" title="qiang" /></strong></p>
<h2>缘起AI</h2>
<p>在过去的两年快两年半的大学生活中,我更多的是代码手鲁迪乌斯。大二的时候开始接触了AI,从pytorch开始启蒙,陆续做了rnn天气预测,Linet和Unet图像分割,还有最经典的识别手写数字集,到最后自己搭建了自己的卷积网络实现了股票预测和房价预测,又浅浅尝试了Transfomer的注意力机制。然后又沉迷于各种有意思的算法,到现在leetcodeAC了差不多200道,从那以后,属于我的AI大门就已经打开了,<strong>或许我与AI注定会打个照面</strong>。</p>
<h2>忠于电子</h2>
<p>我接触过许多开发板包括普通的51,stm32F103的各种形态,自己的第一块开发板也是在ESP32的基础上画出来的,在过往的大学生活中,我更多的是操作一些寄存器处理各种外设功能,这显然不能满足我,于是我就思考,是否能够在开发板上实现强大的Ai功能呢?想都不用想肯定可以,然后<strong>我就遇到了我们的Ai8051U</strong></p>
<p>所以我便开始学习Ai8051U,准备<strong>一窥51系列单片机在Ai领域的卓越成长</strong></p>

鲁迪乌斯 发表于 2024-12-6 22:23:24

<p>之前在RTT的活动中也用过MarkDown产出过文章,我个人的风格是尽量精简,当然很有可能会出错,对于观者来说如果发现错误请谅解,因为我对这方面的了解仍有不足,</p>
<p><strong>仅供参考</strong></p>

鲁迪乌斯 发表于 2024-12-6 22:35:05

<h1>序章</h1>
<h2>8051对于STC32G的优势?</h2>
<p><img src="https://www.stcaimcu.com/data/attachment/forum/202412/06/222441be3hbil8hp73p8yi.png" alt="1.png" title="1.png" /><strong>1.PWM可以兼容DMA</strong></p>
<p><strong>2.新增硬件存储单元</strong></p>
<p><strong>3.强大的AI功能</strong></p>
<p><strong>4.丝滑的显示图形</strong></p>
<p><strong>5.实现录放音直接实现录放音模块的功能</strong></p>
<h2>一、屏幕显示功能</h2>
<p><img src="data/attachment/forum/202412/06/223116xg51n4n50w455gqf.png" alt="2.png" title="2.png" /></p>
<p>可见AI8051U可以实现对图像,汉字等的高刷新率高帧率显示,包括图像的旋转。</p>
<p>利用一个8080的八位并口,对图形菜单显示十分有利。</p>
<h2>二、录放音功能</h2>
<p><img src="data/attachment/forum/202412/06/223146qioi8rols99kqttq.png" alt="3.png" title="3.png" /></p>
<p>按下按键2可以开始录音,按键1停止,按下按键6可以查看和修改音量,然后按键3可以放录音。</p>
<h2>三、PWM_DMA模式</h2>
<p>演示时用到了一个点阵屏来实现数字显示。</p>
<p><img src="data/attachment/forum/202412/06/223220mro0joo0j5pt3ezh.png" alt="4.png" title="4.png" /></p>
<p><img src="https://www.stcaimcu.com/data/attachment/forum/202412/06/223248kfddm6momomdmvv9.png" alt="5.png" title="5.png" /></p>
<p>先选择COM8,因为我们这块单片机用的是串口COM8_CDC1。</p>
<p>然后老师通过一个响指演示了频率到FFT绘图的转化。</p>
<p><img src="data/attachment/forum/202412/06/223306wwwkgsxw201x1sk9.png" alt="6.png" title="6.png" /></p>
<p>可以看到中心频率处于2.5左右。</p>
<p>这个功能可以帮助我们快速分析频率。</p>
<h2>四、强大的AI功能</h2>
<p><img src="data/attachment/forum/202412/06/223414d1sufs4dmaf3a5mm.png" alt="7.png" title="7.png" /></p>
<p>某大佬已经实现了从普通51到AI51的跨越,实现了手写计算器,预示着这块芯片开始向AI领域进军,其实现意义非凡,可谓是关键且卓越的一步。</p>

鲁迪乌斯 发表于 2024-12-7 21:42:25

<h1>第二集</h1>
<h2>硬件部分</h2>
<p>PCB 短路帽 数据线</p>
<p><img src="C:\Users\LAO\Desktop\markdowm合集\AI8051U学习笔记\图片\8.png" alt="" /></p>
<p><img src="C:\Users\LAO\Desktop\markdowm合集\AI8051U学习笔记\图片\9.png" alt="" /><br />
<img src="data/attachment/forum/202412/07/214151kmurg43u14ukievv.png" alt="8.png" title="8.png" /></p>
<p><img src="data/attachment/forum/202412/07/214203g4164rru66b6m48r.png" alt="9.png" title="9.png" /></p>
<p>支持type a ,type c</p>
<p>USB转双串口最高可以达到十兆的波特率</p>
<p>红色电容器可以调节示波器的波形</p>
<p>支持TFT彩屏以及OLED屏</p>
<p>红外接收等</p>
<p><img src="C:\Users\LAO\Desktop\markdowm合集\AI8051U学习笔记\图片\10.png" alt="" /><br />
<img src="data/attachment/forum/202412/07/214209jaaz71f6oflevwm3.png" alt="10.png" title="10.png" /></p>
<p>无源晶振可以做到零误差</p>
<p>E2PROM可以保证数据不丢失</p>
<p>DS18B20温度传感器</p>
<h2>软件介绍</h2>
<p><img src="C:\Users\LAO\Desktop\markdowm合集\AI8051U学习笔记\图片\11.png" alt="" /><br />
<img src="data/attachment/forum/202412/07/214215i1z7zx9j9101y17e.png" alt="11.png" title="11.png" /></p>
<p>添加头文件增加国产芯片型号</p>
<p>ISP软件可以在官网下载</p>
<p><img src="C:\Users\LAO\Desktop\markdowm合集\AI8051U学习笔记\图片\12.png" alt="" /><br />
<img src="data/attachment/forum/202412/07/214221bw4hzaeqajuqnjc4.png" alt="12.png" title="12.png" /></p>
<p>下载选择24兆,找到要烧入的文件然后烧入</p>

鲁迪乌斯 发表于 2024-12-7 22:11:35

<h1>第三集</h1>
<h2>怎么点灯?</h2>
<h3>新建工程的基础配置</h3>
<p><img src="file:///C:/Users/LAO/Desktop/markdowm%E5%90%88%E9%9B%86/AI8051U%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/%E5%9B%BE%E7%89%87/13.png?lastModify=1733580491" alt="" /><img src="https://www.stcaimcu.com/data/attachment/forum/202412/07/220850rt2n83srxnbpud9g.png" alt="17.png" title="17.png" /></p>
<p><strong>经典起<br />
手,定义主函数主循环然后尝试编译</strong></p>
<p><img src="file:///C:/Users/LAO/Desktop/markdowm%E5%90%88%E9%9B%86/AI8051U%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/%E5%9B%BE%E7%89%87/14.png?lastModify=1733580491" alt="" /><br />
<img src="data/attachment/forum/202412/07/220905u6c3p2uz2my7mqgl.png" alt="14.png" title="14.png" /></p>
<p><strong>选择芯片为Ai8051U,勾上四字节</strong></p>
<p><strong>其余默认配置</strong></p>
<p><strong>Code Run Size选用64</strong></p>
<p><img src="file:///C:/Users/LAO/Desktop/markdowm%E5%90%88%E9%9B%86/AI8051U%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/%E5%9B%BE%E7%89%87/15.png?lastModify=1733580491" alt="" /><br />
<img src="data/attachment/forum/202412/07/220913vp0uasq5ut2pmx25.png" alt="15.png" title="15.png" /></p>
<p><strong>勾选生成HEX文件(必要)</strong></p>
<p><strong>选80</strong></p>
<p><img src="file:///C:/Users/LAO/Desktop/markdowm%E5%90%88%E9%9B%86/AI8051U%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/%E5%9B%BE%E7%89%87/16.png?lastModify=1733580491" alt="" /></p>
<p><strong>编程小知识,尖括号为系统路径,双引号为当前目录优先查找</strong></p>
<p><strong>关于头文件的路径,可以在魔术棒——C/C++——设置里面新建</strong></p>
<p><strong>找到头文件AI8051U到当前目录后就可以开始打代码啦</strong></p>
<h3>原理讲解</h3>
<p><img src="file:///C:/Users/LAO/Desktop/markdowm%E5%90%88%E9%9B%86/AI8051U%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/%E5%9B%BE%E7%89%87/17.png?lastModify=1733580491" alt="" /><br />
<img src="data/attachment/forum/202412/07/220924f3badd2zq05zdvvq.png" alt="17.png" title="17.png" /></p>
<p><img src="data/attachment/forum/202412/07/220930tom4qs151mrnn5my.png" alt="18.png" title="18.png" /></p>
<p><img src="file:///C:/Users/LAO/Desktop/markdowm%E5%90%88%E9%9B%86/AI8051U%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/%E5%9B%BE%E7%89%87/18.png?lastModify=1733580491" alt="" /></p>
<p><img src="file:///C:/Users/LAO/Desktop/markdowm%E5%90%88%E9%9B%86/AI8051U%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/%E5%9B%BE%E7%89%87/19.png?lastModify=1733580491" alt="" /></p>
<p><strong>开关是一个BJT管,BJT的特性就在于其是否有基极电流,如果有的话那么对于BJT上面的电流集电极电流会进行一个β倍的放大,发射极电流IE = βIC</strong></p>
<p><img src="file:///C:/Users/LAO/Desktop/markdowm%E5%90%88%E9%9B%86/AI8051U%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/%E5%9B%BE%E7%89%87/20.png?lastModify=1733580491" alt="" /><br />
<img src="data/attachment/forum/202412/07/220949i6xvvkjwvqw2novj.png" alt="20.png" title="20.png" /></p>
<p><em>当然如果没有基极电流的话那就没有电流通过发射级,所以可以等效成一个开关</em>*</p>
<p><em>原理图中一排的放光二极管就是我们要操作的灯泡啦,二极管的特性就是正极大于负极的时候二极管导通,反过来不导通,所以我们如果想点亮它,就需要操纵单片机使得GPIO口即文中类似P0.0的端口输出低电平,然后与开关顶上的3.3伏特形成一个电势差使二极管点亮</em>*</p>
<ul>
<li></li>
</ul>
<p><img src="data/attachment/forum/202412/07/221049rop9o5mtf1ik9lp1.png" alt="21.png" title="21.png" /><br />
<img src="file:///C:/Users/LAO/Desktop/markdowm%E5%90%88%E9%9B%86/AI8051U%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/%E5%9B%BE%E7%89%87/21.png?lastModify=1733580491" alt="" /></p>
<p><strong>配置IO口,即P端口</strong></p>
<p><img src="file:///C:/Users/LAO/Desktop/markdowm%E5%90%88%E9%9B%86/AI8051U%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/%E5%9B%BE%E7%89%87/22.png?lastModify=1733580491" alt="" /><br />
<img src="data/attachment/forum/202412/07/221106cd6y2tajlu278a2z.png" alt="22.png" title="22.png" /></p>
<p><strong>提供了两种模式,两种模式对于P口的控制是不同的</strong></p>
<p><img src="file:///C:/Users/LAO/Desktop/markdowm%E5%90%88%E9%9B%86/AI8051U%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/%E5%9B%BE%E7%89%87/23.png?lastModify=1733580491" alt="" /><br />
<img src="data/attachment/forum/202412/07/221117nrmmf0mmsbpfo1si.png" alt="23.png" title="23.png" /></p>
<p><strong>烧入软件提供了IO自动配置工具</strong></p>
<p><img src="file:///C:/Users/LAO/Desktop/markdowm%E5%90%88%E9%9B%86/AI8051U%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/%E5%9B%BE%E7%89%87/24.png?lastModify=1733580491" alt="" /><br />
<img src="data/attachment/forum/202412/07/221125z2xzz058ts2sum90.png" alt="24.png" title="24.png" /></p>
<p><strong>最后实验成功</strong></p>

鲁迪乌斯 发表于 2024-12-8 22:33:34

<h1>第四集</h1>
<h2>USB不停电下载</h2>
<p>实现编译即下载</p>
<p><img src="C:\Users\LAO\Desktop\markdowm合集\AI8051U学习笔记\图片\25.png" alt="" /></p>
<p><img src="data/attachment/forum/202412/08/223114r4wdbcf02lfc0zdt.png" alt="25.png" title="25.png" /></p>
<p><img src="C:\Users\LAO\Desktop\markdowm合集\AI8051U学习笔记\图片\26.png" alt="" /><img src="https://www.stcaimcu.com/data/attachment/forum/202412/08/223123swtw3z7z9p5tj179.png" alt="26.png" title="26.png" /></p>
<p>官网——软件工具——库函数——USB库文件</p>
<p>然后下载例程方便演示</p>
<p><img src="C:\Users\LAO\Desktop\markdowm合集\AI8051U学习笔记\图片\27.png" alt="" /><br />
<img src="data/attachment/forum/202412/08/223141emhay9nlx3ojfgoy.png" alt="27.png" title="27.png" /></p>
<p>两个汇编文件删掉后,剩下的两两区别就死HID下载喝CDC下载的区别,我们一般使用CDC下载即可</p>
<p>例程多一个Lib文件(较于上一节课代码)</p>
<p><img src="C:\Users\LAO\Desktop\markdowm合集\AI8051U学习笔记\图片\28.png" alt="" /><br />
<img src="data/attachment/forum/202412/08/223154anhiz62anph8k8tr.png" alt="28.png" title="28.png" /></p>
<p>找到USB的头文件,根据下载方式选择 带有 interrupt的文件是中断模式文件</p>
<p>查询和中断的区别在于:</p>
<p>查询模式在于每一次发送或者接收文件后都要检查相应的标志位后再继续传输,通常在一个while循环中执行</p>
<p>而中断模式则是每当数据传输时就会触发相应的中断,在中断内部执行相应操作,包括标志位的查询,其他外设操作等等</p>
<p>在收发数据这一块其实不管是中断模式还是查询模式,都会有可能会漏值的缺点。我们还需要在程序中定义环形缓冲区,这样就能有效解决这种情况。当然内部的USB收发应该很复杂,解决方式也可能不同。</p>
<p>对于漏值的原因,则是触发中断和查询过程都是需要时间的,在这段时间中就有可能产生少接收或者少发送值的情况,常见的是漏掉几个按键,或者和其他外设联动时会发生这种情况。</p>
<p><img src="C:\Users\LAO\Desktop\markdowm合集\AI8051U学习笔记\图片\29.png" alt="" /></p>
<p><img src="data/attachment/forum/202412/08/223232q4u2tgrun6djx146.png" alt="29.png" title="29.png" /></p>
<p>如下配置头文件和Lib文件即可</p>
<h3>初始化函数</h3>
<p>搜索usb_init()</p>
<p>但是搜不到 因为函数本体在LIb文件中,这个Lib文件集成了很多驱动文件,为了方便移植和不被修改而不可读</p>
<h3>开始操作</h3>
<p><img src="C:\Users\LAO\Desktop\markdowm合集\AI8051U学习笔记\图片\30.png" alt="" /><br />
<img src="data/attachment/forum/202412/08/223244tjv7571k7hh1g5z0.png" alt="30.png" title="30.png" /></p>
<p>配置准双向口</p>
<p><img src="C:\Users\LAO\Desktop\markdowm合集\AI8051U学习笔记\图片\31.png" alt="" /><br />
<img src="data/attachment/forum/202412/08/223257n9acqcekjfj66c58.png" alt="31.png" title="31.png" /></p>
<p>USB的寄存器都在FAXFR列表里面所以要使能列表</p>
<p>所以对这个寄存器| 0x80</p>
<p>为什么这样呢</p>
<p>这是位或的小知识 可以保证最高位置1 其他位保持原样</p>
<p><img src="C:\Users\LAO\Desktop\markdowm合集\AI8051U学习笔记\图片\32.png" alt="" /><br />
<img src="data/attachment/forum/202412/08/223315f2l5jd9vj19z5q95.png" alt="32.png" title="32.png" /></p>
<p>也是| 0x80,把USB的中断打开,在B7位</p>
<p>然后EA= 1 把所有中断打开</p>
<p>这里和普通的51是一样的没什么区别</p>
<p><img src="C:\Users\LAO\Desktop\markdowm合集\AI8051U学习笔记\图片\33.png" alt="" /><br />
<img src="data/attachment/forum/202412/08/223330lo3gwyh4p3n3943m.png" alt="33.png" title="33.png" /></p>
<p>最后一段(有点糊)这段实现了单片机对电脑的命令,让电脑自动下载,也就是不掉电下载</p>

鲁迪乌斯 发表于 2024-12-8 22:35:51

<h1>第五集</h1>
<h2>C语言基础</h2>
<p><img src="C:\Users\LAO\Desktop\markdowm合集\AI8051U学习笔记\图片\34.png" alt="" /><br />
<img src="data/attachment/forum/202412/08/223429bolosbqoqdzslljb.png" alt="34.png" title="34.png" /></p>
<p>重定义打印函数(其实就是自己用传统打印造一个USB打印函数)</p>
<p>这里给出一个模板代码</p>
<pre><code class="language-c">int printf_hid (const char *format)
{
    char String;
    va_list arg;//定义一个可变的参数列表的数据类型
    va_start(arg,format);//从format处开始接收参数
    vsprintf(String,format,arg);//将参数类型——参数值打印到数组里
    va_end(arg);//结束变量
    Usb_send(String);//USB的发送函数,我这里瞎掰的,发送这个要传输的字符串
}
</code></pre>
<p><img src="C:\Users\LAO\Desktop\markdowm合集\AI8051U学习笔记\图片\35.png" alt="" /><br />
<img src="data/attachment/forum/202412/08/223440xe477q2944oezjzz.png" alt="35.png" title="35.png" /></p>
<p><img src="C:\Users\LAO\Desktop\markdowm合集\AI8051U学习笔记\图片\36.png" alt="" /><br />
<img src="data/attachment/forum/202412/08/223450aw2oezql86wrhf5l.png" alt="36.png" title="36.png" /></p>
<p><img src="C:\Users\LAO\Desktop\markdowm合集\AI8051U学习笔记\图片\37.png" alt="" /><br />
<img src="data/attachment/forum/202412/08/223503rqiyxvwv4th5yaxg.png" alt="37.png" title="37.png" /></p>
<p>强制转换 全局变量</p>
<p><img src="C:\Users\LAO\Desktop\markdowm合集\AI8051U学习笔记\图片\38.png" alt="" /><br />
<img src="data/attachment/forum/202412/08/223513bazuz7z0hhdjzeag.png" alt="38.png" title="38.png" /></p>
<p>非0则1 判断语句里是这样的</p>
<pre><code>while(66){}
</code></pre>
<p>可以进入循环,因为只要不是0就是1判断语句里</p>
<p><img src="C:\Users\LAO\Desktop\markdowm合集\AI8051U学习笔记\图片\39.png" alt="" /><br />
<img src="data/attachment/forum/202412/08/223528ke76jkn4bj9bgxrb.png" alt="39.png" title="39.png" /></p>
<p>优先级:非与或</p>
<p><img src="C:\Users\LAO\Desktop\markdowm合集\AI8051U学习笔记\图片\40.png" alt="" /><br />
<img src="data/attachment/forum/202412/08/223540a73lewlkk1l2o22b.png" alt="40.png" title="40.png" /></p>
<p>与运算的话有0结果就是0</p>
<p>或运算的话有1结果就是1</p>
<p>非就是取反</p>
<p>左移右移就是按位左移右移</p>
<p>高位或者低位要补0</p>
<p><img src="C:\Users\LAO\Desktop\markdowm合集\AI8051U学习笔记\图片\41.png" alt="" /><br />
<img src="data/attachment/forum/202412/08/223548hqg1ze8usx1nwsn1.png" alt="41.png" title="41.png" /></p>

鲁迪乌斯 发表于 2024-12-9 21:59:44

<h1>I/O 输入输出</h1>
<h2>概念</h2>
<p><img src="file:///C:/Users/LAO/Desktop/markdowm%E5%90%88%E9%9B%86/AI8051U%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/%E5%9B%BE%E7%89%87/42.png?lastModify=1733752677" alt="" /></p>
<p><img src="data/attachment/forum/202412/09/215854rv7vn83jh878j8n4.png" alt="42.png" title="42.png" /></p>
<p><strong>高低电平是有电压范围的</strong></p>
<p><strong>这个范围也有上下限</strong></p>
<p><img src="data/attachment/forum/202412/09/215901r230n8v3zbdl84c7.png" alt="43.png" title="43.png" /></p>
<p><strong>上下拉的概念</strong></p>
<p><img src="file:///C:/Users/LAO/Desktop/markdowm%E5%90%88%E9%9B%86/AI8051U%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/%E5%9B%BE%E7%89%87/44.png?lastModify=1733752677" alt="" /><br />
<img src="data/attachment/forum/202412/09/215907xlchh6bogew27gn7.png" alt="44.png" title="44.png" /></p>
<p><strong>这里有抽象小图一则,上拉就是导通就有3.3,关闭就低电平</strong></p>
<p><strong>下拉就反过来</strong></p>
<p><strong>按键小则</strong></p>
<p><img src="file:///C:/Users/LAO/Desktop/markdowm%E5%90%88%E9%9B%86/AI8051U%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/%E5%9B%BE%E7%89%87/45.png?lastModify=1733752677" alt="" /><br />
<img src="data/attachment/forum/202412/09/215915pv0naivznov0suov.png" alt="45.png" title="45.png" /></p>
<h2>小任务(按键控制LED)</h2>
<p><strong>代码部分</strong></p>
<pre><code>if (P32 == 0)
{
   P00 = 1;
}
else
{
   P00 = 0;
}
</code></pre>
<p><strong>按下给P口高电平,松开给低电平。</strong></p>
<p><img src="file:///C:/Users/LAO/Desktop/markdowm%E5%90%88%E9%9B%86/AI8051U%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/%E5%9B%BE%E7%89%87/46.png?lastModify=1733752677" alt="" /><br />
<img src="data/attachment/forum/202412/09/215925zuzms116sub1ghb0.png" alt="46.png" title="46.png" /></p>
<p><img src="file:///C:/Users/LAO/Desktop/markdowm%E5%90%88%E9%9B%86/AI8051U%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/%E5%9B%BE%E7%89%87/47.png?lastModify=1733752677" alt="" /><br />
<img src="data/attachment/forum/202412/09/215939tuy4xmvtppyhvy9p.png" alt="47.png" title="47.png" /></p>
<p><strong>延时函数,可以用烧入软件生成,然后用延时函数在按下后进行消抖处理</strong></p>
<p><strong>什么是消抖?实际上你按下机械按键的时候,其中的电平可能会来回跳动,这种情况下就会产生波动的电平信号,这种噪声对于单片机来说是很烦的,所以我们需要利用延时函数跳过这段时间</strong></p>

鲁迪乌斯 发表于 2024-12-9 22:01:16

<h1>第七集</h1>
<h2>中断的概念</h2>
<p><strong>这里引用韦老师的中断介绍</strong></p>
<p><img src="file:///C:/Users/LAO/Desktop/markdowm%E5%90%88%E9%9B%86/AI8051U%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/%E5%9B%BE%E7%89%87/48.png?lastModify=1733752800" alt="" /><br />
<img src="data/attachment/forum/202412/09/220017ptozykt0y80oyyga.png" alt="48.png" title="48.png" /></p>
<h2>定时器中断</h2>
<p><img src="file:///C:/Users/LAO/Desktop/markdowm%E5%90%88%E9%9B%86/AI8051U%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/%E5%9B%BE%E7%89%87/49.png?lastModify=1733752800" alt="" /><br />
<img src="data/attachment/forum/202412/09/220026wrpyrw4kw24wrk84.png" alt="49.png" title="49.png" /></p>
<p><strong>很准,然后定时器中断很常用,无敌的</strong></p>
<p><img src="file:///C:/Users/LAO/Desktop/markdowm%E5%90%88%E9%9B%86/AI8051U%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/%E5%9B%BE%E7%89%87/50.png?lastModify=1733752800" alt="" /><br />
<img src="data/attachment/forum/202412/09/220038kppeoz773demd8eq.png" alt="50.png" title="50.png" /></p>
<p><strong>C/T置0 TR置1就能使能这个定时器,有两个寄存器来设置定时器的状态</strong></p>
<p><strong>可以在手册里具体看某个寄存器的作用</strong></p>
<p><img src="file:///C:/Users/LAO/Desktop/markdowm%E5%90%88%E9%9B%86/AI8051U%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/%E5%9B%BE%E7%89%87/51.png?lastModify=1733752800" alt="" /><br />
<img src="data/attachment/forum/202412/09/220049saz3v4o6yle66ka6.png" alt="51.png" title="51.png" /></p>
<p><strong>定时器初始化的过程就是配置哪些定时器寄存器,这没什么好说的,如何配置都在手册里具体写着</strong></p>
<p><strong>TH0 TL0 对应的值就是定时器里的计数值</strong></p>
<p><img src="file:///C:/Users/LAO/Desktop/markdowm%E5%90%88%E9%9B%86/AI8051U%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/%E5%9B%BE%E7%89%87/52.png?lastModify=1733752800" alt="" /><br />
<img src="data/attachment/forum/202412/09/220058tr4uu0cg2ea2rrg4.png" alt="52.png" title="52.png" /></p>
<p><strong>这里是计算公式,通过配置TH0 TL0 可以获得定时的时间和定时的频率</strong></p>
<h2>任务三代码演示</h2>
<p><img src="file:///C:/Users/LAO/Desktop/markdowm%E5%90%88%E9%9B%86/AI8051U%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/%E5%9B%BE%E7%89%87/53.png?lastModify=1733752800" alt="" /><br />
<img src="data/attachment/forum/202412/09/220106q99vfix9f2pv9xm4.png" alt="53.png" title="53.png" /></p>
<p><strong>这个是定时器中断函数里的配置</strong></p>
<p><strong>主函数配置如下</strong></p>
<p><img src="file:///C:/Users/LAO/Desktop/markdowm%E5%90%88%E9%9B%86/AI8051U%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/%E5%9B%BE%E7%89%87/54.png?lastModify=1733752800" alt="" /><br />
<img src="data/attachment/forum/202412/09/220114gaea4gxx6m68ka8a.png" alt="54.png" title="54.png" /></p>
<p><strong>最后实验成功</strong></p>

_奶咖君_ 发表于 2025-1-6 17:37:20

老哥 ,,继续啊 {:touxiao:}
页: [1]
查看完整版本: 【2024-Ai8051U】新手上路-Ai8051U笔记堂堂连载!