找回密码
 立即注册
查看: 2314|回复: 4

AI讲义整理,人工精校 —— 冲哥《8051U深度入门到32位51大型实战教学视频》学习

[复制链接]
  • 打卡等级:常住居民III
  • 打卡总天数:123
  • 最近打卡:2025-04-19 16:12:35
已绑定手机

60

主题

777

回帖

4001

积分

论坛元老

自定义头衔

积分
4001
发表于 2024-12-7 14:45:39 | 显示全部楼层 |阅读模式
联系我请点击左下角的【回复】按钮,否则我收不到消息提
回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:123
  • 最近打卡:2025-04-19 16:12:35
已绑定手机

60

主题

777

回帖

4001

积分

论坛元老

自定义头衔

积分
4001
发表于 2024-12-7 14:59:11 | 显示全部楼层

第一集 序言

大家好,欢迎收看最新一期的STC单片机教程。本课程将带您从8051U的基础入门,深入到32位51系列的大型实战应用。在课程开始之前,我想与大家分享一句话:即使梦想的道路充满荆棘,我们也要勇敢前行。希望这个视频能帮助您更好地掌握单片机知识,并巩固所学。在学习过程中,如有任何疑问,欢迎随时访问我们的STC官网或STC论坛进行提问和交流,我们将及时为您解答。

在开始今天的课程之前,我想解释一下,尽管我们之前已经发布了关于STC32G的视频,为什么还要推出关于8051U的视频。这是因为8051U相较于STC32G拥有许多卓越的功能,以下是其主要特点的总结:

  1. 在屏幕显示和视频播放方面,通过优化QSPI闪存芯片的读写性能,我们大幅提升了大容量视频的播放体验。
  2. I2S的录音和播放功能已经全面实现。
  3. 支持PWM DMA功能,对之前的PWM进行了改进,使其能更好地兼容各种设备。
  4. 实现了频谱分析仪功能,这得益于新增的硬件浮点存储单元,显著提升了数据处理能力。
  5. 最后,我们还将展示一个手写计算器,细心的观众可能会注意到,这颗8051U芯片以AI开头,正式名称为AI8051U,标志着它已经从STC进化到了AI。

现在,我将通过几个实例来展示我们的产品。首先是屏幕显示功能,您可以看到摄像头下方的显示屏,它能够以高帧率刷新各种界面,包括汉字、英文、图片等信息的显示,甚至支持旋转显示。它采用808位并口,效果清晰可见。此外,我们还用它制作了图形菜单,效果非常好。

接下来,我们探讨下一个功能。我们将直接进行下一个步骤,重新选择烧录文件。在OBJ文件夹中选择touch_fx文件,然后进入烧录端口。现在开始下载。通过摄像头查看数据,可以看到显示屏上显示了一个用于校准的小圆点,我们可以通过这个点进行校准。

校准成功后,会显示一些校准参数。然后,我们进入该界面,可以自由编辑数字,包括清屏、改颜色等操作。这里我们可以写上“AI”等字样,可以看到刷新率非常快。利用这个特性,我们可以轻松创建简单的图形界面等功能。进一步探索,我们发现I2S的录放音功能的代码也包含在我们的代码包中,可以直接找到。

在数字录放音方面,我们稍作代码修改,需要将频率修改为36.864。然后,我们进入烧录界面进行下载。之后,我们可以看到摄像头下方显示“stop 50”字样,意为停止。我们再次查阅手册,获取详细的操作指南。在I2S的数字录放音功能中,提供了几个操作选项:停止、录音、放音、增加音量、减少音量。在这些操作中,我们需要用到喇叭。因此,连接一个外部喇叭后,就可以进行演示了。

首先,我们按数字2开始录音AI8051单片机,然后按一停止。现在,我们可以按数字3来执行下一个步骤,包括调节音量。当前音量为50,我们可以将其调至最大值,以便更好地听音。好,这是最大值。我们再按一次数字3放音。

大家能够听到这个声音,说明我们已经实现了一个I2S的录音和放音功能。过去常见的录音和放音模块可以被单片机直接实现整个功能,这表明我们已经从以前的51单片机技术取得了巨大的进步。

接下来,我们来探讨一下PWM DMA的功能。我将根据论坛上的代码进行手动修改并烧录程序。在进行此操作时,我们需要将主屏的大小设定为40兆,并下载程序。记得先进入下载模式。这个代码需要使用一个硬件,再打开摄像头看一下。这个代码是在一个WS2812点阵屏上实现的数字显示,显示的是一个时钟,但这个没有校准,我简单地做了一个时间,可以看到它是一个由八个灯横竖向八个横向32个的点亮的一个灯。这里加了一个涂色的亚克力面板,可以让它看起来稍微清晰一点。当然,这个还不是最完美的,其实下面还可以盖一层。

我们采用的是PWM结合DMA来实现该功能。不同于STC32G,我们的芯片可以直接通过PWM和DMA实现一千多颗2812 LED的显示,且不会产生任何干扰。这一特性极为强大,我们还可以在此基础上加入遥控功能等,创造出具有我们自主知识产权的灯具,甚至可以配备频谱分析仪进行相关分析。

我们再次打开编程软件,编写实现频谱功能的代码。这涉及到8051U实验箱的特定代码,我们需要找到频谱分析仪并将256点数据直接下载。选择主频40兆赫兹,进入下载模式。接着,我们点击下载按钮。在频谱分析过程中,我们将使用FFT绘图功能。请确保选择正确的串口,即编号为COM8的串口,因为我们的单片机使用的是COM8 CDC1。一旦选择打开窗口,即可看到结果。我们可以进一步调整亮度以更好地观察。

可以观察到,通过打一个响指,我们能够立即识别其频率。响指的中心频点大约在2.5kHz左右,这个频谱分析仪能够帮助我们快速分析频率。它利用I2S的录音功能进行数据采集,由于其运算速度足够快,可以实现快速的FFT数据刷新。

最后,我们来看一个由论坛会员开源的手写计算器程序,该程序最终实现了在屏幕上写下并计算出5加6乘7的结果为47,以及8加9乘3的结果为35。这标志着我们的单片机已经正式向人工智能领域迈进。

