学习笔记|LED点亮原理|三极管在数字电路中的应用|Keil中的Tab设置|C51中对准双向口|STC32G单片机视频开发教程(冲哥)|第四集-上:点亮LED

news2024/11/26 21:42:30

文章目录

  • 1.LED点亮原理
    • STC32G12K128LQFP64QFN64管脚图:
    • Tips:USB-ISP下载程
    • GPIO (general purpose intput output)
    • Tips:三极管在数字电路中的应用
  • 2 新建工程
    • Tips:Tab设置
      • 11.2 配置IO口
      • 注意:
    • Tips:C51中对准双向口的解释
      • 学习内容提要:
  • 3.点亮第一个LED(代码)
  • 4.实现自动下载工程
  • 5.总结
  • 课后练习:点亮全部LED灯。

1.LED点亮原理

在这里插入图片描述
为什么LED能点亮?
概念引入:输出电压=VCC就是高电平,输出电压
=GND(一般是OV)就是低电平,分别用1和0来表示,这个是理想值。
在这里插入图片描述

STC32G12K128LQFP64QFN64管脚图:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Tips:USB-ISP下载程

现在STC 的带硬件USB的MCU支持用硬件USB下载,因为用的是USB-HID通信协议,不需要安装任何驱动。STC打狗棒、降龙棍、开天斧、屠龙刀核心板以及STC开源示波器、STC实验箱在D-/P3.0.D+/P3.1与 PC-USB端口连接好的状况下,
USB-ISP下载程序步骤;
1、按下板子上的P3.2/INTO按键,就是P3.2接地
2、给目标芯片重新上电,不管之前是否已通电。
—==电子开关是按下停电后再松开就是上电
等待STC-ISP下载软件中自动识别出"STC USB Writer (HID1)”,识别出来后,就与P3.2状态无关了,这时可以松开P3.2按键
===传统的机械自锁紧开关是按上来停电,按下去是上电
3、点击下载软件中的“下载/编程”按钮(注意:USB下载与串口下载的操作顺序不同)
下载成功!
—==另外从用户区软复位到系统区也是等待USB下载。

GPIO (general purpose intput output)

通用输入输出端口的简称,可以通过软件来读取其输入电平,或者控制他输出高低电平。
P5.0就是一个GPIO口
PO是一组GPIO口
PO.0是一组的其中一个GPIO口,从PO.0到P0.7总共有8个。
我们一次可以操作一个IO口
也可以此同时操作一组
如何点亮LED4?它接在了P6.0的这个端口上。
根据原理图,需要:P40输出低电平,P60输出低电平完成点灯。
在这里插入图片描述

Tips:三极管在数字电路中的应用

参考:三极管的工作原理及使用用法

  • 1、三极管的原理三极管有截止、放大、饱和三种工作状态。放大状态主要应用于模拟电路中,且用法和计算方法也比较复杂,我们暂时用不到。而数字电路主要使用的是三极管的开关特性,只用到了截止与饱和两种状态。
    NPN和PNP主要是电流方向和电压正负不同。
    这里以NPN型三极管为例来说说它的工作原理。 
    在这里插入图片描述
    它就是一个以b(基极)电流Ib来驱动流过ce的电流Ic的器件,它的工作原理很像一个可控制的阀门。
    左边细管子里蓝色的小水流冲动杠杆使大水管的阀门开大,就可允许较大红色的水流通过这个阀门。当蓝色水流越大,也就使大管中红色的水流更大。如果放大倍数是100,那么当蓝色小水流为1千克/小时,那么就允许大管子流过100千克/小时的水。同理,当三极管的放大倍数为100时,当Ib(基极电流)为1mA时,就允许100mA的电流通过Ice。
    在这里插入图片描述
    在这里插入图片描述

