【小白51单片机专用教程】protues仿真AT89C51入门

news2024/12/23 9:41:53

课程特点

  • 无需开发板
  • 0基础教学
  • 软件硬件双修
  • 辅助入门

        本课程面对纯小白,因此会对各个新出现的知识点在实例基础上进行详细讲解,有相关知识的可以直接跳过。课程涉及protues基本操作、原理图设计、数电模电、kell使用、C语言基本内容,所有涉及知识都将建立在实例的基础上放心食用。

食用教程

  • 详细目录,随时跳过已知部分;
  • 全小白按步骤全程跟学;
  • 有开发板的交叉理解开发板的原理图与我们设计的原理图

本次实验内容

        设计一个AT89C51控制的LED灯,实现用程序点亮或者熄灭LED灯。熟悉使用protues和keil软件的基本操作,包括工程建立,原理图设计,程序编写等。 

目录

课程特点

本次实验内容

软件准备

 protues基本操作

新建工程

绘制AT89C51最小系统的原理图

电源电路

晶振电路

晶振的基本概念

无源晶振电路的设计

晶振电路的绘制

 复位电路

复位电路的作用

按键复位电路设计

上电复位电路设计

绘制复位电路

外设电路

IO口介绍

LED灯设计思路

绘制外设电路

 keli

新建工程

工程设置

新建c语言文件

新建头文件

编程

原理图逻辑分析

程序编写

编译

protues验证


软件准备

  • protues
  • keil C51

版本说明:

        电脑版本:作者使用的是WIN10,但这并不代表WIN11不能用,具体软件版本可能会不一样,但关系不大,自己电脑能用就行,核心内容大差不差。

        protues的版本作者用的是v8.15,推荐使用近10年以内即可,功能大差不差。注意不要太老也不要太新,太老的可能系统不契合,特别是win11,太新的不稳定,bug多。

        keil的版本:keil可以直接从keil官网下载,需要注意的是一定一定选择C51这个版本。

        因为电脑的差异性和系统的差异性,这里不提供安装教程,同学们可以在CSDN上搜索适合自己的安装教程即可,这两个软件安装还是比较简单的。

安装教程推荐:

keil C51icon-default.png?t=O83Ahttps://blog.csdn.net/weixin_41995541/article/details/107447912

protues8.15安装教程icon-default.png?t=O83Ahttps://blog.csdn.net/m0_67742803/article/details/129488383

 protues基本操作

        小白可读,其他人可跳过;

新建工程
  1. 双击打开软件:
  2. 新建工程
  3.  更改工程名,及其路径(路径选择一个自己能找到的就行,但是建议新建文件夹统一管理)
  4. 一直进行下一步即可,最后会进入到原理图界面
  5. 点击左侧第二个黄色图标(选择元件模式),然后点击P,进入库中选择元器件
  6. 搜索元器件,双击选中,选完点击确定

    常用的元器件名:
    元器件原理图库名
    AT89C51AT89C51
    电容CAP
    电阻RES
    晶振CRYSTAL
    开关SWITCH
    蓝色LEDLED-BULU
绘制AT89C51最小系统的原理图

最小系统原理图包括以下几个部分:

  • 电源电路
  • 晶振电路
  • 复位电路
电源电路

        电源电路用于电路板所有模块的供电,其设计需要依据所有元器件的具体情况设计,其涉及多个内容,在protues中拥有自带的电源供电网络系统,不需要进行设计

        如果读者需要相关设计过程,可以在评论区留言或者私信。

         每当电路板进行增减外设时都需要修改电源电路,因此在这里我就不单独设计了,如果有需要作者会单独出一期电源电路设计思路。

        电网配置

        protues自带三个电源,分别是VCC/VDD的+5V电源、GND的0V电源和VEE的-5V电源。

1.菜单栏找到设计->配置供电网

2. 在这里可以看到自带的3个电源,我们现在不需要任何操作,只要记得电网配置在这里