当然,这些是我们单片机最强大的功能。与前一版相比,它还增加了QSPI等功能。此外,我们还准备了一个flash编程器,想给大家演示一下,为什么我们说这里还有个视频播放。当然,这里我把它放到最后也是一个别有用心的。可以看一下,我们再重新给它刷一个程序,我们刷回。我们找到一个视频级播放动画,我们用的屏是ILI9341。因此,我们需要下载OBJ的主屏程序,仍然选择40M的频率。接着,进入下载模式,将工具文件上传至目标设备后,即可关闭程序。

成功下载后,按照面板P33的指示,再次按下power键以重新上电。识别出COM8后,我们选择串行flash编程器,这是我们的新功能。选择对应的W25Q128,并设定起始地址。我们先读取ID,可以看到ID正常读取,然后擦除芯片,擦除完成。接着,打开多文件,可以加载代码包中的动态图片。打开全部,可以看到它已经自动帮我们导入了所有的数据。然后我们再点击编程数据,可以看到这个进度条刷新的非常快,这可以用来做我们的一个flash编程器的功能,非常好用。我们等它下载完成。

好的,现在下载已经完成。我们打开摄像头,按下主板上的电源按钮,可以看到设备已经准备好演示视频。只要图片刷新速度快,就能正常显示数据。

好的,这就是我们新推出的单片机的强大之处。让我们来细致分析一下它的功能。它的学名是AI8051U,这是一款USB型单片机,它既支持32位也支持8位指令集。它的最大优点在于能够兼容早期的89C52,甚至12C5A60S2。对于之前使用过这些开发板的同学来说,现在有福了,因为你们可以将PDIP40封装的单片机直接插入这些开发板中。它不仅可以兼容八位指令集,还可以使用32位指令集。因此,无论是8H8K64U还是32G的同学,都可以无缝地使用这颗单片机。此外,它还拥有32K的SRAM、64K的flash,以及一些PWM硬件接口等,是目前最强的单片机之一。今天,我们将主要演示其各项功能。

通过本课的学习,希望各位能够理解为何本课至关重要。本课相较于前一课有了显著提升,包含了许多实用的硬件功能。感谢各位的观看。

联系我请点击左下角的【回复】按钮,否则我收不到消息提
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:123
  • 最近打卡:2025-04-19 16:12:35
已绑定手机

60

主题

777

回帖

4001

积分

论坛元老

自定义头衔

积分
4001
发表于 2024-12-7 15:00:03 | 显示全部楼层

第二集 硬件及工具介绍

大家好,欢迎收听8051U深度入门到32位51大型实战视频的本期课程。在开始今天的课程之前,让我们再次高喊我们的口号:“即使梦想让我们遍体鳞伤,这一次我们也要勇往直前。”现在,让我们开始今天的课程。

本章主要介绍我们的硬件和软件部分。我们的视频教程将围绕官方发行的STC8051实验箱展开。通过视频可以看到,实验箱主体是一个透明的盒子,内含一块电路板,还有一根电线和一个短路帽,电线被我拿出来了。

我们开始对产品进行开箱了解。首先,通过手柄处可以将产品打开。打开后,我们可以看到一块绿色的板子,这块板子被称为PCB板,即印制电路板。所有元器件焊接完成后,它被称为PCBA板,是我们在后续产品制作中经常提及的一个术语。PCBA指的是成品加工良好的线路板。将这样的PCBA板配上外壳后,就可定义为一个完整的产品。我们希望每个人都能踏上产品开发的道路。

此外,箱体底部设计有向上翻开的结构,内含短路帽和数据线。短路帽并非无用之物,在后续开发过程中它将发挥重要作用,因此务必妥善保存,切勿丢失。至此,我们实验箱的硬件部分介绍完毕,后续课程将以此实验箱为基础展开讲解。

我们继续看PPT,了解一下实验箱的功能。这是实验箱正面的图,可以看到每个部分都用红框框起来了。从左到右开始讲解。左下角有一个USB Type-A口,可以与我们官方配送的USB线直接连接。一个USB头插入这个实验箱的USB口,另一个USB头插入电脑的USB口,这样就可以给板子烧录程序了。这部分是后续课程中必须掌握的内容,我们稍后还会重点讲解如何使用。

接着是USB link1D接口,它是我们的USB link1D,是官方提供的下载、烧录和调试工具,可以直接连接到该接口上。对于想要进行产品开发的用户,我们强烈推荐购买此产品,因为它具有强大的功能。此外,该工具还附赠了一些线,这些线缆通常包含在配件包中。另外,它还配备了一个USB Type-C接口,因此,如果你不习惯使用Type-A的数据线,可以使用Type-C的数据线,如手机上的数据线,进行下载。

在我们的开发板背面,配备了一颗USB转双串口芯片。对于那些希望进行串口实验的用户,这将是一个理想的工具。值得一提的是,这个USB转双串口芯片是由STC公司自主研发的。该芯片最高波特率可达10兆,市场上常见的如CH340等芯片也可替换,用户可以自行尝试。例如,在立创开源广场或STC论坛上,有许多开源方案可供用户参考并购买相关产品进行实践,这些资源都非常实用。若不具备相应条件,用户也可以直接使用实验箱进行初步尝试。此外,该板子还配备了一个TF卡插座,用于插入TF卡,以支持文件系统的运行和其他相关操作。

这是一个示波器的输入端,当然这个输入头要配我们一个常见的示波器的表笔,否则我们这个线没有办法直接的怼上去。红色的部分需要特别注意,是的,在进行示波器实验时,我们可以通过调节这个红色的电容器来调整波形,如果波形出现失真等情况,可以通过这个红色电容器进行调整。

好的,再往上,这是一个放音的输出,这个是立体声和立体声耳机。上面可以连接音响设备,下方则可连接耳机,这样就实现了放音功能。此外,这个较大的话筒也可用于录音。我们实验箱中,包括上一节演示时,都有一个录放音的实验。

该组件的核心芯片位于背面,稍后我们将对其进行详细介绍。该接口支持连接OLED或SPI、I2C等设备。常见的长条形屏和方形屏在我们的门锁上也是比较常见的,OLED屏在早期的MP3等设备上也十分常见。

