教程:用8051单片机控制灯的亮与灭

253 阅读3分钟

前言

设想一下,我们面前有一块8051系列的微控制器开发板,我们的目标是使用拨动开关来控制一组发光二极管(LED)的亮灭。我们首先要了解8255可编程并行接口芯片的基本功能和操作模式。8255芯片提供了三种操作模式,但在此实验中,我们关注的是其最基本的模式——输入输出模式,以便我们能够直接通过开关的输入来控制LED的输出。

而下面我将实现它的仿真。

正文

首先,我们需要明确功能,下面是具体将要实现的功能:

现在,让我们打开仿真软件和编程软件。再次明确我们的目标,然后就可以画出如下仿真图:

接下来就可以准备编程了。

首先,我们需要配置和使用8255可编程并行接口芯片,使其能够与8051系列微控制器通信,进而实现对外部设备的控制或读取外部输入。设定8255的控制字,通过C8255宏定义指向8255的控制寄存器地址。

#include <reg51.h>
#include <stdio.h>
#include <absacc.h>

#define C8255 XBYTE[0x9006]
#define PA8255 XBYTE[0x9000]
#define PB8255 XBYTE[0X9002]

为了确保开关状态的稳定读取和LED状态的平滑过渡,我们加入了delay(100);延时函数,防止由于开关抖动造成的误读取和LED闪烁不稳定。延时函数通过空循环实现,虽然简单,但在低速控制应用中足够有效。

void delay(unsigned int n)
{
	unsigned int i=0,j=0;
	for(i=0;i<n;i++)
	{
		for(j=0;j<120;j++);
	}
} 

最后,在我们的主循环中,C8255=0x90;这条指令设置8255的A口和B口为输入输出模式,具体来说,这里0x90控制字使A口为输入模式,B口为输出模式,而C口的上半部分被设置为输入,下半部分为输出。data1=PA8255;这行代码读取8255的A口状态,A口连接了拨动开关,因此data1将包含开关的当前状态。紧接着,PB8255=data1;这行代码将data1的内容复制到8255的B口,B口则连接了LED灯。这意味着,每当拨动开关的状态发生变化,LED灯的状态也会随之变化,实现开关对LED的直接控制。

void main(void)
{ 
	unsigned char data1;
  C8255=0x90;
  while(1)
  {
		data1=PA8255;
    PB8255=data1;
    delay(100);
  }
}
 

结语

这样,我们就建立了一个基于8255芯片的简单输入输出控制系统,实现了拨动开关对LED灯亮灭的实时控制。希望这个讲解能帮到你,如果你有任何疑问,欢迎留言!