两种三极管的工作原理总结如下:
NPN的发射极(e)接地,集电极©接高电平,基极(b)接控制信号,用b-e的电流(Ib)控制c-e的电流(Ic),e极电位最低,且正常放大时通常c极电位最高,即Vc> Vb > Ve。三极管导通,电流从c极流向e极。
PNP的发射极(e)接高电平,集电极©接低电平,基极(b)接控制信号,用e-b的电流(Ib)控制e-c的电流(Ic),e极电位最高,且正常放大时通常c极电位最低,即Vc < Vb < Ve。三极管导通,即电流从e极流向c极。
在这里插入图片描述

  • 2 三极管的使用用法
    三极管的用法特点,关键点在于 b 极(基极)和 e 级(发射极)之间的电压情况,对于PNP 而言,e 极电压只要高于 b 级 0.7V 以上,这个三极管 e 级和 c 级之间就可以顺利导通。也就是说,控制端在 b 和 e 之间,被控制端是 e 和 c 之间。同理,NPN 型三极管的导通电压是 b 极比 e 极高 0.7V,总之是箭头的始端比末端高 0.7V 就可以导通三极管的 e 极和 c 极。这就是关于“导通电压顺箭头过,电压导通”的解释。
    下面以一个常见的控制LED的电路为例来说明截止与饱和的工作状态。如下图所示,三极管基极通过一个 10K 的电阻接到了单片机的一个 IO口上,假定是 P1,发射极直接接到 5V 的电源上,集电极接了一个 LED ,并且串联了一个 1K 的限流电阻最终接到了电源负极 GND 上。如果 P1由我们的程序给一个高电平 1,那么基极 b 和发射极 e 都是 5V,也就是说 e到 b 不会产生一个 0.7V 的压降,这个时候,发射极和集电极也就不会导通,那么竖着看这个电路在三极管处是断开的,没有电流通过,LED也就不会亮。如果程序给 P1一个低电平 0,这时 e 极还是 5V,于是 e 和 b 之间产生了压差,三极管 e 和 b 之间也就导通了,三极管 e 和 b 之间大概有 0.7V 的压降,那还有(5-0.7)V 的电压会在电阻 R47 上。
    【注】这里的P1口输出高电平是5V,不同的单片机的IO口高电平输出电压是不同的,有的单片机的IO输出是1.2V,这就需要三极管放大,以此驱动LED等工作。
    这个时候,e 和 c 之间也会导通了,那么 LED 本身有 2V 的压降,三极管本身 e 和 c 之间大概有 0.2V的压降,我们忽略不计。那么在 R41 上就会有大概 3V 的压降,可以计算出来,这条支路的电流大概是 3mA,可以成功点亮 LED。
    前边讲过,三极管有截止,放大,饱和三个状态,截止就不用说了,只要 e 和 b 之间不导通即可。我们要让这个三极管处于饱和状态,就是我们所谓的开关特性,必须要满足一个条件。三极管都有一个放大倍数β,要想处于饱和状态,b 极电流就必须大于 e 和 c 之间电流值除以β。这个β,对于常用的三极管大概可以认为是 100。
    那么上边的 R47 的阻值我们必须要来计算一下了。刚才我们算过e 和 c 之间的电流是 3mA,那么 b 极电流最小就是 3mA 除以 100 等于30uA,大概有 4.3V 电压会落在基极电阻上,那么基极电阻最大值就是 4.3V/30uA = 143K。电阻值只要比这个值小就可以,当然也不能太小,太小会导致单片机的 IO 口电流过大烧坏三极管或者单片机,IO 口输入电流最大理论值是 25mA,我推荐不要超过 6mA,我们用电压和电流算一下,就可以算出来最小电阻值。
    +3 总结:箭头朝内 PNP,导通电压顺箭头过,电压导通,电流控制。

2 新建工程

