51单片机(六)—— GPIO控制多路LED

        本文中,我们对多路LED进行控制,硬件电路如下图所示

在《51单片机(五)—— GPIO点亮一个LED》中,已经对这个电路做了详细介绍,这里不再详述。

在这个实验中,我们采用两种方法对多路LED进行控制,实验是需要把J21接口的8个引脚与单片机的P0口的8个引脚分别连接在一起。

方法一:

实现代码如下所示

#include<reg52.h> //包含头文件,一般情况不需要改动,

sbit LED1=P0^0;  //用sbit关键字 定义LED1到P00端口,
sbit LED2=P0^1;
sbit LED3=P0^2;
sbit LED4=P0^3;
sbit LED5=P0^4;
sbit LED6=P0^5;
sbit LED7=P0^6;
sbit LED8=P0^7;

void main (void)
{
	LED1=0;   //将P00口赋值0,对外输出低电平
	LED2=0;
	LED3=1;   //将P02口赋值1,对外输出高电平
	LED4=1;
	LED5=1;
	LED6=1;
	LED7=0;
	LED8=0;
	
	for(;;);        //死循环,原地等待。
}

将这个例程的hex文件烧写到单片机中,可以看到8个LED,4个点亮,4个不亮。

        这个实验使用了位操作,不过是针对多个位的定义和操作。由于对八个LED都进行了操作,所以定义了8个LED的宏定义。程序中显得稍微有点乱,如果灯的数量增加则程序会更乱,下面我们就来介绍一个比较简单的方法。

方法二:

实现代码如下所示

#include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义

#define LED  P0    //宏定义关键字,定义LED到单片机的P0口
                   //LED是自己定义的任意符号

void main (void)
{
	LED=0x3c;         //将P0口赋值0x3c,
	                  //0x3c转换为二进制为 0011 1100。
	for(;;);          //死循环,原地等待
}

       从程序中的代码比方法一精炼了很多。这个实验中给P0口赋值0x3c,转换成二进制为0011 1100,因此这个实验的现象与方法一是相同的。

发布了78 篇原创文章 · 获赞 6 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/bhniunan/article/details/104333487