这是一个八路流水灯。对稍有了解单片机入门的人来说,可能会知道我们入门的时候都是以点亮灯衡量你是否入门的一个标准。这里八颗灯我们给它统称为流水灯。这个灯可以从左往右亮,或者从右往左亮,这样逐渐流动过去,就叫流水灯。还有这里是八位数码管,为什么称其为八位数码管?这是因为这里有八个灯,而我们通常把一个数字位称为一位,因此,拥有八个数字位的数码管就是八位数码管。实际上,它是两个四位数码管并联而成的。在后续进行时钟实验等项目中,将会用到这种八位数码管。

再来看这个,这是一个TFT彩屏,由这一排端子和那一排端子组合而成,我们可以插入这个并口的TFT彩屏。在之前的实验中,我们演示过一只猫和一只老鼠的动画,就是在我们这个屏幕上实现的。如果大家想要购买此类屏幕,可以在论坛上找链接,或者在群里随时交流。

接下来是关于掉电检测的电压调节,我们通过模拟一个掉电检测实验来说明。什么是掉电检测呢?简单来说,就是我们可以检测到芯片何时断电。重要的是,在完全掉电之前,我们能否实现关键数据的保存。掉电检测与数据存储紧密相关,在后面的模拟实验中会频繁用到。

在产品开发过程中,我们经常需要在关闭电源前保存用户数据,以便在下次开机时仍能使用这些数据。因此,在讨论掉电检测时,首先要确保能检测到掉电情况,然后才能执行相应的操作。至于红外接收,这在电视遥控器中十分常见,任何普通的红外遥控器都可以控制它。实际上,红外接收头的功能类似于我们遥控器前端的部件,它包含一个透明二极管,用于红外发射功能。

观察这个矩阵键盘,我们可以看到,它的行和列是可以独立控制的。这个就是我们的矩阵,由两列和四个行组成。当它们组合成一个矩阵时,它与下面的ADC键盘有何不同呢?矩阵键盘使用了四个横向角和两个纵向角来控制八个按键。而ADC键盘则通过16个独立的引脚来控制所有按键。这就是矩阵键盘和ADC键盘的主要区别。在后续课程中,深入理解这两种键盘的运作机制将有助于大家清晰地把握它们的差异。

关于主芯片,我们课程所使用的AI8051U微控制器即基于此。具体而言,它采用了一颗LQFP48封装、拥有48条引脚的芯片。实验箱已实现了这一功能,我们目前的芯片最多支持48个引脚。接下来,我们来看T0、T1、INT0和INT1这些按键。这些都是一些按键,在后续课程中,我们将详细探讨T0、T1以及INT0、INT1之间的区别。此外,实验箱上还有两个按键,一个是复位按键,另一个是电源按键。电源按键的作用是,一旦按下,电路板将断电,即单片机进入下载模式。这一功能在后续的实验中将被频繁使用。

此外,我们还用到了QSPI闪存。这个闪存的作用是什么呢?在上节课中,我们不是讨论了如何通过编程器对闪存进行编程吗?上位机的软件通过USB将数据传输至单片机,存储在QSPI闪存芯片中。这些闪存芯片中存储了猫和老鼠动画的十几张图片。当需要显示这些动画时,单片机读取闪存中的数据,并将其展示在显示屏上,这就完成了一个完整的实验过程。

关于LCD对比度调节,该插口可连接LCD屏幕。若屏幕显示不清晰,可通过LCD对比度调节电位器调整。我们的单片机具备实时时钟(RTC)功能,通过连接电池,即使在断开外部电源时,单片机也能维持一定的电量以保证正常走时。这样就实现了每次开机都能显示最新的时间,不会丢失,只要电池有电,就一切正常。

此外,该板子上还包含一些称为插针的组件。这些插针的功能可以通过短路帽进行选择。在后续的实验中,我们将详细说明何时应插入哪一种插针。这便是我们板子正面布局及其功能的概览。

观察到板子背面,主要是一些晶振和重要芯片等。这颗无源晶振在进行RTC实验时是必不可少的,它必须使用32.768K的基准,才能实现其功能。可能有人会问,单片机内部的时钟是否准确?答案是肯定的,因为单片机内部的电路全部是数字电路,可以保证100%的准确性。只要外部的32.768K的晶振或时钟源是准确的,那么这个RTC就可以实现零误差。

至于24C02,它是一种存储芯片。我们可以在其中存储一些重要数据。即便产品最终损坏,单片机烧毁,这些数据依然安全保留在芯片中。我们更换一颗单片机后,它依然能够正常工作。实验室设备等在保存关键参数时,常常会用到这种外置存储器。

再来看DS18B20,这是一款温度传感器,能够在低成本下实现高精度的温度检测。它在日常生活中十分常见。此外,还有一种无源蜂鸣器,能够发出滴滴滴的声音,也是我们日常生活中常见的元件。最后,SP3485是一颗485通信芯片。

在后续讲解该实验时,我们将重点关注AI8H2K12U的USB转接芯片。只需将USB一端连接至电脑,即可转换出两组串行端口。这是一颗目前非常主流且我们极力推荐的芯片,有兴趣的读者可以尝试使用。此外,TP2604以及其它一些芯片,我们会在后续实验章节中为大家详细介绍。现在,我们已经对这块板子有了一个大概的认知,知道它有哪些硬件组成,以及我们后面能够进行哪些实验。至此,硬件部分的介绍就到此为止。

接下来,我们将开始介绍软件部分。拥有实验箱后,我们还需要哪些软件才能充分利用它呢?首先,我们需安装一个名为Keil的编程软件。目前市场上的单片机开发工具种类繁多,如Keil、SDCC等。在此,我们推荐大家尝试Keil,因为它是一款主流的编程软件,且官方提供的实验都是通过该软件编写的。为了便于问题的沟通与交流,建议大家尽量遵循官方和我视频教程的设置。

第二步是下载ISP软件。那我们去哪里下载这个软件呢?可以访问STC的官方网站,在视频的左下角找到并下载。这个ISP软件有什么用途呢?它能够将我们编写的程序通过该软件下载到单片机中,而且该软件是持续更新的。