晶振电路
晶振的基本概念

        晶振的作用

        晶振是单片机工作的心脏,和我们的心脏一样,晶振电路会提供源源不断的周期信号,一般为正弦波。

        晶振的作用是为系统提供基本的时钟信号,通常一个系统共用一个晶振,便于各部分保持同步。简单来说就像音乐节拍一样,晶振提供这个节拍,系统的所有指令都根据节拍的律动去执行,使得系统协调统一。

        晶振工作原理

        晶振一般是石英晶体谐振器,它是利用石英晶体的压电效应制成的一种谐振器件。当在晶片两极外加电压后,晶体会产生变形;反之,如外力使晶片变形,则两极上金属片又会产生电压。这种机械振动的振幅通常比较小,但其振动频率则很稳定。当外加交变电压的频率与晶片的固有频率(由晶片的尺寸决定)相等时,机械振动的幅度将急剧增加,这种现象称为压电谐振。

        晶振的分类

        晶振可分为有源晶振无源晶振。非常好理解,区别就是加不加电压源。

        有源晶振有四个引脚,两个引脚加直流电,一个引脚输出时钟,一个引脚悬空;有源晶振内部集成震荡电路,加入电源之后可以自身震动;

        无源晶振只有两个引脚,分别为频率输入和输出引脚,没有正反之分,无源晶振不能自己起振,需要依靠时钟电路才能产生震荡信号

无源晶振电路的设计

        所有硬件设计都需要依靠相应的设计手册为基本,在此基础上进行设计。我们查看AT89C51的数据手册可以看到无源晶振的电路形式为:

因此该电路的核心为:

  1. 选择合适的晶振频率
  2. 选择合适的外部负载电容

        AT89C51的常见频率选择可以是:6MHZ 11.0582MHZ 12MHZ 24MHZ,其中晶振频率越高抗干扰性越低,但运行速度越快,在这里我们选择11.0582MHZ的晶振,这个频率特别适用于需要精确波特率的串行通信应用,因为它能够准确地划分成常见的波特率值,同时其速度和抗干扰性也居中,综合考虑其更合适

        外部负载电容一般来说22pF,需要通过外部匹配电容来调整,但在要求不高的情况下可以直接使用手册推荐值:

        我们常用石英晶体晶振,因此这里我们可以直接选用30pF的电容。

晶振电路的绘制

        我们开始在protues中进行操作,首先学会调用元器件:点击左侧元件模式->点击需要调用的元器件->在右侧原理图空白处单击

1.我们依次调出两个电容和一个晶振和一个AT89C51芯片

 2.在左侧的终端模式选择地,点击空白处调出地

3.修改元件值 ,双击元器件,进入属性修改界面

        将电容改为30pF

        将晶振改为11.0582MHZ

         连线,连连看会吧。

 【注意】如果要删除连线,需要选中该线然后点击DEL按键,切记不是backspace建,一定是DEL。要选中线,可以框选,或者在选择模式下点击线,在元件模式下直接点很容易认为你想连线

 复位电路
复位电路的作用

        复位电路目的就是为了让芯片恢复到初始状态,从初始态开始工作。简单理解是全部程序从头开始走一遍(不完全是,新手简单理解)。

        复位电路兼顾上电复位和人工按键复位两种功能。我们可以查看一下手册的描述如下:

         因此我们要在上电时按下按键时给RST引脚两个机械周期以上的高电平。不知道两个机械周期是什么意思,没关系这个时间很短,所以只需要给一点时间就行。

按键复位电路设计

        而且在其他情况下要保持RST引脚为低电平,因此RST在正常情况下应该接地,同时按下按键就为高电平

        正常新手可能就这样设计了:

        显然这是有问题的,因为按下按键电源接地了,相当于电源短路,既不能拉高RST引脚电平,而且会让这条电源电路直接废了。但是思路是没问题的,只不过这里不能让其短路,所以我们可以加个电阻去防止其短路,这里有两条分路,我们电阻加哪里呢?思考一下!

        如果我们只是在1加上电阻,则RST引脚直接接地,电压一直为0无法被拉高;

        如果只是在2加上电阻,那么相当于电源直接接到RST,引脚虽然被拉高,但电流可能会很大,而芯片的所有引脚都有输入输出电压和电流的要求.

因此我们应该选用分压限流的方法去做这个

        分压接法既能限流,又能在按下时拉高RST引脚电压

        但我们还需要解决一个问题,就是上电复位,如何实现上电复位呢?

