51单片机入门(2)LED点亮的背后

上一节提到了51单片机开发环境的搭建,这节我们开始正式进入51单片机的学习——点亮LED。
所有的控制类芯片学习的第一个实践就是点亮LED,这是最简单、最基本的操作,但这个实现过程却可能攘括了单片机的整个工作流程,所以要想学好单片机,点灯实验是一定要掌握的。

  • 先简单介绍本文将用到的硬件及软件:
    硬件平台:普中51开发板-单核A2
    软件:Keil5(C51)、STC-ISP(或其他ISP软件)、Proteus8.9(用于仿真,非必须)

LED是什么

发光二极管,简称为LED,是一种常用的发光器件,它在照明领域应用广泛。 发光二极管可高效地将电能转化为光能,在现代社会具有广泛的用途,如照明、平板显示、医疗器件等。
这种电子元件早在1962年出现,早期只能发出低光度的红光,之后发展出其他单色光的版本,时至今日能发出的光已遍及可见光、红外线及紫外线,光度也提高到相当的光度。而用途也由初时作为指示灯、显示板等;
随着技术的不断进步,发光二极管已被广泛地应用于显示器和照明。——百度百科

说直接点LED就是一种灯,需要接上一定的电压(正极+负极)即可点亮。

下图是LED的电路图形符号,左边是正极,右边是负极。

在这里插入图片描述

我之前写过一篇文章详细介绍LED,感兴趣的可以看看,传送门:🚀(点我)

51单片机点灯的原理

  • 如果不使用单片机,而是直接用5V(51单片机的IO高电平为5V)电源点亮LED,那么我们可以直接在LED两端接上电源和地(见下图)。
    由于LED存在额定电流(大约在10mA左右,电流太大会烧坏LED),所以我们要串联一个电阻(470欧姆即可)。

请添加图片描述

  • 如果用51单片机点亮LED,我们可以选择用单片机IO端连接LED的负极或正极,如果接LED的负极(如下图),那么IO端默认电平需要设置为高电平(即默认灯灭),LED另一个引脚需要接VCC(5V),下图中R5(10k电阻)作用是上拉(保证在不稳定情况下IO端为高电平),当需要点亮LED时,将51单片机对应的IO(如下图的P2.0)拉低即可。
    如果IO端接LED正极,那么单片机IO端默认电平需要设置为低电平,上拉电阻需要改成下拉(接地),LED的另一端(负极)接GND,点亮LED时,需要将单片机对应IO拉高。

在这里插入图片描述

实验代码

在写代码前,我们需要先创建一个Keil工程,创建工程的步骤已经在上一节讲述,传送门:🚀(点我)。这里就不进行赘述。

点灯的代码如下:

#include <reg52.h>   //此文件中定义了单片机的一些特殊功能寄存器

sbit led_out = P2^0; //将单片机的P2.0端口定义为led_out

/******************************************************************************
 * @ 函数名  : main
 * @ 功  能  : 主函数
 * @ 参  数  : 无
 * @ 返回值  : 无
 ******************************************************************************/
 
