51单片机流水灯往返设计(源码+仿真)
51单片机流水灯往返设计
·
文章目录
概要
本项目基于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.导入完下载文件后,点运行就可以看到流水灯左右往返的效果了。


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



所有评论(0)