上电复位电路设计

        上电的时候这条路有用,平时这条路相当于断路。也就是是电路出现突变是有用,这不难可以联想到储能元件,电容或者电感;但我们电感在稳定时是通路,所以不合适,电容在稳定时相当于断路。因此我们可以并一个电容上去。

        上电复位原理

        上电时电源通过,C3与R2回路给电容C3充电加给RST一个短暂的高电平信号。这个时间取决于电容C的充电时间,充电时间越长,复位时间越长。

        电容的选择

  1. 典型值:对于AT89C51单片机,常用的电容值为10uF。这个值能够确保在上电时,RST引脚能够保持足够的高电平时间,以满足单片机复位的要求。

  2. 计算依据:电容的充电时间与RC时间常数有关。根据公式t=RC×ln⁡[(V1−V0)/(V1−Vt)]t=RC×ln[(V1−V0)/(V1−Vt)],其中V0为电容上的初始电压值,V1为电容最终可充到或放到的电压值,Vt为t时刻电容上的电压值。为了确保复位信号有效,通常要求RST引脚的高电平持续时间大于两个机器周期(约24个振荡周期)。

  3. 实际应用:在实际应用中,由于电容两端电压不能突变,因此在系统上电时,电容会开始充电,导致RST引脚出现一个持续的高电平。这个高电平的持续时间由RC电路决定,因此选择合适的电容值至关重要。

        电阻的选择

  1. 典型值:对于AT89C51单片机,R1常用的电阻值为220Ω,R2常用的电阻值为1kΩ。这个值与22uF的电容配合使用,可以形成典型的RC复位电路。

  2. 计算依据:电阻R2的值需要与电容的值相匹配,以确保RC时间常数满足复位要求。根据上述公式,电阻的值会影响电容的充电速度,从而影响RST引脚高电平的持续时间。电阻R1的值需要与R2组成的分压电路,以及RST引脚输入电路限制相匹配。

  3. 实际应用:在实际应用中,电阻不仅起到限流作用,还与电容一起决定了复位电路的稳定性和可靠性。如果电阻值过小,可能会导致电容充电过快,无法满足复位时间要求;如果电阻值过大,则可能导致充电时间过长,影响系统的启动速度。

        综上所述,对于AT89C51单片机的复位电路,建议选择10uF的电容和220Ω和1kΩ的电阻作为典型值。当然,在实际应用中,可以根据具体的系统要求和工作环境进行适当的调整。

绘制复位电路

1.调用一个地 一个电源 两个电阻 一个电容,电容电阻在元件模式

2.地和电源在终端模式,地(GROUND),电源(POWER)

外设电路
IO口介绍

        外设电路一般用IO口进行控制,我们先了解一下51单片机的IO口,查看手册可以获得以下消息

        P0口

         P1口

         P2口

        P3口

        51单片机的P0~P3口分别代表8位IO口;通过手册的信息我们可以知道,P0是漏极开路型双向IO口;而P1~P3是内部上拉电阻双向IO口。双向IO口说明该IO口可以用于输入或者输出两种用途。接下来简单讲一下漏极开路和内部上拉电阻。

        如果详细将漏极开路和内部上拉的话需要耗费大量的时间,这里只针对该IO口简单讲一下在这里的实际作用。

        漏极开路:漏极开路指的是场效应管的漏极与外部电路断开,即漏极不连接任何电路元件或电源。不知道什么是场效应管和不知道什么是漏极没关系,在这里的意思就是,该IO口为1时为开路高阻态模式;IO口为0时,IO口电压拉低接地。

        内部上拉:内部上拉是指在电路内部集成了一个上拉电阻,该电阻连接到电源电压,用于将输出节点保持在高电平状态。在这里的意思就是,IO口为1时为高电平;IO口为0时为低电平。

        漏极开路一般用于更大驱动电流的场合;P3口有第二功能;因此P1和P2口可供我们选择,P2在访问外部拓展内存时有用,因此我们优先使用P1口。

LED灯设计思路

        灯我们再熟悉不过了,初高中物理就有相关内容,对于一个直流的灯,只需要两端街上合适的电源就行,这个合适往往是电压和电流合适,尽量在额定电压和额定电流的左右。

我们先将LED调出来,双击查看其属性,可以看到额定电压和额定电流

        我们可以看到我们的额定电压是2.2V,额定电流是10mA,因此我们尽可能保持其工作在额定的环境中。

        我们知道的是电网在电源有+5V,同时51单片机的引脚高电平也是+5V;另一方面LED是一个发光二极管,属于单向导通。

        P1口为内部上拉双向IO口,可作输入也可作为输出。因此我们的LED灯设计就有两个方向,外部电源供电,IO口作为开关控制;或者由IO口供电,控制LED灯的亮灭

        设计时,是否由外部电源供电主要是取决于外设所需功率,就像LED灯这种低功率电器,可以直接用单片机供电,但对于大功率电器而言IO口功率明显不足,只能依靠外部供电。

        在这里我们直接用IO口供电,既直接将LED正极接到IO口。此时IO口电压为5V,明显高于额定电压,因此需要串联一个电阻去分压,同时因为LED额定电流是10mA,所以电阻的阻值为:

