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

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

看到这个标题,很多人会想:“流水灯?谁不会流水灯啊。单片机入门的第一节课不就是实现跑马灯嘛?” 别急,慢慢看嘛,就算是简单的跑马灯,也可以玩出花样的哟。
好吧,不卖关子了,先说说我今天讲的内容吧,首先:如何用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被点亮,即可实现循环流水效果。必要的知识还是需要滴,上图!
用单片机实现流水灯(进阶版)_第1张图片

四、电路图

实物图:
用单片机实现流水灯(进阶版)_第2张图片
proteus仿真结果:
用单片机实现流水灯(进阶版)_第3张图片

五、流程图

用单片机实现流水灯(进阶版)_第4张图片

六、源代码

#include 
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

你可能感兴趣的:(用单片机实现流水灯(进阶版),51单片机,流水灯)