一、流水灯

  流水灯又叫跑马灯,简单的应用电路是采用 8 只灯泡,依次点亮达到流水灯效果。流水灯是最基本的单片机 I/O 接口输出控制,该项目设计也是彩灯控制器产品开发的基础。

  特殊功能寄存器 P0 一共 8 位,因此 P0 寄存器可一次存放 1B 的数据,寄存器的每位输出对应 P0.0~P0.7 引脚,其中 P0.0 为 P0 的低位引脚,P0.7 为高位引脚。P0 引脚输出高低电平与寄存器 P0 存放输出一致,如程序中,P0 = 0x01 时,则只有 P0.0 输出高电平,其他引脚输出低电平。为了实现流水灯效果,程序设计要 P0 的 8 个引脚依次输出高电平。如先让 P0=0x01,LED1 点亮,然后让 P0=0x02,LED2 点亮,依次往下操作,当P0 =0x80 时,LED8点亮。每次点亮一只 LED 后,通过延时函数调整下一个 LED 被点亮的时间间隔即可。

二、防真

1、选择元器件

  这次实验要用的元器件有:AT89C51、排阻、电源、接地、8个LED灯。除了排阻,其他元器件之前讲过该怎么选择,这次就不做解释了。排阻选择位置如下:

image.png

2、摆放模拟电路

  为了美观所以不为每个 P0 口接一个小电阻,而使用排阻。

BXRXDXENV74GINZ0377.png

三、程序

  P0 口的的 8 个接口可以使用一个 8 位二进制控制其输出的高低电平。在 C 语言中,变量是不可以用二进制数来赋值的,只可以用十进制数、八进制数和十六进制数来赋值,例如:

char n;
n = 12;   //使用十进制数来赋值
n = 012;  //使用八进制数来赋值
n = 0x12; //使用十六进制数来赋值

  为了方便,我们使用两位的16进制控制 P0 口,0x01 的二进制为 0000 00001,所以 P0 口的 P0.0 亮。实现 LED 闪烁的代码如下:

//P0口驱动流水灯
//8个灯按顺序循环闪烁		 
#include<reg51.h>
unsigned char  LED[] = {0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80, // 一一亮
			0x03,0x06,0x0c,0x18,0x30,0x60,0xc0,0x81, // 二二亮
			0x07,0x0e,0x1c,0x38,0x70,0xe0,0xc1,0x83,// 三三亮
			};//流水灯数组

void delay(unsigned int x)		//延时函数
{
	while(x--);
}
void main(void)				//主函数
{
	unsigned char i;
	while(1)
	{
		P0 = LED[i];		//依次调用数组内数据
		delay(50000);		//延时
		i++;			//循环1次,变量加1
		if(i >= 24)i = 0;	//到24清零
	}
}

  代码编写完毕后生成 HEX 文件在仿真电路中运行即可。


标题:实验二:流水灯 —— AT89C51
作者:Yi-Xing
地址:http://47.94.239.232:10014/articles/2020/09/14/1600079285485.html
博客中若有不恰当的地方,请您一定要告诉我。前路崎岖,望我们可以互相帮助,并肩前行!