我建议大家务必保持软件的及时更新,我推荐大家一直使用最新版的软件。因为新版软件会修复之前存在的问题,并提供最新的功能。实际上,我看到的最新版本已经更新到了Y版,而这个视频可能还是X版,因此,大家需要及时下载最新版。由于这个视频的发布可能会早于你们观看的时间,你们下载的可能是X、Y或Z版本。不必担心,任何高于我所拥有的版本的都是可以向下兼容的。所以大家不要担心有什么问题,直接下载最新版即可。

第三步,我们需给软件添加一个头文件。为何要这么做?因为所使用的Keil软件是外国的,刚安装完毕后,系统内并不会包含我们国产单片机的型号信息。因此,我们需要通过添加头文件来补充这一信息。这是我们下载的ISP软件,为了便于记忆,我们将这个下载的软件简称ISP,取其名字中的三个字母。

第四步,我们需要下载一个Keil中断插件,因为我们的设计中中断较多。通常情况下,编译器仅支持0到31的中断,超过这个范围将导致编译错误。因此,我们需要使用Keil的中断扩展插件,大家也需自行下载。

本节课的最后一部分是下载实验箱代码及其使用说明,这两部分是重点内容,需要大家务必下载。这便是今天课程第二部分内容。

我们将分步骤进行。第一步是安装编程软件。我们会提供一个包含C251软件的文件包,如果大家需要该文件,可以通过下载或者联系STC销售团队,亦或在群里下载。由于版权问题,我们无法直接上传该软件,所以请各位自行获取。

双击打开软件后,我们需要点击我同意,以同意协议,然后点击next。接下来,我们选择安装路径,我建议大家直接将软件安装在C盘,这样可以确保软件快速运行。继续点击next,四个名称可以任选,像我这样输入四个1也是可行的。完成这些步骤后,点击next,安装过程就会开始。由于我之前已经安装过,所以部分步骤可能会重复。对于未曾安装过的用户,不会出现此问题,可直接点击完成,而我则选择关闭。

安装完成后,桌面上会出现一个图标。如果用户后续需要更深入地使用该软件,建议参考安装实验包中的文件进行操作。由于篇幅限制,本教程未详细说明操作步骤,感兴趣的用户可自行尝试。如有任何问题,用户可以随时联系我们的销售团队或在论坛上与我们交流。

首先,确保软件已安装完成。其次,我们需要下载ISP软件。通过浏览器访问STCAI的官方网站。在这里,用户可以查找所有所需的芯片,包括本次使用的AI8051U。下载手册后,即可获取AI8051U的规格书,我们也将直接进行下载。

好的,打开浏览器后,我们点击角标,将手册下载到桌面。我们把下载的文件包里包含的这个手册,大家在编程过程中都会用到,我们会一直保持手册的最新版本,供大家下载。

好的,现在让我们回到主题。在我们的软件中,您可以在“软件工具”中找到并下载第一个ISP软件。目前该软件已更新至6.94Y版本,而我之前制作PPT时还是X版本,完成之后发现已经自动更新到Y版本了。接下来,我们将继续点击“软件下载”,并将该软件下载到本视频所包含的文件中。

好的,这是第二步。下载完成后,我们可以在文件包中找到并解压该软件。如果像我一样,你可能将软件下载到了特定路径,而在桌面上找不到它,那么我们该怎么办呢?右键点击并发送到桌面快捷方式,这样桌面上就会出现该软件的图标。下次我们就可以直接双击桌面的图标,打开我们的文件。

现在,我们将演示如何打开文件并执行第三步:添加头文件。在打开文件后,我们看到了“Keil仿真设置”选项。在该部分,出现了“添加模型和头文件”的提示。点击该选项时,系统会要求我们选择Keil的安装目录,我们选择电脑,装在C盘,可以看到在K2的安装目录下存在C51文件。实际上,在安装包中会提示你路径是Keil5,大家在安装的时候选择了哪个路径,我们就选择哪一个。我们刚才安装的是C盘的Keil5文件,选择确定后,系统提示“mcu型号添加成功”,至此,第三步顺利完成。

第四步,下载我们的插件。插件可在公司官网上找到,位于页面的第二个选项“Keil中断扩展工具”。点击“软件下载”,选择合适的文件夹进行下载,用户可自行决定下载位置,因为无论选择哪个位置,只要解压后双击安装,安装完成后可删除文件夹。现在,我们将文件解压至当前文件夹,并会看到关于如何使用Keil中断向量号的说明。若用户愿意,可以跳过这些说明,直接选择安装目录进行安装。

在安装软件时,请务必记住软件的安装目录。例如,我的软件默认安装在C盘,所有软件都会跳出这个地址,那就无所谓。点击确定即可,提示修改成功。我们编译器采用的是C251,强烈建议大家使用C251进行开发,这样可以最大限度地发挥AI8051单片机的性能。好,至此,我们的安装过程已经顺利完成。

再次查看我们下载的最新代码包和手册。我们之前提到过,实验箱或软件工具的这部分内容在实验箱章节中,可以看到最先是AI8051U实验箱。点击“代码下载”,即可下载所有代码包。点击保存并查看使用说明。如果网页浏览不便,可点击下载,将其保存至本地目录。现在,手册已经下载完成。这个单片机手册,是实验箱使用的说明书,还有我们刚才下载的代码包,将其解压。如果大家有兴趣或者想要深入学习,我推荐大家在本节课后,仔细阅读实验箱的使用说明书。

请在电脑上自行安装PDF查看软件。我这里默认使用的是极光PDF,当然WPS或福星阅读器也是可以的。这些软件都具备书签功能,这对于那些章节较少的书籍尚可,但当我们需要查看上千页的手册时,书签功能就显得尤为重要,可以帮助我们快速定位到所需内容。

参考我们提供的实验箱外观布局,您将了解到如何下载程序、新建C项目以及如何使用USB link进行仿真。这份手册旨在帮助您快速入门,详细的教学内容将指导您如何操作。今天,我们已经完成了软件的下载。让我们进入今天的最后一个主题,即下载第一个程序。只要成功下载程序并使其在单片机上运行,就标志着您已经掌握了入门技能。

好的,那我们怎么来演示呢?首先,我们打开桌面上的软件,它提示我们已经打开过一个项目了,我们选择原有的项目即可。打开后,我们首先选择AI8051的U系列,34K64。好,我们选择了AI8051的U系列34K64,对不对?至此,我们就已经成功选择了我们的芯片。