void main()
{
	led_out = 0; //P2.0端口设置为低电平(点亮LED)
	while(1)
	{
						
	}		
}
  • reg52.h:<reg52.h>表示你调用了52或者51单片机的资源,也就是可以直接对单片机的相关寄存器与引脚进行操作,里面涉及和很多内容,这里只要知道它是一个必须加的一个头文件即可。
  • sbit led_out = P2^0;sbit是定义特殊功能寄存器的位变量(bitsbit都是C51扩展的变量类型,即C51特有的,而不是C语言标准变量类型),这里我们只需要把sbit当成一个类型即可,就像char、int,只不过char指的是一个字节,而sbit指的是字节里的一个位。
    上面还提到特殊功能寄存器(SFR),SFR是80C51单片机中各功能部件对应的寄存器,用于存放相应功能部件的控制命令,状态或数据,SFR(sfr)也是一种扩充数据类型,占用一个内存单元(1字节)。上面式子中的P2就是一个SFR,在reg52.h中(见下图),定义了P2寄存器的地址,如果我们对P2进行赋值,就等同于对51单片机的特殊功能寄存器赋值,而P2对应的功能就是单片机P2.0~P2.7这8个IO引脚的状态(高低电平)。
    知道了sbitP2的含义,那么理解sbit led_out = P2^0;就不难了,即定义P2.0引脚的状态为led_outP2^0也是C51的特有用法。
    ^在C语言中是按位异或的作用,但在C51中它多了一个作用,即可以指定寄存器的某一位,前面提到P2是一个1字节的变量,它有8个位,分别对应P2.0~2.7,如果直接对P2赋值,那就等同于同时控制单片机的8个IO端口状态,但是使用P2^x(0<=x<=7),就能单独控制单片机的某一个IO端口。

在这里插入图片描述

  • led_out = 0;:从上面的内容我们可以得知led_out代表了单片机端口P2.0的状态,所以我们对它赋值,就等同于控制P2.0这个IO的电平状态,通过查看开发板的原理图(如下图),我们发现如果将P2.0端口置为低电平,那么LED1的正负极就能形成压差,从而实现点亮LED。

在这里插入图片描述

  • while(1){}:这是一个死循环,由于单片机上电后要不停的工作,所以我们不能让main函数结束,而是让它不停地执行while函数内部的工作(本实验while循环为空)。

编译+烧录

程序编写完成后,接下来的操作就是编译+烧录了,这些步骤已经在本系列第一篇文章中讲述,传送门:🚀(点我)。不过这里还是会简单描述一下操作过程:

  • 点击编译按钮,如果怕出现意外,可以点第三个(重新编译),编译完成后Build Output窗口会显示编译结果,如果没有错误和警告,且生成了hex文件,说明编译成功。

在这里插入图片描述

  • 将刚才生成的hex文件烧录到单片机中,即可看到LED被点亮了。

在这里插入图片描述

实验效果

  • 实际效果:可以看到右边的LED1被点亮。(不知道是不是开发板坏了,亮了一个数码管)

在这里插入图片描述

  • 仿真效果:与P2.0连接的LED被点亮。
    【Proteus软件的安装和使用可以参考我的另一篇博客(带安装包下载链接),传送门:🚀(点我)

在这里插入图片描述


如果文章对你有帮助,请留下你的点赞吧👍,这是我继续更新的最大动力🚀。


版权声明:本文为CSDN博主「小辉_Super」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_43772810/article/details/121589560

生成海报
点赞 0

小辉_Super

我还没有学会写个人说明!

暂无评论

相关推荐

用51单片机做宿舍门禁系统(1)--1602显示

由于时间紧迫,还有其他考试,所以目前只能抽时间慢慢做慢慢更新了,本身就是一个练手项目。 1602显示 所谓的智能系统,没有显示是万万不能的,所以有一个显示的东西是很必要的

基于AT89C51的蓝牙循迹避障小车

基于AT89C51的蓝牙循迹避障小车 对标题的解读: AT89C51:在下使用的是STC89C52这款芯片,c51和c52在新手入门阶段是一样的,所以不必纠结于到底是哪个名字&#xff

51单片机+ LCD1602+PCF8574转IIC接口+DHT11数据显示

51单片机+ LCD1602+PCF8574转IIC接口+DHT11数据显示 在做这个实验的时候又一次被自己的不注意,掉坑里面去了,调试了好久都不出数据,结果在延时函数和引脚定义上被自己坑了一把。希望大家在写代码的时候多加注意。 LCD1602

Proteus + Keil单片机仿真教程(二)炫彩灯

一、炫彩灯 参考图: 程序分析:每个小灯闪两次,依次累加常亮,最后所有灯再闪烁两次。 这个程序主要是延时程序、单片机引脚口的控制,流程化控制,相对比较简单&#