51单片机---点亮LED灯(含源码,小白可入)

实验介绍:利用51单片机,通过对CPU中相关寄存器的改写,实现对开发板上的LED灯实现控制。

实验设备:普中51-实验开发板

实验目录:

1、点亮一个LED灯;

2、闪烁LED灯;

3、LED流水灯;

一、硬件部分

        涉及LED灯的基本介绍,发光二极管,简称为LED,是一种常用的发光器件,其特点是单向导通,意思就是在LED两端形成压差,就能够使得LED发光。

        下图为LED的符号图:当LED灯的正极接正电压,负极接负电压或接地时,LED便能够发光。

51单片机---点亮LED灯(含源码,小白可入)_第1张图片

        下图为开发板中LED模块,其中8个LED灯,采用的是贴片LED灯,其原理是与上面的相同。 

51单片机---点亮LED灯(含源码,小白可入)_第2张图片

 二、原理图

        下图为开发板上LED模块的电路图,如图所示,8个LED灯左端(正极)接入VCC,右端(负极)各接入一个电阻,此处的电阻起到的作用是限流,防止通路上的电流过大而烧毁LED,在电阻的右端,分别连接P20-P27接口。

51单片机---点亮LED灯(含源码,小白可入)_第3张图片

         在原理图的单片机核心部分,我们可以看到上述的P20-P27端,与单片机的P2.0-P2.7连接。

51单片机---点亮LED灯(含源码,小白可入)_第4张图片

         通过分析电路硬件图以及原理图,我们得到相应的操作,要是LED(以D1为例)发亮,现在正极已经接上VCC,只要使得负极接地(0V)处于低电平就能够点亮,其负极与单片机的P2.0相连。那么现在的目标就是使P2.0端口输出低电平即可,将问题转化为控制单片机引脚输出高低电平的问题。

        在单片机中,CPU通过控制相关寄存器,寄存器通过驱动器来控制某个端子的高低电平,这也就是说,我们只要配置相应的CPU寄存器(P2寄存器)来实现我们的功能。

        P2寄存器是一个八位寄存器,每个位分别控制一个LED灯,当某个位为0时(低电平)相应的LED灯就会发亮。

三、代码分享

1、点亮一个LED灯;

代码分享:

#include //52单片机头文件
void main()//定义一个主函数
{
		P2=0xFE;//为P2寄存器赋值,采用16进制,其中0x为16进制标志,F为1111 E为1110
		while(1);//while为一个循环,使代码始终停在这,不然单片机的运行速度很快,将代码跑完我们肉眼都看不清现象。
}

此处,代码如果看不懂,请参考我前面分享的C语言相关内容博客。

实验现象:

51单片机---点亮LED灯(含源码,小白可入)_第5张图片

2、 闪烁LED灯;

        在点亮一个LED灯后,我们提出稍微高的要求,使一个LED灯闪烁发光。其实原理一样,只需要在代码中修改一下,一会使它的输出口为0,一会使它的输出口为1(此处我们先不对闪烁的时间进行要求)。

代码分享:

#include //定义51单片机的头文件
int i;//定义整型变量i;
void main()//主函数
{
	while(1)//使程序一直执行
    {
        i=50000;//定义i的大小,用于控制间隔时间
        P2=0xFE;//点亮D1;
        while(i--);
        i=50000;
        P2=0xFF;//使D1熄灭; 
        while(i--);      
    }
}

实验现象:      

WeChat_20230924114417

3、LED流水灯 

     在使一个LED灯闪烁发光后,我们再提出稍微高的要求,使8个LED连续点亮。其实原理一样,只需要在代码中修改一下,分别使8个LED的接口输出低电平。

代码分享:

#include //定义52开发板头文件
#include //定义包含左移函数的头文件

char c;//定义一个字符变量
int i;//定义一个整型变量
void main()//定义主函数
{
		c=0xFe;//使字符变量中的值为1111 1110
	 	while(1)//程序循环执行;
		{
			P2=c;//令P2寄存器为1111 1110
		  	i=50000;//定义延迟时间
			 while(i--);
			 c=_crol_(c,1);//采用左移函数执行一次,1111 1110向左移一位
		}
}

实验现象:      

WeChat_20230924114353

         此处,我们解释一下左移函数,_crol_是循环左移,_cror_是循环右移,后面写上变量的名称,以及移动的位数, c=_crol_(c,1),刚开c=1111 1110,执行一次后,循环左移c=1111 1101,执行两次后c=1111 1011;

        本次为51单片机最基本的实验,大家阅读完后一定要自己尝试的做一做,这是最关键的,学习单片机一定要多试多做。加油!!!

        创作不易,还请大家多多点赞支持。

你可能感兴趣的:(51单片机,51单片机,嵌入式硬件,单片机)