第二个实验箱通过硬件USB接口进行下载。进入下载模式需按住实验箱上的P32按钮,先按下P32按钮,然后松开电源按钮断电。按一下再松开,即可进入下载模式,此时可以识别到HID USB设备。接下来,我们将跟随镜头进行实际操作。

首先,将实验箱的Type A接口插入电脑的USB接口。插入后,板子上的电源灯亮起,表明可以开始正常操作了。我们将实验箱放在一旁,打开软件,可以看到由于之前已经进行过程序烧写,当前显示的是一个特定的界面。我们想要的是PPT,它的标识是HID1,但我们的软件上没有显示。那我们怎么操作呢?请跟随我,首先按住P32键,位于左下角的第一颗,然后点击并释放off键,这样在软件上会显示出提示信息,最后松开P32键,此时软件会提示已找到HID1设备。

好的,接下来,我们可以选择相应的程序进行下载。我们打开程序文件,找到之前下载的代码包,是吧?在这里我们使用第一个程序,它利用P0口实现跑马灯效果。双击打开该程序,会看到有C语言、C语言 8 bit以及汇编语言可供选择。这个8 bit怎么理解呢?在这里指的是我们的下载软件,它支持32 bit或8 bit。

首先,我们将选择C语言。我们需要烧录的文件是simple.hex,它以.hex为结尾。只要找到代码包中的这个文件,我们就可以进行烧录。该文件提供了8 bit和32 bit的选项,与我们刚才讨论的文件中的选项相同,但32 bit的选项是默认隐藏的。此外,还有汇编语言,这是语言的一个区别。我们的几套视频教程都是基于C语言开发的。对于那些对汇编感兴趣的同学,可以直接参考汇编文件。

好的,我们已经选定了单片机和串口,且无需关注下载的波特率。重点在于选择运行用户程序时的IRC频率。我们不能随意选择这个频率,这样做会显得非常盲目和草率。

好的,那我们如何进行选择呢?首先,我们打开包含程序代码的文件包,选择C语言作为编程语言。我们刚刚下载的软件可以用来查看这些代码。我们打开后可以看到,main文件已经为我们定义了一个名为main fosc的主频,它代表的是24兆赫兹。这个值后面跟了6个0,因为三个零是K,六个0是兆,表示我们选择的是24兆赫兹的频率。关闭程序。

如果大家想要测试自己感兴趣的程序,需要打开确认我们的代码中左侧目录列表中的文件。大家可以逐个找到所需文件,并在其中查找参数。这个就是我们的主屏,功能说明通常在源文件的注释中,提示我们选择24兆的程序或时钟。好,我们选择24兆,确认选择后,该步骤即完成。下面的选项暂时默认不用理会,后续我们再具体讲解。

我们点击下载编程,系统会提示操作成功。操作成功后,我们打开摄像头,会看到流水灯或跑马灯的效果,从左到右开始跑,这表明我们已经成功入门单片机编程。

本节课主要包括三个方面:硬件介绍、软件安装和下载。大家可以对照学习。课后大家可以下载我们今天讲解的实验箱使用说明书和代码包,自行下载感兴趣的实验进行学习或查看其使用方法。好,这节课就到此结束,再见。

联系我请点击左下角的【回复】按钮,否则我收不到消息提
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:123
  • 最近打卡:2025-04-19 16:12:35
已绑定手机

60

主题

777

回帖

4001

积分

论坛元老

自定义头衔

积分
4001
发表于 2024-12-7 15:07:48 | 显示全部楼层

第三集 点亮第一颗LED

大家好,欢迎收看本系列视频的第三讲——8051U深度入门到32位51大型实战。上一讲我们介绍了硬件基础知识和软件安装。本讲将开始编写第一个程序,但在动手之前,需要先创建一个新工程。此过程分为三步:首先创建一个空工程,其次添加头文件,最后输入并编译源代码。怎么编译呢?我们将在软件中找到两个图标,分别对应单个文件编译和所有文件编译。如果C文件只有一个,我们使用第一个选项;若C文件有多个,则选择第二个选项进行编译。

首先,我们将参照手册,实现6.5章节中新创建的空工程。现在,我们可以启动该软件。此时,可能会出现一些提示信息,但我们可以直接点击“确定”按钮。如果同学们之前已经运行过该软件或其它代码,可能会看到上一节课的代码,这没有关系,我们可以忽略这些代码。

第二步是打开手册,上节课我们是不是下载过这个手册?我们把手册放在左边,然后打开这个。我们先新建工程,怎么新建呢?我们可以按照手册6.5的章节,我们上节课也说过,下载一个PDF软件,可以在这个地方打开书签,然后我们直接选择6,选择6.5的部分,那我们直接打开,然后我们就可以把书签隐藏起来。好,我们看一下怎么样先6.5.1设置项目路径和项目名称,先点击project,然后选择new。好,这个时候它会提示我们选择一个路径,那我们路径选择今天的文件夹,文件名称叫demo,我们这里直接点保存,这样是不是新建就已经结束了?

首先,我们选择单片机型号。这里我们选择的是STC的MCU。尽管有多种选择,包括AI的不同型号,但它们都来自同一家公司。接下来,我们从AI中选择一个单片机,具体型号为STC8051U 32-bit。选择这个型号后,我们无需关注其他细节,只需直接选择对应的型号。点击确定后,新工程即被创建。此时,系统提示我们添加源代码到项目文件。我们首先新建一个源文件,点击界面中的小白纸图标即可实现。然后,我们将源文件保存至刚生成的目录中,命名为main.c。对于新工程,我们通常将第一个文件命名为main.c,因为函数或工程的入口是从main函数开始的,因此我们直接选择它。

可以看到我们这里main.c文件已经新建好了,但是文件里面还是空白的。我们可以先不管它,按照它的右键对吧?它可以选择双击add的图标,那我们可以忽略,我们也可以有别的办法,我们直接双击就可以打开,然后找到这个main.c再双击,再点击add。可以看到这个地方就已经被添加进来了。

