例1和例2中,我们分别使用51单片机的P1口和P0口来控制发光二极管。 本例中我们将使用51单片机的P2口来控制发光二极管,直接使用P2口的8口。 每个输出脚控制8个发光二极管,达到跑马灯(跑马灯)的效果。
通过本实例,您可以了解51单片机P2口的内部结构和原理,同时掌握51单片机实现端口移位控制的编程。
1.2. 设计理念
本例中,单片机P2口的8个引脚用于连接8个发光二极管,采用电流吸收驱动方式来驱动发光二极管。 编程控制每次将P2口的1位输出为低电平,从而使相应引脚的LED点亮。
1.3. 基础知识
本例涉及的基础知识主要是51单片机P2口的内部结构和原理,以及51单片机编程中的移位实现。
51单片机的P2口可以作为普通I/O口使用,也可以作为外部地址总线的高8位接口使用。 图1是51单片机P2口的内部结构。
图1 51单片机P2口内部结构
从图中可以看出,控制信号端决定了模拟开关MUX是处于地址总线接口还是通用I/O接口。 当控制信号为0时,模拟开关MUX向下拨,此时P2口可作为通用I/O口使用。 当控制信号为1时,模拟开关MUX向上翻转,P2口作为地址总线的高8位。 当选择P2口作为通用I/O口时,其内部结构和工作原理与例1中介绍的P1口相同。
1.4. 电路设计
本例电路如图2所示,用51单片机的P2口驱动8个发光二极管D1~D8。 从图中可以看出,驱动方式采用“电流吸收”驱动方式。
图2 流水灯电路图
在本例中,使用电阻器作为电路元件。 让我们来认识一下电阻元件。
图3 排除实物图
网络电阻器,即网络电阻器(线绕电阻器)。 该电阻器是将几个参数完全相同的电阻器封装在一起并组合而成。 它们的一个引脚作为公共引脚连接在一起。 其余引脚正常引出。 因此,如果一个电阻由n个电阻组成,那么它就有n+1个引脚。 一般来说,最左边的是公共引脚。 通常在排除项上用彩色点标记。 该排除装置具有组装方便、安装密度高的优点。 电阻器通常有一个公共端子,用封装表面的一个小白点表示。 它的颜色通常是黑色或黄色。 使用一个排阻电阻比使用几个固定电阻更方便。
1.5. 编程
本例的程序代码如下。
#include
int main(void)
{
unsigned char i,j;
unsigned char LED;
LED = 0x01; //×îµÍλLEDµãÁÁ
P2 = ~LED; //¹àµçÁ÷Çý¶¯
while(1)
{
for(i=0;i<250;i++) //Èí¼þÑÓʱ
{
for(j=0;j<250;j++);
}
if(LED == 0x80)
//ÅжÏÊÇ·ñµ½×î¸ß룬Èç¹ûÁ÷Ë®µ½Í·£¬ÔòÕÛ·µµ½×îµÍλµãÁÁ
{
LED = 0x01;
}
else
{
LED = LED << 1; //ÒÆ룬ÐгÌÁ÷Ë®
}
P2 = ~LED;
}
}
程序中,先点亮P2.0口连接的LED灯D1,然后关闭,同时点亮D2……,从而依次点亮全部8个LED灯。
程序中使用可变LED,依次使P2口的8位按从低到高的顺序输出高电平,点亮相应的LED等。使用移位操作。 移位语句如下:
这句话是左移操作。 例如:当LED=0x01时,执行左移一个LED