跟着手册:《STC32G12K128实验箱-V9.4使用说明书》新建工程,一步一步实现点亮。

  • 1、新建Keil项目
    (由于Keil 的版本比较多,本说明书将只使用Keil的uVersion5为例进行介绍,Keil 的其他版本与之类似>
    首先打开Keil软件,并打开“Project”菜单中的“New uVersion Project …”项目。

上一节已经添加过STC芯片库,这里在下拉菜单中选择:STC MCU Database
在这里插入图片描述
新建文件Demo.c(扩展名建议小写):

写入代码:

sfr P0 = 0x80; //关键字sfr以红色显示
sfr P0M1  = 0x93;
sfr P0M0  = 0x94;

void main()
{
    P0M0 = 0x00;
    P0M1 = 0x00;

    while(1)
    {
        P0++;
    }
}

编译通过。“.\Objects\Demo” - 0 Error(s), 0 Warning(s).
但未提示生成任何文件。

Tips:Tab设置

GB2312+4空格:
在这里插入图片描述

  • 2 option设置output,选择HEX386:

重新编译:
在这里插入图片描述
提示:creating hex file from “.\Objects\Demo”…

  • 3 下载
    按照教程方法,手动下载。提示成功,但灯未点亮。
    原因分析:引脚不对。
    这里需要引入一个sbit一个功能。
sbit P00 = P0^0;    //选择P0.0引脚

手册9.2.12 STC32G系列单片机中可位寻址的数据存储器:
STC32G系列单片机内部可位寻址的数据存储器包括两部分:第一部分的地址范围为DATA 区域的20H7FH,第二部分的地址范围是特殊功能寄存器SFR:8OHFFH。
特殊功能寄存器(SFR)区域
在这里插入图片描述
在这里插入图片描述

全部 SFR区域的80H~-FFH。共128个字节。每个字节均可位寻址。指定名字,对应一个路径。单片机根据地址里的数值去实现去我们要的一个功能。

11.2 配置IO口

每个IO的配置都需要使用两个寄存器进行设置。
以P0口为例,配置P0口需要使用P0M0和P0M1两个寄存器进行配置,如下图所示:
即P0M0的第0位和P0M1的第0位组合起来配置P0.0口的模式
即P0M0的第1位和P0M1的第1位组合起来配置P0.1口的模式,其他所有IO的配置都与此类似。
在这里插入图片描述

在这里插入图片描述

注意:

虽然每个IO口在弱上拉(准双向口)/强推挽输出/开漏模式时都能承受20mA的灌电流(还是要加限流电阻,如 1K、560Q2、472Q2等),在强推挽输出时能输出20mA的拉电流(也要加限流电阻),但整个芯片的工作电流推荐不要超过90mA,即从VCC流入的电流建议不要超过90mA,从GND流出电流建议不要超过90mA,整体流入/流出电流建议都不要超过90mA。
在这里插入图片描述
在这里插入图片描述

这里配置为准双向口,既可以向外输出高低电平,又可以读取外部的一个高低电平。

Tips:C51中对准双向口的解释

来源:百度百科
准双向口:有固定的内部上拉电阻。
准双向口是指P1、2、3有固定的内部上拉电阻,当用做输入时被拉高,当外部拉低时(低电平)会拉电流(source current, 这里拉电流是电流从单片机往外走),而P0则是真双向口,因为作为输入时它是悬浮的。
中文名准双向口特 点内部有上拉,故高电平为内部给出不是真正的外部信号
释义
C51的说明书上说:”Because Ports 1, 2, and 3 have fixed internal pullups, they are sometimes called quasi-bidirectional ports. When configured as inputs, they pull high and source current (IIL) when externally pulled low. Port 0, on the other hand, is considered truly bidirectional, because it floats when configured as an input. "
“准”就是“基本上的意思”,也就是“准双向口”不是真正的双向口。
其实重点在P0口.
P0口是双向指的是它被用作地址/数据端口时,只有在这个时候,P0口才处于两个开关管推挽状态,当两个开关管都关闭时,才会出现高阻状态.当P0口用于一般I/O口时,内部接Vcc的那个开关管是与引脚(端口)脱离联系的,这个时候,只有拉地的那个开关管起作用,P0口作为输出,是必须外接上拉电阻的,不然就无法输出高电平;
如果P0口作为输入,则必须先对端口写1,使拉地的开关管断开,这个时候,如果不接上拉电阻,则是高阻状态,就是一个双向口,如果接上拉电阻,则本身输出高电平,对输入信号的逻辑无影响(注意是对逻辑无影响,对实际参数有无影响我不确定,但是我认为是有的).
双向与准双向,根本原则是双向包含了高阻这个状态,而不在于是否需要先写1或者不写,P1P3口因为有内部上拉电阻,因此无论如何不是双向;P0口内部无上拉电阻,在处于数据/地址功能时,自动完成3态的转换,是双向,处于一般I/O口时,如果不接外部上拉,而且先向端口写了1,那么就处于高阻状态,此时,它也是一个人为的双向口,这与它处于地址/数据功能时的自动双向有区别,以及与P1P3处于输入时输出锁存器为1是有区别的跟I2C总线上那种漏极开路或者集电极开路结构差不多. 通过上拉电阻(或者下拉电阻)来提供一种电平的驱动.
当作为输入使用时,就将开关断开,这样就只剩下上拉(或者下拉)电阻,因而阻抗比较高,
可以由其它设备驱动该IO口。准双向口在做为输入使用时,实际上还是一种输出状态.
只是该输出状态的内阻比较大而已. 而真正的双向IO口,有方向控制寄存器,作为输入
使用时输出部分被断开.
双向口与准双向口的区别为双向口有高阻态,输入为真正的外部信号,准双向口内部有上拉,故高电平为内部给出不是真正的外部信号!软件做处理时都要先向口写“1”!
P0口为真正的双向口,其余为准双向口!P0内部无上拉(开漏输出),外加NMOS电路需接上拉!输入为高阻悬浮态!P0的驱动能力是单个其余口的两倍!

学习内容提要:

  • 1.思考LED为什么不会亮?
    引脚不对。
  • 2.怎么控制单独的一个引脚?
    sbit P00 = P0^0; //选择P0.0引脚
  • 3.怎么控制这个引脚输出电平?
    P00 = 1; //输出低电平
  • 4.书写规范
    一行一句,每个大括号缩进(需要设置),缩进四格,注释完整
  • 5.注释符号
    // 单行注释
    /* */ 多行注释
  • 6.学会搜索
    CTRL+F

3.点亮第一个LED(代码)

//sfr P0    = 0x80; 	//原始例程,关键字sfr以红色显示,第一次下载不亮,需修改
//sfr P0M1  = 0x93;
//sfr P0M0  = 0x94;

sfr P2    = 0xA0;	//P2端口操作完成(屠龙刀三板载led)
sfr P2M1  = 0x95;
sfr P2M0  = 0x96;

//sfr P4    = 0xC0;	//P4端口操作完成(STC32G12K128实验箱-V9.6)
//sfr P4M1  = 0xB3;
//sfr P4M0  = 0xB4;

//sfr P6    = 0xE8;	//P6端口操作完成(STC32G12K128实验箱-V9.6)
//sfr P6M1  = 0xCB;
//sfr P6M0  = 0xCC;

//sbit P40 = P4^0;    //选择P4.0引脚(三极管控制)
//sbit P60 = P6^0;    //选择P6.0引脚(LED控制)

sbit P21 = P2^1;    //选择P2.1引脚(LED控制)(屠龙刀三板载led)

void main()
{
//    P0M0 = 0x00; //原始例程,
//    P0M1 = 0x00; //原始例程,

//    P4M0 = 0x00; //配置P4为准双向口
//    P4M1 = 0x00;
//    P6M0 = 0x00; //配置P6为准双向口
//    P6M1 = 0x00;
	P2M0 = 0x00; //配置P2为准双向口(屠龙刀三板载led)
	P2M1 = 0x00;
//
    while(1) //死循环
    {
        //P0++; //原始例程,
//		 P40 = 0; //三极管引脚输出低电平(STC32G12K128实验箱-V9.6)
//		 P60 = 0; //LED引脚输出低电平(STC32G12K128实验箱-V9.6)
		 P21 = 0; //设置低电平	(屠龙刀三板载led)
    }
}

4.实现自动下载工程

可参考:学习笔记|添加型号和头文件|下载程序(手动方式)| 通过P3.2口按键触发|通过USB指令复位并自动下载|STC32G单片机视频开发教程(冲哥)|第三集-2:三种下载方式

5.总结

1.了解新工程的一个基本流程
2.了解IO口的高低电平的含义
3.务必牢记端口的几个寄存器 PxM0,PxM1,Px
4.务必牢记 sbit 的 作用,牢记#include的作用
5.了解USB_CDC不停电下载的用法
USB_HID不停电下载

课后练习:点亮全部LED灯。

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

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

相关文章

最新成果展示:GaN基Micro-LED热学模型数据库的开发及应用

由于GaN基Micro-LED表面积-体积比增加&#xff0c;其在热学方面的性质有别于大尺寸的LED&#xff0c;如缺陷复合导致的热效应将在发光区域中产生诸多“热”点&#xff0c;导致发光波长不均匀&#xff0c;这将影响后期显示系统的成像稳定性。针对上述问题&#xff0c;天津赛米卡…

shapely库的用法,高效处理点、线、面的几何关系和相关延申(GeoPandas 库)python

1、shapely库的基本用法 Shapely 是一个用于处理几何对象的 Python 库&#xff0c;它提供了各种函数和方法来进行空间分析和几何计算。下面是一些 Shapely 库的常见用法示例&#xff1a; 1. 创建几何对象&#xff1a; from shapely.geometry import Point, LineString, Poly…

uni——tab切换

案例展示 案例代码 <view class"tablist"><block v-for"(item,index) in tabList" :key"index"><view class"tabItem" :class"current item.id?active:" click"changeTab(item)">{{item.nam…

你真的懂OP吗?知道什么是OP吗?看完你就懂了!

运维到底是干什么的&#xff1f;估计连运维工程师本身都不清楚&#xff0c;小编各种搜索也没找到答案&#xff0c;问了很多运维老员工&#xff0c;终于总结出了运维工程师的工作内容。 01运维的定义本质上是对网络、服务器各个阶段的运营与维护&#xff0c;在成本、稳定性、效率…

混合云环境实现K8S可观测的6大策略

2023年&#xff0c;原生云应用及平台发展迅猛。大量企业都在努力发挥其应用程序的最大潜力&#xff0c;以确保极致的用户体验并推动业务增长。 混合云环境的兴起和容器化技术(如Kubernetes)的采用彻底改变了现代应用程序的开发、部署和扩展方式。 在这个数字舞台上&#xff0c;…

赴日IT工作之中日假期大对比!是你想要的程序员生活吗?

说了这么多关于工作方面的事宜&#xff0c;今天咱们来聊聊大家都关心的假期问题吧&#xff01;中国和日本的假期有什么区别呢&#xff1f;从天数上来看&#xff0c;其实中日假期都是16天左右&#xff0c;但是可能在调休方面&#xff0c;日本相比我国对员工层会有一点点优势&…

Linux环境下安装JDK(17)

1、官网下载 https://www.oracle.com/java/technologies/javase/jdk17-archive-downloads.html 2、传到Linux上去&#xff0c;至于用什么工具&#xff0c;自行选择 3、虚拟机上&#xff0c;找到它&#xff0c;移到你想移的地方去 4、解压缩&#xff0c;换包名 tar -zxvf jdk…

Django快速入门

文章目录 一、安装1.创建虚拟环境&#xff08;virtualenv和virtualenvwrapper&#xff09;2. 安装django 二、改解释器三、创建一个Django项目四、项目目录项目同名文件夹/settings.py 五、测试服务器启动六、数据迁移七、创建应用八、基本视图1. 返回响应 response2. 渲染模板…

企业微信认证费用及年审的问题(收藏)

一、企业微信认证审核服务费用说明 企业微信认证的审核是委托第三方审核公司来履行的&#xff0c;对企业提交资料的真实性进行甄别和校验。针对中、大型规模企业&#xff0c;企业微信团队会以电话回访、征信核查等方式&#xff0c;对企业规模进行严格审核。针对大型规模企业&a…

Java分布式微服务3——Docker

文章目录 Docker介绍安装DockerDocker基础操作Docker服务的启动镜像命令容器命令1. 从docker hub去查看Nginx容器的运行命令2. 查看所有容器状态3. 查看容器日志4. 进入Nginx容器执行命令&#xff0c;修改Html内容&#xff0c;添加“Hello World”5. 停止与开始容器6. 删除容器…

错过NFT投资,你可能会后悔吗?

在过去的几年里&#xff0c;非同质化代币&#xff08;NFT&#xff09;以其独特性和创新性&#xff0c;迅速成为数字资产领域的热门话题。NFT代表了数字资产的所有权和独特性&#xff0c;为艺术、音乐、游戏和虚拟世界等领域提供了全新的可能性。然而&#xff0c;对于那些错过了…

使用 Docker 部署 Prometheus + Grafana 监控平台

使用 Docker 部署 Prometheus Grafana 监控平台 默认docker 已经安装好,我使用的是CentOS7 注意一定要开启服务器对应的端口 1. 安装Prometheus docker run -itd --nameprometheus --restartalways -p 9090:9090 prom/prometheus访问:http://ip:9090 2.安装Grafana #这里的$…

【AGC】付费下载上架下载后无法安装问题

【关键字】 AGC、付费下载、应用安装 【问题描述】 有开发者反馈用户下载后无法安装&#xff0c;采用未接入sdk&#xff0c;直接勾选付费-产品上架的方案&#xff0c;以前其他产品是能够正常安装的&#xff0c;现在不知道为啥。 报错信息&#xff1a;付费后显示“订单创建失…

对等离子体的认识

认识等离子体等离子体的产生等离子体的定义等离子体并不远 认识等离子体 等离子体的产生 物质由一百多种元素组成&#xff0c;不同元素结合成各种分子。大量的分子又依靠某种作用力结合或凝聚在一起&#xff0c;由于作用力的强弱不等而表现为各种不同的存在状态。 物质的存在状…

【数学基础】矩阵行列式

行列式意义是什么&#xff1f; 行列式等于它的各个列对应的向量张成的平行2n面体的体积&#xff0c;这是因为行列式是一个交替多重线性形式&#xff0c;而我们通常理解的欧式空间中的体积也是这样一个函数&#xff08;单位立方体体积为1&#xff0c;沿某条边扩大c倍体积就扩大…

利用openTCS实现车辆调度系统(六)openTCS订单的使用

运输订单 由类的实例表示&#xff0c;描述了由车辆执行的进程。 通常&#xff0c;此过程是货物从一个地点到另一个地点的实际运输。 然而&#xff0c;A也可以只描述车辆到目的地位置的运动以及要执行的可选车辆操作。TransportOrderTransportOrder 以下所有内容都是 openTCS …

从源码层面深度剖析Spring循环依赖 | 京东云技术团队

以下举例皆针对单例模式讨论 图解参考 https://www.processon.com/view/link/60e3b0ae0e3e74200e2478ce 1、Spring 如何创建Bean&#xff1f; 对于单例Bean来说&#xff0c;在Spring容器整个生命周期内&#xff0c;有且只有一个对象。 Spring 在创建 Bean 过程中&#xff0…

DT昆虫绑定学习(没蒙皮)

SelectEdgeLoopSp; ConvertSelectionToVertices;selectType -ocm -alc false; selectType -ocm -polymeshVertex true; CreateCluster; 连接到物体 global proc matchTrns() { string $mtr[] ls -sl; if (size($mtr) < 2){ warning "MUST select 2 objects!"…

【C++】开源:ceres和g2o非线性优化库配置使用

&#x1f60f;★,:.☆(&#xffe3;▽&#xffe3;)/$:.★ &#x1f60f; 这篇文章主要介绍ceres和g2o非线性优化库配置使用。 无专精则不能成&#xff0c;无涉猎则不能通。——梁启超 欢迎来到我的博客&#xff0c;一起学习&#xff0c;共同进步。 喜欢的朋友可以关注一下&…

抖音里面怎么把图片做成动态图片?在线gif生成工具分享

刷抖音的时候&#xff0c;很多人在制作一些老照片&#xff0c;一些静态的照片经过制作能变成动态的照片&#xff0c;许多朋友都不知道怎么将图片做成gif&#xff0c;下面就来为大家分享一下gif动态图片制作的方法&#xff0c;利用在线gif生成&#xff08;https://www.gif.cn&am…