添加完项目后,工程创建似乎已经完成。然而,工程创建后,我们还需要对其进行一些设置。在“设置项目”中,当看到CPU mode提示时,我们可以发现有选项。那么我们应该如何选择呢?参考提示,我们应该选择Source 251,因为80251的指令有这两种,而AR8051U目前仅支持其中一种。因此,我们直接选择这一种。按照提示选择后,它还提示我们是否要勾选4 byte选项,为什么呢?这是因为该选项对应的是四字节,我们后面会讲到。在这里我们先给它勾上6.5.4,我们已经结束了。

6.5.5这里展示了下拉模式的选择,我们选择了x small。好,这个也选好了。下一部分介绍了不同模式之间的区别。对于新工程,建议直接采用手册中默认的配置。后续如有需要,再回顾相关内容。

继续看下一个,我们再看第三个设置,设置项目3,这里选择的是large 64K。我们已经选好,再来看这个地方。如果代码超过64K,我们则需要设置一下下方的地址。但在这个例子中,我们的代码并未达到64K,因此无需进行修改。

接下来,我们再次关注设置项,在“output”选项卡中,提示如果程序空间超过64K则必须选择“HEX 386”,64K以内可以选择“HEX 80”。我们直接选择“HEX 80”并勾选此选项,这样做的目的是为了生成烧写的HEX文件。如果不勾选此选项,程序将无法被下载至单片机。至此,一个新的工程已经完成。

第二步,添加头文件。在头文件中,我们可以看到提示信息,建议使用ISP软件结合手册的6.4章节。首先,查看手册中的6.4部分,通过点击书签并选择6.4直接跳转,然后关闭书签。

这提示了我们头文件的一种使用方法。若要使用系统路径下的头文件,可使用尖括号。而如果要使用当前文件夹或自定义文件,应优先考虑采用双引号。

有哪两种方法可以使用头文件。我们推荐将所有需要用到的头文件放在自己的文件夹里。这样做可以避免在发送工程文件给他人时出现错误提示,因为这样做的工程文件更不容易出问题。否则可能会出现缺少头文件的提示。最简单的做法是将这些文件保存到项目文件夹中。这时,系统首先会在当前目录下查找所需的头文件,即C源文件所在的路径,然后去查找那个路径下的文件。

首先,我们需要将头文件放置到指定目录中。当前目录下尚未看到头文件,头文件通常以".h"为结尾。接下来,我们将打开ISP软件,STC公司开发的所有产品相关功能均在此软件中。通过软件,我们可以定位到头文件的位置。在软件中,我们可以看到AI8051U系列的32-bit头文件选项卡。选择 ".c" 格式的头文件,因为这是C语言的文件。

在保存文件时,我们通常会赋予什么名称呢?首先需要选择路径,刚刚说过,该路径位于文件夹的根目录下。文件名的确定方法是:以“AI8051.h”为基本名,通常以".h"结尾。头文件的名字一般与代码中的名字相同,例如“AI8051U”。这里再加个U,我们后面会讲到原因。保存后,我们可以到文件夹下查看,此时是否已经生成了这个头文件?

好的,有了这个头文件,我们就可以在代码中开始编写。可以看到输入如下代码。首先是一个井号#include,这是C语言中的一个关键词,用于包含头文件。后面跟随着AI8051U.h,这是我们之前保存的头文件,注意大小写的对应。接下来,我们再敲入一个万能公式,即void。

在该示例中,void表示空。通过这种方式,可以创建一个基础工程。在编写代码时,可能不会像我展示的这样,但当按下特定键后,此处会自动出现四个空格。这是如何实现的呢?实际上,只需按下键盘上的'tab'键即可实现自动缩进四格。如果软件刚安装时并未设置为四格缩进,该如何调整呢?在这种情况下,需点击软件界面中的扳手图标进行设置。选择C++,并将缩进值设置为4,这样就可以实现按下'tab'键后自动缩进四个空格的功能。此外,还可以在此对语言格式进行进一步的设计,例如选择汉字编码GB2312,以确保注释不会出现乱码。

什么样的?这是一个简单的设置。我们的代码已经编写完成,并且不会有问题。现在,让我们进行编译,可以看到编译结果显示没有错误和警告。我们刚才点击的编译,由于我们只有一个C文件,所以结果和耗时都是一样的,因为这个文件很小。

首先,我们需要解释一下什么是“最小的代码”。这涉及到调用头文件。在英文模式下,我们可以通过双击或者按下键盘上的反斜杠来实现。连续按两次会出现两条杠,随后这些杠会变为绿色,这表示我们已经进入了注释状态。在这里,我们正在对调用头文件进行注释。

头文件包含了什么内容呢?我们可以通过左键双击或右键点击open来查看,它主要包含了一系列的定义。这些定义对应于每个关键寄存器的地址等信息。在我们后续具体操作硬件时,会用到这些信息。新建工程时,必须包含头文件,否则我们将无法操作硬件。

我的意思是,这是一个主函数。当我们的工程创建并下载到单片机后,程序会首先找到这个函数,并从大括号开始执行。那和这个里面的V二有什么区别呢?区别在于,从大括号开始执行后,程序会持续执行直到大括号结束,不会跳出这个范围。这意味着,大括号内的代码只会执行一次。如果想要实现LED灯的闪烁效果,是不是就应该把闪烁的代码放在这里?而如果想让LED灯常亮,是不是只要写在这里即可?

这里有一个生动的例子:假设某处记载“张三打了李四一拳”,没有任何其他动作。这算什么呢?这可以被认为是张三的肇事罪,对吗?他打了人,所以就构成了犯罪。但如果记载的是“张三打了人”,而没有明确具体情节,这样的记录是否足以构成犯罪呢?

例如,如果李四攻击了张三,这算什么?这算两个人互殴。我们再看另一个例子,张三攻击了李四,而李四随后又对张三进行了多次攻击。尽管李四只对张三进行了一次攻击,但因为李四持续不断地攻击张三,大家都能理解,这已经构成了犯罪。

好的,这是一个简单的例子,旨在说明单片机程序中两个地方执行一次和多次执行的问题。至此,我们的工程已经顺利完成。现在,我们将编写第一个代码,目的是点亮开发板上的第一个LED灯。我们直接写出这个代码,并先观察其效果,之后再详细解释实现原理。首先,切换到大写P0M0等于0x00好,然后P0M1等于0X00好,因为头文件是一样的,函数也相同。然后在该位置新增了三句话,对吗?

