单片机实现流水灯,从入门到进阶
看到这个标题,很多人会想:“流水灯?谁不会流水灯啊。单片机入门的第一节课不就是实现跑马灯嘛?” 别急,慢慢看嘛,就算是简单的跑马灯,也可以玩出花样的哟。
好吧,不卖关子了,先说说我今天讲的内容吧,首先:如何用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;
}
}
}
看到这里,有人就要说了,我都看么那么久了,你这不就是一个流水灯吗?还故弄玄虚搞那么久,我手中的西瓜刀已经准备好了,你继续表演吧。
哈哈哈,行,马上就开始表演。
七、流水灯进阶
既然我们都写过流水灯,那我们