R=\frac{5V-2.2 V}{0.01 A}=280

绘制外设电路

1.调出LED 地和电阻(右击元器件可以旋转哦)

2.双击电阻设置阻值为280

3.连连看,将LED正极接到P1.0

 keli

        注意,因为工作需要作者使用的软件是集合了keil C51 C251 arm三种,因此会与你们的有一点差距,但可以忽略不影响。

新建工程

1.双击打开keil

2.菜单栏点击project->new uvision project

 

3.选择工程路径(建议建立单独文件夹储存工程,并且该文件夹你要能找到,这点非常关键)输入工程名称

4.选择芯片,搜索AT89C51,选择并确定

5.如果还有弹窗,点击ok即可 

工程设置

1.点击魔法棒

2.点击output,勾选creade HEX_File,这个非常重要,hex文件是储存单片机固件16进制文本文件。

新建c语言文件

1.点击新建并点击保存

2.命名,注意后缀为.c

新建头文件

1.点击新建并点击保存

命名,注意名字与上一个C语言文件名一样,后缀为h

2.将C语言文件添加到文件夹,双击分组选择刚刚建的C语言文件

3.看一下左边添加到就行,不要一直点,左边添加到了就行

编程
原理图逻辑分析

        所有的程序都是以硬件为基础,因此我们在编写程序之前,需要通过原理图就行逻辑分析,确认编程思路。

        同学们买了板子的就知道,它们功能丰富的同时原理图也相对复杂,对初学者很不友好。初学者需要一个容易接受的过程。这也是作者做这个课程的初衷。

        我们上面已经完成了原理图的简单绘制,现在我们来分析一下:

        上述原理图中,一共三个电路,其中晶振电路复位电路是51单片机最小系统的必备电路,与编程无关。因此我们只需要分析外设LED电路这部分,这一部分也很简单,只需要P1.0输出高电平就行。

在正式编程之前,你们可以点击一下protues左下角的仿真开始按钮:

这个时候你会发现LED是亮的,因为P1.0默认是高电平

        开启仿真之后,LED已经亮了,同时有很多不同颜色的小方块,用于表示电路各个结点的逻辑电平,红色为高电平,蓝色为低电平,灰色为不确定,引脚悬空

程序编写

        现在我们通过程序控制LED灯灭,给P1.0逻辑低电平。

1.先看一下源码:

#include "reg51.h"

sbit LED=P1^0;

void main(){
    
    while(1){
        LED=0;
    }
}

这就是关闭LED灯的全部代码,是不是很简单。简单解析一下代码:

2.头文件的引用

#include "reg51.h"//51单片机的头文件引用

        这一行是引用51单片机的头文件,每个51单片机芯片编程都需要这个头文件(这里说的是51,其他芯片不一样);

        头文件(Header File)是C语言和C++编程语言中的一种文件类型,通常以 .h 作为文件扩展名。头文件的主要作用是声明函数、宏、结构体、类、变量等,以便这些元素可以在多个源文件中共享和使用        

        头文件这个概念简单理解就是里面集成了很多你需要用的东西,作者喜欢比喻成武功秘籍,头文件有很多,功能都不一样,就像藏经阁里面的功法一样,要使用对应的功能时就用相应就要拿到对应的功法秘籍。例如你要计算cos等初等函数,就需要引用数学的功法: 

#include "math.h"//数学计算头文件

         51头文件的部分内容:

        上面声明了我们要用的P0~P3口及其它寄存器

 3.引脚定义

sbit LED=P1^0;

各个符合解析: 

sbit //表示一个二进制数据类型,是keil C51专属的关键字 常用于IO口的定义

LED  //是变量名,自己取的名字,因为P1.0是控制LED的所以作者就取了这个名字

=    //赋值,将左边的值给右边

P1^0 //表示P1.0,C语言是不知道你的P1.0是什么,它是在第一行的reg51.h这个头文件中定义的

        这句话的意思是定义了一个二进制的变量叫LED,同时这个LED代表的是51单片机的P1.0引脚(注意程序中写的是P1^0,P要大写,不能写成P1.0.)

