文章目录

概要

硬件搭建

代码编写

编译下载

小结


概要

本项目基于STC89C52单片机设计并实现了具有往返效果的流水灯系统,通过程序控制8路LED依次点亮并在两端自动折返,最终形成循环流动的灯光效果。项目采用Proteus仿真验证设计,同时提供了完整的Keil工程代码与硬件连接参考,帮助学习者快速掌握单片机IO口操作、循环控制与位运算编程技巧。

硬件搭建

本次设计采用51单片机最小系统作为核心控制单元,硬件电路主要包含以下部分: 1. STC89C52RC单片机核心模块

2. 8路LED发光二极管组(含100Ω限流电阻)

3. 11.0592MHz晶振电路与复位电路

4. 5V直流电源供电系统

proteus仿真电路图如下:

电路连接说明:P0.0-P0.7引脚分别通过总线连接至8路LED的阴极,LED阳极通过限流电阻串连统一接+5V电源,然后再通过控制P0口输出高低电平实现LED的点亮与熄灭控制。

代码编写

使用Keil5软件进行代码的编写,源码如下:

#include <reg52.h>// 包含51单片机寄存器定义的头文件,必须写
#include "delayms.h"// 包含毫秒级延时函数定义的头文件,必须写
//主函数
void main()
{
    u8 i;  // 先定义变量
    while(1)
    {
        // 从左往右流
        for(i=0;i<8;i++)
        {
            P0 = ~(0x01 << i);//i=0 先左移后翻转位:0000 0001(P0.7 --P0.0)-->0000 0001-->翻转位1111 1110
            delay_ms(500);
        }

        // 从右往左边流
        for(i=6;i>0;i--)
        {
            P0 = ~(0x01 << i);
            delay_ms(500);
        }
    }
}

/*
开始
i=0 先左移后翻转位:0000 0001移位0-->0000 0001-->翻转位1111 1110
i=1 先左移后翻转位:0000 0001移位1-->0000 0010-->翻转位1111 1101
i=2 先左移后翻转位:0000 0001移位2-->0000 0100-->翻转位1111 1011
。。。。。
i=7 先左移后翻转位:0000 0001移位7-->1000 0000-->翻转位0111 1111
跳出第一个for循环

i=6 先左移后翻转位:0000 0001移位6-->0100 0000-->翻转位1011 1111
i=5 先左移后翻转位:0000 0001移位5-->0010 0000-->翻转位1101 1111
。。。。。
i=1 先左移后翻转位:0000 0001移位1-->0000 0010-->翻转位1111 1101
跳出循环
*/

编译下载

1.程序编写好后进行编译,点击图中左上角的编译按键,然后查看下方的编译结果以及下载文件(.hex)的路径。

2.程序没问题后就可以将hex文件导入proteus工程中。

3.导入完下载文件后,点运行就可以看到流水灯左右往返的效果了。

小结

程序里面没花里胡哨的函数,主要就是靠左移、右移指令配合循环判断来控制灯的走位,这样来回跑的效果就做出来了。 

 

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