51单片机之LED

  本章介绍51单片机入门教程:点亮第一个led灯,实现LED灯的闪烁,实现LED流水灯。

一.点亮第一个LED灯

1. 硬件原理分析
  • LED模块电路设计
    开发板上的8个LED采用 共阳接法,即LED正极统一接VCC(高电平),负极通过限流电阻连接单片机的P2口(P2.0~P2.7)。

    • 点亮条件:当P2口某个引脚输出低电平(0)时,形成电位差,LED导通发光。

    • 熄灭条件:输出高电平(1)时,LED两端无电位差,处于熄灭状态。

  • 寄存器控制原理
    51单片机的I/O口通过 P2寄存器 控制,每个引脚对应寄存器的一个位(8位对应P2.7~P2.0)。写入数据时需按二进制格式操作。

1.原理分析:首先,我们知道一个灯需要点亮,它的正负极需要连接到电源的正负极。而我们需要做的便是通过代码控制单片机的引脚电平。引脚是由寄存器控制,而我们做的便是写代码向寄存器写入数据。

 在做点亮LED项目前,我们需要了解51单片机上的LED模块。

通过LED模块,我们知道这8个LED灯是由P2引脚控制。我们知道一个灯需要点亮,它的正负极需要连接到电源的正负极,形成电位差,才会有电流通过,模块中8个LED灯的左端连接VCC,及电源正极。所以我们需要做的便是让它的右端接入电源负极或接地,形成回路。这样LED灯就可以点亮。接下来,我们需要做的就是通过代码控制引脚的电平。

我们现在需要点亮P20对应的LED灯,我们就要给P20这个引脚接地,或者说低电平,这样就会和VCC高电平形成电位差,这样就会有电流通过。而其他的引脚则给高电平,没有电位差就不会点亮。但是我们在写程序的时候不能直接对P20赋予0,因为硬件原因,我们向P2寄存器中一次写入八位数据,及P20到P27。写入数据是由高到底,及从P27到P20。我们需要给出 1111 1110这八位数据,这样p20引脚对应的LED灯就会点亮。下面是代码演示

因为keil5软件无法直接写入2进制数据,所以我们要转换为16进制。这个过程我们可以通过计算机计算得到。1111 1110对应的16进制是0xFE.当然,我们需要LED灯一直点亮,那么程序就不能停止,所以使用while循环。

二.LED灯闪烁

1. 闪烁原理
  • 核心逻辑:通过交替改变P2.0引脚电平,配合延时函数实现亮灭切换。

  • 关键问题:单片机执行速度极快(MHz级别),直接切换电平会导致亮灭频率过高(肉眼无法分辨),需通过延时函数控制节奏。

我们需要如何才能让LED灯2闪烁呢?通过点亮LED灯,我们知道,LED的亮灭是由寄存器控制,既然我们可以写入数据让LED亮,自然也就可以让它灭。我们只需要将P20引脚赋予1,这样它所对应的LED就会灭。我们只需要写入数据 1111 1111,这样所有的灯就灭。然后一直循环,这样就可以实现LED灯闪烁了吗?

但是程序烧录下来我们并没有看到LED闪烁,而LED灯的亮度却变小了。这是什么原因?这是因为单片机的处理速度非常块,快到我们的肉眼无法看到。其实P20所对应的LED灯确实一直在闪烁,但是一直在循环,速度非常块,时间是毫秒级别,我们的肉眼无法看到变化。所以我们向这两行代码之间能不能间隔久一点,有什么东西可以使他们之间间隔久一点?有的,兄弟,有的。我们打开我们的烧录程序。

在软件中我们选择软件演示计算器。

然后根据自己单片机晶振选择,并8051指令集选择STC-T1.

这样我们就可以得到一个延时函数,可以延迟我们想要的时间,我这里选择的是500毫秒,及0.5秒 。

void Delay500ms()		//@11.0592MHz
{
	unsigned char i, j, k;

	_nop_();
	i = 4;
	j = 129;
	k = 119;
	do
	{
		do
		{
			while (--k);
		} while (--j);
	} while (--i);
}

接下来我们只需要将函数复制到代码中,并在代码中调用此函数。需要注意的是延迟函数中调用了_nop_()函数,调用该函数需要包含头文件<intrins.h>

这样,我们就可以实现LED灯的闪烁了。

三.LED流水灯

我们既然可以通过控制寄存器控制一个LED的亮灭,同样可以控制多个LED 灯,想要实现LED流水灯,我们只需要先让第一个灯亮,然后第二个,第三个......思路非常简单,代码也非常简单。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值