这样是不是就结束了?让我们来解析这段代码。首先,每个语句都以分号作为结束标志,除非该语句是一个大括号,此时大括号本身即为结束。如果大括号后面跟有一个大括号,那么它也不需要分号。除了大括号外,每个语句后面都应该跟有一个分号。实际上,每个分号应独占一行,一个语句也应只占一行。因此,这段代码实际上只有四行。当然,若你愿意将这四行都写在一行中,虽然语法上不错误,但这样做并不美观,容易引发阅读者的不适。

我们的代码编写工作已经完成。接下来,点击编译按钮,我通常选择一次性编译所有文件。此时,系统提示成功创建了hex文件,并且在OBJ目录下也生成了相应的文件。下方显示没有错误和警告信息,这表明我们的代码编写工作是成功的。

我们直接下载程序。首先选择单片机,然后可以看到没有我们想要的HID writer的那个。按下板子上的P32按钮,再按一下off按键再松开,是不是就出现了这个下载选项。然后在这个地方打开程序文件,点亮第一个,我们刚刚提示这里在OBJ文件夹下,在这个文件夹下选择这个,看一下hex文件的修改日期,是22点51分,没问题。大家下载程序的时候尽量都去看一眼时间,否则可能辛苦写好的代码结果下载了一个错误的文件。然后在这个地方运行时钟,因为我们这里不需要用到时钟的一个概念,那我们这里随便选一个就默认这也行,好,我们直接点击下载。

下载成功后,我们打开摄像头进行测试。然而,设备并未启动。这是由于缺少了一行设置。我们只需添加这一行设置即可。

好的,这样一来,配置和赋值是不是就变得完全一样了?每行配置都经过编译。那么在本例中,因为我勾选了“当目标文件变化时,自动装载并发送下载命令”,所以当目标文件有变动时,系统会自动执行相应的操作。

为什么选择在这里停止呢?这是因为我们找不到指定的端口。我们再次按下按钮进行下载,然后查看头文件日期。正确,我们再次点击下载,接着检查摄像头,在我们这个地方需要对P40和P4进行修改。好的,我们重新编译并下载。重新进入下载模式,好的,开始下载编程。

经历了多次尝试后,这个灯终于亮了,是吧?数码管上的灯也亮了。在后续讲解数码管时,我们会解释为何这个灯已经亮了。这个灯是P00上的一个LED灯,现在我们放大来观察它,是不是LED00?它正是P00脚上的那个灯。因此,我们的代码已经实现了点亮第一颗LED灯的功能。现在,让我们分析为何我们的代码能够点亮这颗灯。

让我们再次查看PPT。大家是否做过这个实验?它展示了电池的连接方式:一节电池的电压为1.5伏,两节电池串联后电压为3伏。通过开关和LED灯,我们便可以实现LED灯的点亮。

那么,我们这个LED灯是如何点亮的呢?电流从电源正极流出,经过开关后流向LED灯,然后向下流到电源负极。在这个地方我们这个电源正极是3伏,我们用3伏来代替电源正极。那么在这一端用0伏来代替电源负极,只要给LED灯两端施加3伏电压,LED灯就能亮,对不对?

基于此原理,我们再来分析今天的实验。实验的等效电路图如下所示:这是一个电源,3.3伏电压经过三极管,它作为开关使用。Q2即为这个开关,下方的LED00是实验板上被点亮的灯,它位于P0.0端口,因此是一个LED。要使这盏灯亮起来,需要在该位置施加3.3伏电压并打开开关,同时在另一端接上0伏电压,最终实现LED灯点亮的效果。

那么,如何判断该开关是否导通或打开呢?我们注意到,指示箭头指向的是这里。有一个记忆小技巧是:电源从正极指向负极,即3.3伏指向0伏,意味着需要在这里添加一个令符,这样开关就能正常开启。这个也是一个速记的办法,大家可以看这个箭头的指向,从高电压指向低电压,3.3伏指向0伏就可以打开,只要给零它就能打开。

这就是我们今天实验的步骤。在P4.0这个端口输出0V,P0.0的这个端口也输出0V,就可以正常的点亮这一颗灯。在实验板上的蜂鸣器也是用的这个电路。是不是说我们像蜂鸣器的这个三极管,我们这里就要给高电平或者说给5或3.3伏,它才能正常打开。

进一步观察我们的单片机,发现其采用的是48脚的单片机,且编号最大为48。其中,0.0脚位于此处,而4.0脚则在这里。这意味着,通过控制特定引脚的信号输出,我们可以点亮今天的LED灯。

我们已经编写了代码,那么现在让我们回顾一下这段代码的具体含义。首先,我们需要配置一个IO口。单片机上有许多IO口,那么IO是什么意思呢?IO是GPIO的缩写,它代表着可以作为输入或输出的通用接口。其中,“I”代表“input”,“O”代表“output”,因此它具有输入输出功能。

我们将如何配置它以实现输入输出模式呢?可以看到,它有几种模式可以选择。当配置为00时,它是一个准双向口;配置为01时,它是一个推挽输出;配置为10时,它是一个高阻输入。那么这个配置要怎么配呢?实际上,我们只需要用到一个准双向口。传统的单片机在刚上电时默认为准双向口。而新型的单片机则通常设置为高阻输入。例如,这个新型单片机在上电后默认为高阻输入。

那么,如何配置呢?我们有PnM0和PnM1两种组合方式可供选择。通过查看它们对应的符号,例如P00,我们可以看到与P0M0、P0M1相对应的P00M0和P00M1,它们能够控制P00端口的模式。

我的目标是让P40和P00输出低电平。为了实现这一目标,我需要将P00的模式配置为准双向口,这意味着当写入0时,相应的引脚会输出低电平。由于P00端口有8个引脚,我们有8个LED要同时点亮,所以所有这些引脚都应配置为零。为什么这里写了八个0?这是因为这是二进制数,逢二进一,这八个就是全都是零,对不对?同样,下面的寄存器也全是零,为什么这里还有一个0X00呢?这是因为0X00是16进制的写法,前面加一个零X就是一个16进制。

