上期回顾:
上篇文章我写了单片机零基础入门(3):实现LED灯闪烁,这篇文章写实现流水灯(跑马灯)
单片机零基础入门(4):实现人生中的第一个流水灯(跑马灯)
一、需求分析
做一个简单的项目,我们也要对其进行分析,看看如何得到咱们想要的结果。
1、何为流水灯?
流水灯,顾名思义,和流水一样,挨个亮的过程。
2、流水灯(跑马灯)分析
你可以脑补一下,第一个亮,其他灭,第二个亮,其他灭…第八个亮,其他灭,以此循环的过程。
前面一篇文章说过了,8个LED灯可以把他理解为8个二进制:0000 0000。要实现亮灭,0111 1111–>第1个灯亮,其他灭。然后睡觉(延迟)1秒,1011 1111–>第2个灯亮,其他灯灭,然后睡觉(延迟)1秒…1111 1110–>第8个灯亮,其他灯灭。
二、单片机LED原理图:
–
三、源代码:
#include <REGX52.H>
#include <INTRINS.H>
/*进阶版跑马灯-->0.5s*/
void Delay1ms(unsigned int xms) //@12.000MHz
{
unsigned char i, j;
while(xms)
{
i = 2;
j = 239;
do
{
while (--j);
} while (--i);
xms--;
}
}
int main()
{
while(1)
{
//1111 1110
P2 = 0XFE; //亮第1个灯
Delay1ms(500);
P2 = 0XFF;
//1111 1101
P2 = 0XFD; //亮第2个灯
Delay1ms(500);
P2 = 0XFF;
//1111 1011
P2 = 0XFB; //亮第3个灯
Delay1ms(500);
P2 = 0XFF;
//1111 0111
P2 = 0XF7; //亮第4个灯
Delay1ms(500);
P2 = 0XFF;
//1110 1111
P2 = 0XEF; //亮第5个灯
Delay1ms(500);
P2 = 0XFF;
//1101 1111
P2 = 0XDF; //亮第6个灯
Delay1ms(500);
P2 = 0XFF;
//1011 1111
P2 = 0XBF; //亮第7个灯
Delay1ms(500);
P2 = 0XFF;
//0111 1111
P2 = 0X7F; //亮第8个灯
Delay1ms(500);
P2 = 0XFF;
}
}
-----------------人生在勤,不索何获!-------------