本文中,我们对多路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,因此这个实验的现象与方法一是相同的。