好的,我们后面通过一个计算器再演示一下。现在,让我们来关注与IO相关的寄存器。我们即将用到的端口编号是00,对吗?因此,我们将P00设置为0,这是否就能向该端口输出一个0?这是因为它是二进制,每个小格子里面只有一个零或者一可以写入。也因为是二进制,这个端格子里只有零或者一,可以写0,也可以写一。那如果写了2,是不是就是进一了?逢二进一,这是二进制的基本原则,那么它就是往上这样子,这个是不是就瞬间可以理得通了。

需要理解的一点是,每个语句结束时必须添加分号,同时大括号应换行并缩进。再次检查代码,确保每个语句结束都有分号。大括号内需按压Enter实现缩进。例如,通过删除一个按压Enter的操作,是否可以实现自动缩进?回到这个代码上,为什么0X00代表八个0?

计算器功能在电脑上是预装的,点开更多里面有一个程序员。可以看一下这个hex就是16进制。DEC是十进制,还有这个是二进制,这是八进制,就是逢八进一,这个就是逢二进一。

观察这八个小格子,我们是否需要在每个格子中都写上00,因为似乎0无法直接输入。我将演示如何操作:首先输入数字1,然后在后面添加八个0。这样,是不是已经有八个零了?可以发现,每四个零对应一个16进制数的零,而八个零则对应16进制数的后两位零。这四位是对应16进制数的哪一位呢?

如果大家还未能完全理解,我们可以借助计算器来说明。在十六进制中,当我们写下两个零时,它代表的是两个独立的零。也就是说,如果这个地方全部填零,实际上写一个零即可。这一操作意味着我们将该端口模式寄存器配置为一个准双向口。

好的,如果已经讲到这里,大家心里是不是已经有数了?让我们再重新敲一遍代码,以加深大家的理解。首先,我们之前说过,编程时应该先搭建一个大的框架。比如,我们创建一个名为“void main”的文件,然后在其中写入一个word,接着按回车键,再输入一个大括号。完成大括号后,回到中间位置,按一下“Tab”键,代码会自动跳转到中间的“while”部分。

好的,接着是进入一个死循环,这表明初始化已经成功。我们需要为它设置P0端口,使其成为输出或准双向端口,即它可以同时进行输入和输出操作。那么,P4端口是否也应该设置为准双向口呢?我们如何编写相关代码?首先,将P0M0设置为0,对不对?好的,接下来,检查P0M1是否也为0。这样就将P0端口的八个端子都设置为准双向口。

我们如何理解这一点呢?通过软件可以找到相关说明。我们使用的封装脚位是48脚的单片机。打开详细信息,我们可以看到P0端口有PP00、P01、P02、P03、P04、P05、P06、P07、P0这些以“P0”打头的IO,共计八个。而P0M0则是将这八个端口均设置为输入输出口。同样地,P0M1也设置了所有端口为准双向口。在P0端口,也可以将其写作P00到P07为准双向口。通过这两个寄存器共同控制为准双向口。

好的,我们已经完成了P0端口的设置,接下来设置P4。P4等于,复制一行,M1等于0,这样是不是已经将P4口设置为准双向口?好,至此,所有设置已经完成。

在我们的程序中,为了点亮LED灯,我们之前提到需要给它一个三极管或者说开关,也就是P40输出一个低电平信号。因此,我们直接写P40=0,并添加注释以便于后期理解,P40端口输出低电平信号。

那么,P00端口是否也需要输出0伏?P00端口输出零伏,这样我们的代码是不是就完成了?为了使代码更易读,我们可以在按下table这些用户代码的时候,让每个注释都对齐,是不是形成了一段完整的代码。如果说这几行代码无论是在循环中执行还是在循环外执行,它们有什么区别吗?实际上没有区别,因为它们本质上都是让P00端口输出低电平,不需要切换电源,执行一次或无数次效果都是一样的。最后,我们再进行一次下载操作。

好的,我们再次操作,系统提示已进入下载模式。我们先手动进行操作,或者对代码进行修改。之前我们点亮的是P00,现在我们再尝试点亮P01。修改后的代码意味着当P40开关被打开时,P00和P01端口都将输出,即同时点亮。我们再次进行编译,编译完成后系统会自动下载代码。此时,打开摄像头查看情况,可以看到两个LED灯同时亮起。这就是我们今天实现的首个LED点亮效果。

课后大家也可以尝试一下,把我们这个板子上的八颗灯都点亮,看一下是什么样的效果。这节课即将结束,希望各位同学能熟练掌握并记住这一操作。

这是一个最简单且最通用的框架,上手基本都是从这个基础开始,然后往后增加代码。在此基础上,我们增加了初始化代码,是不是?这是P4,我们在这里设置端口模式。通常,如果大家的板子上没有什么影响,我们可以把所有的端口都写上,可以在这里查看它是否有P0、P4、P2、P5等端口。如果大家想要方便,可以一次性写上。一般情况下,作为准双向口,可以满足大多数应用需求。

许多人喜欢直接将所有端口设置为复制准双向口,即P0M1、P0M0、P1M1、PEM0等均设置为零。X00表示将每个端口设置为准双向口。在打开开关管之后,又打开了对应的LED端口,这便是我们最简单的代码实现。

我们已经讲解了它的原理。你可能会说,设置端口有点麻烦,不想自己设置。那有什么办法呢?STC公司早为大家想到了,我们有一个IO配置工具。比如你想设置P0端口为准双向口,只需勾选相应的选项,点击确认,它就会自动生成相应的默认配置代码,你只需点击复制。如果想设置P0端口为推挽输出,也只需点击选择,对应的模式就会自动生成在你的代码中。这就是我们IO的模式。

本节将首先介绍准双向口,之后再讲述其他相关内容。确认本节课没有遗漏的重要内容后,这节课就结束了。希望各位同学课后能自行巩固所学。再见。

点评

讲义比视频更详尽,解决实际问题  发表于 2024-12-15 21:47
1 喜欢他/她就送朵鲜花吧,赠人玫瑰,手有余香!
联系我请点击左下角的【回复】按钮,否则我收不到消息提
回复 支持 反对

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-8 15:02 , Processed in 0.132053 second(s), 72 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表