用单片机实现流水灯(进阶版)

本文详细介绍了如何使用51单片机实现不同数量的流水灯,从P1口控制8个到1024个,探讨了延时函数的计算方法,并借助3-8译码器扩展引脚,提供了源代码和Proteus仿真结果。
摘要由CSDN通过智能技术生成

单片机实现流水灯,从入门到进阶

看到这个标题,很多人会想:“流水灯?谁不会流水灯啊。单片机入门的第一节课不就是实现跑马灯嘛?” 别急,慢慢看嘛,就算是简单的跑马灯,也可以玩出花样的哟。
好吧,不卖关子了,先说说我今天讲的内容吧,首先:如何用P1口(只有八个引脚哟)实现八个流水灯,然后:如何用P1口实现十六个流水灯。怎么样,有没有一点小刺激。再然后,用32个引脚,P1,P2,P3,P4实现1024个流水灯呢?可能有人会说了,“不可能!!!”别急,再到最后,就是控制很多很多个!那我们就开始吧。

一、实验目的

1、熟悉P1口作输出口的原理与方法
2、掌握循环延时,并能计算延时时间
3、能熟练的使用keil编程和proteus仿真
4、实现多个流水灯的控制

二、实验内容

1、用keil编写程序,编译运行
2、用proteus进行仿真检验
3、用面包板进行搭线展示,用2个流水灯实现流水效果

三、实验原理

将单片机的P1口的0和1接上Led灯,采用共阴极的接法,当单片机的P1^0和P1^1引脚为低电平时,由于二极管的单项导通性,Led被点亮,即可实现循环流水效果。必要的知识还是需要滴,上图!
上图

四、电路图

实物图:
在这里插入图片描述
proteus仿真结果:
在这里插入图片描述

五、流程图

在这里插入图片描述

六、源代码

#include <reg51.h>
sbit Led_0 = P1^0;
sbit Led_1 = P1^1;
sbit touch = P1^2;	//HTTM触摸开关

void delay()
{
   
	int i,j;
	for(i=0;i<200;i++)
	for(j=0;j<200;j++);
}
void main()
{
   
	touch = 0;
	while(1)
	{
   					   //说明:此按键为HTTM触摸开关
					      //按下为高电平,灯亮;不按下为低电平,灯灭
		if(touch == 1)	  //有按键被按下
		{
   
			Led_0 = 1;
			Led_1 = 0;
	  		delay();
	 		Led_0 = 0; 
			Led_1 = 1;
	  		delay();
		}
		else 	//没有按键被按下
		{
   							    
			Led_0 = 1;
			Led_1 = 1;
		}
	}
}

看到这里,有人就要说了,我都看么那么久了,你这不就是一个流水灯吗?还故弄玄虚搞那么久,我手中的西瓜刀已经准备好了,你继续表演吧。
哈哈哈,行&#x

  • 34
    点赞
  • 147
    收藏
    觉得还不错? 一键收藏
  • 10
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值