目录

一、引言

二、电路原理

原理图

三、程序设计与实现

1.代码编写

2.实验效果

总结

一、引言

         在电子技术的学习过程中,我们经常会接触到各种有趣的实验项目。其中,C51单片机流水灯设计是一个非常经典且易于实现的项目。本文将介绍如何使用C语言编写程序,控制C51单片机的I/O口来实现流水灯效果。

二、电路原理

LED的阳极串联一个电阻,然后连接电源VCC,而LED的阴极连接到单片机的P2口,当引脚(P2口)输出高电平即正极(5V)时,LED不亮;当引脚输出低电平即负极(0V)时,LED亮。通过高低变换把电压输出到引脚,从而将LED以流水灯的形式表现出来。51单片机使用的是TTL电平,规定高电平为5V,低电平为0V。在写代码时一般用1表示高电平,用0表示低电平。

原理图

cubemx有没有51单片机的 c51系列单片机_头文件

cubemx有没有51单片机的 c51系列单片机_cubemx有没有51单片机的_02

三、程序设计与实现

C51单片机它拥有多个I/O口,可以通过编程控制这些I/O口的电平状态,从而控制外部设备的开关状态。在流水灯设计中,我们需要控制LED灯按照一定的顺序依次点亮和熄灭,以达到流水灯的效果。循环控制LED灯:在程序的主函数中,我们可以使用一个while循环来控制LED灯的亮灭。通过改变每个LED灯的I/O口的电平状态,我们可以实现流水灯的效果。

1.代码编写

头文件和数据类型的定义

#include <reg52.h> // 包含头文件,定义C51单片机的寄存器
#include <intrins.h> // 包含头文件,定义_nop_()函数

#define uchar unsigned char // 定义数据类型别名
#define uint unsigned int // 定义数据类型别名

 定义led连接到P端口(主要看手上的led端口是连接芯片的P1或者P2端口)

sbit LED1 = P1^0; // 定义LED1连接到 P1.0口
sbit LED2 = P1^1; // 定义LED2连接到 P1.1口
sbit LED3 = P1^2; // 定义LED3连接到 P1.2口
// ... 以此类推,定义其他LED灯

 定义延时函数

void delay(uint z) // 延时函数,z为延时时间
{
    uint x, y;
    for (x = z; x > 0; x--)
        for (y = 110; y > 0; y--);
}

 编写主函数设置led灯的亮灭和延时时间

void main() // 主函数
{
    while (1) // 无限循环
    {
        LED1 = 0; // LED1亮
        delay(1000); // 延时1秒
        LED1 = 1; // LED1灭
        LED2 = 0; // LED2亮
        delay(1000); // 延时1秒
        LED2 = 1; // LED2灭
        LED3 = 0; // LED3亮
        delay(1000); // 延时1秒
        LED3 = 1; // LED3灭
        // ... 以此类推,控制其他LED灯的亮灭
    }
}

 整体代码如下

#include <reg52.h> // 包含头文件,定义C51单片机的寄存器
#include <intrins.h> // 包含头文件,定义_nop_()函数

#define uchar unsigned char // 定义数据类型别名
#define uint unsigned int // 定义数据类型别名

sbit LED1 = P1^0; // 定义LED1连接到P1.0口
sbit LED2 = P1^1; // 定义LED2连接到P1.1口
sbit LED3 = P1^2; // 定义LED3连接到P1.2口
// ... 以此类推,定义其他LED灯

void delay(uint z) // 延时函数,z为延时时间
{
    uint x, y;
    for (x = z; x > 0; x--)
        for (y = 110; y > 0; y--);
}

void main() // 主函数
{
    while (1) // 无限循环
    {
        LED1 = 0; // LED1亮
        delay(1000); // 延时1秒
        LED1 = 1; // LED1灭
        LED2 = 0; // LED2亮
        delay(1000); // 延时1秒
        LED2 = 1; // LED2灭
        LED3 = 0; // LED3亮
        delay(1000); // 延时1秒
        LED3 = 1; // LED3灭
        // ... 以此类推,控制其他LED灯的亮灭
    }
}

2.实验效果


C51单片机流水灯效果


总结

通过以上步骤,我们已经实现了最简单的C51单片机流水灯效果。在实际使用中,我们可以根据需要调整LED灯的数量、延时时间和亮灭顺序,从而创造出更多样的流水灯效果。