4. 主函数结构

void main(){

    程序执行区

}

 程序都是从主函数中运行的,主函数之外的程序不会运行。

5.循环语句:

while(1){

}

 while语句的格式是这样的

while(条件){
    程序
}

         判断语句为真时,就会一直循环执行{ }里面的程序,例如我们代码中的1会使其一直循环执行{ }里面的

6.控制语句

LED=0;

        表示给LED代表的P1.0赋值0,即为低电平让LED熄灭。 

编译

1.程序写完点击编译并生成文件,主要是为了生成hex文件

2.0ERROR(0错误)表示生成成功

3.出现Target not created表示生成失败

protues验证

1.双击芯片

2.选择hex文件,上面让你在建工程的时候记住,工程路径,hex文件就在工程路径下的Objects中

3.点击仿真

        你看这灯是不是灭了,同学们可以自己多画几个LED,也可以更改LED的额定电压和电流,自己设计合适的电路,多动手哦!

新人作者,欢迎同学们在积极留言或者私信!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2264169.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MFC用List Control 和Picture控件实现界面切换效果

添加List Control 和Picture控件 添加 3个子窗体 把子窗体边框设置为None, 样式设为Child 声明 CListCtrl m_listPageForm;void ShowForm(int nIndex);void CreatFormList();void CMFCApplication3Dlg::DoDataExchange(CDataExchange* pDX) {CDialogEx::DoDataExchange(pDX);DD…

Linux高并发服务器开发 第五天(压缩解压缩/vim编辑器)

目录 1.压缩和解压缩 1.1压缩 1.2解压缩 2.vim编辑器 2.1vim的3种工作模式 2.2切换编辑模式 2.3保存和退出 2.4光标移动 1.压缩和解压缩 - Linux 操作系统,默认支持的 压缩格式:gzip、bzip2。 默认,这两种压缩格式,只能…

接口测试Day-02-安装postman项目推送Gitee仓库

postman安装 下载 Postman(已提供安装包,此步可以跳过) https://www.postman.com/downloads/安装 Postman 安装Postman插件newman 要想给 postman 安装 newman 插件,必须 先 安装 node.js。 这是前提! 安装node.js 可能…

虚拟地址空间 -- 虚拟地址,虚拟内存管理

1. C/C语言的内存空间分布 用下列代码来观察各种区域的地址&#xff1a; #include <stdio.h> #include <unistd.h> #include <stdlib.h>int g_unval; int g_val 100;int main(int argc, char *argv[], char *env[]) {const char *str "helloworld&qu…

【数字化】华为数字化转型架构蓝图-2

目录 1、客户联结的架构思路 1.1 ROADS体验设计 1.2 具体应用场景 1.3 统一的数据底座 1.4 案例与成效 2、一线作战平台的架构思路 2.1 核心要素 2.2 关键功能 2.3 实施路径 2.4 案例与成效 3、能力数字化的架构思路 3.1 能力数字化的核心目标 3.2 能力数字化的实…

【优选算法】—移动零(双指针算法)

云边有个稻草人-CSDN博客 想当一名牛的程序员怎么能少的了练习算法呢&#xff1f;&#xff01; 今天就立即开启一个新专栏&#xff0c;专干算法&#xff0c;提高算法能力&#xff08;废柴的我也在准备蓝桥杯哈哈&#xff09;—— 目录 1.【 283. 移动零 - 力扣&#xff08;Lee…

AI的进阶之路:从机器学习到深度学习的演变(三)

&#xff08;承接上集&#xff1a;AI的进阶之路&#xff1a;从机器学习到深度学习的演变&#xff08;二&#xff09;&#xff09; 四、深度学习&#xff08;DL&#xff09;&#xff1a;机器学习的革命性突破 深度学习&#xff08;DL&#xff09;作为机器学习的一个重要分支&am…

Python自动化测试:线上流量回放

&#x1f345; 点击文末小卡片&#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 在自动化测试中&#xff0c;线上流量回放是一项关键技术&#xff0c;可以模拟真实用户的请求并重现线上场景&#xff0c;验证系统的性能和稳定性。本文将介绍Pytho…

初始C语言3

目录 9. 操作符 9.1 算术操作符 9.2 移位操作符 9.3 位操作符 9.4 赋值操作符 9.5 单目操作符 9.6 关系操作符 9.7 逻辑操作符 9.8 条件操作符 9.9 逗号表达式 下标引用、函数调用和结构成员 10. 常见关键字 10.1 typedef 10.2 static 10.2.1 修饰局部变量 10.…

【Rust自学】4.5. 切片(Slice)

4.5.0. 写在正文之前 这是第四章的最后一篇文章了&#xff0c;在这里也顺便对这章做一个总结&#xff1a; 所有权、借用和切片的概念确保 Rust 程序在编译时的内存安全。 Rust语言让程序员能够以与其他系统编程语言相同的方式控制内存使用情况&#xff0c;但是当数据所有者超…

VPN技术-GRE隧道的配置

GRE隧道的配置 1&#xff0c; 在AR1上配置DHCP接口地址池&#xff0c;AR3上配置DHCP全局地址池 2&#xff0c; PC1获取的IP地址为10.10.10.253&#xff0c;PC2获取的IP地址为10.10.30.253 3&#xff0c;通过ip route-static将目的地址为10.10.30.253的流量引入到Tunnel #配…

碰撞检测算法之闵可夫斯基差集法(Minkowski Difference)

在游戏开发和机器人路径规划乃至于现在比较火的自动驾驶中&#xff0c;我们常常需要确定两个物体是否发生碰撞&#xff0c;有一种通过闵可夫斯基差集法求是否相交的算法&#xff0c;下面将介绍一下 闵可夫斯基差集法的优势 闵可夫斯基差集法优势&#xff1a; 可以处理复杂的…

Python OCR 文字识别

一.引言 文字识别&#xff0c;也称为光学字符识别&#xff08;Optical Character Recognition, OCR&#xff09;&#xff0c;是一种将不同形式的文档&#xff08;如扫描的纸质文档、PDF文件或数字相机拍摄的图片&#xff09;中的文字转换成可编辑和可搜索的数据的技术。随着技…

【系统】Windows11更新解决办法,一键暂停

最近的windows更新整的我是措不及防&#xff0c;干啥都要关注一下更新的问题&#xff0c;有的时候还关不掉&#xff0c;我的强迫症就来了&#xff0c;非得关了你不可&#xff01; 经过了九九八十一难的研究之后&#xff0c;终于找到了一个算是比较靠谱的暂停更新的方法&#x…

复合翼与倾转旋翼飞行器:设计与控制算法对比

一、引言 复合翼&#xff08;Compound Wing&#xff09;和倾转旋翼&#xff08;Tilt - Rotor&#xff09;飞行器在现代航空领域均占据独特地位&#xff0c;二者在设计和控制算法方面展现出显著差异。这些差异在飞行模式切换、推进系统设计、控制算法复杂度以及飞行器稳定性等多…

空闲中断配合DMA

1.传统串口接收数据&#xff1a;来一个字节接受一个。 2.一次中断将一包数据存到缓冲区 3.DMA原理

三格电子——新品IE103转ModbusTCP网关

型号&#xff1a;SG-TCP-IEC103 产品概述 IE103转ModbusTCP网关型号SG-TCP-IEC103&#xff0c;是三格电子推出的工业级网关&#xff08;以下简称网关&#xff09;&#xff0c;主要用于IEC103数据采集、DLT645-1997/2007数据采集&#xff0c;IEC103支持遥测和遥信&#xff0c;可…

HDLBits训练3

时间&#xff1a;2024.12.22 Hadd 代码 法一&#xff1a; module top_module( input a, b,output cout, sum );assign {cout,sum}ab; endmodule法二&#xff1a; 运行结果 Fadd 代码 法一&#xff1a; module top_module( input a, b, cin,output cout, sum );assign…

Qt之串口设计-线程实现(十二)

Qt开发 系列文章 - Serial-port&#xff08;十二&#xff09; 目录 前言 一、SerialPort 二、实现方式 1.创建类 2.相关功能函数 3.用户使用 4.效果演示 5.拓展应用-实时刷新 总结 前言 Qt作为一个跨平台的应用程序开发框架&#xff0c;在串口编程方面提供了方便易用…

STM32F407ZGT6-UCOSIII笔记12: 事件标志组

有时一个任务需要与多个事件同步&#xff0c;这就要用到事件标志组 本文学习与程序编写基于 正点原子的 STM32F1 UCOS开发手册 文章提供测试代码讲解、完整工程下载、测试效果图 目录 事件标志组&#xff1a; 定义与初始化事件标志组&#xff1a; #include "Public.h&quo…