C51单片机学习笔记——点亮LED灯

在我们学完C语言后,我们可以做一些小开发,尤其对于电子信息工程的学生来说,单片机无疑是最好的选择,它可以实现软硬件的交互,实现一些特定的功能,在零基础刚入门的同学可以从51单片机开始,再去学习stm32,废话不多说,直接上教程。

一、LED模块原理图 

我们在学习单片机LED点亮前首先要了解它的原理,下面这张图就是LED模块的原理图。

首先我们LED阳极接入电源VCC(通常为5V),当GPIO输出低电平时,电流从电源通过LED和限流电阻(470Ω)流向GPIO引脚,最后点亮LED灯。

二、进制的转换

在学习数字电子基础的时候,我们就已经接触了数制的转换,通常使用的最多的是二进制转换十六进制,我们通常使用0输出低电平,1输出高电平。

在单片机开发中我们使用十六进制兼顾效率和硬件的兼容性,寄存器配置通常也是用十六进制表示,十六进制是以0x开头的。 

三、点亮一个LED灯

我们点亮一个D3举例,让它输出低电平

 代码如下:

#include <REGX52.H>

void main()
{
	P2 = 0xFB;//1111 1011
}

在使用P2这个变量时我们需要包含8051单片机的头文件,主要用于定义单片机内部特殊功能寄存器的地址和位操作。控制连接在P2口可通过控制电平来实现LED的亮灭。 

 四、控制LED灯的闪烁

如果想实现LED灯的闪烁,需要使用到软件延时器可以更直观的看到LED灯的闪烁

_nop_()是一个空操作函数,通常用于实现精确的短延时或时序调整。它的名称来源于汇编指令NOP,执行时不进行任何实际操作,仅消耗一个机器周期的时间。在使用这个函数之前需要包含一个头文件<INTRINS.H>

代码如下:

#include <REGX52.H>
#include <INTRINS.H>

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

	_nop_();
	i = 4;
	j = 205;
	k = 187;
	do
	{
		do
		{
			while (--k);
		} while (--j);
	} while (--i);
}


void main()
{
		while(1)
	{
			P2 = 0xFE;//1111 1110
			Delay500ms();
			P2 = 0xFF;//1111 1111
			Delay500ms();
	}
	
}

这个程序控制D1led亮灭间隔500毫秒,如果想控制其他LED只需要输出低电平即可。

五、LED流水灯

要实现流水灯,通常是通过控制P0-P7端口的电平变化,使LED依次点亮或熄灭,我们可以通过移位操作的方法来实现LED流水灯的效果。

代码如下:

#include <REGX52.H>
#include <INTRINS.H>

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

	_nop_();
	i = 4;
	j = 205;
	k = 187;
	do
	{
		do
		{
			while (--k);
		} while (--j);
	} while (--i);
}


void main()
{
		while(1)
	{
			P2 = 0xFE;//1111 1110
			Delay500ms();
			P2 = 0xFD;//1111 1101
			Delay500ms();
			P2 = 0xFB;//1111 1011
			Delay500ms();
			P2 = 0xF7;//1111 0111
			Delay500ms();
			P2 = 0xEF;//1110 1111
			Delay500ms();
			P2 = 0xDF;//1101 1111
			Delay500ms();
			P2 = 0xBF;//1011 1111
			Delay500ms();
			P2 = 0x7F;//0111 1111
			Delay500ms();
	}
	
}

 要想实现流水灯的效果还有很多种方法,这里只列出了最简单的一种方法。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

二进制浪漫诗人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值